学生信息管理系统

来源:互联网 发布:淘宝达人粉丝怎么到100 编辑:程序博客网 时间:2024/05/27 21:05

1、非链表实现:

本系统包括以下功能:
1、学生信息的整体注册
2、学生信息的修改
3、学生成绩信息的录入
4、学生信息的添加
5、恢复误删的学生信息
6、学生信息的删除
7、密码修改保存函数
8、学生信息的查询
9、密码修改函数
10、学生信息管理系统的菜单函数

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

         显示学生的信息

         修改学生的信息
         查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示“无此记录!”的信息。
         删除链表中指定学号的结点。
         添加学生记录
         要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序及显示其对应的结果。

    完整的代码如下:

              #include "stdio.h"   
    1. #include "stdlib.h"   
    2. #include "string.h"   
    3. typedef struct student  
    4. {  
    5.     int id;    //学号  
    6.     char name[20];    //姓名  
    7.     int age;    //年龄  
    8.     char sex;    //性别(f或m)  
    9.     char birthday[30]; //出生年月  
    10.     char address[20];  //地址  
    11.     char phone[15];  //电话  
    12.     char email[30];  //email  
    13.     struct student *next;  
    14. }student;  
    15. student *head=NULL;  
    16. int length;   //链表的长度  
    17. void create()  
    18. {  
    19.     student *p1,*p2;  
    20.     length=0;  
    21.     p1=(student *)malloc(sizeof(student));  
    22.     p1->id=-1;  
    23.     if(head==NULL)  
    24.         head=p1;  
    25.     printf("请输入学生的学号、姓名、年龄、性别、出生年月、地址、电话、电子邮箱:/n");  
    26.     while(1)  //学号为0的时候退出  
    27.     {  
    28.         p2=(student *)malloc(sizeof(student));  
    29.         scanf("%d %s %d %c %s %s %s %s",&p2->id,p2->name,&p2->age,&p2->sex,p2->birthday,p2->address,p2->phone,p2->email);  //输入学生信息  
    30.         if(p2->id==0)  
    31.         {  
    32.             printf("链表创建完成!/n");  
    33.             break;  
    34.         }  
    35.         length++; //链表的长度   
    36.         p1->next=p2;  
    37.         p2->next=NULL;  
    38.         p1=p1->next;  
    39.     }  
    40.     return ;  
    41. }  
    42. void LoadStudentInfoFromFile()  
    43. {  
    44.     student *p,*q;  
    45.     int c;  
    46.     FILE* f;  
    47.     f= fopen("input.txt","r");  
    48.     if (f == NULL)  
    49.         return;  
    50.     fseek(f, 0, SEEK_SET);  
    51.     p=(student *)malloc(sizeof(student));  
    52.     p->next=NULL;  
    53.     head=p;  
    54.     while(!feof(f))  
    55.     {  
    56.         c = fgetc(f);  
    57.         if (c != -1)  
    58.             fseek(f, -1, SEEK_CUR);  
    59.         else  
    60.             return ;  
    61.         q=(student *)malloc(sizeof(student));  
    62.         fscanf(f,"%d",&q->id);  
    63.         fscanf(f,"%s",q->name);  
    64.         fscanf(f,"%d",&q->age);  
    65.         fscanf(f,"%c",&q->sex);  
    66.         fscanf(f,"%c",&q->sex);  
    67.         fscanf(f,"%s",q->birthday);  
    68.         fscanf(f,"%s",q->address);  
    69.         fscanf(f,"%s",q->phone);  
    70.         fscanf(f,"%s",q->email);  
    71.         q->next=NULL;  
    72.         p->next=q;  
    73.         p=p->next;  
    74.         length++; //链表的长度   
    75.     }  
    76. }  
    77. void ModifyStudentInfo()  
    78. {  
    79.     student *p=head->next;  
    80.     int num;  
    81.     printf("请输入要修改的学生的学号:");  
    82.     scanf("%d",&num);  
    83.     while(p!=NULL)  
    84.     {  
    85.         if(p->id==num)  
    86.         {  
    87.             printf("修改前,学号为%d的学生的信息如下:/n",num);  
    88.             printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);  
    89.             printf("请输入学生的新电话:");  
    90.             getchar();  
    91.             gets(p->phone);  
    92.             printf("请输入学生的新地址:");  
    93.             gets(p->address);  
    94.             printf("修改后,学号为%d的学生的信息如下:/n",num);  
    95.             printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);  
    96.             return ;  
    97.         }  
    98.         p=p->next;  
    99.     }  
    100.     if(p==NULL)  
    101.     {  
    102.         printf("该学号不存在!/n");  
    103.         return ;  
    104.     }  
    105. }  
    106.   
    107. void display()  
    108. {  
    109.     student *p=head->next;  
    110.     printf("链表中所有的学生信息如下:/n");  
    111.     while(p!=NULL)  
    112.     {  
    113.         printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);  
    114.         //printf("/n");   
    115.         p=p->next;  
    116.     }  
    117.     return ;  
    118. }  
    119. void search()  
    120. {  
    121.     int num,x;  
    122.     char name[20];  
    123.     student *p=head->next;  
    124.     printf("请选择查询的方式:/n");  
    125.     printf("1、按学号查询/t 2、按姓名查询/n");  
    126.     scanf("%d",&x);  
    127.     if(x==1)  
    128.     {  
    129.         printf("需要查找的学生学号为:");  
    130.         scanf("%d",&num);  
    131.         while(p!=NULL)  
    132.         {  
    133.   
    134.             if(p->id==num)  
    135.             {  
    136.                 printf("学生学号为%d的学生的信息如下:/n",num);  
    137.                 printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);  
    138.                 return;  
    139.             }     
    140.             p=p->next;  
    141.         }  
    142.         if(p==NULL)  
    143.             printf("无此记录!/n");  
    144.     }  
    145.     else if(x==2)  
    146.     {  
    147.         printf("需要查找的学生姓名为:");  
    148.         getchar();  
    149.         gets(name);  
    150.         //scanf();   
    151.         p=head->next;  
    152.         while(p!=NULL)  
    153.         {  
    154.             if(strcmp(p->name,name)==0)  
    155.             {  
    156.                 printf("学生姓名为%s的学生的信息如下:/n",name);  
    157.                 printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);  
    158.                 return;  
    159.             }     
    160.             p=p->next;  
    161.         }  
    162.         if(p==NULL)  
    163.             printf("无此记录!/n");  
    164.     }  
    165.     return ;  
    166. }  
    167.   
    168. void insert()  
    169. {  
    170.     int num,i;  
    171.     student *p,*q;  
    172.     p=head;  
    173.   
    174.     printf("请输入你要插入位置: ");  
    175.     scanf("%d",&num);  
    176.     if(num>length)  
    177.     {  
    178.         printf("找不到要插入的位置/n");  
    179.         return ;  
    180.     }  
    181.     else  
    182.     {  
    183.         printf("请输入你要插入的学生的信息:/n");  
    184.         q=(student *)malloc(sizeof(student));  
    185.         scanf("%d %s %d %c %s %s %s %s",&q->id,q->name,&q->age,&q->sex,q->birthday,q->address,q->phone,q->phone);  
    186.   
    187.         while(p!=NULL)  
    188.         {  
    189.             if(p->id==q->id)  
    190.             {  
    191.                 printf("该学号已经存在,无法插入!/n");  
    192.                 return ;  
    193.             }  
    194.             p=p->next;  
    195.         }  
    196.         p=head;  
    197.         for(i=0;i<num;i++)  
    198.             p=p->next;  
    199.         q->next=p->next;  
    200.         p->next=q;  
    201.         length++;  
    202.         printf("插入成功!/n");  
    203.         return ;  
    204.     }  
    205. }    
    206.   
    207. void Delete()  
    208. {  
    209.     int num;  
    210.     student *p,*q;  
    211.     q=head,p=head->next;  
    212.     printf("请输入要删除的学生的学号:/n");  
    213.     scanf("%d",&num);  
    214.   
    215.     while(p!=NULL)  
    216.     {  
    217.         if(p->id==num)  
    218.         {  
    219.             q->next=p->next;  
    220.             free(p);  
    221.             length--;  
    222.             printf("删除成功!/n");  
    223.             return ;  
    224.         }  
    225.         p=p->next;  
    226.         q=q->next;  
    227.     }  
    228.     if(p==NULL)  
    229.     {  
    230.         printf("找不到要删除的编号!/n");  
    231.         return ;  
    232.     }  
    233. }  
    234. void menu()  
    235. {  
    236.     printf("________________________________________________________________/n");  
    237.     printf("|              学生信息管理系统                                |/n");  
    238.     printf("|               0、 退出系统                                   |/n");  
    239.     printf("|               1、 录入学生信息                               |/n");  
    240.     printf("|               2、 建立链表                                   |/n");  
    241.     printf("|               3、 显示链表                                   |/n");  
    242.     printf("|               4、 查找链表中的某个元素                       |/n");  
    243.     printf("|               5、 删除链表中指定学号的结点                   |/n");  
    244.     printf("|               6、 指定的位置上插入一个新结点                 |/n");  
    245.     printf("|               7、 修改学生信息                               |/n");  
    246.     printf("________________________________________________________________/n");  
    247.     return ;  
    248. }  
    249. int main(void)  
    250. {  
    251.     int a;  
    252.     menu();  
    253.     while(1)  
    254.     {  
    255.         printf("请选择相应的功能:");  
    256.         scanf("%d",&a);  
    257.         switch(a)  
    258.         {  
    259.         case 0:  
    260.             return 0;  
    261.         case 1:  
    262.             LoadStudentInfoFromFile();   //从文件中加载学生信息  
    263.             menu();  
    264.             break;  
    265.         case 2:  
    266.             create();        //从键盘输入学生信息  
    267.             menu();  
    268.             break;  
    269.         case 3:  
    270.             if(head)  
    271.             {  
    272.                 display();  
    273.                 menu();  
    274.             }  
    275.             else  
    276.             {  
    277.                 printf("链表为空,请先建立链表!/n");  
    278.                 menu();  
    279.             }  
    280.             break;  
    281.         case 4:  
    282.             if(head)  
    283.             {  
    284.                 search();  
    285.                 menu();  
    286.             }  
    287.             else  
    288.             {  
    289.                 printf("链表为空,请先建立链表!/n");  
    290.                 menu();  
    291.             }  
    292.             break;  
    293.         case 5:  
    294.             if(head)  
    295.             {  
    296.                 Delete();  
    297.                 menu();  
    298.             }  
    299.             else  
    300.             {  
    301.                 printf("链表为空,请先建立链表!/n");  
    302.                 menu();  
    303.             }  
    304.             break;  
    305.         case 6:  
    306.             if(head)  
    307.             {  
    308.                 insert();  
    309.                 menu();  
    310.             }  
    311.             else  
    312.             {  
    313.                 printf("链表为空,请先建立链表!/n");  
    314.                 menu();  
    315.             }  
    316.             break;  
    317.         case 7:  
    318.             if(head)  
    319.             {  
    320.                 ModifyStudentInfo();  
    321.                 menu();  
    322.             }  
    323.             else  
    324.             {  
    325.                 printf("链表为空,请先建立链表!/n");  
    326.                 menu();  
    327.             }  
    328.             break;  
    329.         default:  
    330.             break;  
    331.         }  
    332.     }  
    333.     system("pause");  
    334.     return 0;  
    335. }  

    3、动态链表实现:

  1398.  

    1、 建立一个动态链表,链表中每一结点包括:学号、姓名、性别、年龄、成绩。程序能实现以下功能:
         建立链表
         显示链表
         查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示“无此记录!”的信息。
         删除链表中指定学号的结点。
         在链表中指定的位置插入一个新结点(学号不能和其他结点重复)。
    要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序及显示其对应的结果,然后再显示菜单程序,直到按“退出”选项,程序执行结束。

    完整的代码如下:

    [cpp] view plaincopyprint?
    1. #include "stdio.h"   
    2. #include "stdlib.h"   
    3. typedef struct student  
    4. {  
    5.     int id;    //学号  
    6.     char name[20];    //姓名  
    7.     char sex;    //性别(f或m)  
    8.     int age;    //年龄  
    9.     int score;    //成绩  
    10.     struct student *next;  
    11. }student;  
    12. student *head=NULL;  
    13. int length;   //链表的长度  
    14. void create()  
    15. {  
    16.     student *p1,*p2;  
    17.     length=0;  
    18.     p1=(student *)malloc(sizeof(student));  
    19.     p1->id=-1;  
    20.     if(head==NULL)  
    21.         head=p1;  
    22.     printf("请输入学生的学号、姓名、性别、年龄、成绩信息:\n");  
    23.     while(1)  //学号为0的时候退出  
    24.     {  
    25.         p2=(student *)malloc(sizeof(student));  
    26.         scanf("%d %s %c %d %d",&p2->id,p2->name,&p2->sex,&p2->age,&p2->score); //输入学生信息  
    27.         if(p2->id==0)  
    28.         {  
    29.             printf("链表创建完成!\n");  
    30.             break;  
    31.         }  
    32.         length++; //链表的长度   
    33.         p1->next=p2;  
    34.         p2->next=NULL;  
    35.         p1=p1->next;  
    36.     }  
    37.     return ;  
    38. }  
    39.   
    40. void display()  
    41. {  
    42.     student *p=head->next;  
    43.     printf("链表中所有的学生信息如下:\n");  
    44.     while(p!=NULL)  
    45.     {  
    46.         printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score);  
    47.         p=p->next;  
    48.     }  
    49.     return ;  
    50. }  
    51. void search()  
    52. {  
    53.     int num;  
    54.     student *p=head->next;  
    55.     printf("需要查找的学生学号为:");  
    56.     scanf("%d",&num);  
    57.   
    58.     while(p!=NULL)  
    59.     {  
    60.   
    61.         if(p->id==num)  
    62.         {  
    63.             printf("学号为%d的学生的信息如下:\n",num);  
    64.             printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score);  
    65.             return;  
    66.         }     
    67.         p=p->next;  
    68.     }  
    69.     if(p==NULL)  
    70.         printf("无此记录!\n");  
    71.     return ;  
    72. }  
    73.   
    74. void insert()  
    75. {  
    76.     int num,i;  
    77.     student *p,*q;  
    78.     p=head;  
    79.   
    80.     printf("请输入你要插入位置: ");  
    81.     scanf("%d",&num);  
    82.     if(num>length)  
    83.     {  
    84.         printf("找不到要插入的位置\n");  
    85.         return ;  
    86.     }  
    87.     else  
    88.     {  
    89.         printf("请输入你要插入的学生的学号、姓名、性别、年龄、成绩信息:\n");  
    90.         q=(student *)malloc(sizeof(student));  
    91.         scanf("%d %s %c %d %d",&q->id,q->name,&q->sex,&q->age,&q->score);  
    92.   
    93.         while(p!=NULL)  
    94.         {  
    95.             if(p->id==q->id)  
    96.             {  
    97.                 printf("该学号已经存在,无法插入!\n");  
    98.                 return ;  
    99.             }  
    100.             p=p->next;  
    101.         }  
    102.         p=head;  
    103.         for(i=0;i<num;i++)  
    104.             p=p->next;  
    105.         q->next=p->next;  
    106.         p->next=q;  
    107.         length++;  
    108.         printf("插入成功!\n");  
    109.         return ;  
    110.     }  
    111. }    
    112.   
    113. void Delete()  
    114. {  
    115.     int num;  
    116.     student *p,*q;  
    117.     q=head,p=head->next;  
    118.     printf("请输入要删除的学生的学号:\n");  
    119.     scanf("%d",&num);  
    120.   
    121.     while(p!=NULL)  
    122.     {  
    123.         if(p->id==num)  
    124.         {  
    125.             q->next=p->next;  
    126.             free(p);  
    127.             length--;  
    128.             printf("删除成功!\n");  
    129.             return ;  
    130.         }  
    131.         p=p->next;  
    132.         q=q->next;  
    133.     }  
    134.     if(p==NULL)  
    135.     {  
    136.         printf("找不到要删除的编号!\n");  
    137.         return ;  
    138.     }  
    139. }  
    140. void menu()  
    141. {  
    142.     printf("________________________________________________________________\n");  
    143.     printf("|              学生信息管理系统                                |\n");  
    144.     printf("|               0、 退出系统                                   |\n");  
    145.     printf("|               1、 建立链表                                   |\n");  
    146.     printf("|               2、 显示链表                                   |\n");  
    147.     printf("|               3、 查找链表中的某个元素                       |\n");  
    148.     printf("|               4、 删除链表中指定学号的结点                   |\n");  
    149.     printf("|               5、 指定的位置上插入一个新结点                 |\n");  
    150.     printf("________________________________________________________________\n");  
    151.     return ;  
    152. }  
    153. int main(void)  
    154. {  
    155.     int a;  
    156.     menu();  
    157.     while(1)  
    158.     {  
    159.         printf("请选择相应的功能:");  
    160.         scanf("%d",&a);  
    161.         switch(a)  
    162.         {  
    163.         case 0:  
    164.             return 0;  
    165.         case 1:  
    166.             create();  
    167.             menu();  
    168.             break;  
    169.         case 2:  
    170.             if(head)  
    171.             {  
    172.                 display();  
    173.                 menu();  
    174.             }  
    175.             else  
    176.             {  
    177.                 printf("链表为空,请先建立链表!\n");  
    178.                 menu();  
    179.             }  
    180.             break;  
    181.         case 3:  
    182.             if(head)  
    183.             {  
    184.                 search();  
    185.                 menu();  
    186.             }  
    187.             else  
    188.             {  
    189.                 printf("链表为空,请先建立链表!\n");  
    190.                 menu();  
    191.             }  
    192.             break;  
    193.         case 4:  
    194.             if(head)  
    195.             {  
    196.                 Delete();  
    197.                 menu();  
    198.             }  
    199.             else  
    200.             {  
    201.                 printf("链表为空,请先建立链表!\n");  
    202.                 menu();  
    203.             }  
    204.             break;  
    205.         case 5:  
    206.             if(head)  
    207.             {  
    208.                 insert();  
    209.                 menu();  
    210.             }  
    211.             else  
    212.             {  
    213.                 printf("链表为空,请先建立链表!\n");  
    214.                 menu();  
    215.             }  
    216.             break;  
    217.         default:  
    218.             break;  
    219.         }  
    220.     }  
    221.     system("pause");  
    222.     return 0;  
    223. }  

    程序说明:加入已经加入了4个学生信息head->liuwei->zhanghua->lina->liuxiang,链表的长度为4,插入的时候,输入4,将会在liuxiang的后面插入一个学生信息;输入1,将会在liuwei的后面插入一个学生信息;