鱼C论坛

 找回密码
 立即注册
查看: 2211|回复: 4

C语言 求解

[复制链接]
发表于 2014-6-30 18:05:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void input();                                                         /*宿舍信息添加函数*/
void del();                                                            /*宿舍信息删除函数*/
void find();                                                           /*宿舍信息查找函数*/
void sort();                                                       /*宿舍信息排序函数*/
void view();                                                           /*宿舍信息显示函数*/
typedef struct stu{                                /*定义链表节点的结构体类型*/
        int num;                                                           /*学号*/
        char name[20];                                          /*姓名*/
        char stay[20];                                              /*所在系*/
        char clas[20];                                              /*班级*/
        int sus;                                    /*宿舍*/
        int  phone;                                 /*电话号码*/
        char bed[20];                                /*床位*/
        struct stu *next;
}STU;

STU *create()                                /*读取文件并创建链表*/
{   int n=0;                                                                                            
        FILE *fp;
        STU *head,*p1,*p2;
        fp=fopen("wzw","r");                               /*打开wzw文件*/
                if(fp==NULL)
                {   printf("打开文件失败");
                        getchar();
                        exit(0);
                }       
        head=NULL;                                                               
        p1=p2=(STU*)malloc(sizeof(STU));
        while(!feof(fp))                                              /*读入文件数据并创建链表*/
        {        fscanf(fp,"%d%s%s%s%d%d%s",&p1->num,&p1->name,&p1->stay,&p1->clas,&p1->sus,&p1->phone,&p1->bed);
                n=n+1;
                if(n==1)        head=p1;
                else        p2->next=p1;
                p2=p1;
                p1=(STU*)malloc(sizeof(STU));
        }
        p2->next=NULL;
        free(p1);
        fclose(fp);
        return(head);
}

void main()
{char c;
         do
         { system("cls");
printf("\t\t****************************************\n");
printf("\t\t****************************************\n");
printf("                                        \n");
                 printf("\t\t        欢迎使用学生信息管理系统           \n");
printf("                                        \n");
                 printf("\t\t    自动化101    翁志文     10417126        \n");
printf("                                        \n");
                    printf("\t\t****************************************\n");
printf("\t\t****************************************\n");
printf("                                        \n");
                 printf("\t\t     1: 添加宿舍信息                     \n");
                 printf("\t\t     2: 删除宿舍信息                      \n");
                 printf("\t\t     3: 查找宿舍信息                      \n");
                 printf("\t\t     4: 宿舍信息排序                     \n");
                 printf("\t\t     5: 宿舍信息显示                     \n");
                 printf("\t\t     6: 退出                             \n");
                 printf("                                        \n");
                 printf("                                        \n");
                 printf("\t\t请选择输入选项[1\\2\\3\\4\\5\\6]:>");
                do
                {c=getchar();
                }while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6');
                getchar();
                switch(c)
                {    case '1':     input(); break;
            case '2' :    del();   break;
            case '3':     find();  break;
            case '4':     sort();  break;
                        case '5':          view();  break;
            case '6':     exit(0); break;
                }
                printf(" 按任意键返回主菜单:\n");
                getchar();
                system("cls");
        }while(1);
}

void input()                                              /*宿舍信息添加功能函数*/
{   int m=1,n=0;                                                    /*输入信息的循环变量m*/
        FILE *fp;                                                                /*文件指针fp*/
        STU *p,*head,*p1,*p2;
head=NULL;                                                        /*头结点为NULL*/
system("cls");
        p1=p2=(STU*)malloc(sizeof(STU));                /*动态申请一个新节点*/
          while(m)                                                            /*输入学生宿舍信息并创建链表*/
                 {   printf("请输入学生宿舍信息");
                         printf("\n");
                         printf("请输入学号:");
                        scanf("%d",&p1->num);                       
                     printf("请输入姓名:");
                        scanf("%s",&p1->name);                       
                         printf("请输入所在系:");
                        scanf("%s",&p1->stay);                       
                         printf("请输入班级:");
                        scanf("%s",&p1->clas);
                         printf("请输入宿舍号:");
                        scanf("%d",&p1->sus);
             printf("请输入电话号码:");
          scanf("%d",&p1->phone);
                         printf("请输入床位:");
                        scanf("%s",&p1->bed);
                         n=n+1;
                                if(n==1)
                                        head=p1;
                                else
                                        p2->next=p1;                                 
                                p2=p1;
                         p1=(STU*)malloc(sizeof(STU));
                         printf("请选择        0:结束输入  1:继续输入\n");
                         scanf("%d",&m);       
                  }
                p2->next=NULL;
                free(p1);                                                    /*释放p1指向的节点内存*/
            fp=fopen("wzw","a+");                        /*打开文件wzw*/
                p=head;
                while(p)                                                  /*将输入的学生宿舍信息保存到文件*/
                {fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
                         p=p->next;                                               
                }
            fclose(fp);                                           /*关闭文件*/
}

