zoukankan      html  css  js  c++  java
  • C语言实现—学生成绩管理系统

    开发环境:Linux

    开发语言:C

    相关文件下载:

    码云:传送门

    GitHub:传送门

    程序主界面:

    相关功能:参考码云中的文档

    /*************************************************************************************************************

    校长 老师的登录信息存储在对应的txt文件中

    校长的账号是admin 密码是123,某教师账号1,密码1。某学生账号1,密码123。

    *************************************************************************************************************/

    文件:

    main.c ,student.c ,student.h ,teacher.c , teacher.h , admin.c , admin.h, tools.c , tools.h, struct.h, sams.c, sams.h, stu.txt, tea.txt , admin.txt, project_create.sh, Makefile

    结构

    1. 主界面:“1.学生登录”“2.教师登录”“3.校长登录”“0.退出系统”,4个选项进行跳转。(main.c)

    2.1 选择1,跳转“学生登录界面”,输入学号及默认密码(三次错误及锁定此学号,登录成功后即进入“修改密码子界面”)

    2.2 选择2,跳转“教师登录界面”,输入工号及默认密码(三次错误及锁定此工号,登录成功后即进入“修改密码子界面”)

    2.3 选择3,跳转“校长登录界面”,输入学号及默认密码(登录成功后即进入“修改密码子界面”)

    2.4 选择0,关闭程序。

    3.1 成功登录及修改密码后,跳转“学生功能界面”(student.c, student.h)

    1、第一次登录强制修改密码。

    2、查询成绩

           排名 不显示姓名和学号。

           平均分

           最高分

           最低分

    3、修改密码

    4、查看个人信息

    5、三次密码错误锁定帐号,由教师解锁

    0、返回上一级

    3.2 成功登录及修改密码后,跳转“教师功能界面”(teacher.c ,teacher.h)

    1、第一次登录强制修改密码。

        2、添加学生(学生的学号自动生成)

            单个添加

            批量导入

        3、删除学生

            输入两人次学号确定

            删除的学生要记录保存在已退学的文件中

        4、查找学生

            按姓名查找

            按学号查找

        5、修改学生信息

            修改学生基础信息

            修改学生成绩

        6、录入学生成绩

            单个录入

            批量导入

        7、重置学生密码

        8、显示所有在校学生信息

        9、显示所有退出学生信息

        10、三次密码错误锁定帐号,由校长解锁

    0、返回上一级

    3.3 成功登录及修改密码后,跳转“校长功能界面”(admin.c ,admin.h)

    1、第一次登录强制修改密码。

        2、能重置自己的密码

        3、能重置教师密码

        4、添加教师

        5、删除教师

        6、显示所有在职教师

        7、显示所有离职教师

        0、返回上一级

    效果展示:

    我给Windows单独写了个。

    补上 stu.txt, tea.txt , admin.txt。编译运行,数据参考结构体

    main.c

       1 #include <stdio.h>
       2 #include <stdlib.h>
       3 #include <stdbool.h>
       4 #include <conio.h>
       5 //#include "getch.h"
       6 #include <string.h>
       7 #include <stddef.h>
       8 
       9 #define pf printf
      10 #define sf scanf
      11 #define MAX_STU 100
      12 #define MAX_TEA 50
      13 
      14 typedef struct Student
      15 {
      16     char name[20];
      17     char sex;
      18     char id[20];
      19     char passwd[20];
      20     short chinese;
      21     short english;
      22     short math;
      23     short time;
      24     short birth;
      25     short exist;
      26 }Student;
      27 
      28 typedef struct Teacher
      29 {
      30     char name[20];
      31     char sex;
      32     char id[20];
      33     char passwd[20];
      34     short time;
      35     short birth;
      36     short exist;
      37 }Teacher;
      38 
      39 typedef struct Admin
      40 {
      41     char id[20];
      42     char passwd[20];
      43     short birth;
      44 }Admin;
      45 
      46 // 声明全局变量
      47 Student* STU;
      48 Teacher* TEA;
      49 Admin* ADM;
      50 
      51 // 下标
      52 int temp = 0;
      53 int pos = 0;
      54 int i = 0;
      55 
      56 // 系统初始化
      57 void sams_init(void);
      58 // 系统开始运行
      59 void sams_start(void);
      60 // 系统结束
      61 void sams_exit(void);
      62 
      63 // 管理子系统菜单
      64 void admin_menu(void);
      65 // 管理员添加老师
      66 void admin_add_tea(void);
      67 // 管理员删除老师
      68 void admin_del_tea(void);
      69 // 管理员重置老师
      70 void admin_reset_tea(void);
      71 // 管理员显示在职教师列表
      72 void admin_list_tea(void);
      73 // 管理员显示离职教师列表
      74 void admin_list_ubtea(void);
      75 // 管理员修改密码
      76 void admin_change_pw(void);
      77 // 管理员登录
      78 bool admin_login(void);
      79 // 运行管理员子系统
      80 void admin_start(void);
      81 
      82 // 学生子系统菜单
      83 void student_menu(void);
      84 // 学生查询成绩
      85 void student_find_score(void);
      86 // 学生查询成绩
      87 void student_find_score(void);
      88 // 学生修改密码
      89 void student_ch_pw(void);
      90 // 学生查询个人信息
      91 void student_find_info(void);
      92 // 学生登录
      93 int student_login(void);
      94 // 运行学生子系统
      95 void student_start(void);
      96 
      97 // 老师子系统菜单
      98 void teacher_menu(void);
      99 // 老师添加学生
     100 void teacher_add_stu(void);
     101 // 老师删除学生
     102 void teacher_del_stu(void);
     103 // 老师查询学生
     104 void teacher_find_stu(void);
     105 // 老师修改学生信息
     106 void teacher_ch_stu_info(void);
     107 // 老师添加学生成绩
     108 void teacher_add_stu_score(void);
     109 // 老师重置学生密码
     110 void teacher_reset_stu_pw(void);
     111 // 老师显示在校学生列表
     112 void teacher_list_stu(void);
     113 // 老师显示退学学生列表
     114 void teacher_list_ubstu(void);
     115 // 老师修改密码
     116 void teacher_ch_pw(void);
     117 // 老师登录
     118 int teacher_login(void);
     119 // 老师登录
     120 int teacher_login(void);
     121 // 运行老师子系统
     122 void teacher_start(void);
     123 
     124 // 获取字符串
     125 char* get_str(char* str,size_t len);
     126 // 清理缓冲区
     127 void clear_stdin(void);
     128 // 获取性别
     129 char get_sex(void);
     130 // 获取键盘指令
     131 char get_cmd(char start,char end);
     132 // 获取密码
     133 char* get_pw(char* passwd,bool is_show,size_t size);
     134 
     135 // 主函数
     136 int main()
     137 {
     138     sams_init();
     139     
     140     sams_start();
     141 
     142     sams_exit();
     143 }
     144 
     145 // 主菜单
     146 void sams_menu(void)
     147 {
     148     pf("***欢迎使用指针学生成绩管理系统***
    ");
     149     pf("1、管理员子系统
    ");
     150     pf("2、教师子系统
    ");
     151     pf("3、学生子系统
    ");
     152     pf("4、退出系统
    ");
     153     pf("-----------------------------
    ");
     154 }
     155 
     156 // 系统初始化
     157 void sams_init(void)
     158 {
     159     // 申请堆内存、加载数据
     160     STU = calloc(MAX_STU,sizeof(Student));
     161     TEA = calloc(MAX_TEA,sizeof(Teacher));
     162     ADM = calloc(1,sizeof(Admin));
     163     pf("系统初始化...
    ");
     164 
     165     FILE* afrp = fopen("admin.txt","r");
     166     int num = 0;
     167     num = fscanf(afrp,"%s %s %hd",ADM[0].id,ADM[0].passwd,&ADM[0].birth);
     168     fclose(afrp);
     169 
     170     FILE* sfrp = fopen("stu.txt","r");
     171     for(i=0; i<100; i++)
     172     {
     173         int num = 0;
     174         num = fscanf(sfrp,"%s %c %s %s %hd %hd %hd %hd %hd %hd",STU[i].name,&STU[i].sex,STU[i].id,STU[i].passwd,&STU[i].chinese,&STU[i].english,&STU[i].math,&STU[i].time,&STU[i].birth,&STU[i].exist);
     175     }
     176     fclose(sfrp);
     177 
     178     FILE* tfrp = fopen("tea.txt","r");
     179     for(i=0; i<50; i++)
     180     {
     181         int num = 0;
     182         num = fscanf(tfrp,"%s %c %s %s %hd %hd %hd",TEA[i].name,&TEA[i].sex,TEA[i].id,TEA[i].passwd,&TEA[i].time,&TEA[i].birth,&TEA[i].exist);
     183     }
     184     fclose(tfrp);
     185 }
     186 
     187 // 系统开始运行
     188 void sams_start(void)
     189 {
     190     // 进入系统的业务流程控制
     191     pf("系统开始运行...
    ");
     192     while(true)
     193     {
     194         sams_menu();
     195         switch(get_cmd('1','4'))
     196         {
     197             case '1': admin_start(); break;
     198             case '2': teacher_start(); break;
     199             case '3': student_start(); break;
     200             case '4': return;
     201         }
     202     }
     203 }
     204 
     205 // 系统结束
     206 void sams_exit(void)
     207 {
     208     FILE* afwp = fopen("admin.txt","w");    
     209     int num = 0;
     210     num = fprintf(afwp,"%s %s %hd",ADM[0].id,ADM[0].passwd,ADM[0].birth);
     211     fclose(afwp);
     212 
     213     FILE* sfwp = fopen("stu.txt","w");
     214     for(i=0; i<100; i++)
     215     {
     216         int num = 0;
     217         if(STU[i].sex != 0)
     218         {
     219             num = fprintf(sfwp,"%s %c %s %s %hd %hd %hd %hd %hd %hd
    ",STU[i].name,STU[i].sex,STU[i].id,STU[i].passwd,STU[i].chinese,STU[i].english,STU[i].math,STU[i].time,STU[i].birth,STU[i].exist);
     220         }
     221     }
     222     fclose(sfwp);
     223 
     224     FILE* tfwp = fopen("tea.txt","w");
     225     for(i=0; i<50; i++)
     226     {
     227         int num = 0;
     228         if(TEA[i].sex != 0)
     229         {
     230             num = fprintf(tfwp,"%s %c %s %s %hd %hd %hd
    ",TEA[i].name,TEA[i].sex,TEA[i].id,TEA[i].passwd,TEA[i].time,TEA[i].birth,TEA[i].exist);
     231         }    
     232     }
     233     fclose(tfwp);
     234     // 释放内存、保存数据
     235     free(STU);
     236     free(TEA);
     237     free(ADM);
     238     pf("系统退出...
    ");
     239 }
     240 
     241 // 管理子系统菜单
     242 void admin_menu(void)
     243 {
     244     pf("
    进入管理子系统...
    ");
     245     pf("1、添加教师
    ");
     246     pf("2、删除教师
    ");
     247     pf("3、重置并解锁教师密码
    ");
     248     pf("4、显示在职教师
    ");
     249     pf("5、显示已离职教师
    ");
     250     pf("6、修改自己密码
    ");
     251     pf("7、返回上一级
    ");
     252     pf("-----------------
    ");
     253 }
     254 
     255 // 管理员添加老师
     256 void admin_add_tea(void)
     257 {
     258     pf("添加教师
    ");
     259     char Cteacher_name[20];
     260     char Cteacher_sex;
     261     char Cteacher_id[20];
     262     char Cteacher_pw[20];
     263     pf("请输入教师姓名:");
     264     get_str(Cteacher_name,20);
     265     pf("请输入教师性别:");
     266     Cteacher_sex = get_sex();
     267     pf("请输入教师工号:");
     268     get_str(Cteacher_id,20);
     269     pf("请输入教师密码:");
     270     get_str(Cteacher_pw,20);
     271     int pos = -1; //插入的位置
     272     pf("id:%s。
    ",TEA[0].id);
     273     for(i=0; i<50; i++)
     274     {
     275         if(TEA[i].sex == '' && pos == -1)
     276         {
     277             pf("pos已定位
    ");
     278             pos = i;
     279         }
     280         if(strcmp(TEA[i].id,Cteacher_id)==0)
     281         {
     282             pf("工号重复,请重新输入!
    ");
     283             break;
     284         }
     285         if(i==49)
     286         {
     287             strcpy(TEA[pos].name,Cteacher_name);
     288             TEA[pos].sex = Cteacher_sex;
     289             strcpy(TEA[pos].id,Cteacher_id);
     290             strcpy(TEA[pos].passwd,Cteacher_pw);
     291             pf("添加成功。
    ");
     292         }
     293     }
     294     pf("id:%s。
    ",TEA[0].id);
     295 }
     296 
     297 // 管理员删除老师
     298 void admin_del_tea(void)
     299 {
     300     pf("删除教师
    ");
     301     pf("请输入教师工号:");
     302     char Cteacher_id[20]={};    
     303     get_str(Cteacher_id,20);
     304     for(i=0; i<50; i++)
     305     {
     306         if(strcmp(Cteacher_id,TEA[i].id)==0)
     307         {
     308             TEA[i].exist = 1;
     309             pf("删除成功!
    ");            
     310             break;
     311         }
     312         if(i==49)
     313         {
     314             pf("无此工号!
    ");
     315         }
     316     }
     317     
     318 }
     319 
     320 // 管理员重置老师
     321 void admin_reset_tea(void)
     322 {
     323     pf("重置密码
    ");
     324     pf("请输入教师工号:");
     325     char Cteacher_id[20]={};
     326     get_str(Cteacher_id,20);
     327     char Cteacher_pw[20] = "123";
     328     for(i=0; i<50; i++)
     329     {
     330         if(strcmp(TEA[i].id,Cteacher_id)==0)
     331         {
     332             TEA[i].time = 0;
     333             TEA[i].birth = 0;
     334             TEA[i].exist = 0;
     335             strcpy(TEA[i].passwd,Cteacher_pw); 
     336             pf("重置成功!
    ");
     337             break;
     338         }
     339         if(i==49)
     340         {
     341             pf("无此工号.
    ");    
     342         }    
     343     }
     344 
     345 }
     346 
     347 // 管理员显示在职教师列表
     348 void admin_list_tea(void)
     349 {
     350     pf("显示在职教师");
     351     for(i=0; i<50; i++)
     352     {
     353         if(TEA[i].sex != '')
     354         {
     355             if(TEA[i].exist != 1)
     356             {
     357                 pf("
    姓名:%s 性别:%c 工号:%s",TEA[i].name,TEA[i].sex,TEA[i].id);
     358             }
     359         }
     360         else
     361         {
     362             break;
     363         }
     364     }
     365 }
     366 
     367 // 管理员显示离职教师列表
     368 void admin_list_ubtea(void)
     369 {
     370     pf("显示离职教师");
     371     for(i=0; i<50; i++)
     372     {
     373         if(TEA[i].sex != '')
     374         {
     375             if(TEA[i].exist == 1)
     376             {
     377                 pf("
    姓名:%s 性别:%c 工号:%s",TEA[i].name,TEA[i].sex,TEA[i].id);
     378             }
     379         }
     380         else
     381         {
     382             break;
     383         }
     384     }
     385 }
     386 
     387 //char admin_pw[20]="123";
     388 //strcpy(admin_pw,admin_passwd);
     389 
     390 // 管理员修改密码
     391 void admin_change_pw(void)
     392 {
     393     char old_pw[20]={};
     394     char new_pw[20]={};
     395     char new_two_pw[20]={};
     396     pf("请输入原密码:");
     397     get_pw(old_pw,true,20);
     398     printf("
    ");
     399     pf("请输入新密码:");
     400     get_pw(new_pw,true,20);
     401     printf("
    ");
     402     pf("请再次输入新密码:");
     403     get_pw(new_two_pw,true,20);
     404     printf("
    ");
     405     if(strcmp(old_pw,ADM[0].passwd)==0)
     406     {
     407         if(strcmp(new_pw,new_two_pw)==0)
     408         {
     409             pf("修改密码成功
    ");
     410             if(ADM[0].birth==0)
     411             {
     412                 ADM[0].birth = 1;
     413             }
     414             strcpy(ADM[0].passwd,new_pw);
     415         }
     416         else
     417         {
     418             pf("两次密码不一致
    ");
     419         }
     420     }
     421     else
     422     {
     423         pf("原密码错误。
    ");
     424     }
     425 }
     426 
     427 // 管理员登录
     428 bool admin_login(void)
     429 {
     430     //char admin_id[20] = "admin";
     431     char Cadmin_id[20]={};
     432     char Cadmin_pw[20]={};
     433     pf("请输入用户名:");
     434     get_str(Cadmin_id,20);
     435     if(Cadmin_id[0]=='')
     436     {
     437         pf("用户名不能为空!
    ");
     438         return false;
     439     }
     440     //pf("*%s*
    ",Cadmin_id);
     441     pf("请输入密码:");
     442     get_pw(Cadmin_pw,true,20);
     443     //printf("
    *%s*",Cadmin_pw);
     444     printf("
    ");
     445     if(strcmp(Cadmin_id,ADM[0].id)==0 && strcmp(Cadmin_pw,ADM[0].passwd)==0)
     446     {
     447         //printf("正确
    ");
     448         return true;
     449     }
     450     else
     451     {
     452         return false;
     453     }
     454 }
     455 
     456 // 运行管理员子系统
     457 void admin_start(void)
     458 {
     459     if(!admin_login())
     460     {
     461         pf("登录失败!
    ");
     462         return;
     463     }
     464     while(true)
     465     {
     466         if(ADM[0].birth==0)
     467         {
     468             admin_change_pw();
     469         }
     470         else
     471         {
     472             admin_menu();
     473             switch(get_cmd('1','7'))
     474             {
     475                 case '1': admin_add_tea(); break;
     476                 case '2': admin_del_tea(); break;
     477                 case '3': admin_reset_tea(); break;
     478                 case '4': admin_list_tea(); break;
     479                 case '5': admin_list_ubtea(); break;
     480                 case '6': admin_change_pw(); break;
     481                 case '7': return;
     482             }
     483         }
     484     }
     485 }
     486 
     487 
     488 // 学生子系统菜单
     489 void student_menu(void)
     490 {
     491     pf("进入学生子系统...
    ");
     492     pf("1、查询成绩
    ");
     493     pf("2、修改密码
    ");
     494     pf("3、查看个人信息
    ");
     495     pf("4、返回上一级
    ");
     496     pf("---------------
    ");
     497 }
     498 
     499 // 学生查询成绩
     500 void student_find_score(void)
     501 {
     502     pf("成绩查询
    ");
     503     pf("语文:%hd ,英语: %hd ,数学: %hd
    ",STU[temp].chinese,STU[temp].english,STU[temp].math);
     504 }
     505 
     506 // 学生修改密码
     507 void student_ch_pw(void)
     508 {
     509     char old_stu_pw[20]={};
     510     char new_stu_pw[20]={};
     511     char new_stu_two_pw[20]={};
     512     pf("请输入原密码:");
     513     get_pw(old_stu_pw,true,20);
     514     printf("
    ");
     515     pf("请输入新密码:");
     516     get_pw(new_stu_pw,true,20);
     517     printf("
    ");
     518     pf("请再次输入新密码:");
     519     get_pw(new_stu_two_pw,true,20);
     520     printf("
    ");
     521     if(strcmp(old_stu_pw,STU[temp].passwd)==0)
     522     {
     523         if(strcmp(new_stu_pw,new_stu_two_pw)==0)
     524         {
     525             pf("修改密码成功
    ");
     526             if(STU[temp].birth==0)
     527             {
     528                 STU[temp].birth = 1;
     529             }
     530             strcpy(STU[temp].passwd,new_stu_pw);
     531         }
     532         else
     533         {
     534             pf("两次密码不一致
    ");
     535         }
     536     }
     537     else
     538     {
     539         pf("原密码错误。
    ");
     540     }
     541 }
     542 
     543 // 学生查询个人信息
     544 void student_find_info(void)
     545 {
     546     pf("个人信息
    ");
     547     pf("姓名:%s ,性别:%c ,学号: %s
    ",STU[temp].name,STU[temp].sex,STU[temp].id);
     548 }
     549 
     550 // 学生登录
     551 int student_login(void)
     552 {
     553     char Cstudent_id[20]={};
     554     char Cstudent_pw[20]={};
     555     pf("请输入用户名:");
     556     get_str(Cstudent_id,20);
     557     if(Cstudent_id[0]=='')
     558     {
     559         pf("用户名不能为空!
    ");
     560         return -1;
     561     }
     562     //pf("*%s*
    ",Cstudent_id);
     563     pf("请输入密码:");
     564     get_pw(Cstudent_pw,true,20);
     565     //printf("
    *%s*",Cstudent_passwd);
     566     printf("
    ");
     567     for(i=0; i<100; i++)
     568     {
     569         if(strcmp(Cstudent_id,STU[i].id)==0)
     570         {
     571             if(STU[i].time==3)
     572             {
     573                 pf("此学号已被锁定,请找教师解锁。
    ");
     574                 return -1;
     575             }
     576             if(STU[i].exist==1)
     577             {
     578                 pf("此学生已退学。
    ");
     579                 return -1;
     580             }
     581             if(strcmp(Cstudent_pw,STU[i].passwd)==0)
     582             {
     583                 return i;
     584             }
     585             else
     586             {    
     587                 STU[i].time++;
     588                 pf("密码错误.
    ");
     589                 return -1;
     590             }
     591         }
     592     }
     593     pf("不存在此学生。
    ");
     594     return -1;
     595 }
     596 
     597 // 运行学生子系统
     598 void student_start(void)
     599 {
     600     temp = student_login();
     601     if(temp==-1)
     602     {
     603         pf("登录失败!
    ");
     604         return;
     605     }
     606     while(true)
     607     {
     608         if(STU[temp].birth==0)
     609         {
     610             student_ch_pw();
     611         }
     612         else
     613         {
     614             student_menu();
     615             switch(get_cmd('1','4'))
     616             {
     617                 case '1': student_find_score(); break;
     618                 case '2': student_ch_pw(); break;
     619                 case '3': student_find_info(); break;        
     620                 case '4': return;
     621             }        
     622         }    
     623     }
     624 }
     625 
     626 
     627 // 老师子系统菜单
     628 void teacher_menu(void)
     629 {
     630     pf("
    进入教师子系统...
    ");
     631     pf("1、添加学生
    ");
     632     pf("2、删除学生
    ");
     633     pf("3、查找学生
    ");
     634     pf("4、修改学生信息
    ");
     635     pf("5、录入学生成绩
    ");
     636     pf("6、重置学生密码
    ");
     637     pf("7、显示所有在校学生信息
    ");
     638     pf("8、显示所有退学学生信息
    ");
     639     pf("9、修改自己密码
    ");
     640     pf("0、返回上一级
    ");
     641     pf("-----------------
    ");
     642 }
     643 
     644 // 老师添加学生
     645 void teacher_add_stu(void)
     646 {
     647     pf("添加学生
    ");
     648     char Cstudent_name[20];
     649     char Cstudent_sex;
     650     char Cstudent_id[20];
     651     char Cstudent_pw[20];
     652     pf("请输入学生姓名:");
     653     get_str(Cstudent_name,20);
     654     pf("请输入学生性别:");
     655     Cstudent_sex = get_sex();
     656     pf("请输入学生工号:");
     657     get_str(Cstudent_id,20);
     658     pf("请输入学生密码:");
     659     get_str(Cstudent_pw,20);
     660     int pos = -1; //插入的位置
     661     pf("id:%s。
    ",STU[0].id);
     662     for(i=0; i<100; i++)
     663     {
     664         if(STU[i].sex == '' && pos == -1)
     665         {
     666             pf("pos已定位
    ");
     667             pos = i;
     668         }
     669         if(strcmp(STU[i].id,Cstudent_id)==1)
     670         {
     671             pf("学号重复,请重新输入!
    ");
     672             break;
     673         }
     674         if(i==99)
     675         {
     676             strcpy(STU[pos].name,Cstudent_name);
     677             STU[pos].sex = Cstudent_sex;
     678             strcpy(STU[pos].id,Cstudent_id);
     679             strcpy(STU[pos].passwd,Cstudent_pw);
     680             pf("添加成功。
    ");
     681         }
     682     }
     683     pf("id:%s。
    ",STU[0].id);
     684 }
     685 
     686 // 老师删除学生
     687 void teacher_del_stu(void)
     688 {
     689     pf("删除学生
    ");
     690     pf("请输入学生学号:");
     691     char Cstudent_id[20]={};    
     692     get_str(Cstudent_id,20);
     693     for(i=0; i<100; i++)
     694     {
     695         if(strcmp(Cstudent_id,STU[i].id)==0)
     696         {
     697             STU[i].exist = 1;
     698             pf("删除成功!
    ");            
     699             break;
     700         }
     701         if(i==99)
     702         {
     703             pf("无此学号!
    ");
     704         }
     705     }
     706     
     707 }
     708 
     709 // 老师查询学生
     710 void teacher_find_stu(void)
     711 {
     712     pf("请输入学生学号:");
     713     char Cstudent_id[20]={};
     714     get_str(Cstudent_id,20);
     715     for(i=0; i<100; i++)
     716     {
     717         if(strcmp(Cstudent_id,STU[i].id)==0)
     718         {
     719             pf("姓名:%s 性别:%c 学号:%s
    ",STU[i].name,STU[i].sex,STU[i].id);
     720             break;
     721         }
     722         else if(i==99)
     723         {
     724             pf("无此学号。
    ");
     725         }
     726     }
     727 }
     728 
     729 // 老师修改学生信息
     730 void teacher_ch_stu_info(void)
     731 {
     732     pf("请输入学生学号:");
     733     char Cstudent_id[20]={};
     734     get_str(Cstudent_id,20);
     735     for(i=0; i<100; i++)
     736     {
     737         if(strcmp(Cstudent_id,STU[i].id)==0)
     738         {
     739             char ch_name[20];
     740             char ch_sex;
     741             char ch_id[20];
     742             pf("原信息:姓名:%s 性别:%c 学号:%s
    ",STU[i].name,STU[i].sex,STU[i].id);
     743             pf("请输入新姓名:");
     744             get_str(ch_name,20);
     745             pf("请输入新性别:");
     746             if(sf("%c",&ch_sex)==1)
     747             {
     748                 getchar();
     749             }
     750             pf("请输入新学号:");
     751             get_str(ch_id,20);
     752             
     753             strcpy(STU[i].name,ch_name);
     754             STU[i].sex = ch_sex;
     755             strcpy(STU[i].id,ch_id);
     756 
     757             pf("信息修改成功。
    ");
     758             break;
     759         }
     760         else if(i==99)
     761         {
     762             pf("无此学号。
    ");
     763         }
     764     }
     765 }
     766 
     767 // 老师添加学生成绩
     768 void teacher_add_stu_score(void)
     769 {
     770     pf("请输入学生学号:");
     771     char Cstudent_id[20]={};
     772     get_str(Cstudent_id,20);
     773     for(i=0; i<100; i++)
     774     {
     775         if(strcmp(Cstudent_id,STU[i].id)==0)
     776         {
     777             short chinese = 0;
     778             short english = 0;
     779             short math = 0;
     780             pf("原信息:语文:%hd 英语:%hd 数学:%hd
    ",STU[i].chinese,STU[i].english,STU[i].math);
     781             pf("请输入新语文成绩:");
     782             if(sf("%hd",&chinese)==1)
     783             {
     784                 getchar();
     785             }
     786             pf("请输入新英语成绩:");
     787             if(sf("%hd",&english)==1)
     788             {
     789                 getchar();
     790             }
     791             pf("请输入新数学成绩:");
     792             if(sf("%hd",&math)==1)
     793             {
     794                 getchar();
     795             }
     796             
     797             STU[i].chinese = chinese;
     798             STU[i].english = english;
     799             STU[i].math = math;
     800 
     801             pf("信息修改成功。
    ");
     802             break;
     803         }
     804         else if(i==99)
     805         {
     806             pf("无此学号。
    ");
     807         }
     808     }
     809 }
     810 
     811 // 老师重置学生密码
     812 void teacher_reset_stu_pw(void)
     813 {
     814     pf("重置密码
    ");
     815     pf("请输入学生学号:");
     816     char Cstudent_id[20]={};
     817     get_str(Cstudent_id,20);
     818     char Cstudent_pw[20] = "123";
     819     for(i=0; i<100; i++)
     820     {
     821         if(strcmp(STU[i].id,Cstudent_id)==0)
     822         {
     823             STU[i].time = 0;
     824             STU[i].birth = 0;
     825             STU[i].exist = 0;
     826             strcpy(STU[i].passwd,Cstudent_pw); 
     827             pf("重置成功!
    ");
     828             break;
     829         }
     830         if(i==99)
     831         {
     832             pf("无此学号.
    ");    
     833         }    
     834     }
     835 }
     836 
     837 // 老师显示在校学生列表
     838 void teacher_list_stu(void)
     839 {
     840     pf("显示在校学生");
     841     for(i=0; i<100; i++)
     842     {
     843         if(STU[i].sex != '')
     844         {
     845             if(STU[i].exist != 1)
     846             {
     847                 pf("
    姓名:%s 性别:%c 学号:%s",STU[i].name,STU[i].sex,STU[i].id);
     848             }
     849         }
     850         else
     851         {
     852             break;
     853         }
     854     }
     855 }
     856 
     857 // 老师显示退学学生列表
     858 void teacher_list_ubstu(void)
     859 {
     860     pf("显示退学学生");
     861     for(i=0; i<100; i++)
     862     {
     863         if(STU[i].sex != '')
     864         {
     865             if(STU[i].exist == 1)
     866             {
     867                 pf("
    姓名:%s 性别:%c 工号:%s",STU[i].name,STU[i].sex,STU[i].id);
     868             }
     869         }
     870         else
     871         {
     872             break;
     873         }
     874     }
     875 }
     876 
     877 // 老师修改密码
     878 void teacher_ch_pw(void)
     879 {
     880     char old_pw[20]={};
     881     char new_pw[20]={};
     882     char new_two_pw[20]={};
     883     pf("请输入原密码:");
     884     get_pw(old_pw,true,20);
     885     printf("
    ");
     886     pf("请输入新密码:");
     887     get_pw(new_pw,true,20);
     888     printf("
    ");
     889     pf("请再次输入新密码:");
     890     get_pw(new_two_pw,true,20);
     891     printf("
    ");
     892     if(strcmp(old_pw,TEA[pos].passwd)==0)
     893     {
     894         if(strcmp(new_pw,new_two_pw)==0)
     895         {
     896             pf("修改密码成功
    ");
     897             if(TEA[pos].birth==0)
     898             {
     899                 TEA[pos].birth = 1;
     900             }
     901             strcpy(TEA[pos].passwd,new_pw);
     902         }
     903         else
     904         {
     905             pf("两次密码不一致
    ");
     906         }
     907     }
     908     else
     909     {
     910         pf("原密码错误。
    ");
     911     }
     912 }
     913 
     914 // 老师登录
     915 int teacher_login(void)
     916 {
     917     char Cteacher_id[20]={};
     918     char Cteacher_pw[20]={};
     919     pf("请输入用户名:");
     920     get_str(Cteacher_id,20);
     921     if(Cteacher_id[0]=='')
     922     {
     923         pf("用户名不能为空!
    ");
     924         return -1;
     925     }
     926     //pf("*%s*
    ",Cteacher_id);
     927     pf("请输入密码:");
     928     get_pw(Cteacher_pw,true,20);
     929     //printf("
    *%s*",Cadmin_passwd);
     930     printf("
    ");
     931     for(i=0; i<50; i++)
     932     {
     933         if(strcmp(Cteacher_id,TEA[i].id)==0)
     934         {
     935             if(TEA[i].time==3)
     936             {
     937                 pf("此工号已被锁定,请找管理员解锁。
    ");
     938                 return -1;
     939             }
     940             if(TEA[i].exist==1)
     941             {
     942                 pf("此教师已离职。
    ");
     943                 return -1;
     944             }
     945             if(strcmp(Cteacher_pw,TEA[i].passwd)==0)
     946             {
     947                 return i;
     948             }
     949             else
     950             {    
     951                 TEA[i].time++;
     952                 pf("密码错误.
    ");
     953                 return -1;
     954             }
     955         }
     956     }
     957     pf("不存在此教师。
    ");
     958     return -1;
     959 }
     960 
     961 // 运行老师子系统
     962 void teacher_start(void)
     963 {
     964     pos = teacher_login();
     965     if(pos==-1)
     966     {
     967         pf("登录失败!
    ");
     968         return;
     969     }
     970     while(true)
     971     {
     972         if(TEA[pos].birth==0)
     973         {
     974             teacher_ch_pw();
     975             
     976         }
     977         else
     978         {
     979             teacher_menu();
     980             switch(get_cmd('0','9'))
     981             {
     982                 case '1': teacher_add_stu(); break;
     983                 case '2': teacher_del_stu(); break;
     984                 case '3': teacher_find_stu(); break;
     985                 case '4': teacher_ch_stu_info(); break;
     986                 case '5': teacher_add_stu_score(); break;
     987                 case '6': teacher_reset_stu_pw(); break;
     988                 case '7': teacher_list_stu(); break;
     989                 case '8': teacher_list_ubstu(); break;
     990                 case '9': teacher_ch_pw(); break;        
     991                 case '0': return;
     992             }        
     993         }
     994     }
     995 }
     996 
     997 /** tools **/
     998 // 清理输入缓冲区
     999 void clear_stdin(void)
    1000 {
    1001     //stdin->_IO_read_ptr = stdin->_IO_read_end;//清理输入缓冲区
    1002 }
    1003 
    1004 // 获取字符串
    1005 char* get_str(char* str,size_t len)
    1006 {
    1007     if(NULL == str)
    1008     {
    1009         puts("empty ptr!");
    1010         return NULL;
    1011     }
    1012 
    1013     char *in=fgets(str,len,stdin);
    1014 
    1015     size_t cnt = strlen(str);
    1016     if('
    ' == str[cnt-1])
    1017     {
    1018         str[cnt-1] = '';
    1019     }
    1020     else
    1021     {
    1022         scanf("%*[^
    ]");
    1023         scanf("%*c");
    1024     }
    1025     
    1026     clear_stdin();
    1027 
    1028     return str;
    1029 }
    1030 
    1031 // 获取性别
    1032 char get_sex(void)
    1033 {
    1034     printf("(m男,w女):");
    1035     while(true)
    1036     {
    1037         char sex = getch();
    1038         if('w' == sex || 'm' == sex)
    1039         {
    1040             printf("%s
    ",'w'==sex?"":"");
    1041             return sex;
    1042         }
    1043     }
    1044 }
    1045 
    1046 // 获取键盘指令
    1047 char get_cmd(char start,char end)
    1048 {
    1049     clear_stdin();
    1050 
    1051     printf("请输入指令:");
    1052     while(true)
    1053     {
    1054         char val = getch();
    1055         if(val >= start && val <= end)
    1056         {
    1057             printf("%c
    ",val);
    1058             return val;
    1059         }
    1060     }
    1061 }
    1062 
    1063 // 获取密码
    1064 char* get_pw(char* passwd,bool is_show,size_t size)
    1065 {
    1066     if(NULL == passwd) return NULL;
    1067 
    1068     int count = 0;
    1069     do{
    1070         char val = getch();
    1071         if(8 == val)
    1072         {
    1073             if(count > 0)
    1074             {
    1075                 if(is_show)printf(" ");
    1076                 count--;
    1077             }
    1078             continue;
    1079         }
    1080         else if(13 == val)
    1081         {
    1082             break;
    1083         }
    1084         passwd[count++] = val;
    1085         if(is_show) printf("*");
    1086     }while(count < size -1);
    1087 
    1088     passwd[count] = '';
    1089     return passwd;
    1090 }
  • 相关阅读:
    微信小程序--form表单消息推送
    微信小程序学习笔记五(持续更新)---小程序上传文件
    微信小程序学习笔记四(持续更新)---征服scroll-view下拉刷新
    微信小程序学习笔记三(持续更新)---小程序组件通信
    微信小程序学习笔记二(持续更新)---小程序网络请求封装
    linux下安装微信开发者工具(fedora27)
    初学小程序学习笔记(持续更新)
    bootstrap使用popover插件实现点击按钮显示二维码图片
    gulp-jshint 编译出错Error:Cannot find modul 'jshint/src/cli' 解决办法
    vscode 下的 typescript 自动编译方法
  • 原文地址:https://www.cnblogs.com/ikaros-521/p/11180077.html
Copyright © 2011-2022 走看看