一、课程设计目的:
应用《C语言程序设计》课程的所有知识点,开发一个学生信息管理系统,采用计算机对学生信息进行管理,进一步提高了办学效益和现代化水平.为广大教师和学生提高工作效率,实现学生信息管理工作流程的系统化,规范化和自动化.现在我国的大中专院校的学生信息管理水平普遍都不是很高,有的还停留在全用纸介质基础上,这种管理方式已不能适应时代的发展,社会的需求,因为它浪费了大量的人力物力,也存在着许多不足的因素.在今天信息时代这种传统的管理方法必然会被计算机为基础的信息管理系统所代替.一个高效的学生信息管理系统可以存储历届的学生信息档案,不需要大量的人力,只需要几名专门录入员即可操作系统,节省大量人力,可以迅速查到所需信息,高效,安全,学生在能方便的查看自己的信息。
掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。
掌握C的基本概念和基础知识。
通过训练能够读懂较为复杂的C语言源程序并具备基本C语言程序设计的能力。
通过实训,培养自己编写、调试、分析程序的能力。
培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。
培养自己良好的学习兴趣,独立的编程风格。
通过课成设计设检查自己学习上的不足,达到熟练掌握C语言的基本知识和技能。
二、课程设计内容
//预编译+代码函数介绍:
#include
#include
#include
#include
#include
#pragma warning(disable:4996)
void Home(); //登录界面
int main_1(Node a); //管理员
int main_2(Node a); //教师
int main_3(Node a); //学生
void Home_1(Node a); //管理员界面
void Home_2(Node a); //教师界面
void Home_3(Node a); //学生界面
void Login_1(); //管理员登录
void Login_2(); //教师登录
void Login_3(); //学生登录
void Deposit_1(); //管理员录入
void Deposit_2(); //教师录入
void Deposit_3(); //学生录入
void find_teacher_main(); //找回教师主函数
void find_teacher_Home(); //找回教师目录
void teacher_output(); //教师输出
void teacher_Account(); //找回教师账号
void teacher_Password(); //找回教师密码
LinkList_teacher Make_teacher(); //教师链表创建
void find_student_main(); //学生信息查询主函数
void student_output(); //学生输出
void student_Account(); //学生账号查询
void student_Password(); //学生密码 查询
LinkList_student Make_student(); //学生链表创建
void Delete_student_main(); //删除学生
void Delete_teacher_main(); //删除教师
void Delete_administrator_main(); //删除管理员
LinkList Make_administrator(); //管理员链表创建
void Add_administrator(LinkList frist); //重新拷贝管理员信息
void Add_student(LinkList_student frist); //重新拷贝学生信息
void Delete_teacher_main(); //删除教师信息
void Add_teacher(LinkList_teacher frist); //重新拷贝教师信息
void Delete_teacher_main(); //删除教师信息
void Revise_student_main(); //修改学生密码
void Revise_teacher_main(); //修改教师密码
void Add_student_score(); //录入学生成绩
void Revise_student_score(); //修改学生成绩
void Sort_student_sum(); //对学生总分进行从大到小排序
void Sort_student_China(); //对学生语文进行从大到小排序
void Sort_student_Math(); //对学生高数进行从大到小排序
void Sort_student_English(); //对学生英语进行从大到小排序
void Sort_student_main(); //学生排序主函数
void Sort_student_Home(); //学生排序菜单
void Output_student_China(); //学生语文成绩打印
void Output_student_Math(); //学生高数成绩打印
void Output_student_Sum(); //学生总成绩打印
void Output_student_English(); //学生英语成绩打印
void Revise_administrator_main();
void Output_student_all(Node_student a); //查找学生成绩
void Revise_student_main_1(Node_student a); //学生修改密码
void Revise_teacher_main_1(Node_teacher a); //教师修改密码
void Sort_student_sum_min(); //对学生总分进行从小到大排序
void Sort_student_China_min(); //对学生语文进行从小到大排序
void Sort_student_Math_min(); //对学生高数进行从小到大排序
void Sort_student_English_min(); //对学生英语进行从小到大排序
void teacher_number(); //输出教师总数
void student_number(); //输出学生总数
int panduan(char name[80]); //判断学生账号是否重复,返回1重复,返回0不重复
int panduan_1(char name[80]); //判断教师账号是否重复,返回1重复,返回0不重复
三、设计与实现过程
首先是三个操作连接三个身份登录:
管理员可以进行的操作:
程序中目录:
教师可以进行的操作:
学生进行的操作:
查找的操作有:
排序进行的操作:
其中,登录进行文件指针进行遍历查找判断验证;
添加是将账号,密码,姓名放置在结构体中直接录入到文件中;
查询是运用创建链表遍历进行字符串的判断查找;
删除是对链表进行删除然后将更新后的链表拷入被清空的文件中;
修改是对链表内容进行修改然后将更新后的链表拷入被清空的文件中;
排序使用冒泡排序对链表进行内容上的移动;
文件是文本文档,可以直接排序导出使用;
结构体内容:
typedef struct Administrator //管理员
{
int n; //序号
char name[80]; //姓名
char Account[80]; //账号
char Password[80]; //密码
struct Administrator *next; //链表指针域
} Node, * LinkList;
typedef struct teacher //教师
{
int n; //序号
char name[80]; //名字
char Account[80]; //账号
char Password[80]; //密码
struct teacher *next; //链表指针域
}Node_teacher, * LinkList_teacher;
typedef struct student
{
int n; //序号
char name[80]; //姓名
char Account[80]; //账号
char Password[80]; //密码
float Math, Chian, English, Sum; //成绩部分
struct student *next; //链表指针域
}Node_student, * LinkList_student;
typedef struct Administrator //管理员
{
int n; //序号
char name[80]; //姓名
char Account[80]; //账号
char Password[80]; //密码
struct Administrator *next; //链表指针域
} Node, * LinkList;
typedef struct teacher //教师
{
int n; //序号
char name[80]; //名字
char Account[80]; //账号
char Password[80]; //密码
struct teacher *next; //链表指针域
}Node_teacher, * LinkList_teacher;
typedef struct student
{
int n; //序号
char name[80]; //姓名
char Account[80]; //账号
char Password[80]; //密码
float Math, Chian, English, Sum; //成绩部分
struct student *next; //链表指针域
}Node_student, * LinkList_student;
四、 设计技巧及体会
经过这次课程设计,我学到了很多东西:
①巩固和加深了对编程的理解,提高综合运用本课程所学知识的能力。
②培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
③经过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
④能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
这次高级语言程序设计,学生成绩管理系统,让我对高级语言有了进一步的认识。首先,想要学好这门课程,主要在于实践,要通过不断地上机操作才能更好的学习它。
之后,课程设计期间,在调试出现很多错误,很多警告的过程中我的知识也在得到不断地巩固;当你把代码输入电脑,并用编译器将其运行,发现通过不了,再来检查找出问题,这是一件非常辛苦的事情,也很浪费时间。于是在课程设计的时候,我花了好几天的时间来规划与写代码,将要实现的内容分析清楚,才把代码输入电脑。我们觉得写程序,应该先找到该程序中的核心地方,用多种方法来实现该核心,这才可能避免等到发现逻辑上或者编译器不支持上的错误,才来想补救的措施,这样花费时间在想补救措施是很不值得的。也让我学到了很多人生的哲理:懂得怎样去制定计划,怎样去实现这个计划,并掌握了在执行过程中怎样去克服心理上的不良情绪。我们对于高级语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序。
完整源代码:
提示:留有管理员暗门,第一次打开系统可先输入”99“添加管理员
#include#include #include #include #include #pragma warning(disable:4996) typedef struct Administrator { int n; char name[80];//姓名 char Account[80];//账号 char Password[80];//密码 struct Administrator *next; } Node, * LinkList; typedef struct teacher { int n; char name[80]; char Account[80]; char Password[80]; struct teacher *next; }Node_teacher, * LinkList_teacher; typedef struct student { int n; char name[80]; char Account[80]; char Password[80]; float Math, Chian, English, Sum; struct student *next; }Node_student, * LinkList_student; void Home(); //登录界面 int main_1(Node a); //管理员 int main_2(Node a); //教师 int main_3(Node a); //学生 void Home_1(Node a); //管理员界面 void Home_2(Node a); //教师界面 void Home_3(Node a); //学生界面 void Login_1(); //管理员登录 void Login_2(); //教师登录 void Login_3(); //学生登录 void Deposit_1(); //管理员录入 void Deposit_2(); //教师录入 void Deposit_3(); //学生录入 void find_teacher_main(); //找回教师主函数 void find_teacher_Home(); //找回教师目录 void teacher_output(); //教师输出 void teacher_Account(); //找回教师账号 void teacher_Password(); //找回教师密码 LinkList_teacher Make_teacher(); //教师链表创建 void find_student_main(); //学生信息查询主函数 void student_output(); //学生输出 void student_Account(); //学生账号查询 void student_Password(); //学生密码 查询 LinkList_student Make_student(); //学生链表创建 void Delete_student_main(); //删除学生 void Delete_teacher_main(); //删除教师 void Delete_administrator_main(); //删除管理员 LinkList Make_administrator(); //管理员链表创建 void Add_administrator(LinkList frist); //重新拷贝管理员信息 void Add_student(LinkList_student frist); //重新拷贝学生信息 void Delete_teacher_main(); //删除教师信息 void Add_teacher(LinkList_teacher frist); //重新拷贝教师信息 void Delete_teacher_main(); //删除教师信息 void Revise_student_main(); //修改学生密码 void Revise_teacher_main(); //修改教师密码 void Add_student_score(); //录入学生成绩 void Revise_student_score(); //修改学生成绩 void Sort_student_sum(); //对学生总分进行从大到小排序 void Sort_student_China(); //对学生语文进行从大到小排序 void Sort_student_Math(); //对学生高数进行从大到小排序 void Sort_student_English(); //对学生英语进行从大到小排序 void Sort_student_main(); //学生排序主函数 void Sort_student_Home(); //学生排序菜单 void Output_student_China(); //学生语文成绩打印 void Output_student_Math(); //学生高数成绩打印 void Output_student_Sum(); //学生总成绩打印 void Output_student_English(); //学生英语成绩打印 void Revise_administrator_main(); void Output_student_all(Node_student a); //查找学生成绩 void Revise_student_main_1(Node_student a); //学生修改密码 void Revise_teacher_main_1(Node_teacher a); //教师修改密码 void Sort_student_sum_min(); //对学生总分进行从小到大排序 void Sort_student_China_min(); //对学生语文进行从小到大排序 void Sort_student_Math_min(); //对学生高数进行从小到大排序 void Sort_student_English_min(); //对学生英语进行从小到大排序 void teacher_number(); //输出教师总数 void student_number(); //输出学生总数 int panduan(char name[80]); //判断学生账号是否重复,返回1重复,返回0不重复 int panduan_1(char name[80]); //判断教师账号是否重复,返回1重复,返回0不重复 int main() //初始界面主函数 { int n; for (;;) { system("cls"); system("color 8F"); for (;;) { Home(); scanf("%d", &n); switch (n) { case 1:Login_1(); break; case 2:Login_2(); break; case 3:Login_3(); break; case 99:Deposit_1(); break; case 0:return 0; break; default:printf("nattttt----------输入错误,重新输入----------n"); } getchar(); } } } void Home_3(Node_student a) //学生操作菜单 { system("cls"); printf("nnn"); printf("ttttt-----------------------------------n"); printf("ttttt----------欢迎学生%s登录---------n", a.name); printf("ttttt----------1、查询成绩--------------n"); printf("ttttt----------2、修改密码--------------n"); printf("ttttt----------0、退出学生端------------n"); printf("ttttt-----------------------------------n"); } void Home_2(Node_teacher a) //教师操作菜单 { system("cls"); printf("nnn"); printf("ttttt-----------------------------------n"); printf("ttttt----------欢迎老师%s登录---------n", a.name); printf("ttttt----------1、添加学生信息----------n"); printf("ttttt----------2、查询学生信息----------n"); printf("ttttt----------3、删除学生信息----------n"); printf("ttttt----------4、修改学生密码----------n"); printf("ttttt----------5、修改教师密码----------n"); printf("ttttt----------6、录入学生成绩----------n"); printf("ttttt----------7、修改学生成绩----------n"); printf("ttttt----------8、学生成绩排序----------n"); printf("ttttt----------0、退出教师端------------n"); printf("ttttt-----------------------------------n"); } void Home_1(Node a) //管理员操作菜单 { system("cls"); printf("nnn"); printf("ttttt----------------------------------n"); printf("ttttt----------欢迎管理员 %s 登录n", a.name); printf("ttttt----------1,添加教师信息----------n"); printf("ttttt----------2,查询教师信息----------n"); printf("ttttt----------3,删除教师信息----------n"); printf("ttttt----------4,修改教师密码----------n"); printf("ttttt----------5,添加管理员------------n"); printf("ttttt----------6,修改管理员密码--------n"); printf("ttttt----------7,删除管理员------------n"); printf("ttttt----------0,退出管理员端----------n"); printf("ttttt----------------------------------n"); } void Home() //初始界面 { system("cls"); printf("nnn"); printf("ttttt---------------------------------n"); printf("ttttt-----------学生管理系统----------n"); printf("ttttt----------1、管理员登录----------n"); printf("ttttt----------2、教师登录------------n"); printf("ttttt----------3、学生登陆------------n"); printf("ttttt----------0、退出登陆------------n"); printf("ttttt---------------------------------n"); } int main_1(Node a) //管理员操作主函数 { int n; for (;;) { Home_1(a); scanf("%d", &n); switch (n) { case 0:return 0; break; case 1:Deposit_2(); break; case 2:find_teacher_main(); break; case 3:Delete_teacher_main(); break; case 4:Revise_teacher_main(); break; case 5:Deposit_1(); break; case 6:Revise_administrator_main();break; case 7:Delete_administrator_main();break; default:printf("nattttt----------输入错误,重新输入----------n"); } getchar(); } } int main_2(Node_teacher a) //教师操作主函数 { int n; for (;;) { Home_2(a); scanf("%d", &n); switch (n) { case 0:return 0; break; case 1:Deposit_3(); break; case 2:find_student_main(); break; case 3:Delete_student_main(); break; case 4:Revise_student_main();break; case 5:Revise_teacher_main_1(a);break; case 6:Add_student_score();break; case 7:Revise_student_score();break; case 8:Sort_student_main();break; default:printf("nattttt----------输入错误,重新输入----------n"); } getchar(); } } int main_3(Node_student a) //学生操作主函数 { int n; for (;;) { Home_3(a); scanf("%d", &n); switch (n) { case 0:return 0; break; case 1:Output_student_all(a);break; case 2:Revise_student_main_1(a);break; default:printf("nattttt----------输入错误,重新输入----------n"); } getchar(); } } void Deposit_1() //添加管理员信息 { Node s, d; FILE* fp; fp = fopen("Administrator.txt", "ab+"); if (fp == NULL) printf("文件打开失败"); for (;;) { printf("nnn"); for (;;) { printf("ttttt------------------------------------n"); printf("ttttt----------请输入管理员账号(6位数字)-n"); printf("ttttt"); scanf("%s", s.Account); if (strlen(s.Account) != 7) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入管理员账号------n"); printf("ttttt"); scanf("%s", d.Account); if (strcmp(d.Account, s.Account) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入管理员密码(不超过14位字母数字)n"); printf("ttttt"); scanf("%s", s.Password); printf("n"); if (strlen(s.Password) <= 15) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入管理员账号------n"); printf("ttttt"); scanf("%s", d.Password); if (strcmp(d.Password, s.Password) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入管理员姓名(不超过80位字母数字)n"); printf("ttttt"); scanf("%s", s.name); printf("n"); if (strlen(s.name) <= 80) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入管理员姓名------n"); printf("ttttt"); scanf("%s", d.name); if (strcmp(d.name, s.name) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } s.n = 1; fprintf(fp, "%d %s %s %s n", s.n, s.name, s.Account, s.Password); system("cls"); printf("tttttn----------录入成功----------n"); fclose(fp); } void Deposit_2() //添加教师信息 { Node_teacher s, d; FILE* fp; fp = fopen("teacher.txt", "ab+"); if (fp == NULL) printf("文件打开失败"); for (;;) { printf("nnn"); for (;;) { printf("ttttt------------------------------------n"); printf("ttttt----------请输入教师账号(6位数字)-n"); printf("ttttt"); scanf("%s", s.Account); if (strlen(s.Account) != 7) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入教师账号------n"); printf("ttttt"); scanf("%s", d.Account); if (panduan(s.Account)==1) { printf("ttttt----------已有教师账号--------------n"); int esc; printf("ttttt----------输入1继续,输入0退出"); scanf("%d",&esc); if(esc!=1) return; strcpy(s.Account,"0"); } if (strcmp(d.Account, s.Account) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入教师密码(不超过14位字母数字)n"); printf("ttttt"); scanf("%s", s.Password); printf("n"); if (strlen(s.Password) <= 15) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入教师账号------n"); printf("ttttt"); scanf("%s", d.Password); if (strcmp(d.Password, s.Password) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入教师姓名(不超过80位字母数字)n"); printf("ttttt"); scanf("%s", s.name); printf("n"); if (strlen(s.name) <= 80) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入教师姓名------n"); printf("ttttt"); scanf("%s", d.name); if (strcmp(d.name, s.name) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } s.n = 1; fprintf(fp, "%d %s %s %s n", s.n, s.name, s.Account, s.Password); system("cls"); printf("tttttn----------录入成功----------n"); fclose(fp); } void Deposit_3() //添加学生信息 { Node_student s, d; FILE* fp; fp = fopen("student.txt", "ab+"); if (fp == NULL) printf("文件打开失败"); for (;;) { printf("nnn"); for (;;) { printf("ttttt------------------------------------n"); printf("ttttt----------请输入学生账号(6位数字)-n"); printf("ttttt"); scanf("%s", s.Account); if (strlen(s.Account) != 7) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入学生账号------n"); printf("ttttt"); scanf("%s", d.Account); if (panduan(s.Account)==1) { printf("ttttt----------已有学生账号--------------n"); int esc; printf("ttttt----------输入1继续,输入0退出"); scanf("%d",&esc); if(esc!=1) return; strcpy(s.Account,"0"); } if (strcmp(d.Account, s.Account) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入学生密码(不超过14位字母数字)n"); printf("ttttt"); scanf("%s", s.Password); printf("n"); if (strlen(s.Password) <= 15) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入学生密码------n"); printf("ttttt"); scanf("%s", d.Password); if (strcmp(d.Password, s.Password) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入学生姓名(不超过80位字母数字)n"); printf("ttttt"); scanf("%s", s.name); printf("n"); if (strlen(s.name) <= 80) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入学生姓名------n"); printf("ttttt"); scanf("%s", d.name); if (strcmp(d.name, s.name) == 0) break; else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } s.n = 1, s.Math = 0, s.English = 0, s.Chian = 0; s.Sum = s.Chian + s.English + s.Math; fprintf(fp, "%d %s %s %s %f %f %f %fn", s.n, s.name, s.Account, s.Password, s.Chian, s.English, s.Math, s.Sum); system("cls"); printf("tttttn----------录入成功----------n"); fclose(fp); } void Login_1() //管理员登陆 { int n; system("cls"); Node a, s; for (;;) { printf("nnn"); printf("ttttt------------------------------------n"); printf("ttttt----------请输入管理员账号----------n"); printf("ttttt "); scanf("%s", a.Account); printf("n"); printf("ttttt----------请输入管理员密码----------n"); printf("ttttt "); scanf("%s", a.Password); printf("n"); FILE* fp, * fy; fp = fopen("Administrator.txt", "ab+"); if (fp == NULL) printf("文件打开失败"); int flag = 0; for (;;) { fscanf(fp, "%d %s %s %s n", &s.n, s.name, s.Account, s.Password); if (strcmp(a.Account, s.Account) == 0) { if (strcmp(a.Password, s.Password) == 0) flag = 1; else flag = 0; break; } if (feof(fp)) break; } if (flag == 1) { break; } system("cls"); printf("ttttt----------输入错误-------------n"); int esc; printf("ttttt----------输入1重新输入,输入0退出:"); scanf("%d",&esc); if(esc == 0) return; fclose(fp); system("cls"); fclose(fp); } system("cls"); main_1(s); } void Login_2() //教师登录 { int n; system("cls"); Node_teacher a, s; for (;;) { printf("nnn"); printf("ttttt------------------------------------n"); printf("ttttt----------请输入教师账号----------n"); printf("ttttt "); scanf("%s", a.Account); printf("n"); printf("ttttt----------请输入教师密码----------n"); printf("ttttt "); scanf("%s", a.Password); printf("n"); FILE* fp, * fy; fp = fopen("teacher.txt", "ab+"); if (fp == NULL) printf("文件打开失败"); int flag = 0; for (;;) { fscanf(fp, "%d %s %s %s n", &s.n, s.name, s.Account, s.Password); if (strcmp(a.Account, s.Account) == 0) { if (strcmp(a.Password, s.Password) == 0) flag = 1; else flag = 0; break; } if (feof(fp)) break; } if (flag == 1) { break; } system("cls"); printf("ttttt----------输入错误-------------n"); int esc; printf("ttttt----------输入1重新输入,输入0退出:"); scanf("%d",&esc); if(esc == 0) return; fclose(fp); system("cls"); fclose(fp); } system("cls"); main_2(s); } void Login_3() //学生登录 { int n; system("cls"); Node_student a, s; for (;;) { printf("nnn"); printf("ttttt------------------------------------n"); printf("ttttt----------请输入学生账号----------n"); printf("ttttt "); scanf("%s", a.Account); printf("n"); printf("ttttt----------请输入学生密码----------n"); printf("ttttt "); scanf("%s", a.Password); printf("n"); FILE* fp, * fy; fp = fopen("student.txt", "ab+"); if (fp == NULL) printf("文件打开失败"); int flag = 0; for (;;) { fscanf(fp, "%d %s %s %s %f %f %f %fn", &s.n, s.name, s.Account, s.Password, &s.Chian, &s.English, &s.Math, &s.Sum); if (strcmp(a.Account, s.Account) == 0) { if (strcmp(a.Password, s.Password) == 0) flag = 1; else flag = 0; break; } if (feof(fp)) break; } if (flag == 1) { break; } system("cls"); printf("ttttt----------输入错误-------------n"); int esc; printf("ttttt----------输入1重新输入,输入0退出:"); scanf("%d",&esc); if(esc == 0) return; fclose(fp); system("cls"); } system("cls"); main_3(s); } void find_teacher_Home() //教师信息查找目录 { printf("nnnn"); printf("ttttt--------------------------------------n"); printf("ttttt----------1,输出全部教师信息----------n"); printf("ttttt----------2,查找教师账号--------------n"); printf("ttttt----------3,查找教师密码--------------n"); printf("ttttt----------4,查找教师数目--------------n"); printf("ttttt----------0,退出查找系统--------------n"); printf("ttttt--------------------------------------n"); } void find_teacher_main() //教师信息查询主函数 { int n; for (;;) { system("cls"); for (;;) { find_teacher_Home(); scanf("%d", &n); switch (n) { case 1:teacher_output(); break; case 2:teacher_Account(); break; case 3:teacher_Password(); break; case 4:teacher_number();break; case 0:return; break; default:printf("nattttt----------输入错误,重新输入----------n"); } } } } void teacher_output() //教师信息全部输出 { system("cls"); printf("nnnnn"); LinkList_teacher r,frist; frist = Make_teacher(); r = frist; printf("n"); for (;;) { if (r->next == NULL) { printf("ttttt---序号:%d 姓名:%s 账号:%s 密码:%s n", &r->n, r->name, r->Account,r->Password); break; } printf("ttttt---序号:%d 姓名:%s 账号:%s 密码:%s n", &r->n, r->name, r->Account,r->Password); r = r->next; } printf("ttttt----------输出完毕----------n"); char n[10]; printf("ttttt----------输入任意字符回车继续----------n"); scanf("%s", n); getchar(); system("cls"); } void teacher_Account() //教师账号查询 { system("cls"); printf("nnnnn"); LinkList_teacher frist,r; frist = Make_teacher(); char name[80]; printf("ttttt----------请输入教师姓名:"); scanf("%s",name); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt----------教师账号为:%sn", r->Account ); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } char n[10]; printf("ttttt----------输入任意字符回车继续----------n"); scanf("%s", n); getchar(); system("cls"); } void teacher_Password() //教师密码查询 { system("cls"); printf("nnnnn"); LinkList_teacher frist,r; frist = Make_teacher(); char name[80]; printf("ttttt----------请输入教师姓名:"); scanf("%s",name); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt----------教师密码为:%sn", r->Password ); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } char n[10]; printf("ttttt----------输入任意字符回车继续----------n"); scanf("%s", n); getchar(); system("cls"); } void find_student_Home() //学生信息查找目录 { system("cls"); printf("nnnn"); printf("ttttt--------------------------------------n"); printf("ttttt----------1,输出全部学生信息----------n"); printf("ttttt----------2,查找学生账号--------------n"); printf("ttttt----------3,查找学生密码--------------n"); printf("ttttt----------4,查找学生总数--------------n"); printf("ttttt----------0,退出查找系统--------------n"); printf("ttttt--------------------------------------n"); } void find_student_main() //学生信息查找主函数 { int n; for (;;) { system("cls"); for (;;) { find_student_Home(); scanf("%d", &n); switch (n) { case 1:student_output(); break; case 2:student_Account(); break; case 3:student_Password(); break; case 4:student_number();break; case 0:return; break; default:printf("nattttt----------输入错误,重新输入----------n"); } } } } void student_output() //学生信息的输出 { system("cls"); printf("nnnn"); LinkList_student frist; frist = Make_student(); LinkList_student r; r = frist; printf("n"); for (;;) { if (r->next == NULL) { printf("序号:%d 姓名:%s 账号:%s 密码:%s 语文:%f 英语:%f 高数%f 总分:%fn", r->n, r->name, r->Account, r->Password, r->Chian, r->English, r->Math, r->Sum); break; } printf("序号:%d 姓名:%s 账号:%s 密码:%s 语文:%f 英语:%f 高数%f 总分:%fn", r->n, r->name, r->Account, r->Password, r->Chian, r->English, r->Math, r->Sum); r = r->next; } printf("n"); char n[10]; printf("ttttt----------输入回车继续----------n"); scanf("%c", &n); getchar(); system("cls"); } void student_Account() //学生账号查询 { system("cls"); printf("nnnn"); LinkList_student frist,r; frist = Make_student(); char name[80]; printf("ttttt----------请输入学生姓名----------: "); scanf("%s",name); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt----------学生账号为:%sn", r->Account ); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } char n[10]; printf("ttttt----------输入任意字符回车继续----------n"); scanf("%s", n); getchar(); system("cls"); } void student_Password() //学生密码查询 { system("cls"); printf("nnnn"); LinkList_student frist,r; frist = Make_student(); char name[80]; printf("ttttt----------请输入学生姓名----------: "); scanf("%s",name); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt----------学生密码为:%sn", r->Password ); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } char n[10]; printf("ttttt----------输入任意字符回车继续----------n"); scanf("%s", n); getchar(); system("cls"); } LinkList_student Make_student() //学生信息链表的创建 { int n; FILE* fp; fp = fopen("student.txt", "r"); if (fp == NULL) printf("文件打开失败"); LinkList_student r,frist; frist = (LinkList_student)malloc(sizeof(Node_student)); r = frist; fscanf(fp, "%d %s %s %s %f %f %f %fn", &r->n, r->name, r->Account, r->Password, &r->Chian, &r->English, &r->Math, &r->Sum); for (;;) { if(feof(fp)!=0) break; r->next = (LinkList_student)malloc(sizeof(Node_student)); r = r->next; fscanf(fp, "%d %s %s %s %f %f %f %fn", &r->n, r->name, r->Account, r->Password, &r->Chian, &r->English, &r->Math, &r->Sum); } r->next = NULL; return frist; } LinkList_teacher Make_teacher() //教师信息链表的创建 { int n; FILE* fp; fp = fopen("teacher.txt", "r"); if (fp == NULL) printf("文件打开失败"); LinkList_teacher r,frist ; frist = (LinkList_teacher)malloc(sizeof(Node_teacher)); r = frist; fscanf(fp, "%d %s %s %s n", &r->n, r->name, r->Account,r->Password); //fscanf(fp, "序号:%d 姓名:%s 账号:%s 密码:%s n", &r->n, r->name, r->Account,r->Password); for (;;) { if(feof(fp)!=0) break; r->next = (LinkList_teacher)malloc(sizeof(Node_teacher)); r = r->next; fscanf(fp, "%d %s %s %s n", &r->n, r->name, r->Account,r->Password); } r->next = NULL; return frist; } void Delete_student_main() //删除学生信息 { int esc; LinkList_student frist,r,s,t; frist = Make_student(); char name[80]; printf("nttttt----------请输入要删除学生的名字:"); scanf("%s",name); printf("nttttt----------是否要删除学生:%s nttttt----------确认输入1,返回输入0nttttt",name); scanf("%d",&esc); if (esc==1) { r = frist; if (strcmp(r->name , name)==0) { frist = r->next; free(r); } else { for (;;) { if (strcmp(r->next->name, name)==0) { s = r->next->next ; t = r->next; r->next = s; free(t); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } } Add_student(frist); printf("nttttt----------删除成功----------n"); printf("nttttt----------输入回车结束----------n"); getchar(); return; } return; } void Add_student(LinkList_student frist) //重新拷贝学生信息 { int n=0; FILE* fp; fp = fopen("student.txt", "w"); if (fp == NULL) printf("文件打开失败"); LinkList_student r; r = frist; for (;;) { n = n + 1; if (r->next == NULL) { fprintf(fp, "%d %s %s %s %f %f %f %fn", n, r->name, r->Account, r->Password, r->Chian, r->English, r->Math, r->Sum); break; } fprintf(fp, "%d %s %s %s %f %f %f %fn", n, r->name, r->Account, r->Password, r->Chian, r->English, r->Math, r->Sum); r = r->next; } fclose(fp); } void Add_teacher(LinkList_teacher frist) // 重新拷贝教师信息 { int n=0; FILE* fp; fp = fopen("teacher.txt", "w"); if (fp == NULL) printf("文件打开失败"); LinkList_teacher r; r = frist; for (;;) { n = n+1; if (r->next == NULL) { fprintf(fp, "%d %s %s %s n", n, r->name, r->Account, r->Password); break; } fprintf(fp, "%d %s %s %s n", n, r->name, r->Account, r->Password); r = r->next; } fclose(fp); } void Delete_teacher_main() //删除教师信息 { int esc; LinkList_teacher frist,r,s,t; frist = Make_teacher(); char name[10]; printf("nttttt----------请输入要删除教师的名字:"); scanf("%s",name); printf("nttttt----------是否要删除教师:%s nttttt----------确认输入1,返回输入0nttttt",name); scanf("%d",&esc); if (esc==1) { r = frist; if (strcmp(r->name , name)==0) { frist = r->next; free(r); } else { for (;;) { if (strcmp(r->next->name, name)==0) { s = r->next->next ; t = r->next; r->next = s; free(t); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } } Add_teacher(frist); printf("nttttt----------删除成功----------n"); printf("nttttt----------输入回车结束----------n"); getchar(); return; } return; } void Revise_student_main() //修改学生密码 { system("cls"); printf("nnn"); LinkList_student frist,r; char Password[80]; frist = Make_student(); char name[80]; printf("nttttt----------请输入学生姓名:"); scanf("%s",name); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt-----------学生旧密码:%s", r->Password ); //查到位置 for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入学生新密码(不超过14位字母数字)n"); printf("ttttt"); scanf("%s", r->Password); printf("n"); if (strlen(r->Password) <= 15) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入学生新密码------n"); printf("ttttt"); scanf("%s",Password); if (strcmp(Password, r->Password) == 0) { Add_student(frist); printf("nttttt----------修改成功!----------n"); printf("nttttt----------输入回车结束-------n"); getchar(); return; } else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } break; } if (r->next == NULL) { printf("n未查找到内容n"); getchar(); break; } r = r->next; } } void Revise_teacher_main() //修改教师密码 { system("cls"); printf("nnn"); LinkList_teacher frist,r; char Password[80]; frist = Make_teacher(); char name[80]; printf("nttttt----------请输入教师姓名:"); scanf("%s",name); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt-----------教师旧密码:%s", r->Password ); //查到位置 for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入教师新密码(不超过14位字母数字)n"); printf("ttttt"); scanf("%s", r->Password); printf("n"); if (strlen(r->Password) <= 15) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入教师新密码------n"); printf("ttttt"); scanf("%s",Password); if (strcmp(Password, r->Password) == 0) { Add_teacher(frist); printf("nttttt----------修改成功!----------n"); printf("nttttt----------输入回车结束-------n"); getchar(); return; } else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } break; } if (r->next == NULL) { printf("n未查找到内容n"); getchar(); break; } r = r->next; } } void Add_student_score() //录入全部学生成绩 { int n; FILE* fp; fp = fopen("student.txt", "r"); if (fp == NULL) printf("文件打开失败"); LinkList_student r,frist; frist = (LinkList_student)malloc(sizeof(Node_student)); r = frist; fscanf(fp, "%d %s %s %s %f %f %f %fn", &r->n, r->name, r->Account, r->Password, &r->Chian, &r->English, &r->Math, &r->Sum); for (;;) { if(feof(fp)!=0) break; r->next = (LinkList_student)malloc(sizeof(Node_student)); r = r->next; fscanf(fp, "%d %s %s %s %f %f %f %fn", &r->n, r->name, r->Account, r->Password, &r->Chian, &r->English, &r->Math, &r->Sum); } r->next = NULL; r = frist; printf("n"); for (;;) { if (r->next == NULL) { r->n = n; n = n+1; printf("nttttt----------姓名:%s ",r->name); printf("nttttt---------请输入学生高数成绩:"); scanf("%f",&r->Math); printf("nttttt---------请输入学生语文成绩:"); scanf("%f",&r->Chian); printf("nttttt---------请输入学生英语成绩:"); scanf("%f",&r->English); r->Sum = r->Chian + r->English + r->Math; Add_student(frist); break; } r->n = n; n = n+1; printf("nttttt----------姓名:%s ",r->name); printf("nttttt---------请输入学生高数成绩:"); scanf("%f",&(r->Math)); printf("nttttt---------请输入学生语文成绩:"); scanf("%f",&r->Chian); printf("nttttt---------请输入学生英语成绩:"); scanf("%f",&r->English); r->Sum = r->Chian + r->English + r->Math; printf("%f",r->Sum); r = r->next; } } void Revise_student_score() //修改学生成绩 { system("cls"); printf("nnnnn"); LinkList_student frist,r; frist = Make_student(); char name[80]; printf("ttttt----------请输入学生姓名----------: "); scanf("%s",name); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt----------学生账号为:%sn", r->Account ); printf("nttttt----------姓名:%s ",r->name); printf("nttttt---------请输入学生高数成绩:"); scanf("%f",&r->Math); printf("nttttt---------请输入学生语文成绩:"); scanf("%f",&r->Chian); printf("nttttt---------请输入学生英语成绩:"); scanf("%f",&r->English); r->Sum = r->Chian + r->English + r->Math; Add_student(frist); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } char n[10]; printf("nttttt------------修改成功!----------n"); printf("ttttt----------输入回车继续----------n"); getchar(); } void Sort_student_sum() //对学生总成绩排序 { LinkList_student frist,r,i,j; Node_student temp; strcpy(temp.name, "a"); strcpy(temp.Account, "a"); strcpy(temp.Password, "a"); temp.Chian = 0, temp.English = 0; temp.Math = 0, temp.Sum = 0; frist = Make_student(); i = j = r = frist; for (;;) { j = frist; for (;;) { if (j->Sum < j->next->Sum) { strcpy(temp.name, j->name); strcpy(temp.Account, j->Account); strcpy(temp.Password, j->Password); temp.Chian = j->Chian, temp.English = j->English; temp.Math = j->Math, temp.Sum = j->Sum; strcpy(j->name, j->next->name); strcpy(j->Account, j->next->Account); strcpy(j->Password, j->next->Password); j->Chian = j->next->Chian, j->English = j->next->English; j->Math = j->next->Math, j->Sum = j->next->Sum; strcpy(j->next->name, temp.name); strcpy(j->next->Account, temp.Account); strcpy(j->next->Password, temp.Password); j->next->Chian = temp.Chian, j->next->English = temp.English; j->next->Math = temp.Math, j->next->Sum = temp.Sum; } if (j->next->next == NULL) break; j = j->next; } if (i->next == NULL) break; i = i->next; } Add_student(frist); Output_student_Sum(); return; } void Sort_student_China() //对学生语文成绩排序 { LinkList_student frist,r,i,j; Node_student temp; strcpy(temp.name, "a"); strcpy(temp.Account, "a"); strcpy(temp.Password, "a"); temp.Chian = 0, temp.English = 0; temp.Math = 0, temp.Sum = 0; frist = Make_student(); i = j = r = frist; for (;;) { j = frist; for (;;) { if (j->Chian < j->next->Chian) { strcpy(temp.name, j->name); strcpy(temp.Account, j->Account); strcpy(temp.Password, j->Password); temp.Chian = j->Chian, temp.English = j->English; temp.Math = j->Math, temp.Sum = j->Sum; strcpy(j->name, j->next->name); strcpy(j->Account, j->next->Account); strcpy(j->Password, j->next->Password); j->Chian = j->next->Chian, j->English = j->next->English; j->Math = j->next->Math, j->Sum = j->next->Sum; strcpy(j->next->name, temp.name); strcpy(j->next->Account, temp.Account); strcpy(j->next->Password, temp.Password); j->next->Chian = temp.Chian, j->next->English = temp.English; j->next->Math = temp.Math, j->next->Sum = temp.Sum; } if (j->next->next == NULL) break; j = j->next; } if (i->next == NULL) break; i = i->next; } Add_student(frist); Output_student_China(); return; } void Sort_student_Math() //对学生数学成绩排序 { LinkList_student frist,r,i,j; Node_student temp; strcpy(temp.name, "a"); strcpy(temp.Account, "a"); strcpy(temp.Password, "a"); temp.Chian = 0, temp.English = 0; temp.Math = 0, temp.Sum = 0; frist = Make_student(); i = j = r = frist; for (;;) { j = frist; for (;;) { if (j->Math < j->next->Math) { strcpy(temp.name, j->name); strcpy(temp.Account, j->Account); strcpy(temp.Password, j->Password); temp.Chian = j->Chian, temp.English = j->English; temp.Math = j->Math, temp.Sum = j->Sum; strcpy(j->name, j->next->name); strcpy(j->Account, j->next->Account); strcpy(j->Password, j->next->Password); j->Chian = j->next->Chian, j->English = j->next->English; j->Math = j->next->Math, j->Sum = j->next->Sum; strcpy(j->next->name, temp.name); strcpy(j->next->Account, temp.Account); strcpy(j->next->Password, temp.Password); j->next->Chian = temp.Chian, j->next->English = temp.English; j->next->Math = temp.Math, j->next->Sum = temp.Sum; } if (j->next->next == NULL) break; j = j->next; } if (i->next == NULL) break; i = i->next; } Add_student(frist); Output_student_Math(); return; } void Sort_student_English() //对学生英语成绩排序 { LinkList_student frist,r,i,j; Node_student temp; strcpy(temp.name, "a"); strcpy(temp.Account, "a"); strcpy(temp.Password, "a"); temp.Chian = 0, temp.English = 0; temp.Math = 0, temp.Sum = 0; frist = Make_student(); i = j = r = frist; for (;;) { j = frist; for (;;) { if (j->English < j->next->English) { strcpy(temp.name, j->name); strcpy(temp.Account, j->Account); strcpy(temp.Password, j->Password); temp.Chian = j->Chian, temp.English = j->English; temp.Math = j->Math, temp.Sum = j->Sum; strcpy(j->name, j->next->name); strcpy(j->Account, j->next->Account); strcpy(j->Password, j->next->Password); j->Chian = j->next->Chian, j->English = j->next->English; j->Math = j->next->Math, j->Sum = j->next->Sum; strcpy(j->next->name, temp.name); strcpy(j->next->Account, temp.Account); strcpy(j->next->Password, temp.Password); j->next->Chian = temp.Chian, j->next->English = temp.English; j->next->Math = temp.Math, j->next->Sum = temp.Sum; } if (j->next->next == NULL) break; j = j->next; } if (i->next == NULL) break; i = i->next; } Add_student(frist); Output_student_English(); return; } void Sort_student_Home() //学生成绩排序菜单 { system("cls"); printf("nnn"); printf("ttttt-------------------------------------------------n"); printf("ttttt----------1、对学生语文从大到小排序--------------n"); printf("ttttt----------2、对学生英语从大到小排序--------------n"); printf("ttttt----------3、对学生高数从大到小排序--------------n"); printf("ttttt----------4、对学生总分从大到小排序--------------n"); printf("ttttt----------5、对学生语文从小到大排序--------------n"); printf("ttttt----------6、对学生英语从小到大排序--------------n"); printf("ttttt----------7、对学生高数从小到大排序--------------n"); printf("ttttt----------8、对学生总分从小到大排序--------------n"); printf("ttttt----------0、退出学生排序------------------------n"); printf("ttttt-------------------------------------------------n"); printf("nnn"); } void Sort_student_main() //学生成绩排序主函数 { int n; for (;;) { system("cls"); for (;;) { Sort_student_Home(); scanf("%d", &n); switch (n) { case 1:Sort_student_China(); break; case 2:Sort_student_English(); break; case 3:Sort_student_Math(); break; case 4:Sort_student_sum(); break; case 5:Sort_student_China_min(); break; case 6:Sort_student_English_min(); break; case 7:Sort_student_Math_min(); break; case 8:Sort_student_sum_min(); break; case 0:return; break; default:printf("nattttt----------输入错误,重新输入----------n"); } } } } void Output_student_China() //学生语文成绩打印 { LinkList_student frist; frist = Make_student(); LinkList_student r; r = frist; printf("n"); for (;;) { if (r->next == NULL) { printf("序号:%d 姓名:%s 语文:%fn", r->n, r->name, r->Chian); break; } printf("序号:%d 姓名:%s 语文:%fn", r->n, r->name, r->Chian); r = r->next; } printf("n"); char n[10]; printf("ttttt----------输入回车继续----------n"); scanf("%c", &n); getchar(); system("cls"); } void Output_student_Math() //学生数学成绩打印 { LinkList_student frist; frist = Make_student(); LinkList_student r; r = frist; printf("n"); for (;;) { if (r->next == NULL) { printf("序号:%d 姓名:%s 高数:%fn", r->n, r->name, r->Math); break; } printf("序号:%d 姓名:%s 高数:%fn", r->n, r->name, r->Math); r = r->next; } printf("n"); char n[10]; printf("ttttt----------输入回车继续----------n"); scanf("%c", &n); getchar(); system("cls"); } void Output_student_English() //学生英语成绩打印 { LinkList_student frist; frist = Make_student(); LinkList_student r; r = frist; printf("n"); for (;;) { if (r->next == NULL) { printf("序号:%d 姓名:%s 英语:%fn", r->n, r->name, r->English); break; } printf("序号:%d 姓名:%s 英语:%fn", r->n, r->name, r->English); r = r->next; } printf("n"); char n[10]; printf("ttttt----------输入回车继续----------n"); scanf("%c", &n); getchar(); system("cls"); } void Output_student_Sum() //学生总成绩打印 { LinkList_student frist; frist = Make_student(); LinkList_student r; r = frist; printf("n"); for (;;) { if (r->next == NULL) { printf("序号:%d 姓名:%s 总分:%fn", r->n, r->name, r->Sum); break; } printf("序号:%d 姓名:%s 总分:%fn", r->n, r->name, r->Sum); r = r->next; } printf("n"); char n[10]; printf("ttttt----------输入回车继续----------n"); scanf("%c", &n); system("cls"); } void Delete_administrator_main() //删除管理员 { int esc; LinkList frist,r,s,t; frist = Make_administrator(); char name[10]; printf("nttttt----------请输入要删除管理员的名字:"); scanf("%s",name); printf("nttttt----------是否要删除管理员:%s nttttt----------确认输入1,返回输入0nttttt",name); scanf("%d",&esc); if (esc==1) { r = frist; if (strcmp(r->name , name)==0) { frist = r->next; free(r); } else { for (;;) { if (strcmp(r->next->name, name)==0) { s = r->next->next ; t = r->next; r->next = s; free(t); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } } Add_administrator(frist); printf("nttttt----------删除成功----------n"); printf("nttttt----------输入回车结束----------n"); getchar(); return; } return; } LinkList Make_administrator() //管理员链表创建 { int n; FILE* fp; fp = fopen("Administrator.txt", "r"); if (fp == NULL) printf("文件打开失败"); LinkList r,frist ; frist = (LinkList)malloc(sizeof(Node)); r = frist; fscanf(fp, "%d %s %s %s n", &r->n, r->name, r->Account,r->Password); //fscanf(fp, "序号:%d 姓名:%s 账号:%s 密码:%s n", &r->n, r->name, r->Account,r->Password); for (;;) { if(feof(fp)!=0) break; r->next = (LinkList)malloc(sizeof(Node)); r = r->next; fscanf(fp, "%d %s %s %s n", &r->n, r->name, r->Account,r->Password); } r->next = NULL; return frist; } void Add_administrator(LinkList frist) //重新拷贝管理员信息 { int n=0; FILE* fp; fp = fopen("Administrator.txt", "w"); if (fp == NULL) printf("文件打开失败"); LinkList r; r = frist; for (;;) { n = n + 1; if (r->next == NULL) { fprintf(fp, "%d %s %s %s n", n, r->name, r->Account, r->Password); break; } fprintf(fp, "%d %s %s %s n", n, r->name, r->Account, r->Password); r = r->next; } fclose(fp); return; } void Revise_administrator_main() //修改管理员密码 { system("cls"); printf("nnn"); LinkList frist,r; char Password[20]; frist = Make_administrator(); if (frist == NULL) { printf("ttttt----------未查询到结果----------n"); printf("ttttt----------输入回车退出----------n"); getchar(); return; } char name[10]; printf("nttttt----------请输入管理员姓名:"); scanf("%s",name); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt-----------管理员旧密码:%s", r->Password ); //查到位置 for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入管理员新密码(不超过14位字母数字)n"); printf("ttttt"); scanf("%s", r->Password); printf("n"); if (strlen(r->Password) <= 15) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入管理员新密码------n"); printf("ttttt"); scanf("%s",Password); if (strcmp(Password, r->Password) == 0) { Add_administrator(frist); printf("nttttt----------修改成功!----------n"); printf("nttttt----------输入回车结束-------n"); getchar(); return; } else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } break; } if (r->next == NULL) { printf("n未查找到内容n"); getchar(); break; } r = r->next; } } void Output_student_all(Node_student a) //学生查找学生成绩 { system("cls"); printf("nnnn"); Sort_student_sum(); LinkList_student frist,r; frist = Make_student(); r = frist; char name[80]; printf("ttttt----------请输入姓名----------: "); scanf("%s",name); if (strcmp(a.name,name)!=0) { printf("nttttt----------请不要输入其他学生的名字---------n"); getchar(); return; } for (;;) { if (strcmp(r->name ,name) == 0) { printf("序号:%d 姓名:%s 账号:%s 密码:%s 语文:%f 英语:%f 高数%f 总分:%fn", r->n, r->name, r->Account, r->Password, r->Chian, r->English, r->Math, r->Sum); break; } if (r->next == NULL) { printf("n未查找到内容n"); break; } r = r->next; } char n[10]; printf("ttttt----------输入任意字符回车继续----------n"); scanf("%s", n); } void Revise_student_main_1(Node_student a) //学生修改密码 { system("cls"); printf("nnn"); LinkList_student frist,r; char Password[80]; frist = Make_student(); char name[80]; printf("nttttt----------请输入学生姓名:"); scanf("%s",name); if (strcmp(a.name,name)!=0) { printf("nttttt----------请不要输入其他学生的名字---------n"); getchar(); return; } r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt-----------学生旧密码:%s", r->Password ); //查到位置 for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入学生新密码(不超过14位字母数字)n"); printf("ttttt"); scanf("%s", r->Password); printf("n"); if (strlen(r->Password) <= 15) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入学生新密码------n"); printf("ttttt"); scanf("%s",Password); if (strcmp(Password, r->Password) == 0) { Add_student(frist); printf("nttttt----------修改成功!----------n"); printf("nttttt----------输入回车结束-------n"); getchar(); return; } else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } break; } if (r->next == NULL) { printf("n未查找到内容n"); getchar(); break; } r = r->next; } } void Revise_teacher_main_1(Node_teacher a) //教师修改密码 { system("cls"); printf("nnn"); LinkList_teacher frist,r; char Password[80]; frist = Make_teacher(); char name[80]; printf("nttttt----------请输入教师姓名:"); scanf("%s",name); if (strcmp(a.name,name)!=0) { printf("nttttt----------请不要输入其他教师的名字---------n"); getchar(); return; } r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { printf("ttttt-----------教师旧密码:%s", r->Password ); //查到位置 for (;;) { printf("nnn"); for (;;) { printf("ttttt----------请输入教师新密码(不超过14位字母数字)n"); printf("ttttt"); scanf("%s", r->Password); printf("n"); if (strlen(r->Password) <= 15) break; else printf("ttttt----------输入错误--------------n"); } printf("ttttt------------------------------------n"); printf("ttttt----------请再次输入教师新密码------n"); printf("ttttt"); scanf("%s",Password); if (strcmp(Password, r->Password) == 0) { Add_teacher(frist); printf("nttttt----------修改成功!----------n"); printf("nttttt----------输入回车结束-------n"); getchar(); return; } else printf("ttttt-----------俩次输入不一致-----------n"); system("cls"); } break; } if (r->next == NULL) { printf("n未查找到内容n"); getchar(); break; } r = r->next; } } void Sort_student_sum_min() //对学生总分进行从小到大排序 { LinkList_student frist,r,i,j; Node_student temp; strcpy(temp.name, "a"); strcpy(temp.Account, "a"); strcpy(temp.Password, "a"); temp.Chian = 0, temp.English = 0; temp.Math = 0, temp.Sum = 0; frist = Make_student(); i = j = r = frist; for (;;) { j = frist; for (;;) { if (j->Sum > j->next->Sum) { strcpy(temp.name, j->name); strcpy(temp.Account, j->Account); strcpy(temp.Password, j->Password); temp.Chian = j->Chian, temp.English = j->English; temp.Math = j->Math, temp.Sum = j->Sum; strcpy(j->name, j->next->name); strcpy(j->Account, j->next->Account); strcpy(j->Password, j->next->Password); j->Chian = j->next->Chian, j->English = j->next->English; j->Math = j->next->Math, j->Sum = j->next->Sum; strcpy(j->next->name, temp.name); strcpy(j->next->Account, temp.Account); strcpy(j->next->Password, temp.Password); j->next->Chian = temp.Chian, j->next->English = temp.English; j->next->Math = temp.Math, j->next->Sum = temp.Sum; } if (j->next->next == NULL) break; j = j->next; } if (i->next == NULL) break; i = i->next; } Add_student(frist); Output_student_Sum(); return; } void Sort_student_China_min() //对学生语文进行从小到大排序 { LinkList_student frist,r,i,j; Node_student temp; strcpy(temp.name, "a"); strcpy(temp.Account, "a"); strcpy(temp.Password, "a"); temp.Chian = 0, temp.English = 0; temp.Math = 0, temp.Sum = 0; frist = Make_student(); i = j = r = frist; for (;;) { j = frist; for (;;) { if (j->Chian > j->next->Chian) { strcpy(temp.name, j->name); strcpy(temp.Account, j->Account); strcpy(temp.Password, j->Password); temp.Chian = j->Chian, temp.English = j->English; temp.Math = j->Math, temp.Sum = j->Sum; strcpy(j->name, j->next->name); strcpy(j->Account, j->next->Account); strcpy(j->Password, j->next->Password); j->Chian = j->next->Chian, j->English = j->next->English; j->Math = j->next->Math, j->Sum = j->next->Sum; strcpy(j->next->name, temp.name); strcpy(j->next->Account, temp.Account); strcpy(j->next->Password, temp.Password); j->next->Chian = temp.Chian, j->next->English = temp.English; j->next->Math = temp.Math, j->next->Sum = temp.Sum; } if (j->next->next == NULL) break; j = j->next; } if (i->next == NULL) break; i = i->next; } Add_student(frist); Output_student_China(); return; } void Sort_student_Math_min() //对学生高数进行从小到大排序 { LinkList_student frist,r,i,j; Node_student temp; strcpy(temp.name, "a"); strcpy(temp.Account, "a"); strcpy(temp.Password, "a"); temp.Chian = 0, temp.English = 0; temp.Math = 0, temp.Sum = 0; frist = Make_student(); i = j = r = frist; for (;;) { j = frist; for (;;) { if (j->Math > j->next->Math) { strcpy(temp.name, j->name); strcpy(temp.Account, j->Account); strcpy(temp.Password, j->Password); temp.Chian = j->Chian, temp.English = j->English; temp.Math = j->Math, temp.Sum = j->Sum; strcpy(j->name, j->next->name); strcpy(j->Account, j->next->Account); strcpy(j->Password, j->next->Password); j->Chian = j->next->Chian, j->English = j->next->English; j->Math = j->next->Math, j->Sum = j->next->Sum; strcpy(j->next->name, temp.name); strcpy(j->next->Account, temp.Account); strcpy(j->next->Password, temp.Password); j->next->Chian = temp.Chian, j->next->English = temp.English; j->next->Math = temp.Math, j->next->Sum = temp.Sum; } if (j->next->next == NULL) break; j = j->next; } if (i->next == NULL) break; i = i->next; } Add_student(frist); Output_student_Math(); return; } void Sort_student_English_min() //对学生英语进行从小到大排序 { LinkList_student frist,r,i,j; Node_student temp; strcpy(temp.name, "a"); strcpy(temp.Account, "a"); strcpy(temp.Password, "a"); temp.Chian = 0, temp.English = 0; temp.Math = 0, temp.Sum = 0; frist = Make_student(); i = j = r = frist; for (;;) { j = frist; for (;;) { if (j->English > j->next->English) { strcpy(temp.name, j->name); strcpy(temp.Account, j->Account); strcpy(temp.Password, j->Password); temp.Chian = j->Chian, temp.English = j->English; temp.Math = j->Math, temp.Sum = j->Sum; strcpy(j->name, j->next->name); strcpy(j->Account, j->next->Account); strcpy(j->Password, j->next->Password); j->Chian = j->next->Chian, j->English = j->next->English; j->Math = j->next->Math, j->Sum = j->next->Sum; strcpy(j->next->name, temp.name); strcpy(j->next->Account, temp.Account); strcpy(j->next->Password, temp.Password); j->next->Chian = temp.Chian, j->next->English = temp.English; j->next->Math = temp.Math, j->next->Sum = temp.Sum; } if (j->next->next == NULL) break; j = j->next; } if (i->next == NULL) break; i = i->next; } Add_student(frist); Output_student_English(); return; } void teacher_number() //输出教师总数 { int n; printf("nnnnn"); LinkList_teacher r,frist; frist = Make_teacher(); r = frist; printf("n"); for (;;) { if (r->next == NULL) { n = n+1; break; } n = n+1; r = r->next; } printf("n"); char na[10]; printf("ttttt----------教师总数为:%d----------n",n); printf("ttttt----------输入回车继续----------n"); scanf("%c", &na); getchar(); system("cls"); return ; } void student_number() //输出学生总数 { int n; LinkList_student frist; frist = Make_student(); LinkList_student r; r = frist; printf("n"); for (;;) { if (r->next == NULL) { n = n+1; break; } n=n+1; r = r->next; } printf("n"); char na[10]; printf("ttttt----------学生总数为:%d----------n",n); printf("ttttt----------输入回车继续----------n"); scanf("%c", &na); getchar(); system("cls"); return ; } int panduan(char name[80]) //判断学生账号是否重复返回0重复返回1不重复 { LinkList_student frist,r; frist = Make_student(); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { return 1; break; } if (r->next == NULL) { return 0; break; } r = r->next; } } int panduan_1(char name[80]) //判断教师账号是否重复返回0重复返回1不重复 { LinkList_teacher frist,r; frist = Make_teacher(); r = frist; for (;;) { if (strcmp(r->name ,name) == 0) { return 1; break; } if (r->next == NULL) { return 0; break; } r = r->next; } }