void del()                                              /*宿舍信息删除功能函数*/
{        FILE *fp;
        int num,sus,j,i;
        STU *head,*p1,*p2,*p3;
        head=create();
system("cls");
        printf("请选择删除方式的序号        1:宿舍号 2:学号\n");
        scanf("%d",&i);
        if(i==1)
        {        printf("请输入要删除的学生宿舍号:\n");
                scanf("%d",&sus);
                if(head==NULL)
                {printf("\n文件内容为空!\n");
                exit(0);
                }
                p1=head;
                while(sus!=p1->sus&&p1->next!=NULL)
                        {p2=p1;
                        p1=p1->next;
                        }
                  if(sus==p1->sus)
                        {printf("学生信息已找到:\n");
             printf("学号    姓名\t      所在系\t  班级\t宿舍号\t电话\t床号\n");
        printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p1->num,p1->name,p1->stay,p1->clas,p1->sus,p1->phone,p1->bed);
        printf("是否删除        1:是 2:否\n");
                        scanf("%d",&j);
                                if(j==1)
                                   {
                                        if(p1==head)
                                                head=p1->next;
                                    else
                                                p2->next=p1->next;
free(p1);
      fp=fopen("wzw","w");                        /*打开文件wzw*/
           p3=head;
          while(p3->next)                     /*将输入的学生宿舍信息保存到文件*/
        { fputc('\n',fp);
        fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p3->num,p3->name,p3->stay,p3->clas,p3->sus,p3->phone,p3->bed);
                p3=p3->next;                                               
                                        }  fclose(fp);       
                                    }
                                }
                           else
                           printf("找不到此学生宿舍信息\n");
        }
        if(i==2)
        {        printf("请输入要删除的学生学号:\n");
                scanf("%d",&num);
                if(head==NULL)
                {
                        printf("\n文件内容为空!\n");
                        exit(0);
                }
                p1=head;
                while(num!=p1->num&&p1->next!=NULL)
                        {   p2=p1;
                                p1=p1->next;
                        }
                  if(num==p1->num)
                        {printf("学生宿舍信息已找到:\n");
        printf("学号    姓名\t      所在系\t  班级\t宿舍号\t电话\t床号\n");
        printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p1->num,p1->name,p1->stay,p1->clas,p1->sus,p1->phone,p1->bed);
                                printf("是否删除        1:是 2:否\n");
                                scanf("%d",&j);
                                if(j==1)
                                   {if(p1==head)
                                                head=p1->next;
                                    else
                                                p2->next=p1->next;
                                        free(p1);
fp=fopen("wzw","w");                                  /*打开文件wzw*/
                   p3=head;
                while(p3->next)                                /*将输入的学生宿舍信息保存到文件*/
        {  fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p3->num,p3->name,p3->stay,p3->clas,p3->sus,p3->phone,p3->bed);
                p3=p3->next;                                               
        }fclose(fp);       
            }
                }
                else
                           printf("找不到此学生宿舍信息\n");
                }
          printf("请选择序号                1:继续删除 2:结束删除\n");
          scanf("%d",&j);                               
                                if(j==1)
                                        del();
}
void find()                                /*宿舍信息查找功能函数*/
{   int i,j,k=0;                        /*定义i为查找方式;定义j为学号变量*/
        STU *head,*p;
        head=create();
system("cls");
        printf("请选择查找方法的序号:1.按学号查找  2.按宿舍号查找\n");
        scanf("%d",&i);       
        if(i==1)                                /*按学号查找*/
         {   printf("请输入要查找的学号:");
                scanf("%d",&j);
                p=head;
                while((j!=p->num)&&(p->next!=NULL))
                        p=p->next;               
            if(j==p->num)      /*查到宿舍信息并输出*/
                {   printf("学生宿舍信息已找到:\n");
                        printf("学号    姓名\t      所在系\t  班级\t宿舍号\t电话\t床号\n");
        printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
                }
                else                /*无此学生信息*/
                printf("抱歉,没有此学生信息\n");
          }         
        if(i==2)                                /*按宿舍号查找*/
         {printf("请输入要查找的宿舍号:");
                scanf("%d",&j);
                p=head;
                while((j!=p->sus)&&(p->next!=NULL))
                        p=p->next;               
            if(j==p->sus)      /*查到宿舍信息并输出*/
                {   printf("学生宿舍信息已找到:\n");
                        printf("学号     姓名\t所在系\t班级\t宿舍号\t电话号码\t床号\n");
        printf("%-5d%s\t%s\t%s\t%d\t%d\t%s\n",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
                }
                else                                      /*无此学生宿舍信息*/
                printf("抱歉,没有此学生信息\n");
          }         
    free(p);
        printf("请选择正确序号        1:继续查找 2:结束查找\n");
        scanf("%d",&i);
        if(i==1)
                find();
        if(i==2)  
                getchar();       
}

void sort()                                                    /*定义学生信息排序功能函数*/
{   STU *head,*p0,*p1,*p2,*pt=NULL;
        int a,j,k,i=0,n;
        head=create();
system("cls");
        printf("请选择您想要的排序方式按数字选择:1、按系排序2、按班级排序 请输入选项:");
        scanf("%d",&a);
        getchar();
        if(a==1)                                        /*按系排序*/
    {    pt=(STU *)malloc(sizeof(STU));
             p1=head;
         while(p1!=NULL)
            {  i++;
              p1=p1->next;
             }
                 p1=head;
                 for(j=0;j<i-1;j++)                      /*用冒泡法排序*/
                 {  p1=head;
                         for(k=0;k<i-1-j;k++)
                         {  p2=p1;
                                p1=p1->next;
                                if(strcmp(p2->stay,p1->stay)>0)  /*交换两链表间数据*/                                               { n=p2->num;p2->num=p1->num;p1->num=n;
strcpy(pt->name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,pt->name);
                strcpy(pt->stay,p1->stay);strcpy(p1->stay,p2->stay);strcpy(p2->stay,pt->stay);
                strcpy(pt->clas,p1->clas);strcpy(p1->clas,p2->clas);strcpy(p2->clas,pt->clas);
                n=p2->sus;p2->sus=p1->sus;p1->sus=n;
                n=p2->phone;p2->phone=p1->phone;p1->phone=n;
                strcpy(pt->bed,p1->bed);strcpy(p1->bed,p2->bed);strcpy(p2->bed,pt->bed);
                                }
                         }
                 }
                printf("排序成功!!");
                printf("\n");
                p0=head;
                printf("学号     姓名\t所在系\t班级\t宿舍号\t电话\t床号\n");
                while(p0->next!=NULL)
        {  printf("%d\t%s\t%s\t%s\t%d\t%d\t%s\n",p0->num,p0->name,p0->stay,p0->clas,p0->sus,p0->phone,p0->bed);
                        printf("\n");
                        p0=p0->next;
                }
        }
        if(a==2)                             /*按班级排序*/
         {   pt=(STU *)malloc(sizeof(STU));
             p1=head;
         while(p1!=NULL)
            {         i++;
              p1=p1->next;
             }
            p1=head;
                for(j=0;j<i-1;j++)                /*用冒泡法排序*/
                {  p1=head;
                  for(k=0;k<i-1-j;k++)
                  {  p2=p1;
                         p1=p1->next;
                         if(strcmp(p2->clas,p1->clas)>0)  /*交换两链表间数据*/                                      
                        { n=p2->num;p2->num=p1->num;p1->num=n;
strcpy(pt->name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,pt->name);
                strcpy(pt->stay,p1->stay);strcpy(p1->stay,p2->stay);strcpy(p2->stay,pt->stay);
                strcpy(pt->clas,p1->clas);strcpy(p1->clas,p2->clas);strcpy(p2->clas,pt->clas);
                n=p2->sus;p2->sus=p1->sus;p1->sus=n;
                n=p2->phone;p2->phone=p1->phone;p1->phone=n;
                strcpy(pt->bed,p1->bed);strcpy(p1->bed,p2->bed);strcpy(p2->bed,pt->bed);
                        }
                  }
                 }
                printf("排序成功!!");
                printf("\n");
                p0=head;
                printf("学号     姓名\t所在系\t班级\t宿舍号\t电话\t床号\n");
                while(p0->next!=NULL)
        {  printf("%d\t%s\t%s\t%s\t%d\t%d\t%s\n",p0->num,p0->name,p0->stay,p0->clas,p0->sus,p0->phone,p0->bed);
                        printf("\n");
                        p0=p0->next;
                }
         }
}

void view()                                /*定义学生信息显示功能函数*/
{        FILE *fp;
        char ch;
        fp=fopen("wzw","r");
        ch=fgetc(fp);
system("cls");
        printf("学号      姓名\t   所在系    班级\t宿舍号\t 电话号码 床号\n");
        while(ch!=EOF)
        {       
putchar(ch);
                ch=fgetc(fp);
        }
        fclose(fp);
        printf("\n");
}
这个程序 添加信息后怎么保存啊??我想下次打开后能直接查找宿舍信息

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-26 04:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表