久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3989|回復: 3
收起左側(cè)

C語言 學生管理系統(tǒng) 數(shù)據(jù)結構項目源程序

[復制鏈接]
ID:108615 發(fā)表于 2016-3-13 18:11 | 顯示全部樓層 |閱讀模式
       由于時間倉促,哥們通過幾天的努力終于將學生管理系統(tǒng)(大約2600行)完成,開發(fā)平臺是liunx系統(tǒng)(紅帽7.0)+gcc+gdb,使用C語言+數(shù) 據(jù)結構,整個系統(tǒng)功能比較的完善,但也有bug,希望懂的人看看,修改,哥真心不想看了,眼睛疼呀!共同探討進步!!
宏定義:
#ifndef _STU_H
#define _STU_H
#include "common.h"
#include "admin.h"
typedef struct studentdata             //學生數(shù)據(jù)結構體
{
   int num;
   int Cmark,class,math,allmark,rank;
 //char sex;
 char name[20],psword[20],account[20];
}studata;
typedef struct link               //學生的數(shù)據(jù)體和下一個節(jié)點的地址大連表
{
 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             //老師數(shù)據(jù)結構體
{
  int class;
  char sex;
  char name[20];
  char psword[20];
  char account[20];
}teadata;
typedef struct link1               //老師的數(shù)據(jù)體和下一個節(jié)點的地址大連表
{
 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*************歡迎登錄學生管理系統(tǒng)****************\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)         //得到帳號或者密碼的函數(shù)
{
  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)           //打印管理員管理的信息函數(shù)
{
 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)                  //判斷你輸入的數(shù)值是否在范圍
 {
  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',繼續(xù)請按'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)              //打印通過某種方式查看學生的信息的函數(shù)
{
 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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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.數(shù)學成績排名\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最大的節(jié)點函數(shù)
{
 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最大的節(jié)點
      {
       pmax=p;
      }
       p=p->next; 
    }
  }
   return pmax;
}

studlist del_max_cmark(studlist pmax,studlist head)    //刪除最大的節(jié)點函數(shù)
{
 studlist p=head;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 if(head==pmax)               //判斷是不是第一個節(jié)點最大
  {
   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)  //建立新的有序節(jié)點
{
 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最大的節(jié)點函數(shù)
{
 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最大的節(jié)點
      {
       pmax=p;
      }
       p=p->next; 
    }
  }
   return pmax;
}
studlist del_max_mathmark(studlist pmax,studlist head)  //刪除最大的節(jié)點函數(shù)
{
 studlist p=head;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 if(head==pmax)               //判斷是不是第一個節(jié)點最大
  {
   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) //建立新的有序節(jié)點
{
 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(); //數(shù)學成績排名
      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最大的節(jié)點函數(shù)
{
 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最大的節(jié)點
      {
       pmax=p;
      }
       p=p->next; 
    }
  }
   return pmax;
}

