找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4065|回复: 3
收起左侧

C语言 学生管理系统 数据结构项目源程序

[复制链接]
ID:108615 发表于 2016-3-13 18:11 | 显示全部楼层 |阅读模式
       由于时间仓促,哥们通过几天的努力终于将学生管理系统(大约2600行)完成,开发平台是liunx系统(红帽7.0)+gcc+gdb,使用C语言+数 据结构,整个系统功能比较的完善,但也有bug,希望懂的人看看,修改,哥真心不想看了,眼睛疼呀!共同探讨进步!!
宏定义:
#ifndef _STU_H
#define _STU_H
#include "common.h"
#include "admin.h"
typedef struct studentdata             //学生数据结构体
{
   int num;
   int Cmark,class,math,allmark,rank;
 //char sex;
 char name[20],psword[20],account[20];
}studata;
typedef struct link               //学生的数据体和下一个节点的地址大连表
{
 studata data;
 struct link *next;
}studlink,*studlist;
int student_write_save(studlist head);
studlist student_read_display();
#endif

#ifndef _TEA_H
#define _TEA_H
#include "common.h"
#include "admin.h"
typedef struct teacherdata             //老师数据结构体
{
  int class;
  char sex;
  char name[20];
  char psword[20];
  char account[20];
}teadata;
typedef struct link1               //老师的数据体和下一个节点的地址大连表
{
 teadata data;
 struct link1 *next;
}tealink,*tealist;
tealist add_teacher(tealist head);
int compare_tea_account(char name[]);
int compare_tea_psword(char name[]);
int write_save(tealist head);
tealist read_display();
#endif

#ifndef _MAIN_H
#define _MAIN_H
#include "common.h"
#endif

#ifndef _ADMIN_H
#define _ADMIN_H
#include "common.h"
#include "stu.h"
#include "tea.h"
void get_account_password(char a[] ,int n);
int che_menu(int che_state);
int che_student();
int rep_tea_menu(int rep_tea_state);
int rep_teacher();
int dis_menu(int dis_state);
int dis_student();
int rank_menu(int rank_state);
int dis_class_rank_mark();
int rep_menu(int rep_state);
int rep_student();
int mark_menu(int mark_state);
int rep_student_mark();
#endif

#ifndef _COMMON_H
#define _COMMON_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAIN_MANU           1
#define ADMIN_MAIN_MANU     11
#define STU_MAIN_MANU       12
#define TEA_MAIN_MANU       13
#define EXIT_MANU           10
#define TEA_MENU       1
#define TEA_CHE_TEA        11
#define TEA_REP_TEA        12
#define TEA_CHE_STUDENT     13
#define TEA_DIS_STUDENT     14
#define TEA_REP_STUDENT     15
#define EXIT_TEA       10
#define  CHE_MENU       1
#define  CHE_STUDENT_BYNAME   11
#define  CHE_STUDENT_BYNUM    12
#define  CHE_CLASS_STUDENT    13
#define  CHE_STUDENT_EXIT    10
#define REP_TEA_MENU     1
#define REP_TEA_NAME     11
#define REP_TEA_CLASS     12
#define REP_TEA_PSWORD     13
#define REP_TEA_ACCOUNT    14
#define REP_TEA_EXIT     10
#define REP_MENU       1
#define REP_STUDENT_NAME    11
#define  REP_STUDENT_NUM    12
#define REP_STUDENT_CLASS    13 
#define REP_STUDENT_MARK    14 
#define REP_STUDENT_EXIT    10
#define MARK_MENU      1
#define MARK_C_MARK      11
#define MARK_MATH_MARK     12
#define MARK_EXIT      10
#define DIS_MENU       1
#define DIS_STUDENT_BYNUM    11
#define DIS_STUDENT_BYALLMARK   12
#define DIS_STUDENT_BYMARK   13
#define DIS_STUDENT_EXIT    10
#define RANK_MENU      1
#define DIS_STUDENT_RANK_CMARK  11
#define DIS_STUDENT_RANK_MATHMARK 12
#define DIS_STUDENT_RANK_EXIT  10
#define  STU_MENU          1
#define  STU_CHE_STU      11
#define  STU_REP_STU      12
#define  STU_EXIT_STU     10
#define  STU_REP_MENU     1
#define  STU_REP_STUDENT_PSWORD     11
#define  STU_REP_STUDENT_ACCOUNT    12
#define  STU_REP_STUDENT_EXIT     10
#define  ADMIN_MENU     1
#define  LOGIN_STUDENT  11
#define  CHE_STUDENT  12
#define  DEL_STUDENT  13
#define  DIS_STUDENT  14
#define  REP_STUDENT  15
#define  LOGIN_TEACHER 16
#define  DEL_TEACHER  17
#define DIS_TEACHER  18
#define REP_TEACHER  19
#define  EXIT_ADMIN  10
#endif


主题界面:

#include "main.h"
void print_welcome()
{
  system("clear");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  printf("\t\t*************欢迎登录学生管理系统****************\n");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
}
void print_select()
{
  printf("\t\t\t\t1.登录管理员      \n");
  printf("\t\t\t\t2.登录学生         \n");
  printf("\t\t\t\t3.登录老师           \n");
  printf("\t\t\t\t0.退出                   \n");
}
int main_manu(int state1)
{
  int n;
  int state;
  print_welcome();
  print_select();
  scanf("%d",&n);
  getchar();
  if(n<0||n>3)
   {
    printf("输入错误,请按任意键后重新输入~~~~~~\n");
    getchar();
    state=1;
   }
  else
   {
    state=state1*10+n;
   }
  return state;
}
int main()
{
  int SysExitflag=0;
  int menu_state=MAIN_MANU;
  while(1)
   {
    if(SysExitflag)
     {
      break;
     }
    switch(menu_state)
     {
      case MAIN_MANU:                menu_state=main_manu(menu_state);
      break;
      case ADMIN_MAIN_MANU:    menu_state=admin_main_manu();
      break;
      case STU_MAIN_MANU:         menu_state=stu_main_menu();
      break;
      case TEA_MAIN_MANU:         menu_state=tea_main_menu();
      break;
      case EXIT_MANU:                   SysExitflag=1;
      break;
     }
   }
     
   return 0;
}
 
管理员界面:

