zoukankan      html  css  js  c++  java
  • 学生信息管理系统

    头文件

      1 #ifndef __SIMS__
      2 #define __SIMS__
      3 #include<stdio.h>
      4 #include<stdlib.h>
      5 #include<string.h>
      6 #include<ctype.h>
      7 #include<conio.h> 
      8 #include<Windows.h>
      9 #define PWD_LEN 10
     10 #define NAME_LEN 20
     11 #define GENDER_LEN 5
     12 #define LINE_LEN 512
     13 #define CONFIRM_CNT 3
     14 #define M1 "1.search stu"
     15 #define M2 "2.update stu"
     16 #define M3 "3.delete stu"
     17 #define M4 "4.add stu"
     18 #define M5 "5.search acc"
     19 #define M6 "6.update acc"
     20 #define M7 "7.delete acc"
     21 #define M8 "8.add acc"
     22 #define M9 "9.exit"
     23 
     24 
     25 struct stu_accout
     26 {
     27     char passwd[PWD_LEN];
     28     char name[NAME_LEN];
     29     int  role ;
     30     stu_accout* next ;
     31 };
     32 
     33 struct student            //定义一个结构体作为全局变量,用于存储学生信息,和作为结点
     34 {
     35     long int num;            //学号
     36     char name[NAME_LEN];            //姓名
     37     char gender [GENDER_LEN];
     38     int age;                //年龄
     39     float math;                //数学
     40     float phy;                    
     41     float eng;                
     42     float cpu;            
     43     float sum;                
     44     student *next;    //下一个结点地址
     45 };
     46 
     47 
     48 //登入函数
     49 int login(int,int&,stu_accout*);
     50 
     51 
     52 //主目录函数
     53 int menu(int role);
     54 
     55 //3.查询信息菜单
     56  student *menu1(student*);
     57 
     58 
     59 //7.排序信息菜单
     60 student *menu7(student*);
     61 
     62 
     63 //交换两个结点信息的函数,用于排序函数调用
     64 void swap(student *, student *);                    
     65 
     66 
     67 //输出信息的函数
     68 void print(student *);
     69 void Account_print(stu_accout *head);
     70 
     71 //添加学生信息 
     72  student *add(student *, student *);
     73 
     74 //读取学生文件
     75 student *Student_File_Load(student* head);
     76 student *Other_Student_File_Load( student *head);
     77 
     78 //读取账户文件
     79 stu_accout *Acount_Load(stu_accout* head);        //定义函数
     80 
     81 int Save_Stu(student *p1);
     82 int Other_Save_Stu(student *p1);
     83 int Save_Account(student *p1);
     84 
     85 //查询模块
     86 //1.按学号查询
     87  student *search1(student *head);
     88 
     89 //2.按姓名查询
     90  student *search2(student *head);
     91 
     92 student *search_By_Gender(student *head);
     93 
     94 //3.按年龄查询
     95  student *search3(student *head);
     96 
     97 //4.按数学成绩查询
     98  student *search4(student *head);
     99 
    100 //5.按物理成绩查询
    101  student *search5(student *head);
    102 
    103 //6.按英语成绩查询
    104  student *search6(student *head);
    105 
    106 //7.按计算机成绩查询
    107  student *search7(student *head);
    108 
    109 //8.按总分成绩查询
    110  student *search8(student *head);
    111 
    112 
    113 //删除模块
    114  student *del(student *head);
    115 
    116  //修改
    117  student *cha(student *head);
    118  stu_accout *Password_cha(stu_accout *head);
    119 
    120 //排序模块
    121 //1.按学号排序
    122  student *sort1(student *head);
    123 
    124 //2.按年龄排序
    125  student *sort2(student *head);
    126 
    127 //3.按数学成绩排序
    128  student *sort3(student *head);
    129 
    130 //4.按物理成绩排序
    131  student *sort4(student *head);
    132 
    133 //5.按英语成绩排序
    134  student *sort5(student *head);
    135 
    136 //6.按计算机成绩排序
    137  student *sort6(student *head);
    138 
    139 //7.按总分成绩排序
    140  student *sort7(student *head);
    141 
    142 #endif
    View Code

    实现文件

       1 #include "My_header.h"
       2 
       3 int n;                        //定义一个整形变量计数学生人数
       4 int x;                      //定义一个整形变量计数账户人数
       5 char UserName[NAME_LEN];
       6 
       7 
       8 //***************************************************读取文件模块
       9 
      10 //读取学生文件
      11 student *Student_File_Load(student* head)        //定义函数
      12 {
      13     student *p1, *p2 ;
      14     int m=0;
      15     FILE *fp;
      16 
      17     if((fp=fopen("F:\Student.txt", "rb"))==NULL)        //地址为空,则输出提示
      18     {
      19         printf("不能打开文件");
      20         return 0;
      21     }
      22     head=NULL;
      23     do
      24     {
      25         p1=(student *)malloc(sizeof(student));//每读取一次创建一个新的结点
      26         fscanf(fp, "%ld	%s	%s	%d	%f	%f	%f	%f	%f
    ", &p1->num, p1->name,p1->gender, &p1->age, &p1->math, &p1->phy, &p1->eng, &p1->cpu, &p1->sum);   //读入内存
      27         m=m+1;
      28         if(m==1)
      29             head=p2=p1;        //判断结点个数以添加首地址
      30         else
      31         {
      32             p2->next=p1;
      33             p2=p1;
      34         }
      35     }while(!feof(fp));
      36 
      37     p2->next=NULL;
      38     fclose(fp);
      39     n=m;
      40     return(head);        //返回读取信息的首地址供其他函数使用
      41 }
      42 
      43 //另外读取学生文件
      44 student *Other_Student_File_Load( student *head)        //定义函数
      45 {
      46     struct student *p1, *p2;
      47     int m=0;
      48     char fileopen[10];
      49     FILE *fp;
      50     printf("请输入文件路径及文件名:");            //输入读取文件的路径和文件名
      51     scanf("%s", fileopen);
      52     if((fp=fopen(fileopen, "rb"))==NULL)        //地址为空,则输出提示
      53     {
      54         printf("不能打开文件");
      55         return 0;
      56     }
      57     head=NULL;
      58     do
      59     {
      60         p1=(struct student *)malloc(sizeof(struct student));//每读取一次创建一个新的结点
      61         fscanf(fp, "%ld	%s	%s	%d	%f	%f	%f	%f	%f
    ", &p1->num, p1->name,p1->gender, &p1->age, &p1->math, &p1->phy, &p1->eng, &p1->cpu, &p1->sum);   //读入内存
      62         m=m+1;
      63         if(m==1)
      64             head=p2=p1;        //判断结点个数以添加首地址
      65         else
      66         {
      67             p2->next=p1;
      68             p2=p1;
      69         }
      70     }while(!feof(fp));
      71     p2->next=NULL;
      72     fclose(fp);
      73     n=m;
      74     return(head);        //返回读取信息的首地址供其他函数使用
      75 }
      76 
      77 //读取账户文件
      78 stu_accout *Acount_Load(stu_accout* head)        //定义函数
      79 {
      80     stu_accout *p1, *p2 ;
      81     int m=0;
      82     FILE *fp;
      83 
      84     if((fp=fopen("F:\Account.txt", "rb"))==NULL)        //地址为空,则输出提示
      85     {
      86         printf("不能打开文件");
      87         return 0;
      88     }
      89     head=NULL;
      90     do
      91     {
      92         p1=(stu_accout *)malloc(sizeof(stu_accout));//每读取一次创建一个新的结点
      93         fscanf(fp, "%s	%s	%d
    ", p1->name, p1->passwd,&p1->role);   //读入内存
      94         m=m+1;
      95         if(m==1)
      96             head=p2=p1;        //判断结点个数以添加首地址
      97         else
      98         {
      99             p2->next=p1;
     100             p2=p1;
     101         }
     102     }while(!feof(fp));
     103     x=m;
     104     p2->next=NULL;
     105     fclose(fp);
     106     return(head);        //返回读取信息的首地址供其他函数使用
     107 }
     108 
     109 
     110 
     111 //******************************************************读取文件模块
     112 
     113 
     114 
     115 
     116 //******************************************************保存文件模块
     117 //存 学生
     118 int Save_Stu(student *p1)            //定义保存函数
     119 {
     120     FILE *fp;                            //定义fp指针
     121     if((fp=fopen("F:\Student.txt", "wb"))==NULL)
     122     {
     123         printf("不能打开文件
    ");
     124         return 0;
     125     }
     126     while(p1!=NULL)
     127     {
     128         fprintf(fp, "%ld	%s	%s	%d	%f	%f	%f	%f	%f
    ",p1->num, p1->name,p1->gender, p1->age, p1->math, p1->phy, p1->eng, p1->cpu, p1->sum);//把内存中的文件输入到硬盘中
     129         p1=p1->next;
     130     }
     131     fclose(fp);                //关闭文件
     132     printf("文件已保存
    "); //成功保存,显示提示
     133     return 1;
     134 }
     135 
     136 
     137 //另存为 学生
     138 int Other_Save_Stu(student *p1)            //定义保存函数
     139 {
     140     FILE *fp;                            //定义fp指针
     141     char fileopen[20];
     142     printf("请输入保存的文件路径及文件名:");    //输入文件名和路径
     143     scanf("%s", fileopen);
     144     if((fp=fopen(fileopen, "wb"))==NULL)
     145     {
     146         printf("不能打开文件
    ");
     147         return 0;
     148     }
     149     while(p1!=NULL)
     150     {
     151         fprintf(fp, "%ld	%s	%s	%d	%f	%f	%f	%f	%f
    ",p1->num, p1->name,p1->gender, p1->age, p1->math, p1->phy, p1->eng, p1->cpu, p1->sum);//把内存中的文件输入到硬盘中
     152         p1=p1->next;
     153     }
     154     fclose(fp);                //关闭文件
     155     printf("文件已保存
    "); //成功保存,显示提示
     156     return 1;
     157 }
     158 
     159 
     160 //保存账户
     161 int Save_Account(stu_accout *p1)            //定义保存函数
     162 {
     163     FILE *fp;                            //定义fp指针
     164     if((fp=fopen("F:\Account.txt", "wb"))==NULL)
     165     {
     166         printf("不能打开文件
    ");
     167         return 0;
     168     }
     169     while(p1!=NULL)
     170     {
     171         fprintf(fp, "%s	%s	%d
    ",p1->name, p1->passwd, p1->role);//把内存中的文件输入到硬盘中
     172         p1=p1->next;
     173     }
     174     fclose(fp);                //关闭文件
     175     printf("文件已保存
    "); //成功保存,显示提示
     176     return 1;
     177 }
     178 
     179 
     180 
     181 //******************************************************保存文件模块
     182 
     183 
     184 
     185 
     186 
     187 
     188 
     189 
     190 //***************************************************登入模块
     191 //登入函数
     192 int login(int Login_Change,int& type,stu_accout* Account)
     193 {
     194 
     195     system("cls");
     196 
     197     stu_accout *p=Account;
     198     printf("
    
    
    ");
     199     printf("请输入用户名:");
     200 
     201     scanf("%s",UserName);
     202 
     203     while(p!=NULL)
     204     {
     205         if(strcmp(p->name,UserName)==0)
     206             break;
     207         p=p->next;
     208     }
     209 
     210 
     211     if(p==NULL) 
     212     {
     213         printf("无该用户名!!
    ");
     214         printf("您还有%d次机会
    ",Login_Change);
     215         getchar();
     216         getchar();
     217         return 0;
     218     }
     219     else
     220     {
     221         printf("请输入密码:");
     222         char c=0;   
     223         int i=0;
     224         char password[PWD_LEN];
     225         while(i<PWD_LEN-1&&c!='
    ')   
     226         {       c=getch();   
     227 
     228         if(c!='
    ')
     229         {
     230             putchar('*');
     231             password[i]=c;
     232             ++i;   
     233         }
     234         }
     235         if(i==PWD_LEN-1&&c!='
    ') 
     236         {
     237             printf("
    密码错误!!
    ");
     238             printf("您还有%d次机会
    ",Login_Change);
     239             getchar();
     240             getchar();
     241             return 0;
     242         }
     243         password[i]='';
     244         if(strcmp(password,p->passwd)!=0) 
     245         {
     246             printf("
    密码错误!!
    ");
     247             printf("您还有%d次机会
    ",Login_Change);
     248             getchar();
     249             getchar();
     250             return 0;
     251         }
     252     }
     253     system("cls");
     254     printf("登入成功
    ");
     255     type=p->role;
     256     int tem=2;
     257     while(tem--)
     258     {
     259         system("cls");
     260         
     261 printf("                        i8S,         
    ");
     262 printf("            S&X         5#@9         
    ");
     263 printf("           :@@B;        .:53sr:      
    ");
     264 printf("         :8BMh            i&&XG91.   
    ");
     265 printf("        ;M@#; ;;,    13S5,.hGHAHMHs  
    ");
     266 printf("        X@@r.G3HA9. S#Xh3Mh,:S#@@@@s 
    ");
     267 printf("        H@A.&MsSG@,.rH&XB@@M1:S@@@@#.
    ");
     268 printf("        X@X8@@@@@1 . ,3H#@@M1,;@@@@@s
    ");
     269 printf("        s@@AHMBGr     .;iri, ,8@@@@@S
    ");
     270 printf("         A@#Gh;,.,:.;:.,.,:s8M@@@@@@1
    ");
     271 printf("         :#@@@B&85SS959XAB@@@@@@@@@@r
    ");
     272 printf("          rsiiirri:iih9XAM@@@@@@@@@@;
    ");
     273 printf("      ,hs:,....           ,rSXM@@@@# 
    ");
     274 printf("     ;AHr;;:::,,,,,,,, ,iri:..;h&@@3 
    ");
     275 printf("  .,.3@Miii;;;::::::,,9BBHA&Gh:,;SG  
    ");
     276 printf(" 1&&&A@@9,iiiiii;;;;,3@@@@@@@@9GAX8i 
    ");
     277 printf(".GB95SGM#8;;iiiiiiii;9@@@@@@@@@GSSHA 
    ");
     278 printf(" :993398&H,.,::;;;;;;;8#@@@@@#X533Xs 
    ");
     279 printf("      ...              ,;;,:GXS5s:   
    ");
     280         printf("载入中
    ");
     281         Sleep(500);
     282         system("cls");
     283 printf("                          i8S,         
    ");
     284 printf("              S&X         5#@9         
    ");
     285 printf("             :@@B;        .:53sr:      
    ");
     286 printf("           :8BMh            i&&XG91.   
    ");
     287 printf("          ;M@#; ;;,    13S5,.hGHAHMHs  
    ");
     288 printf("          X@@r.G3HA9. S#Xh3Mh,:S#@@@@s 
    ");
     289 printf("          H@A.&MsSG@,.rH&XB@@M1:S@@@@#.
    ");
     290 printf("          X@X8@@@@@1 . ,3H#@@M1,;@@@@@s
    ");
     291 printf("          s@@AHMBGr     .;iri, ,8@@@@@S
    ");
     292 printf("           A@#Gh;,.,:.;:.,.,:s8M@@@@@@1
    ");
     293 printf("           :#@@@B&85SS959XAB@@@@@@@@@@r
    ");
     294 printf("            rsiiirri:iih9XAM@@@@@@@@@@;
    ");
     295 printf("        ,hs:,....           ,rSXM@@@@# 
    ");
     296 printf("       ;AHr;;:::,,,,,,,, ,iri:..;h&@@3 
    ");
     297 printf("    .,.3@Miii;;;::::::,,9BBHA&Gh:,;SG  
    ");
     298 printf("   1&&&A@@9,iiiiii;;;;,3@@@@@@@@9GAX8i 
    ");
     299 printf("  .GB95SGM#8;;iiiiiiii;9@@@@@@@@@GSSHA 
    ");
     300 printf("   :993398&H,.,::;;;;;;;8#@@@@@#X533Xs 
    ");
     301 printf("        ...              ,;;,:GXS5s:   
    ");
     302         printf("载入中…
    ");
     303         Sleep(500);
     304         system("cls");
     305 printf("                        i8S,         
    ");
     306 printf("            S&X         5#@9         
    ");
     307 printf("           :@@B;        .:53sr:      
    ");
     308 printf("         :8BMh            i&&XG91.   
    ");
     309 printf("        ;M@#; ;;,    13S5,.hGHAHMHs  
    ");
     310 printf("        X@@r.G3HA9. S#Xh3Mh,:S#@@@@s 
    ");
     311 printf("        H@A.&MsSG@,.rH&XB@@M1:S@@@@#.
    ");
     312 printf("        X@X8@@@@@1 . ,3H#@@M1,;@@@@@s
    ");
     313 printf("        s@@AHMBGr     .;iri, ,8@@@@@S
    ");
     314 printf("         A@#Gh;,.,:.;:.,.,:s8M@@@@@@1
    ");
     315 printf("         :#@@@B&85SS959XAB@@@@@@@@@@r
    ");
     316 printf("          rsiiirri:iih9XAM@@@@@@@@@@;
    ");
     317 printf("      ,hs:,....           ,rSXM@@@@# 
    ");
     318 printf("     ;AHr;;:::,,,,,,,, ,iri:..;h&@@3 
    ");
     319 printf("  .,.3@Miii;;;::::::,,9BBHA&Gh:,;SG  
    ");
     320 printf(" 1&&&A@@9,iiiiii;;;;,3@@@@@@@@9GAX8i 
    ");
     321 printf(".GB95SGM#8;;iiiiiiii;9@@@@@@@@@GSSHA 
    ");
     322 printf(" :993398&H,.,::;;;;;;;8#@@@@@#X533Xs 
    ");
     323 printf("      ...              ,;;,:GXS5s:   
    ");
     324         printf("载入中……
    ");
     325         Sleep(500);
     326         system("cls");
     327 printf("                          i8S,         
    ");
     328 printf("              S&X         5#@9         
    ");
     329 printf("             :@@B;        .:53sr:      
    ");
     330 printf("           :8BMh            i&&XG91.   
    ");
     331 printf("          ;M@#; ;;,    13S5,.hGHAHMHs  
    ");
     332 printf("          X@@r.G3HA9. S#Xh3Mh,:S#@@@@s 
    ");
     333 printf("          H@A.&MsSG@,.rH&XB@@M1:S@@@@#.
    ");
     334 printf("          X@X8@@@@@1 . ,3H#@@M1,;@@@@@s
    ");
     335 printf("          s@@AHMBGr     .;iri, ,8@@@@@S
    ");
     336 printf("           A@#Gh;,.,:.;:.,.,:s8M@@@@@@1
    ");
     337 printf("           :#@@@B&85SS959XAB@@@@@@@@@@r
    ");
     338 printf("            rsiiirri:iih9XAM@@@@@@@@@@;
    ");
     339 printf("        ,hs:,....           ,rSXM@@@@# 
    ");
     340 printf("       ;AHr;;:::,,,,,,,, ,iri:..;h&@@3 
    ");
     341 printf("    .,.3@Miii;;;::::::,,9BBHA&Gh:,;SG  
    ");
     342 printf("   1&&&A@@9,iiiiii;;;;,3@@@@@@@@9GAX8i 
    ");
     343 printf("  .GB95SGM#8;;iiiiiiii;9@@@@@@@@@GSSHA 
    ");
     344 printf("   :993398&H,.,::;;;;;;;8#@@@@@#X533Xs 
    ");
     345 printf("        ...              ,;;,:GXS5s:   
    ");
     346         printf("载入中………
    ");
     347         }
     348     
     349 
     350     return 1;
     351 }
     352 //***************************************************登入模块
     353 
     354 
     355 
     356 
     357 
     358 
     359 
     360 
     361 
     362 //*****************************************************主目录模块
     363 //主目录函数
     364 int menu(int role)
     365 {
     366     system("cls");
     367     int k;//定义一个整形变量用于输入选择
     368 
     369 
     370 
     371     printf("
    ");
     372     printf("****************************************************************
    ");
     373     printf("*                                                              *
    ");
     374     printf("*                   1.查询学生的信息                           *
    ");
     375     printf("*                   2.阅读学生的信息                           *
    ");
     376     printf("*                   3.排序学生的信息                           *
    ");
     377     printf("*                   4.查询本账户的信息                         *
    ");
     378     printf("*                   5.修改密码                                 *
    ");
     379     printf("*                   6.退出                                     *
    ");
     380     printf("*                                                              *
    ");
     381     if(role)
     382     {
     383         printf("*   *****       ********      *****   *******    ***  ***      *
    ");
     384         printf("*                                                              *
    ");
     385         printf("*              sS8Si  r9G1  1SS89SS   S88SSS31                 *
    "); 
     386         printf("*                #G    G5      #8      MX   i83                *
    ");
     387         printf("*                3@   rG       @9      #G    r@                *
    ");
     388         printf("*                 #X  Gs       @8      #G iisXG                *
    ");
     389         printf("*                 h@ir8        M9      #Xrs11r                 *
    ");
     390         printf("*                  HA8i        #9      @3                      *
    ");
     391         printf("*                   @S      1SS89SS    @3                      *
    ");
     392         printf("*                                                              *
    ");
     393         printf("*                   7.输入学生的信息                           *
    ");
     394         printf("*                   8.删除学生的信息                           *
    ");
     395         printf("*                   9.修改学生的信息                           *
    ");
     396         printf("*                   10.打开新文件…                            *
    ");
     397         printf("*                   11.文件另存为…                            *
    ");
     398     }
     399     printf("****************************************************************
    
    ");
     400     printf("我的选择:");            //在显示器上显示菜单页面
     401     scanf("%d", &k);                //输入选择
     402     getchar();
     403     return(k);                        //返回值进入switch函数判断,以调用不同功能的函数
     404 }
     405 //*****************************************************主目录模块
     406 
     407 
     408 
     409 
     410 
     411 
     412 //******************************************************查询模块
     413 
     414 //3.查询信息菜单
     415 student *menu1(student *head)
     416 {
     417     while(1)
     418     {
     419         system("cls");
     420         int k;                            //定义一个整形变量输入switch进行判断        
     421 
     422         printf("
    
    
    ");
     423         printf("*****************************************************************
    ");
     424         printf("*                      查询学生信息目录                         *
    ");
     425         printf("*                      1.按学生学号查询                         *
    ");
     426         printf("*                      2.按学生姓名查询                         *
    ");
     427         printf("*                      3.按学生性别查询                         *
    ");
     428         printf("*                      4.按学生年龄查询                         *
    ");
     429         printf("*                      5.按数学成绩查询                         *
    ");
     430         printf("*                      6.按物理成绩查询                         *
    ");
     431         printf("*                      7.按英语成绩查询                         *
    ");
     432         printf("*                      8.按计算机成绩查询                       *
    ");
     433         printf("*                      9.按总分成绩查询                         *
    ");
     434         printf("*                      10.返回主菜单                             *
    ");
     435         printf("******************************************************** ********
    
    ");
     436         printf("我的选择:");            //输出菜单界面
     437 
     438         scanf("%d", &k);                //输入选择
     439         switch(k)
     440         {
     441         case 1:                            //调用学号查询函数
     442             {
     443                 head=search1(head);        //返回首地址head用于其他函数的处理
     444                 break;                    //处理完毕,结束语句
     445             }
     446         case 2:                            //调用姓名查询函数
     447             {
     448                 head=search2(head);        //返回首地址head用于其他函数的处理
     449                 break;                    //处理完毕,结束语句
     450             }
     451         case 3:                            //调用年龄查询函数
     452             {
     453                 head=search_By_Gender(head);
     454                 break;
     455             }
     456         case 4:                            //调用数学成绩查询函数
     457             {
     458                 head=search3(head);        //返回首地址head用于其他函数的处理
     459                 break;                    //处理完毕,结束语句
     460 
     461             }
     462         case 5:                            //调用物理成绩查询函数
     463             {
     464                 head=search4(head);        //返回首地址head用于其他函数的处理
     465                 break;                    //处理完毕,结束语句
     466 
     467             }
     468         case 6:                            //调用英语成绩查询函数
     469             {
     470                 head=search5(head);        //返回首地址head用于其他函数的处理
     471                 break;                    //处理完毕,结束语句
     472 
     473             }
     474         case 7:                            //调用计算机成绩查询函数
     475             {
     476                 head=search6(head);
     477                 break;
     478 
     479             }
     480         case 8:                            //调用总分成绩查询函数
     481             {
     482                 head=search7(head);
     483                 break;
     484 
     485             }
     486         case 9:{  head=search8(head);
     487             break;
     488 
     489                }    
     490         case 10: break;//退出查询功能,返回主菜单
     491         default:printf("输入错误请重试
    ");
     492         }
     493         if(k==10)break;
     494     }
     495     return head;
     496 }
     497 
     498 //1.按学号查询
     499 student *search1(student *head)//定义一个函数,赋给他查找链表的首地址
     500 {
     501 
     502     system("cls");
     503     int num;
     504     student *p1;
     505     printf("请输入要查询学生的学号(输入0退出):");
     506     scanf("%ld",&num);                         //输入查找学号
     507     while(num!=0)
     508     {
     509         system("cls");
     510         if(head==NULL)
     511         {
     512             printf("
    没有任何学生的资料,请输入
    ");
     513             return(head);
     514         }
     515         printf("******************************************************************
    ");
     516         printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     517         printf("__________________________________________________________________
    ");
     518         p1=head;
     519         while (num!=p1->num&&p1->next!=NULL)     //开始扫描每个结点以查找与要求吻合的结点
     520             p1=p1->next;//如果不相同就扫描下一个
     521         if(num==p1->num)//查找到相同的信息开始输出
     522         {
     523             printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     524         }
     525         else printf("不存在学号为%ld的学生
    ", num); //没有查找到满足要求的结点
     526         printf("输入要查询学生的学号(输入0退出):");
     527         scanf("%ld", &num);
     528     }
     529     return(head);
     530 }
     531 
     532 //2.按姓名查询
     533 student *search2(student *head)  //定义一个函数,赋给他查找链表的首地址
     534 {
     535     system("cls");
     536     char name[NAME_LEN];
     537     student *p1;
     538     printf("请输入要查询学生的姓名:");    //输入查找姓名    
     539     scanf("%s",&name);
     540     printf("******************************************************************
    ");
     541     printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     542     printf("__________________________________________________________________
    ");
     543     p1=head;
     544     while (strcmp(name, p1->name)!=0&&p1->next!=NULL) //开始扫描每个结点以查找与要求吻合的结点
     545         p1=p1->next;                              //如果不相同就扫描下一个
     546     if(strcmp(name, p1->name)==0)            //查找到相同的信息开始输出
     547     {
     548         printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     549         getchar();
     550         getchar();
     551     }
     552     else
     553         printf("不存在姓名为%s学生
    ", name);//没有查找到满足要求的结点
     554     return(head);
     555 }        
     556 
     557 
     558 //2.按性别查询
     559 student *search_By_Gender(student *head)  //定义一个函数,赋给他查找链表的首地址
     560 {
     561     system("cls");
     562     char gender[GENDER_LEN];
     563     student *p1;
     564     printf("请输入要查询学生的性别:");    //输入查找性别    
     565     scanf("%s",&gender);
     566     printf("******************************************************************
    ");
     567     printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     568     printf("__________________________________________________________________
    ");
     569     p1=head;
     570     while (strcmp(gender, p1->gender)!=0&&p1->next!=NULL) //开始扫描每个结点以查找与要求吻合的结点
     571         p1=p1->next;                              //如果不相同就扫描下一个
     572     if(strcmp(gender, p1->gender)==0)            //查找到相同的信息开始输出
     573     {
     574         printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     575         getchar();
     576         getchar();
     577     }
     578     else
     579         printf("不存在姓名为%s学生
    ", gender);//没有查找到满足要求的结点
     580     return(head);
     581 }        
     582 
     583 //3.按年龄查询
     584 student *search3(student *head)                //同以上查找函数
     585 {
     586     system("cls");
     587     int age;
     588     student *p1;
     589     printf("请输入要查询学生的年龄(输入0退出):");
     590     scanf("%d",&age);
     591     while(age!=0)
     592     {
     593         system("cls");
     594         if(head==NULL)
     595         {
     596             printf("
    没有任何学生的信息,请输入
    ");
     597             return(head);
     598         }
     599         printf("******************************************************************
    ");
     600         printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     601         printf("__________________________________________________________________
    ");
     602         p1=head;
     603         while (age!=p1->age&&p1->next!=NULL)
     604             p1=p1->next;
     605         if(age==p1->age)
     606         {
     607             printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     608 
     609         }
     610         else
     611             printf("不存在年龄为%d学生
    ", age);
     612         printf("输入要查询学生的年龄(输入0退出):");
     613         scanf("%d", &age);
     614     }
     615     printf("退出查询
    ");
     616     return(head);
     617 }
     618 
     619 //4.按数学成绩查询
     620 student *search4(student *head)                //同以上查找函数
     621 {
     622     system("cls");
     623     float math;
     624     student *p1;
     625     printf("请输入要查询学生的数学成绩(输入0退出):");
     626     scanf("%f",&math);
     627     while(math!=0)
     628     {
     629         system("cls");
     630         if(head==NULL)
     631         {
     632             printf("
    没有任何学生的资料,请输入
    ");
     633             return(head);
     634         }
     635         printf("******************************************************************
    ");
     636         printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     637         printf("__________________________________________________________________
    ");
     638         p1=head;
     639         while (math!=p1->math&&p1->next!=NULL)
     640             p1=p1->next;
     641         if(math==p1->math)
     642         {
     643             printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     644 
     645         }
     646         else
     647             printf("不存在数学成绩为%.2f学生
    ", math);
     648         printf("输入要查询学生的数学成绩(输入0退出):");
     649         scanf("%f", &math);
     650     }
     651     printf("退出查询
    ");
     652     return(head);
     653 }        
     654 
     655 //5.按物理成绩查询
     656 student *search5(student *head)                //同以上查找函数
     657 {
     658     system("cls");
     659     float phy;
     660     student *p1;
     661     printf("请输入要查询学生的物理成绩(输入0退出):");
     662     scanf("%f",&phy);
     663 
     664     while(phy!=0)
     665     {
     666         system("cls");
     667         if(head==NULL)
     668         {
     669             printf("
    没有任何学生的资料,请输入
    ");
     670             return(head);
     671         }
     672         printf("******************************************************************
    ");
     673         printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     674         printf("__________________________________________________________________
    ");
     675         p1=head;
     676         while (phy!=p1->phy&&p1->next!=NULL)
     677             p1=p1->next;
     678         if(phy==p1->phy)
     679         {
     680             printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     681 
     682         }
     683         else
     684             printf("不存在物理成绩为%.2f学生
    ", phy);
     685         printf("输入要查询学生的物理成绩(输入0退出):");
     686         scanf("%f", &phy);
     687     }
     688     printf("退出查询
    ");
     689     return(head);
     690 }        
     691 
     692 //6.按英语成绩查询
     693 student *search6(student *head)                //同以上查找函数
     694 {
     695     system("cls");
     696     float eng;
     697     student *p1;
     698     printf("请输入要查询学生的英语成绩(输入0退出):");
     699     scanf("%f",&eng);
     700     while(eng!=0)
     701     {
     702         system("cls");
     703         if(head==NULL)
     704         {
     705             printf("
    没有任何学生的资料,请输入
    ");
     706             return(head);
     707         }
     708         printf("******************************************************************
    ");
     709         printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     710         printf("__________________________________________________________________
    ");
     711         p1=head;
     712         while (eng!=p1->eng&&p1->next!=NULL)
     713             p1=p1->next;
     714         if(eng==p1->eng)
     715         {
     716             printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     717 
     718         }
     719         else
     720             printf("不存在英语成绩为%.2f学生
    ", eng);
     721         printf("输入要查询学生的英语成绩(输入0退出):");
     722         scanf("%f", &eng);
     723     }
     724     printf("退出查询
    ");
     725     return(head);
     726 }
     727 
     728 //7.按计算机成绩查询
     729 student *search7(student *head)                //同以上查找函数
     730 {
     731     system("cls");
     732     system("cls");
     733     float cpu;
     734     student *p1;
     735     printf("请输入要查询学生的计算机成绩(输入0退出):");
     736     scanf("%f",&cpu);
     737     while(cpu!=0)
     738     {
     739         if(head==NULL)
     740         {
     741             printf("
    没有任何学生的资料,请输入
    ");
     742             return(head);
     743         }
     744         printf("******************************************************************
    ");
     745         printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     746         printf("__________________________________________________________________
    ");
     747         p1=head;
     748         while (cpu!=p1->cpu&&p1->next!=NULL)
     749             p1=p1->next;
     750         if(cpu==p1->cpu)
     751         {
     752             printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     753         }
     754         else
     755             printf("不存在计算机成绩为%.2f学生
    ", cpu);
     756         printf("输入要查询学生的计算机成绩(输入0退出):");
     757         scanf("%f", &cpu);
     758     }
     759     printf("退出查询
    ");
     760     return(head);
     761 }
     762 
     763 //8.按总分成绩查询
     764 student *search8(student *head)                //同以上查找函数
     765 {
     766     system("cls");
     767     float sum;
     768     student *p1;
     769     printf("请输入要查询学生的总分(输入0退出):");
     770     scanf("%f",&sum);
     771     while(sum!=0)
     772     {
     773         system("cls");
     774         if(head==NULL)
     775         {
     776             printf("
    没有任何学生的资料,请输入
    ");
     777             return(head);
     778         }
     779         printf("******************************************************************
    ");
     780         printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     781         printf("__________________________________________________________________
    ");
     782         p1=head;
     783         while (sum!=p1->sum&&p1->next!=NULL)
     784             p1=p1->next;
     785         if(sum==p1->sum)
     786         {
     787             printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
     788 
     789         }
     790         else
     791             printf("不存在总分成绩为%.2f学生
    ", sum);
     792         printf("输入要查询学生的总分成绩(输入0退出):");
     793         scanf("%f", &sum);
     794     }
     795     printf("退出查询
    ");
     796     return(head);
     797 }
     798 
     799 //******************************************************查询模块
     800 
     801 
     802 
     803 
     804 
     805 
     806 //**********************************************   阅读模块
     807 
     808 //输出
     809 void print(student *head)                    //赋给函数首地址,根据地址输出链表
     810 {
     811     system("cls");
     812     student *p;
     813     printf("已录入%d个学生的记录是:
    ", n);
     814     printf("******************************************************************************
    ");
     815     printf("学号	姓名	性别	年龄	数学	物理	英语	计算机	总分
    ");
     816     printf("______________________________________________________________________________
    ");    //输出格式
     817     p=head;
     818     if(head!=NULL)
     819         do                        //输出信息
     820         {
     821             printf("%ld	%s	%s	%d	%.2f	%.2f	%.2f	%.2f	%.2f
    ", p->num, p->name,p->gender, p->age,p->math, p->phy,p->eng, p->cpu, p->sum);
     822             p=p->next;
     823             printf("______________________________________________________________________________
    ");
     824         }while(p!=NULL);        //当到达最后一个结点停止
     825     else
     826         printf("
    没有任何学生的信息
    ");        //链表为空输出
     827     getchar();
     828 }
     829 
     830 
     831 void Account_print(stu_accout *head)                    //赋给函数首地址,根据地址输出链表
     832 {
     833     system("cls");
     834     stu_accout *p;
     835     printf("******************************************************************************
    ");
     836     printf("账户名	密码	权限
    ");
     837     printf("______________________________________________________________________________
    ");    //输出格式
     838     p=head;
     839     if(head!=NULL)
     840         do                    //输出信息
     841         {
     842             if(strcmp(p->name,UserName)==0)
     843             {
     844                 printf("%s	%s	%d
    ",p->name,p->passwd,p->role);
     845                 printf("______________________________________________________________________________
    ");
     846                 break;
     847             }
     848             p=p->next;    
     849         }while(p!=NULL);        //当到达最后一个结点停止
     850     else
     851         printf("
    没有任何学生的信息
    ");        //链表为空输出
     852     getchar();
     853 }
     854 
     855 //**********************************************   阅读模块
     856 
     857 
     858 
     859 
     860 
     861 
     862 //******************************************************排序模块
     863 
     864 
     865 //7.排序信息菜单
     866 student *menu7(student *head)
     867 {
     868     while(1)
     869     {
     870         system("cls");
     871         int k;                                    //定义一个整形变量输入switch进行判断
     872         student *stu=0;
     873         printf("
    
    
    ");
     874         printf("******************************************************************
    ");
     875         printf("*                       排序学生信息目录                         *
    ");
     876         printf("*                       1.按学生学号排序                         *
    ");
     877         printf("*                       2.按学生年龄排序                         *
    ");
     878         printf("*                       3.按数学成绩排序                         *
    ");
     879         printf("*                       4.按物理成绩排序                         *
    ");
     880         printf("*                       5.按英语成绩排序                         *
    ");
     881         printf("*                       6.按计算机成绩排序                       *
    ");
     882         printf("*                       7.按总分成绩排序                         *
    ");
     883         printf("*                       8.返回主菜单                             *
    ");
     884         printf("******************************************************************
    
    ");
     885         printf("我的选择:");                    //输出菜单界面
     886 
     887         scanf("%d", &k);//输入选择
     888         getchar();
     889         switch(k)                                //判断
     890         {
     891         case 1:
     892             {
     893                 head=sort1(head);                //按学号排序,调用学号排序函数
     894                 break;                            //跳出
     895             }
     896         case 2:
     897             {
     898                 head=sort2(head);                //按年龄排序,调用年龄排序函数
     899                 break;
     900             }
     901         case 3:
     902             {
     903                 head=sort3(head);                //按数学成绩排序,调用数学成绩排序函数
     904                 break;
     905             }
     906         case 4:
     907             {
     908                 head=sort4(head);                //按物理成绩排序,调用物理成绩排序函数
     909                 break;
     910             }
     911         case 5:
     912             {
     913                 head=sort5(head);
     914                 break;
     915             }
     916         case 6:
     917             {
     918                 head=sort6(head);
     919                 break;
     920             }
     921         case 7:
     922             {
     923                 head=sort7(head);
     924                 break;
     925             }
     926         case 8:break;                            //返回主菜单
     927         default:printf("输入错误请重试
    ");
     928         }
     929         if(k==8) break;
     930     }
     931     return head;
     932 }
     933 
     934 //交换
     935 void swap(student *p1, student *p2)     //交换函数,用于冒泡法的排序函数中
     936 {
     937     int k, d;                                    //定义各种交换的中间变量
     938     char a[10];
     939     float temp;                                    
     940     k=p1->num;                                //把新定义的num变量作为中间变量交换swap函数中的前后两个变量的学号信息
     941     p1->num=p2->num;
     942     p2->num=k;
     943 
     944     strcpy(a, p1->name);            //交换姓名信息,采用一个同类型中间变量,过程同上
     945     strcpy(p1->name, p2->name);
     946     strcpy(p2->name,a);
     947 
     948     strcpy(a, p1->gender);            //交换性别信息,采用一个同类型中间变量,过程同上
     949     strcpy(p1->gender, p2->gender);
     950     strcpy(p2->gender,a);
     951 
     952     d=p1->age;                   //交换年龄信息,采用一个同类型中间变量,过程同上
     953     p1->age=p2->age;
     954     p2->age=d;
     955 
     956     temp=p1->math;               //交换成绩信息,采用一个同类型中间变量,过程同上
     957     p1->math=p2->math;
     958     p2->math=temp;
     959 
     960     temp=p1->phy;              //交换成绩信息,采用一个同类型中间变量,过程同上
     961     p1->phy=p2->phy;
     962     p2->phy=temp;
     963 
     964     temp=p1->eng;             //交换成绩信息,采用一个同类型中间变量,过程同上
     965     p1->eng=p1->eng;
     966     p2->eng=temp;
     967 
     968     temp=p1->cpu;             //交换成绩信息,采用一个同类型中间变量,过程同上
     969     p1->cpu=p2->cpu;
     970     p2->cpu=temp;
     971 
     972     temp=p1->sum;                 //交换成绩信息,采用一个同类型中间变量,过程同上
     973     p1->sum=p2->sum;
     974     p2->sum=temp;
     975 }    
     976 
     977 //1.按学号排序
     978 student *sort1(student *head)            //定义排序函数,赋值给所需删除操作链表的首地址
     979 {
     980     system("cls");
     981     student *p1, *p2;
     982     int i, j;            
     983     p2=head;
     984     p1=head;
     985     if(head==NULL)                                    //进行一次判断,链表为空时,提示
     986     {
     987         printf("没有任何学生的信息,请先输入
    ");
     988     }
     989     for(i=1; i<n; i++)
     990     {
     991         for(j=i+1;j<=n; j++)
     992         {
     993             p2=p1;
     994             p1=p1->next;
     995             if(p2->num<p1->num)                    //按冒泡法如果相邻两个结点不符合顺序要求,交换其值
     996                 swap(p2,p1);                    //因为是结构体,有多个元素,因此先前定义了一个swap函数,此时调用
     997         }
     998         p2=head;                                //第一次排序完成,令其返回首结点进行循环
     999         p1=head;
    1000     }
    1001     print(head);//调用print函数输出排序结果
    1002     return head;                                    //返回首地址,供其他函数处理该链表
    1003 }
    1004 
    1005 //2.按年龄排序            
    1006 student *sort2(student *head)            //同以上排序函数
    1007 {
    1008     system("cls");
    1009     student *p1, *p2;
    1010     int i, j;            
    1011     p2=head;
    1012     p1=head;
    1013     if(head==NULL)
    1014     {
    1015         printf("没有任何学生的信息,请先输入
    ");
    1016     }
    1017     for(i=1; i<n; i++)
    1018     {
    1019         for(j=i+1;j<=n; j++)
    1020         {
    1021             p2=p1;
    1022             p1=p1->next;
    1023             if(p2->age<p1->age)
    1024                 swap(p2,p1);
    1025         }
    1026         p2=head;
    1027         p1=head;
    1028     }
    1029     print(head);
    1030     return head;
    1031 }
    1032 
    1033 //3.按数学成绩排序
    1034 student *sort3(student *head)            //同以上排序函数
    1035 {
    1036     system("cls");
    1037     student *p1, *p2;
    1038     int i, j;            
    1039     p2=head;
    1040     p1=head;
    1041     if(head==NULL)
    1042     {
    1043         printf("没有任何学生的信息,请先输入
    ");
    1044     }
    1045     for(i=1; i<n; i++)
    1046     {
    1047         for(j=i+1;j<=n; j++)
    1048         {
    1049             p2=p1;
    1050             p1=p1->next;
    1051             if(p2->math<p1->math)
    1052                 swap(p2,p1);
    1053         }
    1054         p2=head;
    1055         p1=head;
    1056     }
    1057     print(head);
    1058     return head;
    1059 }
    1060 
    1061 //4.按物理成绩排序
    1062 student *sort4(student *head)            //同以上排序函数
    1063 {
    1064     system("cls");
    1065     student *p1, *p2;
    1066     int i, j;            
    1067     p2=head;
    1068     p1=head;
    1069     if(head==NULL)
    1070     {
    1071         printf("没有任何学生的信息,请先输入
    ");
    1072     }
    1073     for(i=1; i<n; i++)
    1074     {
    1075         for(j=i+1;j<=n; j++)
    1076         {
    1077             p2=p1;
    1078             p1=p1->next;
    1079             if(p2->phy<p1->phy)
    1080                 swap(p2,p1);
    1081         }
    1082         p2=head;
    1083         p1=head;
    1084     }
    1085     print(head);
    1086     return head;
    1087 }
    1088 
    1089 //5.按英语成绩排序
    1090 student *sort5(student *head)            //同以上排序函数
    1091 {
    1092     system("cls");
    1093     student *p1, *p2;
    1094     int i, j;            
    1095     p2=head;
    1096     p1=head;
    1097     if(head==NULL)
    1098     {
    1099         printf("没有任何学生的信息,请先输入
    ");
    1100     }
    1101     for(i=1; i<n; i++)
    1102     {
    1103         for(j=i+1;j<=n; j++)
    1104         {
    1105             p2=p1;
    1106             p1=p1->next;
    1107             if(p2->eng<p1->eng)
    1108                 swap(p2,p1);
    1109         }
    1110         p2=head;
    1111         p1=head;
    1112     }
    1113     print(head);
    1114     return head;
    1115 }
    1116 
    1117 //6.按计算机成绩排序
    1118 student *sort6(student *head)            //同以上排序函数
    1119 {
    1120     system("cls");
    1121     student *p1, *p2;
    1122     int i, j;            
    1123     p2=head;
    1124     p1=head;
    1125     if(head==NULL)
    1126     {
    1127         printf("没有任何学生的信息,请先输入
    ");
    1128     }
    1129     for(i=1; i<n; i++)
    1130     {
    1131         for(j=i+1;j<=n; j++)
    1132         {
    1133             p2=p1;
    1134             p1=p1->next;
    1135             if(p2->cpu<p1->cpu)
    1136                 swap(p2,p1);
    1137         }
    1138         p2=head;
    1139         p1=head;
    1140     }
    1141     print(head);
    1142     return head;
    1143 }
    1144 
    1145 //7.按总分成绩排序
    1146 student *sort7(student *head)            //同以上排序函数
    1147 {
    1148     system("cls");
    1149     student *p1, *p2;
    1150     int i, j;
    1151     p2=head;
    1152     p1=head;
    1153     if(head==NULL)
    1154     {
    1155         printf("没有任何学生的信息,请先输入
    ");
    1156     }
    1157     for(i=1; i<n; i++)
    1158     {
    1159         for(j=i+1;j<=n; j++)
    1160         {
    1161             p2=p1;
    1162             p1=p1->next;
    1163             if(p2->sum<p1->sum)
    1164                 swap(p2,p1);
    1165         }
    1166         p2=head;
    1167         p1=head;
    1168     }
    1169     print(head);
    1170     return head;
    1171 }
    1172 
    1173 //******************************************************排序模块
    1174 
    1175 
    1176 
    1177 
    1178 
    1179 
    1180 //******************************************************增删修模块
    1181 
    1182 //添加学生信息 
    1183 student *add(student *head, student *stu)        //定义学生函数和首地址及添加信息地址
    1184 {
    1185     student *p0, *p1, *p3;
    1186     int i;
    1187     p3=stu=(student *)malloc(sizeof(student));    //把新建节点的地址赋给指针
    1188     printf("
    请输入要增加的学生的信息:");
    1189     printf("请输入学生学号(学号大于0):");
    1190     scanf("%ld", &stu->num);
    1191     //getchar();
    1192     p3=head;
    1193     if(n>0)
    1194     {
    1195         for(i=0; i<n; i++)                        //循环,让指针指向最后一个结点
    1196         {
    1197             p3=p3->next;
    1198         }
    1199     }
    1200     printf("请输入学生姓名:");                                        //输入插入学生的
    1201     scanf("%s", stu->name);
    1202     //getchar();
    1203     printf("请输入学生性别:");                                        //输入插入学生的
    1204     scanf("%s", stu->gender);
    1205     //getchar();
    1206     printf("请输入年龄、数学、物理、英语、计算机成绩并以空格隔开(0-100):");
    1207     scanf("%d%f%f%f%f", &stu->age, &stu->math, &stu->phy, &stu->eng, &stu->cpu);
    1208     getchar();
    1209     stu->sum=stu->math+stu->phy+stu->eng+stu->cpu;
    1210     p1=head;
    1211     p0=stu;
    1212     if(head!=NULL)                                                
    1213     {
    1214         while(p1->next!=NULL)
    1215         {
    1216             p1=p1->next;
    1217         }
    1218         p1->next=p0;                    //把保存有添加学生信息的结点连接到链表最后
    1219         p0->next=NULL;
    1220     }
    1221     else
    1222     {
    1223         head=p0;
    1224         p0->next=NULL;
    1225     }
    1226 
    1227     int Save=Save_Stu(head);
    1228     if(Save)
    1229         n=n+1;                                //插入一个学生,n自增一次
    1230     printf("现在的学生数为:%d
    ", n);            
    1231     getchar();
    1232     return(head);                                //返回改变链表的首地址
    1233 }
    1234 
    1235 //删除学生信息 
    1236 student *del(student *head)        //定义删除函数,赋值给所需删除操作链表的首地址
    1237 {
    1238     student *p1, *p2;
    1239     long int num;                                    //定义一个与结构体重学号元素同类型的变量输入所需删除的学号
    1240     printf("输入要删除的学生的学号(输入0时退出):");
    1241     scanf("%ld", &num);
    1242     getchar();
    1243     p1=head;
    1244     while(num!=p1->num&&p1->next!=NULL)            //在连表中查找满足要求的结点
    1245     {
    1246         p2=p1;
    1247         p1=p1->next;
    1248     }
    1249     if(num==p1->num)
    1250     {
    1251         if(p1!=head)
    1252         {
    1253             p2->next=p1->next;                    //让该结点的上下两个结点相连,即可“删除”该结点
    1254 
    1255         }
    1256         else
    1257         {
    1258             head=p1->next;
    1259 
    1260         }
    1261         printf("成功删除%d
    ", num);
    1262 
    1263         int Save=Save_Stu(head);
    1264         if(Save)
    1265             n=n-1;                                //插入一个学生,n自增一次
    1266         printf("现在的学生数为:%d
    ", n);            
    1267     }
    1268     else
    1269         printf("没有检索到%ld学生
    ", num);        //没有扫描到符合要求的结点,提示
    1270     getchar();
    1271     return(head);                                    //返回修改过的链表的首地址以供其他函数使用
    1272 }
    1273 
    1274 
    1275 //修改学生信息
    1276 student *cha(student *head)
    1277 {
    1278     while(1)
    1279     {
    1280         student *p1;
    1281         long int num;
    1282         int k;
    1283         printf("输入要修改的学生的学号(输入0时退出):");
    1284         scanf("%ld", &num);
    1285         if(num==0) break;
    1286         getchar();
    1287         p1=head;
    1288         while(num!=p1->num&&p1->next!=NULL)            //在连表中查找满足要求的结点
    1289             p1=p1->next;
    1290         if(p1!=NULL)
    1291         {
    1292             printf("请选择你要修改的内容:
      姓名:1   性别:2   年龄:3   数学成绩:4  
      物理成绩:5    英语成绩:6    计算机成绩:7
    ");
    1293 
    1294             scanf("%d",&k);
    1295             getchar();
    1296             switch (k)
    1297             {
    1298             case 1:
    1299                 {
    1300                     printf("请输入姓名:");
    1301                     scanf("%s",p1->name);
    1302                     break;
    1303                 }
    1304             case 2:
    1305                 {
    1306                     printf("请输入性别:");
    1307                     scanf("%s",p1->gender);
    1308                     break;
    1309                 }
    1310             case 3:
    1311                 {
    1312                     printf("请输入年龄:");
    1313                     scanf("%d",&p1->age);
    1314                     break;
    1315                 }
    1316             case 4:
    1317                 {
    1318                     printf("请输入数学成绩:");
    1319                     scanf("%f",&p1->math);
    1320                     p1->sum=p1->math+p1->phy+p1->eng+p1->cpu;
    1321                     break;
    1322                 }
    1323             case 5:
    1324                 {
    1325                     printf("请输入物理成绩:");
    1326                     scanf("%f",&p1->phy);
    1327                     p1->sum=p1->math+p1->phy+p1->eng+p1->cpu;
    1328                     break;
    1329                 }
    1330             case 6:
    1331                 {
    1332                     printf("请输入英语成绩:");
    1333                     scanf("%f",&p1->eng);
    1334                     p1->sum=p1->math+p1->phy+p1->eng+p1->cpu;
    1335                     break;
    1336                 }
    1337             case 7:
    1338                 {
    1339                     printf("请输入计算机成绩:");
    1340                     scanf("%f",&p1->cpu);
    1341                     p1->sum=p1->math+p1->phy+p1->eng+p1->cpu;
    1342                     break;
    1343                 }
    1344             default:printf("输入错误请重试
    ");
    1345                       break;
    1346             }
    1347             printf("成功修改%d
    ", num);
    1348             int Save=Save_Stu(head);
    1349                     
    1350         }
    1351         else
    1352             printf("没有检索到%ld学生
    ", num);        //没有扫描到符合要求的结点,提示
    1353         getchar();
    1354         getchar();                                //返回修改过的链表的首地址以供其他函数使用
    1355     }
    1356         return(head);
    1357 }
    1358 
    1359 //修改学生信息
    1360 stu_accout *Password_cha(stu_accout *head)
    1361 {
    1362     
    1363         stu_accout *p1;
    1364         int k;
    1365         p1=head;
    1366         while(strcmp(UserName,p1->name)!=0&&p1->next!=NULL)            //在连表中查找满足要求的结点
    1367             p1=p1->next;
    1368             printf("请原来的密码
    ");
    1369             char OrPassword[PWD_LEN];
    1370             scanf("%s",OrPassword);
    1371             if(strcmp(OrPassword,p1->passwd)!=0)
    1372                  printf("密码错误!!
    ");
    1373             else
    1374             {
    1375                 char NewPass1[PWD_LEN];
    1376                 char NewPass2[PWD_LEN];
    1377                 printf("请输入新密码:");
    1378                     scanf("%s",NewPass1);
    1379                 getchar();
    1380                 printf("请确认新密码:");
    1381                     scanf("%s",NewPass2);
    1382                 if(strcmp(NewPass1,NewPass2)!=0)
    1383                    printf("密码不一致!!!");
    1384                 else
    1385                 {
    1386                     strcpy(p1->passwd,NewPass1);
    1387                     int Save=Save_Account(head);
    1388                      printf("成功修改
    ");
    1389                    
    1390                 }
    1391              
    1392             }
    1393             
    1394                     
    1395     
    1396         getchar();
    1397         getchar();                                //返回修改过的链表的首地址以供其他函数使用
    1398     
    1399         return(head);
    1400 }
    1401 
    1402 //******************************************************增删修模块
    View Code

    主函数

      1 #include "My_header.h"
      2 
      3 //主函数
      4 int main()
      5 {
      6     student *Student_head=0, *stu=0;
      7     stu_accout *Account_Head=0;
      8     int k, a;                        //定义录入选择的整形变量
      9     while(1)
     10     {
     11         system("cls");
     12 
     13         printf(",.,,..... ...:,,,:,...   ....,,,.   ,,,,,,:.  ..:,,,..... ....
    ");
     14         printf(":  ,s1hhhhiii ... :111h55h11s...sh51...... rhhhi .  r1hhhhs:i 
    ");
     15         printf(",.9Ahrrrs5&@A.,,,,;rr;3@#riri,,:;9@@s.:,,,:#@@1;,.1H9srir19M@r
    ");
     16         printf(".8@; ,,,,..3M:,,,:,,,.1@H.,,,::,.hM@X.:,:.3M@#:,,s@8 ,,,,..iM5
    ");
     17         printf(".A@i..,,,:,.i:,,,,,,,.1@H,,,,,,,.S8A@i,,,:H5@#:,.5@8...,,::.;;
    ");
     18         printf(".rM@X5r,..,,,,:,,,,,,.1@H,,,,,,:.S9h@9.:.3Xi@#:,,:X@B9s:...,, 
    ");
     19         printf(": :h9B#MA9s,.,:,,,,,,.1@B,,,,,::.S8.##:,,Bri@#:,:,.i9H##H81,..
    ");
     20         printf(",.,..,ih8B@MS,,:,,,,,.1@B,,,,,,:.S8 9@5 S& s@#:,,,,,..;19H@#3.
    ");
     21         printf(": ,:,,,...i&@G,,,,,,,.1@B,,,,,,:.S8 i@H.H1 s@M:,:,,::,,...iX@8
    ");
     22         printf(",9s.::,,:,..#@:,,,,,,.1@B,,,,,,,.S8..X@X&..s@M:,,Gh ,:,,:,..B@
    ");
     23         printf(" 9#r..,,,. s@G,,,:,,, s@B..,,,:, S8 .s@@s..r@M,,.8@1..,,,. r@G
    ");
     24         printf(".,@B31riir5&5 ....,rriS@Msrri...;G&i. A& .iS@M1: i#H31riir5&S 
    
    
    ");
     25         printf("                                               开发人员:卓寿杰   
    ");
     26         printf("                                                                 
    ");
     27         printf("  1.进入                                                         
    ");
     28         printf("  2.退出                                                         
    ");
     29         printf("*****************************************************************
    
    ");
     30         printf("我的选择:");
     31         scanf("%d", &a);                    //输入选择
     32         if(a==1)                            //进入系统
     33         {
     34             stu_accout *Account=NULL;
     35             Account=Acount_Load(Account);
     36             int Login_Change=3;  //三次登入机会
     37             int tem;
     38             int type;
     39             while(Login_Change--)
     40             {
     41                 tem=login(Login_Change,type,Account);
     42                 if(tem) break;
     43             }
     44             if(!tem) break;
     45             while(1)                        //使用循环,在完成一个
     46             {
     47 
     48                 Student_head= Student_File_Load(Student_head);   
     49                 k=menu(type); //调用主目录函数                
     50                 switch(k)
     51                 {
     52                 case 1:// 1.查询学生的信息
     53                     {            
     54                         Student_head=menu1(Student_head);   
     55                         break;
     56                     }
     57                 case 2:print(Student_head);break;    //输出函数,显示学生信息
     58                 case 3:
     59                     {              //调用信息排序菜单函数,并进一步调用各种排序函数
     60                         Student_head=menu7(Student_head);                    
     61                         break;
     62                     }
     63                 case 7:
     64                     {   student*  tem=NULL;
     65                     Student_head=add(Student_head, tem);                    
     66                     break;
     67                     }
     68                 case 8:
     69                     {
     70                         print(Student_head);
     71                         Student_head=del(Student_head);           //调用删除函数返回首地址
     72                         print(Student_head);        //根据删除函数返回的地址输出结果
     73                         break;
     74                     }
     75                 case 9:
     76                     {
     77                         print(Student_head);
     78                         Student_head=cha(Student_head);
     79                         getchar();
     80                         print(Student_head);
     81                         break;
     82                     }
     83                 case 4:
     84                     {
     85                         Account_print(Account);
     86                         break;
     87                     }
     88                 case 5:
     89                     {
     90                         Account=Password_cha(Account);
     91                         break;
     92                     }
     93                 case 6:break;     //返回登录界面
     94                 case 10:
     95                     {
     96                         Student_head=Other_Student_File_Load(Student_head);
     97                         break;
     98                     }
     99                 case 11:
    100                     {
    101                         Other_Save_Stu(Student_head);
    102                         break;
    103                     }
    104                 case 0:exit(0);                 //退出
    105                 default:printf("输入错误请重试
    ");
    106                     
    107                 }
    108                 if(k==6)break;
    109             }
    110         }
    111         else
    112         {
    113             printf("您是否确认退出?(y/n)");  //确认退出程序
    114             getchar();
    115             if(getchar()=='y')
    116                 break;
    117         }
    118     }
    119 }
    View Code
  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/xiaoyesoso/p/4240435.html
Copyright © 2011-2022 走看看