studlist del_max_allmark(studlist pmax,studlist head)  //刪除最大的節(jié)點函數(shù)
{
 studlist p=head;
 if(head==NULL)
  {
   printf("empty  list\n");
  }
 if(head==pmax)               //判斷是不是第一個節(jié)點最大
  {
   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) //建立新的有序節(jié)點
{
 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.修改學生的數(shù)學成績信息\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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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("請輸入你的新數(shù)學成績\n");
      scanf("%d",&((p->data).math));
      printf("修改數(shù)學成績成功\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); //修改學生分數(shù)的目錄
      break;
    case MARK_C_MARK:     mark_state=mark_c_mark(); //修改學生C語言的成績的信息
      break;
    case MARK_MATH_MARK:  mark_state=mark_math_mark(); //修改學生數(shù)學成績的信息
      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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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;              //輸入的字符在規(guī)定的范圍,返回0
  }
}
studlist add_student(studlist head)       //添加學生的函數(shù)
{
 studlist p=head,tail=NULL,s=NULL;
 char ch='y';
 printf("請按  姓名\t班級\tC語言成績\t數(shù)學成績\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語言庫函數(shù)將密碼和帳號都賦值為a
  strcpy((s->data).account,(s->data).name); 
  if(head==NULL)
   {
    head=s;
    head->next=NULL;
   }
  else
   {
    while(p!=NULL)                       //尋找最后的節(jié)點
     {
      tail=p;
      p = p->next;
     }
    tail->next=s;
    //head=s;
    tail = s;
    s->next=NULL;
   }
  getchar();
    printf("添加成功繼續(xù)添加,請按‘y’,否則按任意鍵退出~~~~\n");  //判斷是否繼續(xù)添加學生
    scanf("%c",&ch);
  }
  
  return head;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int creat()           //選擇創(chuàng)建的格式
{
 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("輸入錯誤,繼續(xù)重新輸入按‘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()           //選擇創(chuàng)建的格式
{
 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("輸入錯誤,繼續(xù)重新輸入按‘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("繼續(xù)刪除請按‘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;                   //管理員循環(huán)標志
  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;               //輸入的字符在規(guī)定的范圍,返回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)       //添加老師的函數(shù)
{
 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語言庫函數(shù)將密碼和帳號都賦值為a
  strcpy((s->data).account,(s->data).name); 
  if(head==NULL)
   {
    head=s;
    head->next=NULL;
   }
  else
   {
    while(p!=NULL)          //尋找最后的節(jié)點
     {
      tail=p;
      p = p->next;
     }
    tail->next=s;
    //head=s;
    tail = s;
    s->next=NULL;
   }
  getchar();
    printf("添加成功繼續(xù)添加,請按‘y’,否則按任意鍵退出~~~~\n");  //判斷是否繼續(xù)添加學生
    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',繼續(xù)請按'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;                    //教師循環(huán)標志
  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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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',繼續(xù)請按'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()             //修改密碼的函數(shù)
{
 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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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()        //修改帳號函數(shù)
{
 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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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語言成績   數(shù)學成績   總成績   名次   密碼   帳號 \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;               //學生循環(huán)標志
  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 發(fā)表于 2016-4-14 21:47 | 顯示全部樓層
強 高手啊 學習中
回復

使用道具 舉報

ID:124023 發(fā)表于 2016-5-30 15:50 | 顯示全部樓層
好好看看,學習下
回復

使用道具 舉報

ID:126321 發(fā)表于 2016-6-12 10:41 | 顯示全部樓層
學習一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本欧美视频 | 国产乱码一区 | 不卡视频一区二区三区 | 亚洲一区二区av在线 | 成年人视频在线免费观看 | 免费在线观看一区二区 | 精品久久电影 | 成人国产在线视频 | 日韩欧美中文在线 | 国产精品欧美一区二区 | 午夜激情一区 | 日本午夜免费福利视频 | 羞羞的视频免费在线观看 | 欧洲精品视频一区 | 午夜在线观看免费 | 国产亚洲精品精品国产亚洲综合 | 国产一区二区 | 久久久性色精品国产免费观看 | 91精品国产91久久久久游泳池 | 国产专区在线 | 日韩精品在线播放 | 久久久国产精品 | 亚洲精品一区二区三区四区高清 | 欧美一区二区三区四区视频 | 最近中文字幕在线视频1 | 一区二区免费在线观看 | 亚洲一区二区三区在线视频 | 国产精品欧美一区二区三区 | 日韩一区二区三区在线播放 | 国产精品日韩在线观看 | 天天躁日日躁狠狠躁白人 | 久草视 | 亚洲国产精品久久久久婷婷老年 | 日韩视频在线观看中文字幕 | 中文字幕日韩欧美一区二区三区 | 亚洲一区 | 超碰人人做 | 极品在线 | 美女毛片免费看 | 黄色大片在线免费观看 | 国产精品毛片久久久久久久 |