#include "admin.h"
int enter_admin_main();
void get_account_password(char a[] ,int n)         //得到帐号或者密码的函数
{
  char b[20]={0},*p=b;
  int i=0;
  if(n==1)                   //判断是得到帐号还是密码
       {
     printf("请输入你的帐号\n");
        }
  else
      {
   printf("请输入你的密码\n");
        }
  gets(b);
  while((i<19)&&(*p!='\0'))
   {
    a[i]=b[i];
     i++;
     p++;
   }
}
int print_admin_menu(int admin_state)           //打印管理员管理的信息函数
{
 int n;
 system("clear");
 printf("\t\t*************************************************\n");
 printf("\t\t*************************************************\n");
 printf("\t\t\t\t1.注册学生的信息\n");
 printf("\t\t\t\t2.查看学生的信息\n");
 printf("\t\t\t\t3.删除学生的信息\n");
 printf("\t\t\t\t4.显示所有学生的信息\n");
 printf("\t\t\t\t5.修改学生的信息\n");
 printf("\t\t\t\t6.注册老师的信息\n");
 printf("\t\t\t\t7.删除老师的信息\n");
   printf("\t\t\t\t8.显示所有老师的信息\n");
 printf("\t\t\t\t9.修改老师的信息\n");
 printf("\t\t\t\t0.退出\n");
 printf("\t\t*************************************************\n");
 printf("\t\t*************************************************\n");
 scanf("%d",&n);                 //得到你想进入的栏目
 getchar();
 if(n<0||n>9)                  //判断你输入的数值是否在范围
 {
  printf("输入错误,请按enter键后重新输入~~~~\n");
  getchar();
  return 1;
 }
 else
 {
  n=admin_state*10+n;
 }
 return n;
 
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
int admin_main_manu()
//int main()
{
  char a[20]={0},b[20]={0},*ac="1000",*pa="123456";
  int n=0,m=0,x=3;
  char y;
  while(x>0)
  {
   if(x==3)
    {
           printf("你至多输入%d次\n",x);
    }
   else
    {
     system("clear");
     print_welcome();
     print_select();
     printf("你还可以输入%d次\n",x);
    }
    get_account_password(a,1);             //获得输入的帐号
  get_account_password(b,2);             //获得输入的密码
  n=strcmp(pa,b);                //比较输入的帐号
  m=strcmp(ac,a);                //比较输入的密码
       if(m!=0||n!=0)
                  {
       if(m!=0&&n!=0)
      {
       printf("你的帐号和密码都输入错误\n");
      }
     if(m!=0&&n==0)
      {
       printf("你的帐号输入错误\n");
      }
     if(n!=0&&m==0)
      {
       printf("你的密码输入错误\n");
      }
          printf("你想退出请按'y',继续请按'n'\n");
          scanf("%c",&y);
      getchar();
            x--;
                  }
     
    if(y=='y')
     {
      return 10;
     }
    if((m==0)&&(n==0))
     {
      //x=-1;
      printf("ok\n");
      x=enter_admin_main();                   // x小于0就退出
      //printf("ok\n");
     }
  }
  return 1;
}

int che_menu(int che_state)              //打印通过某种方式查看学生的信息的函数
{
 int n;
 system("clear");
 printf("\t\t*************************************************\n");
 printf("\t\t*************************************************\n");
 printf("\t\t\t\t1.通过姓名查看学生的信息\n");         //打印通过某种方式查看学生的信息
 printf("\t\t\t\t2.通过学号查看学生的信息\n");
 printf("\t\t\t\t3.查看某班级学生的信息\n");
 printf("\t\t\t\t0.退出\n");
 printf("\t\t*************************************************\n");
 printf("\t\t*************************************************\n");
 scanf("%d",&n);
 getchar();
 if(n<0||n>3)
 {
  printf("输入错误,请按enter键后重新输入~~~~\n");
  getchar();
  return 1;
 }
 else
 {
  n=che_state*10+n;
 }
 return n;                                //返回你想进入的栏目
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
int che_student_byname()
{
  studlist p=NULL,head=NULL;
  head=student_read_display();
  p=head;
  char name[20]={0};
  int i=0;
  printf("请输入你要找的学生的姓名\n");
  scanf("%s",name);
  while(p!=NULL)
  {
  if(strcmp(((p->data).name),name)==0 )    //判断是否是这个班级的
   {
    printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).num);
    printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
    printf("%-11d%-11d",(p->data).math,(p->data).allmark);
    printf("%-7d%",(p->data).rank);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
   }
   p=p->next;
  }
  if(i==0)
  {
   printf("没有叫%d的学生\n",name);
  }
  printlist(head);
  student_write_save(head);
  getchar();
  getchar();
  return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int rank_menu(int rank_state)
{
    int n;
  system("clear");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  printf("\t\t\t1.c语言成绩排名\n");        //打印成绩排名学生的信息
  printf("\t\t\t2.数学成绩排名\n");
  printf("\t\t\t0.退出学生排名的信息栏\n");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  scanf("%d",&n);
  getchar();
  if(n<0||n>2)
  {
   printf("输入错误,请按enter键后重新输入~~~~\n");
   getchar();
   return 1;
  }
  else
  {
   n=rank_state*10+n;
  }
  return n; 
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
studlist get_max_cmark(studlist head)        //找Cmark最大的节点函数
{
 studlist p=head;
 studlist pmax=NULL;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 else
  {
   pmax=p;
   while(p!=NULL)
    {
     if(((pmax->data).Cmark)<((p->data).Cmark)) //找Cmark最大的节点
      {
       pmax=p;
      }
       p=p->next; 
    }
  }
   return pmax;
}

studlist del_max_cmark(studlist pmax,studlist head)    //删除最大的节点函数
{
 studlist p=head;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 if(head==pmax)               //判断是不是第一个节点最大
  {
   head=head->next;
  }
 else
  {
   while(p!=NULL)             //判断是否为空标志
    {
     if(p->next==pmax)
      {
       p->next=pmax->next;
       break;
      }
     p=p->next;
    }
  }
 return head;               //返回首地址
}
studlist add_new_listcmark(studlist pmax,studlist head)  //建立新的有序节点
{
 studlist p=head,tail=NULL;           //后插方式
 if(head==NULL)               //判断是否连表为空
  {
   head=pmax;
   head->next=NULL;
  }
 else
  {
   while(p!=NULL)
    {
     tail=p;
     p=p->next;
    }
     tail->next=pmax;
     pmax->next=NULL;
  }
 //pmax->next=head;             //前插方式
 //head=pmax;
 return head;
}

int dis_student_rank_cmark()
{
 studlist p=NULL,head=NULL,p1=NULL,tail=NULL,phead=NULL;
 head=student_read_display();
 p=head;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 while(head!=NULL)
  {
   p1=get_max_cmark(head);
   head=del_max_cmark(p1,head);
   phead=add_new_listcmark(p1,phead);
   
  }
 printlist(phead);
 //student_write_save(head);
 getchar();
 getchar();
 return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
studlist get_max_mathmark(studlist head)        //找mathmark最大的节点函数
{
 studlist p=head;
 studlist pmax=NULL;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 else
  {
   pmax=p;
   while(p!=NULL)
    {
     if(((pmax->data).math)<((p->data).math))      //找mathmark最大的节点
      {
       pmax=p;
      }
       p=p->next; 
    }
  }
   return pmax;
}
studlist del_max_mathmark(studlist pmax,studlist head)  //删除最大的节点函数
{
 studlist p=head;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 if(head==pmax)               //判断是不是第一个节点最大
  {
   head=head->next;
  }
 else
  {
   while(p!=NULL)             //判断是否为空标志
    {
     if(p->next==pmax)
      {
       p->next=pmax->next;
       break;
      }
     p=p->next;
    }
  }
 return head;               //返回首地址
}
studlist add_new_listmathmark(studlist pmax,studlist head) //建立新的有序节点
{
 studlist p=head,tail=NULL;           //后插方式
 if(head==NULL)               //判断是否连表为空
  {
   head=pmax;
   head->next=NULL;
  }
 else
  {
   while(p!=NULL)
    {
     tail=p;
     p=p->next;
    }
     tail->next=pmax;
     pmax->next=NULL;
  }
 //pmax->next=head;       //前插方式
 //head=pmax;
 return head;
}
 
int dis_student_rank_mathmark()
{
  studlist p=NULL,head=NULL,p1=NULL,tail=NULL,phead=NULL;
  head=student_read_display();
  p=head;
  
  if(head==NULL)
  {
   printf("empty  list\n");
  }
  while(head!=NULL)
  {
   p1=get_max_mathmark(head);
   head=del_max_mathmark(p1,head);
   phead=add_new_listmathmark(p1,phead);
   
  }
  
  printlist(phead);
    //student_write_save(head);
    getchar();
    getchar();
  return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int dis_class_rank_mark()
{
    int RankFlag=0;                  //查看学生名次信息的标志
  int rank_state=RANK_MENU;               //打印学生名次信息的信息
  while(1)
  {
     if(RankFlag)
        {
     break;
    } 
  switch(rank_state)
   {
    case RANK_MENU:                 rank_state=rank_menu(rank_state); //显示学生成绩的目录
      break;
    case DIS_STUDENT_RANK_CMARK:    rank_state=dis_student_rank_cmark(); //c语言成绩排名
      break;
    case DIS_STUDENT_RANK_MATHMARK: rank_state=dis_student_rank_mathmark(); //数学成绩排名
      break;
    case DIS_STUDENT_RANK_EXIT:     RankFlag=1;        //退出学生排名的信息栏
      break;
   }
  }
    return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
int dis_menu(int dis_state)               //通过某些顺序显示学生的信息
{
  int n;
  system("clear");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  printf("\t\t\t1.通过学号顺序显示学生的信息\n");        //打印顺序显示学生的信息
  printf("\t\t\t2.通过总的名次查看学生的信息\n");
  printf("\t\t\t3.通过某一颗的成绩显示学生的信息\n");
  printf("\t\t\t0.退出显示学生的信息栏\n");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  scanf("%d",&n);
  getchar();
  if(n<0||n>3)
  {
   printf("输入错误,请按enter键后重新输入~~~~\n");
   getchar();
   return 1;
  }
  else
  {
   n=dis_state*10+n;
  }
  return n;                   //返回到需要进入的栏目
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int dis_student_bynum()
{
  
  studlist head=NULL;
    head=student_read_display(); 
  printlist(head);
    student_write_save(head);
  getchar();
  getchar();
  return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
studlist get_max_allmark(studlist head)        //找mathmark最大的节点函数
{
 studlist p=head;
 studlist pmax=NULL;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 else
  {
   pmax=p;
   while(p!=NULL)
    {
     if(((pmax->data).allmark)<((p->data).allmark)) //找mathmark最大的节点
      {
       pmax=p;
      }
       p=p->next; 
    }
  }
   return pmax;
}

studlist del_max_allmark(studlist pmax,studlist head)  //删除最大的节点函数
{
 studlist p=head;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 if(head==pmax)               //判断是不是第一个节点最大
  {
   head=head->next;
  }
 else
  {
   while(p!=NULL)             //判断是否为空标志
    {
     if(p->next==pmax)
      {
       p->next=pmax->next;
       break;
      }
     p=p->next;
    }
  }
 return head;               //返回首地址
}

studlist add_new_listallmark(studlist pmax,studlist head) //建立新的有序节点
{
 studlist p=head,tail=NULL;           //后插方式
 if(head==NULL)               //判断是否连表为空
  {
   head=pmax;
   head->next=NULL;
  }
 else
  {
   while(p!=NULL)
    {
     tail=p;
     p=p->next;
    }
     tail->next=pmax;
     pmax->next=NULL;
  }
 //pmax->next=head;       //前插方式
 //head=pmax;
 return head;
}

int dis_student_byallmark()
{
 studlist p=NULL,head=NULL,p1=NULL,tail=NULL,phead=NULL;
 head=student_read_display();
 p=head;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 while(head!=NULL)
  {
   p1=get_max_allmark(head);
   head=del_max_allmark(p1,head);
   phead=add_new_listallmark(p1,phead);
   
  }
 printlist(phead);
 //student_write_save(head);
 getchar();
 getchar();
 return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int dis_student()
{
  int DisFlag=0;                  //查看学生信息的标志
  int dis_state=DIS_MENU;               //打印学生信息的信息
  while(1)
  {
     if(DisFlag)
        {
     break;
    } 
  switch(dis_state)
   {
    case DIS_MENU:            dis_state=dis_menu(dis_state); //显示学生的目录
      break;
    case DIS_STUDENT_BYNUM:   dis_state=dis_student_bynum(); //通过学号顺序显示学生的信息
      break;
    case DIS_STUDENT_BYALLMARK: dis_state=dis_student_byallmark(); //通过总的名次查看学生的信息
      break;
    case DIS_STUDENT_BYMARK:  dis_state=dis_class_rank_mark(); //通过某一颗的成绩显示学生的信息
      break;
    case DIS_STUDENT_EXIT:    DisFlag=1;        //退出显示学生的信息栏
      break;
   }
  }
  return 1;                   //返回1重新显示管理员管理的信息
}
int rep_menu(int rep_state)
{
  int n;
  system("clear");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  printf("\t\t\t1.修改学生的姓名信息\n");        //打印顺序修改学生的信息
  printf("\t\t\t2.修改学生的学号信息\n");
  printf("\t\t\t3.修改学生的班级信息\n");
  printf("\t\t\t4.修改学生的成绩信息\n");
  printf("\t\t\t0.退出修改学生的信息栏\n");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  scanf("%d",&n);
  getchar();
  if(n<0||n>4)
  {
   printf("输入错误,请按enter键后重新输入~~~~\n");
   getchar();
   return 1;
  }
  else
  {
   n=rep_state*10+n;
  }
  return n;  
}
int mark_menu(int mark_state)
{
  int n;
  system("clear");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  printf("\t\t\t1.修改学生的C语言成绩信息\n");        //打印顺序修改学生成绩的信息
  printf("\t\t\t2.修改学生的数学成绩信息\n");
  printf("\t\t\t0.退出修改学生成绩的信息栏\n");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  scanf("%d",&n);
  getchar();
  if(n<0||n>2)
  {
   printf("输入错误,请按enter键后重新输入~~~~\n");
   getchar();
   return 1;
  }
  else
  {
   n=mark_state*10+n;
  }
  return n;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
int mark_c_mark()          //修改C语言的成绩
{
 studlist p=NULL,head=NULL;
 head=student_read_display();
 p=head;
 
 int num,i=0;
 char ch;
 printf("请输入要修改学生的学号\n");
 scanf("%d",&num);
 while(p!=NULL)
  {
   if(((p->data).num)==num)                
    {
     printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
     printf("%-10s%-8d",(p->data).name,(p->data).num);
     printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
     printf("%-11d%-11d",(p->data).math,(p->data).allmark);
     printf("%-7d%",(p->data).rank);
     printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
     i++;
     getchar();
     printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
     scanf("%c",&ch);
     if(ch=='Y'||ch=='y')
     {
      printf("请输入你的新C语言成绩\n");
      scanf("%d",&((p->data).Cmark));
      printf("修改C语言成绩成功\n");
     }
    }
   p=p->next;
  }
 printlist(head);
 student_write_save(head);
 getchar();
 getchar();
 return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
int mark_math_mark()
{
 studlist p=NULL,head=NULL;
 head=student_read_display();
 p=head;
 int num,i=0;
 char ch;
 printf("请输入要修改学生的学号\n");
 scanf("%d",&num);
 while(p!=NULL)
  {
   if(((p->data).num)==num)                
    {
     printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
     printf("%-10s%-8d",(p->data).name,(p->data).num);
     printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
     printf("%-11d%-11d",(p->data).math,(p->data).allmark);
     printf("%-7d%",(p->data).rank);
     printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
     i++;
     getchar();
     printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
     scanf("%c",&ch);
     if(ch=='Y'||ch=='y')
     {
      printf("请输入你的新数学成绩\n");
      scanf("%d",&((p->data).math));
      printf("修改数学成绩成功\n");
     }
    }
   p=p->next;
  } 
 printlist(head);
 student_write_save(head);
 getchar();
 getchar();
 return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_student_mark()
{
  int MarkFlag=0;               //查看学生信息的标志
  int mark_state=MARK_MENU;            //打印学生信息的信息
  while(1)
  {
     if(MarkFlag)
        {
     break;
    } 
  switch(mark_state)
   {
    case MARK_MENU:       mark_state=mark_menu(mark_state); //修改学生分数的目录
      break;
    case MARK_C_MARK:     mark_state=mark_c_mark(); //修改学生C语言的成绩的信息
      break;
    case MARK_MATH_MARK:  mark_state=mark_math_mark(); //修改学生数学成绩的信息
      break;
    case MARK_EXIT:    MarkFlag=1;        //退出修改学生成绩的信息栏
      break;
   }
  }
  return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_student_class()
{
 studlist p=NULL,head=NULL;
 head=student_read_display();
 p=head;
 int num,i=0;
 char ch;
 printf("请输入要修改学生的学号\n");
 scanf("%d",&num);
 while(p!=NULL)
  {
   if(((p->data).num)==num)                
    {
     printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
     printf("%-10s%-8d",(p->data).name,(p->data).num);
     printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
     printf("%-11d%-11d",(p->data).math,(p->data).allmark);
     printf("%-7d%",(p->data).rank);
     printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
     i++;
     getchar();
     printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
     scanf("%c",&ch);
     if(ch=='Y'||ch=='y')
     {
      printf("请输入新的班级\n");
      scanf("%d",&((p->data).class));
      printf("修改名字成功\n");
     }
    }
   p=p->next;
  }
 printlist(head);
 student_write_save(head);
 getchar();
 getchar();
 return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_student_num()
{
  studlist p=NULL,head=NULL;
  head=student_read_display();
  p=head;
  int num,i=0;
  char ch;
  printf("请输入要修改学生的学号\n");
  scanf("%d",&num);
  while(p!=NULL)
  {
   if(((p->data).num)==num)                
    {
     printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
     printf("%-10s%-8d",(p->data).name,(p->data).num);
     printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
     printf("%-11d%-11d",(p->data).math,(p->data).allmark);
     printf("%-7d%",(p->data).rank);
     printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
     i++;
     getchar();
     printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
     scanf("%c",&ch);
     if(ch=='Y'||ch=='y')
     {
      printf("请输入新的学号\n");
      scanf("%d",&((p->data).num));
      printf("修改名字成功\n");
     }
    }
   p=p->next;
  }
  printlist(head);
  student_write_save(head);
  getchar();
  getchar();
  return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
void get_data(char *name)             //得到一个字符串
{
 int i=20;
 scanf("%s",name);
 i=get_cmp_data(name,20);            //检测输入的字符串是否越界
 while(i==1)
  {
   printf("输入错误,请重新输入\n");
   scanf("%s",name);
   i=get_cmp_data(name,20);          //检测输入的字符串是否越界
  }
}
 

studlist get_num(int *m,studlist head)         //得到学号
{
 int n=1000;
 studlist p=head,tail=NULL;
 if(head==NULL)                //判断是否为空连表
  {
   *m=n;
  }
 else
  {
   while(p!=NULL)
    {
     tail=p;
     p=p->next;
    }
   *m=(tail->data).num+1;      //不为空连表的的时候就是前一个连表的学号加一
  }
 return head;
 
}

int rep_student_name()
{
  studlist p=NULL,head=NULL;
  head=student_read_display();
  p=head;
  char name[20]={0},ch;
  int i=0;
  printf("请输入你要修改学生的姓名\n");
  scanf("%s",name);
  while(p!=NULL)
  {
  if(strcmp(((p->data).name),name)==0 )                
   {
    printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).num);
    printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
    printf("%-11d%-11d",(p->data).math,(p->data).allmark);
    printf("%-7d%",(p->data).rank);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
    getchar();
    printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
    scanf("%c",&ch);
     if(ch=='Y'||ch=='y')
      {
      printf("请输入你的新名字\n");
      get_data((p->data).name);
      printf("修改名字成功\n");
      }
     }
    p=p->next;
    }
   if(i==0)
    {
     printf("没有叫%s的学生\n",name);
    }
  printlist(head);
  student_write_save(head);
  getchar();
  getchar();
  return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_student()
{
  int RepFlag=0;                  //修改学生信息的标志
  int rep_state=REP_MENU;               //打印修改学生信息的信息
  while(1)
  {
     if(RepFlag)
        {
     break;
    } 
  switch(rep_state)
   {
    case REP_MENU:            rep_state=rep_menu(rep_state); //修改学生的目录
      break;
    case REP_STUDENT_NAME:     rep_state=rep_student_name(); //修改学生的姓名信息
      break;
    case REP_STUDENT_NUM:    rep_state=rep_student_num(); //修改学生的学号信息
      break;
    case REP_STUDENT_CLASS:   rep_state=rep_student_class(); //修改学生的班级信息
      break;
    case REP_STUDENT_MARK:   rep_state=rep_student_mark(); //修改学生的成绩信息
      break;
    case REP_STUDENT_EXIT:    RepFlag=1;        //退出修改学生的信息栏
      break;
   }
  }
  return 1;
}
int rep_tea_menu(int rep_tea_state)
{
  int n;
  system("clear");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  printf("\t\t\t\t1.修改姓名信息\n");                  //打印顺序修改老师的信息
  printf("\t\t\t\t2.修改班级信息\n");
  printf("\t\t\t\t3.修改密码\n");
  printf("\t\t\t\t4.修改帐号信息\n");
  printf("\t\t\t\t0.退出修改信息栏\n");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  scanf("%d",&n);
  getchar();
  if(n<0||n>4)
  {
   printf("输入错误,请按enter键后重新输入~~~~\n");
   getchar();
   return 1;
  }
  else
  {
   n=rep_tea_state*10+n;
  }
  return n;  
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_tea_name()             //修改老师的名字
{
 char name[20]={0},ch;
 int i=0;
   tealist p=NULL,head=NULL;
   head=read_display();
 p=head;
 printf("请输入你要修改老师的姓名\n");
 scanf("%s",name);
 while(p!=NULL)
 {
  if(strcmp(((p->data).name),name)==0 )                
   {
    printf("姓名      班级   性别  密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).class);
    printf("%-5c",(p->data).sex);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
    getchar();
    printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
    scanf("%c",&ch);
    if(ch=='Y'||ch=='y')
     {
      printf("请输入你的新名字\n");
      gettea_data((p->data).name);
      printf("修改名字成功\n");
     }
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有叫%s的老师\n",name);
  }
 write_save(head);
 printtealist(head);
 printf("按任意键退出\n");
 getchar();
 getchar();
 getchar();
 
 return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_tea_class()
{
 char name[20]={0},ch;
 int i=0;
   tealist p=NULL,head=NULL;
   head=read_display();
 p=head;
 printf("请输入你要修改老师的姓名\n");
 scanf("%s",name);
 while(p!=NULL)
 {
  if(strcmp(((p->data).name),name)==0 )                
   {
    printf("姓名      班级   性别  密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).class);
    printf("%-5c",(p->data).sex);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
    getchar();
    printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
    scanf("%c",&ch);
    if(ch=='Y'||ch=='y')
     {
      printf("请输入你的新班级 \n");
      scanf("%d",&(p->data).class);
      printf("修改班级 成功\n");
     }
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有叫%s的老师\n",name);
  }
 write_save(head);
 printtealist(head);
 printf("按任意键退出\n");
 getchar();
 getchar();
 getchar();
   return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_tea_psword()
{
 char name[20]={0},ch;
 int i=0;
 tealist p=NULL,head=NULL;
   head=read_display();
 p=head;
 
 printf("请输入你要修改老师的姓名\n");
 scanf("%s",name);
 while(p!=NULL)
 {
  if(strcmp(((p->data).name),name)==0 )                
   {
    printf("姓名      班级   性别  密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).class);
    printf("%-5c",(p->data).sex);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
    getchar();
    printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
    scanf("%c",&ch);
    if(ch=='Y'||ch=='y')
     {
      printf("请输入你的新密码\n");
      gettea_data((p->data).psword);
      printf("修改密码成功\n");
     }
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有%s的老师\n",name);
  }
 write_save(head);
 printtealist(head);
 printf("按任意键退出\n");
 getchar();
 getchar();
 getchar();
 return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_tea_account()
{
 char name[20]={0},ch;
 int i=0;
 tealist p=NULL,head=NULL;
   head=read_display();
 p=head;
 
 printf("请输入你要修改老师的姓名\n");
 scanf("%s",name);
 while(p!=NULL)
 {
  if(strcmp(((p->data).name),name)==0 )                
   {
    printf("姓名      班级   性别  密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).class);
    printf("%-5c",(p->data).sex);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
    getchar();
    printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
    scanf("%c",&ch);
    if(ch=='Y'||ch=='y')
     {
      printf("请输入你的新密码\n");
      gettea_data((p->data).account);
      printf("修改密码成功\n");
     }
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有%s的老师\n",name);
  }
 write_save(head);
 printtealist(head);
 printf("按任意键退出\n");
 getchar();
 getchar();
 getchar();
 return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
int rep_teacher()
{
   int RepTeacherFlag=0;              //修改老师信息的标志
  int rep_tea_state=REP_TEA_MENU;             //打印修改老师信息的信息
  while(1)
  {
     if(RepTeacherFlag)
        {
     break;
    } 
  switch(rep_tea_state)
   {
    case REP_TEA_MENU:      rep_tea_state=rep_tea_menu(rep_tea_state); //修改老师的目录
      break;
    case REP_TEA_NAME:      rep_tea_state=rep_tea_name(); //修改老师的姓名信息
      break;
    case REP_TEA_CLASS:     rep_tea_state=rep_tea_class(); //修改老师的班级信息
      break;
    case REP_TEA_PSWORD:    rep_tea_state=rep_tea_psword(); //修改老师的密码
      break;
    case REP_TEA_ACCOUNT:   rep_tea_state=rep_tea_account(); //修改老师的帐号信息
      break;
    case REP_TEA_EXIT:      RepTeacherFlag=1;      //退出修改老师的信息栏
      break;
   }
  }
  return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int get_cmp_data(char *name,int j)       //比较一组字符串
{
 int i=0;
 char *p=name;
 while(*p!='\0')
  {
   i++;
   p++;
  }
 if(i>j-1)
  {
   return 1;            //输入的字符太长,不符合要求返回1
  }
 else
  {
   return 0;              //输入的字符在规定的范围,返回0
  }
}
studlist add_student(studlist head)       //添加学生的函数
{
 studlist p=head,tail=NULL,s=NULL;
 char ch='y';
 printf("请按  姓名\t班级\tC语言成绩\t数学成绩\t名次\n ");
 while(ch=='y'||ch=='Y')
 {
  p=head;
  s=(studlist)malloc(sizeof(studlink));
  if(s==NULL)            //判断分配空间是否正确 
  {
   printf("分配空间失败\n");
   return 0;
  }
  get_data((s->data).name);
  head=get_num(&((s->data).num),head);   //必须使用后插连表得到学号
  scanf("%d",&((s->data).class));
  scanf("%d",&((s->data).Cmark));
  scanf("%d",&((s->data).math));
  ((s->data).allmark)=((s->data).math)+((s->data).Cmark);
  scanf("%d",&((s->data).rank));
  strcpy((s->data).psword,(s->data).name);  //使用的c语言库函数将密码和帐号都赋值为a
  strcpy((s->data).account,(s->data).name); 
  if(head==NULL)
   {
    head=s;
    head->next=NULL;
   }
  else
   {
    while(p!=NULL)                       //寻找最后的节点
     {
      tail=p;
      p = p->next;
     }
    tail->next=s;
    //head=s;
    tail = s;
    s->next=NULL;
   }
  getchar();
    printf("添加成功继续添加,请按‘y’,否则按任意键退出~~~~\n");  //判断是否继续添加学生
    scanf("%c",&ch);
  }
  
  return head;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int creat()           //选择创建的格式
{
 studlist head=NULL;
 head=add_student(head); 
 student_write_save(head);
}
int add()           //选择添加的格式
{
 studlist head=NULL;
 head=student_read_display();
 head=add_student(head);
 student_write_save(head);
}

int login_student()       //登录注册学生的界面
{
  studlist head=NULL;
  int n;
  char ch;
  printf("你选择是新建还是添加\n");
  printf("新建按1,添加按2\n");
  scanf("%d",&n);
  getchar();
  while(n!=1&&n!=2)
  {
   printf("输入错误,继续重新输入按‘y’或者按任意键后enter退出\n");
   ch=getchar();
   getchar();
   if(ch=='y'||ch=='Y')
   {
    printf("重新输入你选择是新建还是添加\n");
    scanf("%d",&n);
   }
   else
   {
    return 1;
   }
   
  }
  switch(n)
  {
   case 1:creat();
   break;
   case 2:add();
   break;
  }
  return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int che_student1()
{
 
 studlist head=NULL;
 head=student_read_display();
 printlist(head);
 getchar();
 return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int creat_tea()           //选择创建的格式
{
 tealist head=NULL;
 head=add_teacher(head); 
 write_save(head);
}
int add_tea()               //选择添加的格式
{
 tealist head=NULL;
 head=read_display();
 head=add_teacher(head);
 write_save(head);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int login_teacher()
{
  int n;
  char ch;
  printf("你选择是新建还是添加\n");
  printf("新建按1,添加按2\n");
  scanf("%d",&n);
  getchar();
  while(n!=1&&n!=2)
  {
   printf("输入错误,继续重新输入按‘y’或者按任意键后enter退出\n");
   ch=getchar();
   getchar();
   if(ch=='y'||ch=='Y')
   {
    printf("重新输入你选择是新建还是添加\n");
    scanf("%d",&n);
   }
   else
   {
    return 1;
   }
   
  }
  switch(n)
  {
   case 1:creat_tea();
   break;
   case 2:add_tea();
   break;
  }
  return 1;

}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int del_student()
{
  studlist p=NULL,head=NULL,tail=NULL;/////////////////////////////////////////////
  head=student_read_display();
  p=head;

    int n;
    char ch='y';
    if(p==NULL)                //判断传入的连表是否唯空
  {
   printf("empty  list\n");
  }
    while(ch=='y'||ch=='Y')     
  {
   printf("请输入删除学生的学号 \n");
   scanf("%d",&n);
   getchar();
   while(n<1000)             //初步的判断学号是否正确
          {
        printf("学号错误,请重新输入\n");
         scanf("%d",&n);
       getchar();
            }
   if((p->data).num==n)             //删除的是第一个学号的处理
    {
     head=head->next;
    }
   else
    {
     while(p!=NULL&&(p->data).num!=n)      //必须将p指针判断不为null放在前面
      { 
       tail=p;
       p=p->next;
      }
     if(p==NULL)
      {
          printf("没有你要删除的学好\n");
      }
     else
      {
       
       tail->next=p->next;        //删除成功的处理
       printf("删除成功\n");
      }
    }
   getchar();
   printf("继续删除请按‘y’,否则按任意键于enter结束\n");
   scanf("%c",&ch);
  }  
  printlist(head);
  student_write_save(head);
  printf("按任意键退出\n");
  getchar();
  getchar();
  return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int dis_teacher()
{
  tealist head=NULL;
  head=read_display();
  printtealist(head);
  getchar();
  getchar();
  return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int del_teacher()
{
 char name[20]={0},ch;
 int i=0;
 tealist head=NULL,p=NULL,tail=NULL;
 head=read_display();
 p=head;
 printf("请输入你要删除的老师的姓名\n");
 scanf("%s",name);
 while(p!=NULL)
 {
  if(strcmp(((head->data).name),name)==0)
      {
       head=head->next;
       printf("姓名      班级   性别  密码   帐号 \n");
       printf("%-10s%-8d",(p->data).name,(p->data).class);
       printf("%-5c",(p->data).sex);
       printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
       i++;
      }
  else if(strcmp(((p->data).name),name)==0)               
   {
    printf("姓名      班级   性别  密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).class);
    printf("%-5c",(p->data).sex);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
    getchar();
    printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
    scanf("%c",&ch);
    if(ch=='Y'||ch=='y')
     {
       tail->next=p->next;
      
     }
         }
  tail=p;
  p=p->next;
     }
 if(i==0)
  {
   printf("没有%s的老师\n",name);
  }

 printtealist(head);
 write_save(head);
 getchar();
 getchar();
 return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int enter_admin_main()
{
  int AdminFlag=0;                   //管理员循环标志
  int admin_state=ADMIN_MENU;               //打印管理员管理信息
  while(1)
  {
     if(AdminFlag)
        {
     break;
    } 
   switch(admin_state)
     {
    case ADMIN_MENU:     admin_state=print_admin_menu(admin_state);//打印管理员项目
    break;
    case LOGIN_STUDENT:  admin_state=login_student();              //添加学生的信息
    break;
    case CHE_STUDENT:   admin_state=che_student1();     //查看学生的信息
    break;
    case DEL_STUDENT:  admin_state=del_student();        //删除学生的信息//
    break;
    case DIS_STUDENT:  admin_state=dis_student();      //显示所有学生的信息
    break;
    case REP_STUDENT:  admin_state=rep_student() ;     //修改学生的信息
    break;
    case LOGIN_TEACHER:  admin_state=login_teacher();     //添加老师的信息
    break;
    case DEL_TEACHER:  admin_state=del_teacher();      //删除老师的信息
    break;
    case DIS_TEACHER:    admin_state=dis_teacher();        //显示所有老师的信息
    break;
    case REP_TEACHER:  admin_state=rep_teacher();      //修改老师的信息
    break;
    case EXIT_ADMIN:  AdminFlag=1;          //退出
    break;
   }
  } 
 return -1;
  
}

老师界面:

#include "tea.h"
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
int gettea_cmp_data(char *name,int j)          //比较一组字符串
{
 int i=0;
 char *p=name;
 while(*p!='\0')
  {
   i++;
   p++;
  }
 if(i>j-1)
  {
   return 1;               //输入的字符太长,不符合要求返回1
  }
 else
  {
   return 0;               //输入的字符在规定的范围,返回0
  }
}
void gettea_data(char *name)             //得到一个字符串
{
 int i=20;
 scanf("%s",name);
 i=gettea_cmp_data(name,20);            //检测输入的字符串是否越界
 while(i==1)
  {
   printf("输入错误,请重新输入\n");
   scanf("%s",name);
   i=gettea_cmp_data(name,20);          //检测输入的字符串是否越界
  }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
tealist add_teacher(tealist head)       //添加老师的函数
{
 tealist p=NULL,tail=NULL,s=NULL;
 char ch='y';
 printf("请按  姓名\t班级\t性别\n ");
 while(ch=='y'||ch=='Y')
 {
  p=head;
  s=(tealist)malloc(sizeof(tealink));
  if(s==NULL)            //判断分配空间是否正确 
   {
    printf("分配空间失败\n");
    return 0;
   }
  gettea_data((s->data).name);
  scanf("%d",&((s->data).class));
  getchar();
  scanf("%c",&((s->data).sex));
  strcpy((s->data).psword,(s->data).name);     //使用的c语言库函数将密码和帐号都赋值为a
  strcpy((s->data).account,(s->data).name); 
  if(head==NULL)
   {
    head=s;
    head->next=NULL;
   }
  else
   {
    while(p!=NULL)          //寻找最后的节点
     {
      tail=p;
      p = p->next;
     }
    tail->next=s;
    //head=s;
    tail = s;
    s->next=NULL;
   }
  getchar();
    printf("添加成功继续添加,请按‘y’,否则按任意键退出~~~~\n");  //判断是否继续添加学生
    scanf("%c",&ch);
  }
  return head;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
int print_tea_menu(int tea_state)
{
 int n;
 system("clear");
 printf("\t\t*************************************************\n");
 printf("\t\t*************************************************\n");
 printf("\t\t\t\t1.查看个人信息\n");
 printf("\t\t\t\t2.修改个人密码\n");
 printf("\t\t\t\t3.查看学生的信息\n");
 printf("\t\t\t\t4.显示所有学生的信息\n");
 printf("\t\t\t\t5.修改学生的信息\n");
 printf("\t\t\t\t0.退出\n");
 printf("\t\t*************************************************\n");
 printf("\t\t*************************************************\n");
 scanf("%d",&n);
 getchar();
 if(n<0||n>5)
 {
  printf("输入错误,请按enter键后重新输入~~~~\n");
  getchar();
  return 1;
 }
 else
 {
  n=tea_state*10+n;
 }
 return n;
 
}
///////////////////////////////////////////////////////////////////////////////////////////
int write_save(tealist head)
{
 tealist p=head;
 FILE *fp=NULL;
 fp=fopen("teacher","wb");
 if(fp==NULL)
 {
  printf("open the file error!\n");
 }
 while(p)
 {
  fwrite(p,sizeof(tealink),1,fp);
  p=p->next;
 }
 fclose(fp);
 return 0;
}
tealist read_display()
{
 tealist head = NULL,s = NULL,tail=NULL;
 FILE *fp=NULL;
 int read_value=0;
 fp=fopen("teacher","rb");
 if(fp == NULL)
 {
  printf("open the file error!display()\n");
  return NULL;
 }
 s=(tealist)malloc(sizeof(tealink));
 while((read_value=fread(s,sizeof(tealink),1,fp))==1)
 {
  if(head==NULL)
  {
   head=s;
   tail=s;
   head->next=NULL;
  }
  else
  {
   tail->next=s;
   tail=s;
   tail->next=NULL;
  }
  s=(tealist)malloc(sizeof(tealink));
 }
 free(s);
 fclose(fp);
 return head;
}
///////////////////////////////////////////////////////////////////////////////////////////
int compare_tea_psword(char name[])     //通过姓名查找学生
{
 tealist head=NULL,p=NULL;
 head=read_display();
 p=head;
 int i=0,n=4;
 while(p!=NULL)
 {
  if((n=strcmp(((p->data).psword),name))==0 )  //判断是否是这个班级的
   {
    i++;
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有为%s的密码\n",name);
  }
 write_save(head);
 return n;
}
int compare_tea_account(char name[])     //通过姓名查找学生
{
 tealist head=NULL,p=NULL;
 head=read_display();
 p=head;
 int i=0,n=4;
 while(p!=NULL)
 {
  if((n=strcmp(((p->data).account),name))==0 )  //判断是否是这个班级的
   {
    i++;
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有为%s的帐号\n",name);
  }
 write_save(head);
 return n;
}
///////////////////////////////////////////////////////////////////////////////////////////
int tea_main_menu()
//int main()
{
  char a[20]={0},b[20]={0};
  int n=0,m=0,x=3;
  char y;
  while(x>0)
  {
   if(x==3)
    {
           printf("你至多输入%d次\n",x);
    }
   else
    {
     system("clear");
     print_welcome();
     print_select();
     printf("你还可以输入%d次\n",x);
    }
    get_account_password(a,1);
  get_account_password(b,2);
  n=compare_tea_psword(a);
  m=compare_tea_account(b);
       if(m!=0||n!=0)
                  {
       if(m!=0&&n!=0)
      {
       printf("你的帐号和密码都输入错误\n");
      }
     if(m!=0&&n==0)
      {
       printf("你的帐号输入错误\n");
      }
     if(n!=0&&m==0)
      {
       printf("你的密码输入错误\n");
      }
          printf("你想退出请按'y',继续请按'n'\n");
          scanf("%c",&y);
      getchar();
            x--;
                  }
     
    if(y=='y')
     {
      return 10;
     }
    if((m==0)&&(n==0))
     {
      //x=-1;
      x=enter_tea_main();                 // x小于0就退出
     }
  }
  return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////
int tea_che_student()
{
 che_student1();
 return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////
int tea_rep_tea()
{
 rep_teacher();
 return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////
int tea_rep_student()
{
 rep_student();
 return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////
int tea_dis_student()
{
  dis_student();
   return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////
void printtealist(tealist head)                            //打印连表
{
 tealist p=head;
 if(head==NULL)              //判断连表是否唯空
  {
   printf("empty  list\n");
  }
 while(p!=NULL)
  {
   printf("姓名      班级   性别  密码   帐号 \n");
   printf("%-10s%-8d",(p->data).name,(p->data).class);
   printf("%-5c",(p->data).sex);
   printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
   p=p->next;
  }
}
/////////////////////////////////////////////////////////////////////////////////////////////
int tea_che_tea()

 char name[20]={0};
 int i=0;
 
 tealist p=NULL,head=NULL;
   head=read_display();
 p=head;
 printf("请输入老师的姓名\n");
 scanf("%s",name);
 while(p!=NULL)
 {
  if(strcmp(((p->data).name),name)==0 )                
   {
    printf("姓名      班级   性别  密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).class);
    printf("%-5c",(p->data).sex);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有%s的老师\n",name);
  }
 write_save(head);
 printf("按任意键退出\n");
 getchar();
 getchar();
 getchar();
   return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
int enter_tea_main()
{
  
    int TeaFlag=0;                    //教师循环标志
  int tea_state=TEA_MENU;                 //打印教师管理信息
  while(1)
  {
     if(TeaFlag)
        {
     break;
    } 
  switch(tea_state)
  {
   case TEA_MENU:            tea_state=print_tea_menu(tea_state);   //打印教师项目
   break;
   case TEA_CHE_TEA:     tea_state=tea_che_tea() ;      //查看自己的信息
   break;
   case TEA_REP_TEA:     tea_state=tea_rep_tea() ;      //教师修改自己的信息
   break;
   case TEA_CHE_STUDENT:   tea_state=tea_che_student();     //教师查看学生的信息
   break;
   case TEA_DIS_STUDENT:   tea_state=tea_dis_student();         //教师显示所有学生的信息
   break;
   case TEA_REP_STUDENT:   tea_state=tea_rep_student();       //教师修改学生的信息   
   break;
   case EXIT_TEA:      TeaFlag=1;           //自己退出
   break;
   }
  } 
  return -1;
}


老师界面:
学生界面 :

#include "stu.h"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
studlist student_read_display()
{
 studlist head = NULL,s = NULL,tail=NULL;
 FILE *fp=NULL;
 int read_value=0;
 fp=fopen("student3","rb");
 if(fp == NULL)
 {
  printf("open the file error!display()\n");
  return NULL;
 }
 s=(studlist)malloc(sizeof(studlink));
 while((read_value=fread(s,sizeof(studlink),1,fp))==1)
 {
  if(head==NULL)
  {
   head=s;
   tail=s;
   head->next=NULL;
  }
  else
  {
   tail->next=s;
   tail=s;
   tail->next=NULL;
  }
  s=(studlist)malloc(sizeof(studlink));     
 }
 free(s);
 fclose(fp);
 return head;
}
int student_write_save(studlist head)
{
 studlist p=head;
 FILE *fp=NULL;
 fp=fopen("student3","wb");          
 if(fp==NULL)
 {
  printf("open the file error!\n");
 }
 while(p)
 {
  fwrite(p,sizeof(studlink),1,fp);
  p=p->next;
 }
 fclose(fp);
 return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////
int print_stu_menu(int stu_state)
{
 int n;
 system("clear");
 printf("\t\t*************************************************\n");
 printf("\t\t*************************************************\n");
 printf("\t\t\t\t1.查看个人信息\n");
 printf("\t\t\t\t2.修改个人信息\n");
 printf("\t\t\t\t0.退出\n");
 printf("\t\t*************************************************\n");
 printf("\t\t*************************************************\n");
 scanf("%d",&n);
 getchar();
 if(n<0||n>2)
 {
  printf("输入错误,请按enter键后重新输入~~~~\n");
  getchar();
  return 1;
 }
 else
 {
  n=stu_state*10+n;
 }
 return n;
 
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void printlist(studlist head)                            //打印连表
{
 studlist p=head;
 if(head==NULL)              //判断连表是否唯空
  {
   printf("empty  list\n");
  }
 while(p!=NULL)
  {
   printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
   printf("%-10s%-8d",(p->data).name,(p->data).num);
   printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
   printf("%-11d%-11d",(p->data).math,(p->data).allmark);
   printf("%-7d%",(p->data).rank);
   printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
   p=p->next;
  }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
int compare_psword(char name[])               //通过姓名查找学生
{
 studlist head=NULL;
 head=student_read_display();
 
 int i=0,n=4;
 studlist p=head;
 while(p!=NULL)
 {
  if((n=strcmp(((p->data).psword),name))==0 )  //判断是否是这个班级的
   {
    i++;
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有为%s的密码\n",name);
  }
 student_write_save(head);
 return n;
}
int compare_account(char name[])            //通过姓名查找学生
{
 studlist head=NULL;
 head=student_read_display();
 int i=0,n=4;
 studlist p=head;
 while(p!=NULL)
 {
  if((n=strcmp(((p->data).account),name))==0 ) //判断是否是这个班级的
   {
    i++;
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有为%s的帐号\n",name);
  }
 student_write_save(head);
 return n;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
//int main()
int stu_main_menu()
{
  char a[20]={0},b[20]={0};
  int n=0,m=0,x=3;
  char y;
  while(x>0)
  {
   if(x==3)
    {
           printf("你至多输入%d次\n",x);
    }
   else
    {
     system("clear");
     print_welcome();
     print_select();
     printf("你还可以输入%d次\n",x);
    }
    get_account_password(a,1);
  get_account_password(b,2);
  n=compare_psword(a);
  m=compare_account(b);
       if(m!=0||n!=0)
                  {
       if(m!=0&&n!=0)
      {
       printf("你的帐号和密码都输入错误\n");
      }
     if(m!=0&&n==0)
      {
       printf("你的帐号输入错误\n");
      }
     if(n!=0&&m==0)
      {
       printf("你的密码输入错误\n");
      }
          printf("你想退出请按'y',继续请按'n'\n");
          scanf("%c",&y);
      getchar();
            x--;
                  }
     
    if(y=='y')
     {
      return 10;
     }
    if((m==0)&&(n==0))
     {
      //x=-1;
      x=enter_stu_main();                     // x小于0就退出
     }
  }
  
  return 1;
}
int stu_rep_menu(int stu_rep_state)
{
  int n;
  system("clear");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  printf("\t\t\t\t1.修改密码\n");
  printf("\t\t\t\t2.修改帐号\n");
  printf("\t\t\t\t0.退出修改信息栏\n");
  printf("\t\t*************************************************\n");
  printf("\t\t*************************************************\n");
  scanf("%d",&n);
  getchar();
  if(n<0||n>2)
  {
   printf("输入错误,请按enter键后重新输入~~~~\n");
   getchar();
   return 1;
  }
  else
  {
   n=stu_rep_state*10+n;
  }
  return n;  
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void rep_stu_psword()             //修改密码的函数
{
 char name[20]={0},ch;
 int i=0;
 
 studlist head=NULL,p=NULL;
 head=student_read_display();
 p=head;
 printf("请输入你要修改学生的密码\n");
 scanf("%s",name);
 while(p!=NULL)
 {
  if(strcmp(((p->data).psword),name)==0 )                
   {
    printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).num);
    printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
    printf("%-11d%-11d",(p->data).math,(p->data).allmark);
    printf("%-7d%",(p->data).rank);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
    getchar();
    printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
    scanf("%c",&ch);
    if(ch=='Y'||ch=='y')
     {
      printf("请输入你的新密码\n");
      get_data((p->data).psword);
      printf("修改密码成功\n");
     }
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有叫%s的学生\n",name);
  }
 printlist(head);
 student_write_save(head);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void rep_stu_account()        //修改帐号函数
{
 char name[20]={0},ch;
 int i=0;
 studlist head=NULL,p=NULL;
 head=student_read_display();
 p=head;
 printf("请输入你要修改学生的帐号\n");
 scanf("%s",name);
 while(p!=NULL)
 {
  if(strcmp(((p->data).account),name)==0 )                
   {
    printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).num);
    printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
    printf("%-11d%-11d",(p->data).math,(p->data).allmark);
    printf("%-7d%",(p->data).rank);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
    getchar();
    printf("请确认,是否真的修改,修改请按‘y’,否则按任意键后退出~~~\n");
    scanf("%c",&ch);
    getchar();
    if(ch=='Y'||ch=='y')
     {
      printf("请输入你的新帐号\n");
      get_data((p->data).account);
      printf("修改帐号成功\n");
     }
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有以%s的帐号\n",name);
  }
 printlist(head);
 student_write_save(head);
}
/////////////////////////////////////////////////////////////////////////////////////
int stu_che_stu()            //查看学生的信息
{
 char name[20]={0},ch;
 int i=0;
 studlist head=NULL,p=NULL;
 head=student_read_display();
 p=head;
 printf("请输入你要修改学生的帐号\n");
 scanf("%s",name);
 getchar();
 while(p!=NULL)
 {
  if(strcmp(((p->data).account),name)==0 )                
   {
    printf("姓名      学号   班级   C语言成绩   数学成绩   总成绩   名次   密码   帐号 \n");
    printf("%-10s%-8d",(p->data).name,(p->data).num);
    printf("%-8d%-10d",(p->data).class,(p->data).Cmark);
    printf("%-11d%-11d",(p->data).math,(p->data).allmark);
    printf("%-7d%",(p->data).rank);
    printf("%-7s%-2s\n",(p->data).psword,(p->data).account);
    i++;
   }
  p=p->next;
 }
 if(i==0)
  {
   printf("没有以%s的帐号\n",name);
  }
 student_write_save(head);
 getchar();
 return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
int stu_rep_student_psword()
{
 rep_stu_psword();
 printf("按任意键退出\n");
 getchar();
 getchar();
 getchar();
 return 1;
}
int stu_rep_student_account()
{
 rep_stu_account();
 printf("按任意键退出\n");
 getchar();
 getchar();
 getchar();
 return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
int stu_rep_stu()
{
  int StuRepFlag=0;              //修改学生信息的标志
  int stu_rep_state=STU_REP_MENU;         //打印修改学生信息的信息
  while(1)
  {
     if(StuRepFlag)
        {
     break;
    } 
     switch(stu_rep_state)
      {
    case STU_REP_MENU:           stu_rep_state=stu_rep_menu(stu_rep_state); //修改目录
      break;
    case STU_REP_STUDENT_PSWORD: stu_rep_state=stu_rep_student_psword();    //修改密码
      break;
    case STU_REP_STUDENT_ACCOUNT:stu_rep_state=stu_rep_student_account(); //修改帐号信息
      break;
    case STU_REP_STUDENT_EXIT:   StuRepFlag=1;              //退出修改信息栏
      break;
    }
  }
  return 1;
}
int enter_stu_main()
{
  int StuFlag=0;               //学生循环标志
  int stu_state=STU_MENU;            //打印学生管理信息
  while(1)
  {
     if(StuFlag)
        {
     break;
    } 
  switch(stu_state)
  {
   case STU_MENU:        stu_state=print_stu_menu(stu_state);     //打印学生项目
   break;
   case STU_CHE_STU:    stu_state=stu_che_stu();      //查看自己的信息
   break;
   case STU_REP_STU:   stu_state=stu_rep_stu();      //修改自己的信息
   break;
   case STU_EXIT_STU:  StuFlag=1;           //退出自己的信息
   break;
   }
  } 
  return -1;
}
 

回复

使用道具 举报

ID:114281 发表于 2016-4-14 21:47 | 显示全部楼层
强 高手啊 学习中
回复

使用道具 举报

ID:124023 发表于 2016-5-30 15:50 | 显示全部楼层
好好看看,学习下
回复

使用道具 举报

ID:126321 发表于 2016-6-12 10:41 | 显示全部楼层
学习一下
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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