如何用C语言编写一个全面的学生管理系统实现?

2026-04-12 07:442阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2968个文字,预计阅读时间需要12分钟。

如何用C语言编写一个全面的学生管理系统实现?

本例为家庭分享了C语言实现学生管理系统的整体代码,供大家参考。整体内容如下:

前言:本周完成了学生管理系统的开发,过程中遇到了不少问题,今天来总结一下。

1. 系统功能概述 实现了学生信息的增删改查功能,包括学生的基本信息(学号、姓名、年龄、性别等)。

2. 数据结构设计 使用结构体存储学生信息,方便后续操作。

3. 主要功能模块 - 添加学生信息 - 删除学生信息 - 修改学生信息 - 查询学生信息 - 显示所有学生信息

4. 实现细节 - 使用文件存储学生信息,便于持久化 - 使用循环结构实现菜单操作 - 使用字符串处理函数实现姓名和学号的输入、输出

5. 遇到的问题及解决方法 - 问题1:文件打开失败 解决方法:检查文件路径是否正确,文件权限是否设置正确 - 问题2:字符串输入错误 解决方法:使用scanf函数读取字符串,并指定输入长度,避免溢出 - 问题3:学生信息重复 解决方法:在添加学生信息前,先检查学号是否已存在

6. 总结 学生管理系统开发过程中,遇到了不少问题,但通过查阅资料、请教他人和不断尝试,最终成功完成了系统开发。在今后的项目中,要更加注重代码规范和调试技巧,提高编程能力。

本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下

如何用C语言编写一个全面的学生管理系统实现?

前言

本周完成了学生管理系统,在完成的过程中遇见了许多问题,今天来总结上周写管理系统一些比较困难的模块。

登陆界面

在写学生管理系统时,我首先写的是登陆界面,学生管理系统有三个身份的id,分别是管理员,老师,与学生。我的想法是输入账号,系统可以自动识别账户的身份,所以我的结构体设计如下:

struct personid {       // 账户数据结构     char id[20];     char cypher1[20];     char quanxian[20];     char classnum[20];     struct personid *next; };

用字符串存储账号,密码,权限,以及学号或者班级。
在登陆前首先应该用链表提取文件中的账号。代码如下:

struct personid *Create(char name[]) {  //从文件中读取账户;     FILE *fp = fopen(name, "r");     if (fp == NULL) {             printf("不存在文件%s\n", name);             exit(1);     }     struct personid *head = (struct personid*)malloc(sizeof(struct personid));     head->next = NULL;     while (!(feof(fp))) {         struct personid *p = (struct personid*)malloc(sizeof(struct personid));         fscanf(fp, "%s %s %s %s\n", p->id, p->cypher1, p->quanxian, p->classnum);         p->next = head->next;         head->next = p;     }     fclose(fp);     return  head; }

下面是登陆界面的代码:

void menu() {     //初始界面     printf("--------[欢迎进入学生管理系统]--------\n");     printf("1.登录账户\n");     printf("2.注册账户\n");     printf("3.修改密码\n");     printf("4.找回密码\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     setbuf(stdin, NULL);     keydown(); } void keydown() {     char choice[50];     scanf("%s", choice);     setbuf(stdin, NULL);     if (choice[1] == '\0') {         switch (choice[0]) {             case '0':                 exit(0);                 break;             case '1':                 denglu();                 break;             case '2':                 zhuce();                 break;             case '3':                 xiugai();                 break;             case '4':                 zhaohui();                 break;             default:                 printf("无效输入\n");                 menu();                 break;         }     } else {         printf("无效输入\n");         menu();     }      }

在写系统时一定要注意程序的稳定性,我的程序是通过不断输入来进行操作的,一开始我在写代码时,利用的是getchar函数来进行输入,造成了输入多个字符之后程序就会崩掉的问题,在后来修改时,将所有的getchar函数换成的scanf来输入,这样可以保证程序的稳定性,在进行判断时只需判断输入的是否是一个字符且有这个操作即可。
在macOS系统下可以利用setbuf(stdin, NULL) 来清除缓冲区。

注册操作

如果新用户进入程序,那么首先进行的操作就是注册操作,我在最开始写注册操作时,是让 用户自己输入自己的身份 ,这样的写法是很失败的,如果学生进行操作,也可以注册管理员,是很不严谨的!
后来在修改时,利用了不同的邀请码注册不同的身份,用户无需输入身份,学生只需输入自己的学号,老师则需要选择自己对应的班级。

代码如下:

void zhuce() {     printf("请输入邀请码:\n");     int yaoqingma1 = 111;     int yaoqingma2 = 222;     int yaoqingma3 = 333;     int x;     scanf("%d", &x);     if (x != yaoqingma1 && x != yaoqingma2 && x != yaoqingma3) {         printf("无效邀请码,请联系导员:\n");         setbuf(stdin, NULL);         menu();     }     if (x == 111 || x ==222 || x == 333) {         printf("please input the id with number:");         char id[20];         char id1[20];         char id2[20];         char id3[20] = "\n";         char id4[20] = "0";         char id6[20];         scanf("%s", id);         printf("please input the password:");         scanf("%s", id1); next1:         if (x == 111) {             strcpy(id2, qx1);             printf("请输入学号\n");             scanf("%s", id4);             struct personid *p = Create(zhroad);             while (p) {                 if (!strcmp(id4, p->classnum)) {                     printf("该学号已被注册,按0返回上一层,任意键重新输入\n");                     setbuf(stdin, NULL);                     char a;                     a = getchar();                     if (a == '0') {                         menu();                     }                     setbuf(stdin, NULL);                     goto next1;                 }                 p = p->next;             }         } else if (x == 222) {             printf("请选择您的班级\n");             printf("1.网络1班\n");             printf("2.网络2班\n");             printf("3.网络3班\n");             printf("4.网络4班\n");             printf("5.网络5班\n");             scanf("%s", id6);             if (id6[1] == '\0') {                 if (id6[0] == '1' || id6[0] == '2' || id6[0] == '3' || id6[0] == '4' || id6[0] == '5') {                     setbuf(stdin, NULL);                     strcpy(id4, id6);                 } else {                     setbuf(stdin, NULL);                     printf("该班级不存在.\n");                     menu();                 }             } else {                 printf("该班级不存在\n");                 setbuf(stdin, NULL);                 menu();             }             strcpy(id2, qx2);         } else if (x == 333) {             strcpy(id2, qx3);         }         AppendDataToFile(zhroad, id);         AppendDataToFile(zhroad, kong);         AppendDataToFile(zhroad, id1);         AppendDataToFile(zhroad, kong);         AppendDataToFile(zhroad, id2);         AppendDataToFile(zhroad, kong);         AppendDataToFile(zhroad, id4);         AppendDataToFile(zhroad, id3);         printf("注册成功请重新登陆!\n");         setbuf(stdin, NULL);         menu();     } }

在进行学生注册时,应该对学生输入的学号进行一个判断,判断该学号是否被注册,若被注册应该重新输入。
在进行老师注册时,应该让老师选择已有的班级,如果没有则重新输入。
在注册成功后利用文件将已经注册的账号存储起来

学生界面的一些操作

学生主要可以进行下面几种操作:

void studentmenu() {        //学生操作界面     printf("-----[good afternoon student ]-----\n");     printf("1.查询成绩\n");     printf("2.查询本班成绩\n");     printf("3.成绩分析\n");     printf("4.成绩申诉\n");     printf("5.返回上一层:\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     studentkeydown();     }

在最初写代码时,我是让学生输入自己的学号来进行成绩查询,如果是考输入学号来查询的话,那么也可以输入别人的成绩,查询别人班的成绩,如果这样写,那学生的操作就和老师甚至管理员无异。
在最后修改代码时,我将学生的学号和账号绑定,在进行成绩查询等操作时,无需输入自己的学号,

教师界面的一些操作

教师界面的主要功能如下

void teachermenu() {           //老师操作界面     printf("-----[good afternoon teacher]-----\n");     printf("1.增加新的学生信息\n");     printf("2.删除学生信息\n");     printf("3.修改学生信息\n");     printf("4.查询学生信息\n");     printf("5.输出本班成绩\n");     printf("6.成绩分析\n");     printf("7.提醒管理员更新成绩\n");     printf("8.返回上一层:\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     setbuf(stdin, NULL);     teacherkeydown(); }

在一开始写代码时,和上面的学生操作类似,我是让老师输入班级或者老师输入学号来进行相关操作的,这样书写的话老师就成为了一个万能老师,可以查询文件中所存储的所有学生信息,现实中不存在教整个学校的老师,并且这样与管理员的功能冲突。
在后来修改代码时,我在老师注册时让老师选择了班级,我们将这个班级与老师的账号绑定,并且规定老师只能查询自己班学生的成绩,若输入其他班的成绩,则会进行相应的错误提醒。
老师操作界面代码如下:

void teacherkeydown() { //教师输入选择界面     char *x;     char *a;     x = allclassnum;     struct student *temp1 = NULL;     char str2[200];     char str1[100];     setbuf(stdin, NULL);     scanf("%s", str1);     if (str1[1] == '\0') {         switch (str1[0]) {             case '0':                 exit(0);                 break;             case '1':                 a = classnum(x);                 temp1 = mescreate(a);                 temp1 = addnode(temp1);                 writetoclassfile(temp1, a);                 teachermenu();                 break;             case '2':                 a = classnum(x);                 temp1 = mescreate(a);                 temp1 = delnode(temp1);                 writetoclassfile(temp1, a);                 teachermenu();                 break;             case '3':                 a = classnum(x);                 temp1 = mescreate(a);                 temp1 = changenode(temp1);                 writetoclassfile(temp1, a);                 teachermenu();                 break;             case '4':                 printf("please input student studyid:\n");                 char studyid[20];                 scanf("%s", studyid);                 if (studyid[1] == allclassnum[0] && studyid[0] == '0' && strlen(studyid) < 6) {                     printpersonnalsocre(studyid);                     teachermenu();                 } else {                     printf("不是您的学生或者学号不存在\n");                     teachermenu();                 }                                  break;             case '5':                 a = classnum(x);                 temp1 = mescreate(a);                 temp1 = sort4(temp1);                 Printall(temp1);                 setbuf(stdin, NULL);                 teachermenu();                 break;             case '6':                 a = classnum(x);                 temp1 = mescreate(a);                 chengjifenxi(temp1);                 teachermenu();                 break;             case '7':                 FILE *fp1;                 fp1 = fopen(shensu, "w");                 printf("please input the wrong\n");                 scanf("%s", str2);                 fprintf(fp1, "%s\n", str2);                 printf("您的提醒已经发送!");                 break;             case '8':                 menu();                 break;             default:                 printf("输入有误请重新输入\n");                 teachermenu();                 break;             }     } else {         printf("输入有误请重新输入\n");         teachermenu();     } }

管理员的一些操作

管理员的主要功能如下:

void guanlidaiban() {     printf("-----[good afternoon manager ]----\n");     printf("1.密码注册\n");     printf("2.密码修改\n");     printf("3.密码找回\n");     printf("4.成绩申诉\n");     printf("5.更新成绩库\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     keydowmdaiban(); } void guanlimenu() {     printf("-----[good afternoon manager ]----\n");     printf("1.代办选项\n");     printf("2.增加账号和密码\n");     printf("3.删除账号和密码\n");     printf("4.修改账号和密码\n");     printf("5.输出所有账号和密码\n");     printf("6.录入所有的账号和密码\n");     printf("7.进入教师用户端\n");     printf("a.返回上一层\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     guanlikeydown(); }

管理员相比较于教师,可以对账号进行操作,并且可以查询所有班的成绩,在最开始设计时,我将管理员的操作写的跟学生教师冲突,尤其是进入教师用户端,进入教师用户端的代码如下。

printf("请选择您想进行操作的班级\n");                 printf("1.网络1班\n");                 printf("2.网络2班\n");                 printf("3.网络3班\n");                 printf("4.网络4班\n");                 printf("5.网络5班\n");                 scanf("%s", choice1);                 if (choice1[1] != '\0') {                     printf("班级不存在请重新输入\n");                     goto  next1;                 } else if (choice1[0] == '1' || choice1[0] == '2' || choice1[0] == '3' || choice1[0] == '4' || choice1[0] == '5') {                     allclassnum[0] = choice1[0];                     teachermenu();                 } else {                     printf("班级不存在请重新输入\n");                     goto  next1;                 }

管理员可以选择班级进行查看,当管理员选择后我将全局变量allclassnum(记录教师班级)改成了相对应操作的班级然后进入教师端。

总结

最开始写管理系统时没有注意很多细节,并且逻辑不合理,导致刚刚写完时非常的拉垮,在以后写程序时一定会多多留心。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计2968个文字,预计阅读时间需要12分钟。

如何用C语言编写一个全面的学生管理系统实现?

本例为家庭分享了C语言实现学生管理系统的整体代码,供大家参考。整体内容如下:

前言:本周完成了学生管理系统的开发,过程中遇到了不少问题,今天来总结一下。

1. 系统功能概述 实现了学生信息的增删改查功能,包括学生的基本信息(学号、姓名、年龄、性别等)。

2. 数据结构设计 使用结构体存储学生信息,方便后续操作。

3. 主要功能模块 - 添加学生信息 - 删除学生信息 - 修改学生信息 - 查询学生信息 - 显示所有学生信息

4. 实现细节 - 使用文件存储学生信息,便于持久化 - 使用循环结构实现菜单操作 - 使用字符串处理函数实现姓名和学号的输入、输出

5. 遇到的问题及解决方法 - 问题1:文件打开失败 解决方法:检查文件路径是否正确,文件权限是否设置正确 - 问题2:字符串输入错误 解决方法:使用scanf函数读取字符串,并指定输入长度,避免溢出 - 问题3:学生信息重复 解决方法:在添加学生信息前,先检查学号是否已存在

6. 总结 学生管理系统开发过程中,遇到了不少问题,但通过查阅资料、请教他人和不断尝试,最终成功完成了系统开发。在今后的项目中,要更加注重代码规范和调试技巧,提高编程能力。

本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下

如何用C语言编写一个全面的学生管理系统实现?

前言

本周完成了学生管理系统,在完成的过程中遇见了许多问题,今天来总结上周写管理系统一些比较困难的模块。

登陆界面

在写学生管理系统时,我首先写的是登陆界面,学生管理系统有三个身份的id,分别是管理员,老师,与学生。我的想法是输入账号,系统可以自动识别账户的身份,所以我的结构体设计如下:

struct personid {       // 账户数据结构     char id[20];     char cypher1[20];     char quanxian[20];     char classnum[20];     struct personid *next; };

用字符串存储账号,密码,权限,以及学号或者班级。
在登陆前首先应该用链表提取文件中的账号。代码如下:

struct personid *Create(char name[]) {  //从文件中读取账户;     FILE *fp = fopen(name, "r");     if (fp == NULL) {             printf("不存在文件%s\n", name);             exit(1);     }     struct personid *head = (struct personid*)malloc(sizeof(struct personid));     head->next = NULL;     while (!(feof(fp))) {         struct personid *p = (struct personid*)malloc(sizeof(struct personid));         fscanf(fp, "%s %s %s %s\n", p->id, p->cypher1, p->quanxian, p->classnum);         p->next = head->next;         head->next = p;     }     fclose(fp);     return  head; }

下面是登陆界面的代码:

void menu() {     //初始界面     printf("--------[欢迎进入学生管理系统]--------\n");     printf("1.登录账户\n");     printf("2.注册账户\n");     printf("3.修改密码\n");     printf("4.找回密码\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     setbuf(stdin, NULL);     keydown(); } void keydown() {     char choice[50];     scanf("%s", choice);     setbuf(stdin, NULL);     if (choice[1] == '\0') {         switch (choice[0]) {             case '0':                 exit(0);                 break;             case '1':                 denglu();                 break;             case '2':                 zhuce();                 break;             case '3':                 xiugai();                 break;             case '4':                 zhaohui();                 break;             default:                 printf("无效输入\n");                 menu();                 break;         }     } else {         printf("无效输入\n");         menu();     }      }

在写系统时一定要注意程序的稳定性,我的程序是通过不断输入来进行操作的,一开始我在写代码时,利用的是getchar函数来进行输入,造成了输入多个字符之后程序就会崩掉的问题,在后来修改时,将所有的getchar函数换成的scanf来输入,这样可以保证程序的稳定性,在进行判断时只需判断输入的是否是一个字符且有这个操作即可。
在macOS系统下可以利用setbuf(stdin, NULL) 来清除缓冲区。

注册操作

如果新用户进入程序,那么首先进行的操作就是注册操作,我在最开始写注册操作时,是让 用户自己输入自己的身份 ,这样的写法是很失败的,如果学生进行操作,也可以注册管理员,是很不严谨的!
后来在修改时,利用了不同的邀请码注册不同的身份,用户无需输入身份,学生只需输入自己的学号,老师则需要选择自己对应的班级。

代码如下:

void zhuce() {     printf("请输入邀请码:\n");     int yaoqingma1 = 111;     int yaoqingma2 = 222;     int yaoqingma3 = 333;     int x;     scanf("%d", &x);     if (x != yaoqingma1 && x != yaoqingma2 && x != yaoqingma3) {         printf("无效邀请码,请联系导员:\n");         setbuf(stdin, NULL);         menu();     }     if (x == 111 || x ==222 || x == 333) {         printf("please input the id with number:");         char id[20];         char id1[20];         char id2[20];         char id3[20] = "\n";         char id4[20] = "0";         char id6[20];         scanf("%s", id);         printf("please input the password:");         scanf("%s", id1); next1:         if (x == 111) {             strcpy(id2, qx1);             printf("请输入学号\n");             scanf("%s", id4);             struct personid *p = Create(zhroad);             while (p) {                 if (!strcmp(id4, p->classnum)) {                     printf("该学号已被注册,按0返回上一层,任意键重新输入\n");                     setbuf(stdin, NULL);                     char a;                     a = getchar();                     if (a == '0') {                         menu();                     }                     setbuf(stdin, NULL);                     goto next1;                 }                 p = p->next;             }         } else if (x == 222) {             printf("请选择您的班级\n");             printf("1.网络1班\n");             printf("2.网络2班\n");             printf("3.网络3班\n");             printf("4.网络4班\n");             printf("5.网络5班\n");             scanf("%s", id6);             if (id6[1] == '\0') {                 if (id6[0] == '1' || id6[0] == '2' || id6[0] == '3' || id6[0] == '4' || id6[0] == '5') {                     setbuf(stdin, NULL);                     strcpy(id4, id6);                 } else {                     setbuf(stdin, NULL);                     printf("该班级不存在.\n");                     menu();                 }             } else {                 printf("该班级不存在\n");                 setbuf(stdin, NULL);                 menu();             }             strcpy(id2, qx2);         } else if (x == 333) {             strcpy(id2, qx3);         }         AppendDataToFile(zhroad, id);         AppendDataToFile(zhroad, kong);         AppendDataToFile(zhroad, id1);         AppendDataToFile(zhroad, kong);         AppendDataToFile(zhroad, id2);         AppendDataToFile(zhroad, kong);         AppendDataToFile(zhroad, id4);         AppendDataToFile(zhroad, id3);         printf("注册成功请重新登陆!\n");         setbuf(stdin, NULL);         menu();     } }

在进行学生注册时,应该对学生输入的学号进行一个判断,判断该学号是否被注册,若被注册应该重新输入。
在进行老师注册时,应该让老师选择已有的班级,如果没有则重新输入。
在注册成功后利用文件将已经注册的账号存储起来

学生界面的一些操作

学生主要可以进行下面几种操作:

void studentmenu() {        //学生操作界面     printf("-----[good afternoon student ]-----\n");     printf("1.查询成绩\n");     printf("2.查询本班成绩\n");     printf("3.成绩分析\n");     printf("4.成绩申诉\n");     printf("5.返回上一层:\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     studentkeydown();     }

在最初写代码时,我是让学生输入自己的学号来进行成绩查询,如果是考输入学号来查询的话,那么也可以输入别人的成绩,查询别人班的成绩,如果这样写,那学生的操作就和老师甚至管理员无异。
在最后修改代码时,我将学生的学号和账号绑定,在进行成绩查询等操作时,无需输入自己的学号,

教师界面的一些操作

教师界面的主要功能如下

void teachermenu() {           //老师操作界面     printf("-----[good afternoon teacher]-----\n");     printf("1.增加新的学生信息\n");     printf("2.删除学生信息\n");     printf("3.修改学生信息\n");     printf("4.查询学生信息\n");     printf("5.输出本班成绩\n");     printf("6.成绩分析\n");     printf("7.提醒管理员更新成绩\n");     printf("8.返回上一层:\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     setbuf(stdin, NULL);     teacherkeydown(); }

在一开始写代码时,和上面的学生操作类似,我是让老师输入班级或者老师输入学号来进行相关操作的,这样书写的话老师就成为了一个万能老师,可以查询文件中所存储的所有学生信息,现实中不存在教整个学校的老师,并且这样与管理员的功能冲突。
在后来修改代码时,我在老师注册时让老师选择了班级,我们将这个班级与老师的账号绑定,并且规定老师只能查询自己班学生的成绩,若输入其他班的成绩,则会进行相应的错误提醒。
老师操作界面代码如下:

void teacherkeydown() { //教师输入选择界面     char *x;     char *a;     x = allclassnum;     struct student *temp1 = NULL;     char str2[200];     char str1[100];     setbuf(stdin, NULL);     scanf("%s", str1);     if (str1[1] == '\0') {         switch (str1[0]) {             case '0':                 exit(0);                 break;             case '1':                 a = classnum(x);                 temp1 = mescreate(a);                 temp1 = addnode(temp1);                 writetoclassfile(temp1, a);                 teachermenu();                 break;             case '2':                 a = classnum(x);                 temp1 = mescreate(a);                 temp1 = delnode(temp1);                 writetoclassfile(temp1, a);                 teachermenu();                 break;             case '3':                 a = classnum(x);                 temp1 = mescreate(a);                 temp1 = changenode(temp1);                 writetoclassfile(temp1, a);                 teachermenu();                 break;             case '4':                 printf("please input student studyid:\n");                 char studyid[20];                 scanf("%s", studyid);                 if (studyid[1] == allclassnum[0] && studyid[0] == '0' && strlen(studyid) < 6) {                     printpersonnalsocre(studyid);                     teachermenu();                 } else {                     printf("不是您的学生或者学号不存在\n");                     teachermenu();                 }                                  break;             case '5':                 a = classnum(x);                 temp1 = mescreate(a);                 temp1 = sort4(temp1);                 Printall(temp1);                 setbuf(stdin, NULL);                 teachermenu();                 break;             case '6':                 a = classnum(x);                 temp1 = mescreate(a);                 chengjifenxi(temp1);                 teachermenu();                 break;             case '7':                 FILE *fp1;                 fp1 = fopen(shensu, "w");                 printf("please input the wrong\n");                 scanf("%s", str2);                 fprintf(fp1, "%s\n", str2);                 printf("您的提醒已经发送!");                 break;             case '8':                 menu();                 break;             default:                 printf("输入有误请重新输入\n");                 teachermenu();                 break;             }     } else {         printf("输入有误请重新输入\n");         teachermenu();     } }

管理员的一些操作

管理员的主要功能如下:

void guanlidaiban() {     printf("-----[good afternoon manager ]----\n");     printf("1.密码注册\n");     printf("2.密码修改\n");     printf("3.密码找回\n");     printf("4.成绩申诉\n");     printf("5.更新成绩库\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     keydowmdaiban(); } void guanlimenu() {     printf("-----[good afternoon manager ]----\n");     printf("1.代办选项\n");     printf("2.增加账号和密码\n");     printf("3.删除账号和密码\n");     printf("4.修改账号和密码\n");     printf("5.输出所有账号和密码\n");     printf("6.录入所有的账号和密码\n");     printf("7.进入教师用户端\n");     printf("a.返回上一层\n");     printf("0.退出系统\n");     printf("----------------------------------\n");     guanlikeydown(); }

管理员相比较于教师,可以对账号进行操作,并且可以查询所有班的成绩,在最开始设计时,我将管理员的操作写的跟学生教师冲突,尤其是进入教师用户端,进入教师用户端的代码如下。

printf("请选择您想进行操作的班级\n");                 printf("1.网络1班\n");                 printf("2.网络2班\n");                 printf("3.网络3班\n");                 printf("4.网络4班\n");                 printf("5.网络5班\n");                 scanf("%s", choice1);                 if (choice1[1] != '\0') {                     printf("班级不存在请重新输入\n");                     goto  next1;                 } else if (choice1[0] == '1' || choice1[0] == '2' || choice1[0] == '3' || choice1[0] == '4' || choice1[0] == '5') {                     allclassnum[0] = choice1[0];                     teachermenu();                 } else {                     printf("班级不存在请重新输入\n");                     goto  next1;                 }

管理员可以选择班级进行查看,当管理员选择后我将全局变量allclassnum(记录教师班级)改成了相对应操作的班级然后进入教师端。

总结

最开始写管理系统时没有注意很多细节,并且逻辑不合理,导致刚刚写完时非常的拉垮,在以后写程序时一定会多多留心。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。