学生管理系统源代码


#include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 #define LEN sizeof(struct teacher)
 struct admin
 {
     char name[20];
     char pw[20];
 }admin1,admin2;

 struct teacher
 {
     int id;
     int age;
     struct teacher *next;
 };  


 //管理员注册函数
 int zhuce()
 {    
     FILE *fp;
     printf("\t\t请注册管理员\n");
     printf("请输入您的注册账户:\n");
     scanf("%s",admin1.name);
     printf("请输入您的注册密码: \n");
         system("stty-echo");
     scanf("%s",admin1.pw);
         system("sttyecho");
     if((fp=fopen("fileguanli.txt","wb"))==NULL)
     {
         printf("da kai cuowu");
     }
     if(fwrite(&admin1,sizeof(structadmin),1,fp ) !=1 )
         printf("xie ru cuowu\n");
     fclose(fp);
     return 0;
 }


 //管理员读取登录函数
 int duqu()
 {   int i;
     FILE *fp;
     char name2[20];
     char pw2[20];
     int ret1=0;
     int ret2=0;
     int result=0;
     if((fp=fopen("fileguanli.txt","rb"))==NULL)
     {  
         printf("请先注册管理员!\n");
     }
     if(fread(&admin2,sizeof(structadmin),1,fp)!=1)
     {
         printf("du qu cuo wu\n");
     }
     for(i=0;i<3;i++)
     {
         printf("请输入管理员名称:");
         scanf("%s",name2);
         printf("请输入管理员密码:");
         system("stty-echo");
         scanf("%s",pw2);
         system("stty  echo");
         ret1 =strcmp(name2,admin2.name);
         ret2 =strcmp(pw2,admin2.pw);

         if((ret1==0) &&(ret2==0))
         {
             result = 1;
             printf("登录成功\n");
             zhujiemian();
             break;
         }
         else
         {
             result = 0;
             printf("帐号或密码错误,请重新输入\n");
         }
     }
     if(i==3)
     {
         printf("输入次数超过3次,程序退出\n");
         exit(0);
     }

     fclose(fp);
     return 0;
 }

 //管理员操作函数
 int admin_operate()
 {          void search(struct teacher*head);
     struct teacher *creat(int n);
             struct teacher *xiugai(structteacher *head);
     void cunpan( struct teacher*head);
     struct teacher*duquteacher(void);
     void xianshi(void);
     void duquxianshi();
      struct teacher *head;
      struct teacher *delete(struct teacher*head,int id);
             void print(structteacher  *head);
     int select = 0;
     int n;
     while(1)
     {
         printf("\t\t1:添加老师信息\t\t2:删除老师信息\n\t\t3:修改老师信息\t\t
         4:查询老师信息\n\t\t5:显示文件信息\t\t6:保存教师信息\n\t\t7:显示当前信息\t\t8:管理员退出\n");

         printf("请选择操作选项:");
         scanf("%d",&select);
         switch(select)
         {
             case 1:
                 printf("请输入添加教师信息的数量:\n");
                 scanf("%d",&n);
                 struct teacher*head;
                 head=creat(n);
                 break;
             case 2:
                 printf("删除教师信息\n");
                 struct teacher
                 {
                     int id;
                     int age;
                     struct teacher*next;
                 };
                 int id;
                 printf("请输入要删除的教师id\n");
                 scanf("%d",&id);
                 head=delete(head,id);

                 break;
             case 3:
                         head=xiugai(head);
                 printf("修改教师信息\n");
                 break;
             case 4:
                 search(head);
                 printf("查找教师信息\n");
                 break;
             case 5:
                 printf("显示教师信息\n");
                 duquxianshi();
                 break;
             case 6:
                 cunpan(head);

                 printf("保存成功\n");
                 break;
             case 7:
                  print(head);

                 break;
             case 8:
                  printf("返回主菜单\n");
                return 8;
                 default:
                   break;

                 printf("modifystudent\n");
                 break;
             case 9:
                 printf("searchstudent\n");
                 break;
             case 10:
                 break;
         }//switch
     }//while
 }

 //主界面函数
 int zhujiemian()
 {
     int select = 0;
     int login_retval = 0;
     int operate_retval = 0;


     system("clear");
     while(1)
     {  printf("\n");

         printf("\n");

         printf("\n");
         printf("\t\t***********欢迎使用学生管理系统***********\n");
         printf("\t\t||\t\t1:管理员操作\t\t||\n\t\t||\t\t
         2:教师操作\t\t||\n\t\t||\t\t3:学生操作\t\t||\n\t\t||\t\t4:退出\t\t\t||\n");
         printf("\t\t******************************************\n");
         //      system("clear");
         printf("\t\t请选择操作选项:");
         scanf("%d",&select);
         switch(select)
         {
             case 1:
                 operate_retval =admin_operate();
                 break;
             case 2:
                 printf("teacher\n");
                 break;
             case 3:
                 printf("student\n");
                 break;
             case 4:
                 printf("系统已经成功退出,谢谢使用!\n");
                 exit(0);
                 break;
             default:
                 break;      
         }//switch
     }//while 



     return 0;
 }

 // 创建教师链表

 struct teacher *creat(int n)
 {
     int i;
     struct teacher *head,*p1,*p2;
     head=NULL;
     head=p2=(struct teacher * )malloc(LEN);
     printf("请输入编号,年龄(按回车键结束输入)\n");
     scanf("%d,%d",&p2->id,&p2->age);
     for(i=2;i<=n;i++)
     {
         p1=(struct teacher * )malloc(LEN);
         printf("请输入编号,年龄(按回车结束输入)\n");
         scanf("%d,%d",&p1->id,&p1->age);

         p2->next=p1;
         p2=p1;
     }
     p2->next=NULL;
     return(head);
 }

 //存盘函数
 void cunpan( struct teacher *head)
 {
     FILE *fp;
     struct teacher *p;
     if((fp=fopen("fileteacher","wb"))==NULL)
     {
         printf("bu neng  da kai wen jian \n");
     }
     p=head;
     while(p!=NULL)
     {
         if(fwrite(p,LEN,1,fp)!=1)
         {
             printf("xie ru chu  cu\n ");
             return;
         }
         p=p->next;
     }
     fclose(fp);
 }
 //打印链表

 void print(struct teacher *head)
 {
     struct teacher *p;
     p=head;
         printf("\t\t\t\t编号    年龄\n");
     while(p!=NULL)
     {
         printf("\t\t\t\t%d       %d\n",p->id,p->age);
         p=p->next;
     }

 }
 // 查找函数
 void search(struct teacher *head)
 {
     int id=0;
     struct teacher *p=NULL;
     struct teacher *q=NULL;
     q=p=head;
     printf("\t\t\t请输入需要查询的教师ID:");
     scanf("%d",&id);
     while(p!=NULL)
     {
         if(p->id==id)
         {
             printf("\t\t\t编号     年龄\n");
             printf("\t\t\t%d        %d\n",p->id,p->age);
             break;
         }
         else
         {
             p=p->next;
         }
     }
     if(p==NULL)
     {
         printf("\t\t\t\t\t\t\t\t该ID不存在!\n");
     }
 }

 //修改函数
 struct teacher *xiugai(struct teacher *head)
 {
     int select=0;
     int age;
     struct teacher *p=NULL;
     int id=0;
     char judge=NULL;
     int flag=0;
     p=head;
     if(head==NULL)
     {
         printf("\t教师链表为空\n");
         return head;
     }
     p=head;
     while(1)
     {
         printf("\t请输入修改的教师ID:");
         scanf("%d",&id);
         while(p!=NULL)
         {
             if(p->id==id)
             {
                 break;
             }

             p=p->next;
         }
         if(p==NULL)
         {
             printf("\t没有这个老师");
         }
         else
         {
             while(1)
             {
                 printf("\t编号\t\t年龄\n");
                 printf("\t\t%d\t%d\n",p->id,p->age);
                 printf("\t1:编号 2:年龄 3:退出\n");
                 printf("\t请选择修改的内容");
                 scanf("%d",&select);
                 switch(select)
                 {
                     case 1:
                         printf("\t请输入新的编号:");
                         scanf("%d",&p->id);
                         break;
                     case 2:
                         printf("\t请输入新的年龄:");
                         scanf("%d",&p->age);
                         break;
                     case 3:
                         flag=1;
                         break;
                     default:
                         break;
                 }
                 if(flag)
                 {
                     break;
                 }
                 printf("\t继续修改(y),退出(n):");
                 while(getchar()!='\n');
                 scanf("%c",&judge);
                 if(judge == 'n')
                 {
                     break;
                 }
                 else
                 {
                     continue;
                 }

             }//while
         }
         printf("\t是否继续修改新的教师信息(y),退出(n):");
         while(getchar()!='\n');
         scanf("%c",&judge);
         if(judge == 'n')
         {
             break;
         }
         else
         {
             continue;
         }

     }//while

     return head;
 }


 //读取文件里的 教师信息 并且显示
 void duquxianshi()
 {
     struct teacher *head;

     struct teacher *s;
     struct teacher *p;
     s=NULL;
     p=NULL;
     FILE *fp;
     if ((fp = fopen ("fileteacher","r+")) == NULL)
     {
         printf ("\t\t\t\t打开教师文件失败!\n");
     }
     printf("\t\t\t\t正在读取文件...\n");
     s=malloc (LEN);
     fread (s, LEN, 1, fp);
     if (s == NULL)
     {
         printf ("\t\t\t\t教师文件为空!\n");
         head = NULL;
     }
     head = p = s;
     s=s->next;
     printf("编号    年龄\n");
     printf("%d      %d\n",head->id,head->age);
     while (!feof (fp))
     {

         s = malloc (LEN);
         if (fread (s,LEN, 1, fp) !=1)
         {
             free (s);
             break;
         }

         printf("%d       %d\n",s->id,s->age);
         p->next = s;

         p->next = malloc (LEN);
         p = s;
     }
     p->next = NULL;
     fclose (fp);
     printf("\t\t\t\t已读取教师文件!\n");
 }
 //删除教师信息
 struct teacher *delete(struct teacher *head,int id)
 { int n;
     struct teacher *p1,*p2;
     if(head==NULL)
     {
         printf("list isnull\n");
         return head;
     }
     p1=head;
     while(id!=p1->id&&p1->next!=NULL)
     {
         p2=p1;
         p1=p1->next;
     }
     if(id==p1->id)
     {
         if(p1==head)
         {head==p1->next; }
         else
             p2->next=p1->next;
         printf("请输入要删除的编号:%d\n",id);
         n=n-1;
     }
     else printf("%d zhao budao\n",id);
     printf("删除成功\n");
     return (head);
 }

 //主函数
 int  main()
 {
     int a;
     int b;
     int select;
     system("clear");
     printf("\n\n\n\n\n\n\n\n\n");
     while(1)    
     {  printf("\t\t*********************************************\n");
         printf("\t\t1.注册管理员  2.管理员登录   3. 退出程序 \n");
         printf("\t\t*********************************************\n");
         printf("\t\t请选择操作选项:");
         scanf("%d",&select);
         switch(select)
         {
             case 1:zhuce();
                    printf("注册成功!\n");
                    break;
             case  2:duqu();
                     break;
             case 3:
             default :
                     break;
         }
     }
     return 0;
 }