• 还是把一个课程设计作为第一篇文章吧——学生学籍管理系统(C语言)


      1 #include <stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 
      5 typedef struct student {
      6     int number;
      7     char name[20];
      8     char faculty[50];
      9     char classes[20];
     10     struct student * link;
     11 }STU;
     12 
     13 STU * CreateLink();
     14 void WriteLink(STU *);
     15 
     16 void input();
     17 void del();
     18 void del_number(STU *);
     19 void del_name(STU *);
     20 void del_faculty(STU *);
     21 void del_classes(STU *);
     22 void search();
     23 void search_number(STU *);
     24 void search_name(STU *);
     25 void search_faculty(STU *);
     26 void search_classes(STU *);
     27 void sort();
     28 void show();
     29 void edit();
     30 
     31 
     32 void main()
     33 {
     34     char c;
     35     FILE * fp;
     36 
     37     if((fp=fopen("student.dat","r"))==NULL)
     38     {
     39         fp=fopen("student.dat","w");
     40         fclose(fp);
     41     }
     42 
     43     do
     44     {
     45         system("cls");
     46         printf("
    
    
    ");
     47         printf("		╔═════════════════════╗
    ");
     48         printf("		║                                          ║
    ");
     49         printf("		║        1: 添加一个学生                   ║
    ");
     50         printf("		║        2: 删除一个学生                   ║
    ");
     51         printf("		║        3: 查找一个学生                   ║
    ");
     52         printf("		║        4: 学生信息排序                   ║
    ");
     53         printf("		║        5: 修改学生信息                   ║
    ");
     54         printf("		║        6: 查看学生信息                   ║
    ");
     55         printf("		║        9: 退出                           ║
    ");
     56         printf("		║                                          ║
    ");
     57         printf("		╚═════════════════════╝
    ");
     58         printf("		                                         
    ");
     59         printf("		请选择输入选项[1\2\3\4\5\6\9]:> ");
     60         do
     61         {
     62             c=getchar();
     63         }while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6'&&c!='9');
     64         getchar();
     65 
     66         switch(c)
     67         {
     68             case '1':     input(); break;
     69             case '2':     del();  break;
     70             case '3':     search(); break;
     71             case '4':     sort(); break;
     72             case '5':     edit(); break;
     73             case '6':     show(); break;
     74             case '9':     exit(0);
     75         }
     76         system("cls");
     77         }while(1);
     78 }
     79 
     80 STU * CreateLink()
     81 {
     82     FILE *fp;
     83     STU * head,*p1, *p2;
     84     
     85     if((fp=fopen("student.dat","r"))==NULL)
     86     {
     87         printf("打开文件错误,退出。");
     88         exit(1);
     89     }
     90     head=p1=p2=(STU *)malloc(sizeof(STU));
     91     while(!feof(fp))
     92     {
     93         if(fscanf(fp,"%d %s %s %s
    ",&p2->number,p2->name,p2->faculty,p2->classes)==EOF)
     94         {
     95             free(head);
     96             return NULL;
     97         }
     98         p1->link=p2;
     99         p1=p2;
    100         p2=(STU *)malloc(sizeof(STU));
    101     }
    102     p1->link=NULL;
    103     free(p2);
    104     fclose(fp);
    105 
    106     return head;
    107 }
    108 
    109 void WriteLink(STU * p2)
    110 {
    111     FILE *fp;
    112 
    113     if((fp=fopen("student.dat","w"))==NULL)
    114     {
    115         printf("打开文件错误,退出。");
    116         exit(1);
    117     }
    118     while(p2!=NULL)
    119     {
    120         fprintf(fp,"%d %s %s %s
    ",p2->number,p2->name,p2->faculty,p2->classes);
    121         p2=p2->link;
    122     }
    123     fclose(fp);
    124 }
    125 
    126 void input()
    127 {
    128     STU * head, *p1, *p2;
    129     system("cls");
    130 
    131     head=CreateLink();
    132     p1=head;
    133 
    134     if(p1!=NULL)
    135         while(p1->link!=NULL)
    136             p1=p1->link;
    137 
    138     p2=p1;
    139     printf("
    
    
    		输入待添加学生(-1 结束):
    ");
    140     while(1)
    141     {
    142         p2=(STU *)malloc(sizeof(STU));
    143         if(p1==NULL) head=p1=p2;
    144         printf("输入学号:");
    145         scanf("%d",&p2->number);
    146         if(p2->number==-1)    break;
    147         printf("输入 姓名、系别、班级:");
    148         scanf("%s%s%s",p2->name,p2->faculty,p2->classes);
    149         p1->link=p2;
    150         p1=p2;
    151     }
    152     p1->link=NULL;
    153     free(p2);
    154 
    155     WriteLink(head);
    156     
    157     free(head);
    158 }
    159 
    160 void del()
    161 {
    162     STU * head=CreateLink();
    163     char c;
    164     do
    165     {
    166         system("cls");
    167         printf("
    
    
    ");
    168         printf("		╔═════════════════════╗
    ");
    169         printf("		║                                          ║
    ");
    170         printf("		║        请输入删除内容:                  ║
    ");
    171         printf("		║                                          ║
    ");
    172         printf("		║        1: 按照学号删除                   ║
    ");
    173         printf("		║        2: 按照姓名删除                   ║
    ");
    174         printf("		║        3: 按照系别删除                   ║
    ");
    175         printf("		║        4: 按照班级删除                   ║
    ");
    176         printf("		║        9: 返回主菜单                     ║
    ");
    177         printf("		║                                          ║
    ");
    178         printf("		╚═════════════════════╝
    ");
    179         printf("		                                         
    ");
    180         printf("		请选择输入选项[0\1\2\3\4\9]:> ");
    181         do
    182         {
    183             c=getchar();
    184         }while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='9');
    185         getchar();
    186 
    187         switch(c)
    188         {
    189             case '1':     del_number(head); break;
    190             case '2':     del_name( head);  break;
    191             case '3':     del_faculty(head); break;
    192             case '4':     del_classes(head); break;
    193             case '9':     return;
    194         }
    195         printf("		按任意键返回主菜单:
    ");
    196         getchar();
    197         system("cls");
    198     }while(1);
    199 
    200     free(head);
    201 }
    202 void del_number(STU * head)
    203 {
    204     STU * p1, *p2, temp;
    205     system("cls");
    206     do
    207     {
    208         printf("
    
    
    		输入要删除学生学号(-1 结束):");
    209         scanf("%d",&temp.number);
    210         getchar();
    211         p1=p2=head;
    212         while(p2!=NULL)
    213         {
    214             if(head->number==temp.number)
    215             {
    216                 head=head->link;
    217                 p1->link=NULL;
    218                 free(p1);
    219                 p1=p2=head;
    220             }
    221             else
    222             {
    223                 if(p2->number==temp.number)
    224                 {
    225                     p1->link=p2->link;
    226                     p2->link=NULL;
    227                     free(p2);
    228                     p2=p1;
    229                 }
    230                 p1=p2;
    231                 p2=p2->link;
    232             }
    233         }
    234     }while(temp.number!=-1);
    235     WriteLink(head);
    236 }
    237 void del_name(STU * head)
    238 {
    239     STU * p1, *p2, temp;
    240     system("cls");
    241     do
    242     {
    243         printf("
    
    
    		输入要删除学生姓名(EOF 结束):");
    244         if(scanf("%s",temp.name)==EOF) break;
    245         getchar();
    246         p1=p2=head;
    247         while(p2!=NULL)
    248         {
    249             if(strcmp(head->name,temp.name)==0)
    250             {
    251                 head=head->link;
    252                 p1->link=NULL;
    253                 free(p1);
    254                 p1=p2=head;
    255             }
    256             else
    257             {
    258                 if(strcmp(head->name,temp.name)==0)
    259                 {
    260                     p1->link=p2->link;
    261                     p2->link=NULL;
    262                     free(p2);
    263                     p2=p1;
    264                 }
    265                 p1=p2;
    266                 p2=p2->link;
    267             }
    268         }
    269     }while(1);
    270     WriteLink(head);
    271 }
    272 void del_faculty(STU * head)
    273 {
    274     STU * p1, *p2, temp;
    275     system("cls");
    276     do
    277     {
    278         printf("
    
    
    		输入要删除学生系别(EOF 结束):");
    279         if(scanf("%s",temp.faculty)==EOF) break;
    280         getchar();
    281         p1=p2=head;
    282         while(p2!=NULL)
    283         {
    284             if(strcmp(head->faculty,temp.faculty)==0)
    285             {
    286                 head=head->link;
    287                 p1->link=NULL;
    288                 free(p1);
    289                 p1=p2=head;
    290             }
    291             else
    292             {
    293                 if(strcmp(head->faculty,temp.faculty)==0)
    294                 {
    295                     p1->link=p2->link;
    296                     p2->link=NULL;
    297                     free(p2);
    298                     p2=p1;
    299                 }
    300                 p1=p2;
    301                 p2=p2->link;
    302             }
    303         }
    304     }while(1);
    305     WriteLink(head);
    306 }
    307 void del_classes(STU * head)
    308 {
    309     STU * p1, *p2, temp;
    310     system("cls");
    311     do
    312     {
    313         printf("
    
    
    		输入要删除学生班级(EOF 结束):");
    314         if(scanf("%s",temp.classes)==EOF) break;
    315         getchar();
    316         p1=p2=head;
    317         while(p2!=NULL)
    318         {
    319             if(strcmp(head->classes,temp.classes)==0)
    320             {
    321                 head=head->link;
    322                 p1->link=NULL;
    323                 free(p1);
    324                 p1=p2=head;
    325             }
    326             else
    327             {
    328                 if(strcmp(head->classes,temp.classes)==0)
    329                 {
    330                     p1->link=p2->link;
    331                     p2->link=NULL;
    332                     free(p2);
    333                     p2=p1;
    334                 }
    335                 p1=p2;
    336                 p2=p2->link;
    337             }
    338         }
    339     }while(1);
    340     WriteLink(head);
    341 }
    342 
    343 void search()
    344 {
    345     STU * head=CreateLink();
    346 
    347     char c;
    348     do
    349     {
    350         system("cls");
    351         printf("
    
    
    ");
    352         printf("		╔═════════════════════╗
    ");
    353         printf("		║                                          ║
    ");
    354         printf("		║        请输入查找内容:                  ║
    ");
    355         printf("		║                                          ║
    ");
    356         printf("		║        1: 按照学号查找                   ║
    ");
    357         printf("		║        2: 按照姓名查找                   ║
    ");
    358         printf("		║        3: 按照系别查找                   ║
    ");
    359         printf("		║        4: 按照班级查找                   ║
    ");
    360         printf("		║        9: 返回主菜单                     ║
    ");
    361         printf("		║                                          ║
    ");
    362         printf("		╚═════════════════════╝
    ");
    363         printf("		                                         
    ");
    364         printf("		请选择输入选项[0\1\2\3\4\9]:> ");
    365         do
    366         {
    367             c=getchar();
    368         }while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='9');
    369         getchar();
    370 
    371         switch(c)
    372         {
    373             case '1':     search_number(head); break;
    374             case '2':     search_name( head);  break;
    375             case '3':     search_faculty(head); break;
    376             case '4':     search_classes(head); break;
    377             case '9':     return;
    378         }
    379         printf("		按任意键返回主菜单:
    ");
    380         getchar();
    381         system("cls");
    382     }while(1);
    383 }
    384 void search_number(STU * head)
    385 {
    386     STU temp,*p2=head;
    387     system("cls");
    388 
    389     do
    390     {
    391         printf("
    
    
    		输入要查找学生学号(-1 结束):
    		");
    392         scanf("%d",&temp.number);
    393         printf("		查询结果:
    ");
    394         while(p2!=NULL)
    395         {
    396             if(p2->number==temp.number)
    397                 printf("		%d %s %s %s",p2->number,p2->name,p2->faculty,p2->classes);
    398             p2=p2->link;
    399         }
    400         p2=head;
    401     }while(temp.number!=-1);
    402 
    403 }
    404 void search_name(STU * head)
    405 {
    406     STU temp, *p2=head;
    407     system("cls");
    408 
    409     printf("
    
    
    		输入要查找学生姓名(EOF 结束):
    		");
    410     do
    411     {
    412         if(scanf("%s",temp.name)==EOF) return;
    413         printf("		查询结果:
    ");
    414         while(p2!=NULL)
    415         {
    416             if(strcmp(p2->name,temp.name)==0)
    417                 printf("		%d %s %s %s
    		",p2->number,p2->name,p2->faculty,p2->classes);
    418             p2=p2->link;
    419         }
    420         p2=head;
    421         getchar();
    422         printf("
    
    
    		输入要查找学生姓名(EOF 结束):
    		");
    423     }while(1);
    424 }
    425 void search_faculty(STU * head)
    426 {
    427     STU temp, *p2=head;
    428     system("cls");
    429 
    430     printf("
    
    
    		输入要查找学生系别(EOF 结束):
    		");
    431     do
    432     {
    433         if(scanf("%s",temp.faculty)==EOF) return;
    434         printf("		查询结果:
    ");
    435         while(p2!=NULL)
    436         {
    437             if(strcmp(p2->faculty,temp.faculty)==0)
    438                 printf("		%d %s %s %s
    		",p2->number,p2->name,p2->faculty,p2->classes);
    439             p2=p2->link;
    440         }
    441         p2=head;
    442         getchar();
    443         printf("
    
    
    		输入要查找学生系别(EOF 结束):
    		");
    444     }while(1);
    445 }
    446 void search_classes(STU * head)
    447 {
    448     STU temp, *p2=head;
    449     system("cls");
    450 
    451     printf("
    
    
    		输入要查找学生班级(EOF 结束):
    		");
    452     do
    453     {
    454         if(scanf("%s",temp.classes)==EOF) return;
    455         printf("		查询结果:
    ");
    456         while(p2!=NULL)
    457         {
    458             if(strcmp(p2->classes,temp.classes)==0)
    459                 printf("		%d %s %s %s
    		",p2->number,p2->name,p2->faculty,p2->classes);
    460             p2=p2->link;
    461         }
    462         p2=head;
    463         getchar();
    464         printf("
    
    
    		输入要查找学生班级(EOF 结束):
    		");
    465     }while(1);
    466 }
    467 
    468 void sort()
    469 {
    470     STU * head, *p1, *p2;
    471     STU temp;
    472 
    473     head=CreateLink();
    474 
    475     system("cls");
    476     printf("
    
    
    		按照学号排序(正序):
    ");            //常排序
    477     for(p1=head;p1!=NULL;p1=p1->link)
    478         for(p2=p1->link;p2!=NULL;p2=p2->link)
    479             if(p1->number>p2->number)
    480             {
    481                 temp.number=p1->number;
    482                 strcpy(temp.name,p1->name);
    483                 strcpy(temp.faculty,p1->faculty);
    484                 strcpy(temp.classes,p1->classes);
    485                 p1->number=p2->number;
    486                 strcpy(p1->name,p2->name);
    487                 strcpy(p1->faculty,p2->faculty);
    488                 strcpy(p1->classes,p2->classes);
    489                 p2->number=temp.number;
    490                 strcpy(p2->name,temp.name);
    491                 strcpy(p2->faculty,temp.faculty);
    492                 strcpy(p2->classes,temp.classes);
    493             }
    494 
    495     WriteLink(head);
    496 
    497     printf("		排序完毕,输出排序结果:");
    498     show();
    499     free(head);
    500 }
    501 
    502 void show()
    503 {
    504     STU * head, *p2;
    505 
    506     head=CreateLink();
    507 
    508     printf("
    
    
    		学号 姓名 系别 班级:
    ");
    509     p2=head;
    510     while(p2!=NULL)
    511     {
    512         printf("		%d %s %s %s
    ",p2->number,p2->name,p2->faculty,p2->classes);
    513         p2=p2->link;
    514     }
    515     getchar();
    516 }
    517 
    518 void edit()
    519 {
    520     STU * head, *p2;
    521     STU temp;
    522     head=CreateLink();
    523     p2=head;
    524 
    525     system("cls");
    526     do
    527     {
    528         printf("
    
    
    		输入要查找学生学号(-1 结束):
    ");
    529         scanf("%d",&temp.number);
    530         getchar();
    531         while(p2!=NULL)
    532         {
    533             if(p2->number==temp.number)
    534             {    
    535                 printf("请输入修改后的内容:姓名、系别、班级:
    ");
    536                 scanf("%s %s %s",p2->name,p2->faculty,p2->classes);
    537             }
    538             p2=p2->link;
    539         }
    540     }while(temp.number!=-1);
    541 
    542     WriteLink(head);
    543     free(head);
    544 }
  • 相关阅读:
    bzoj 5455
    hdu 6705
    hdu 6706
    斜率优化
    bzoj3672
    bzoj1367
    bzoj2118
    bzoj2337
    Codeforces 1077D Cutting Out(二分答案)
    Codeforces 1079C Playing Piano(记忆化搜索)
  • 原文地址:https://www.cnblogs.com/doodle777/p/3154438.html
Copyright © 2020-2023  润新知