昆山正规网站建设,热点新闻事件及观点简单版,个人网站介绍源码,保险代理做的比较好的网站大学第一个设计#xff0c;代码量3700行,本课设仅供参考 1 【课程设计】教务信息管理系统 Time Limit:1000MS Memory Limit:65535K 题型: 人工评判题 语言: 无限制 描述 设计一个教务信息管理系统#xff0c;该程序具有以下功能#xff1a; #xff08;1#xff09;录入如…大学第一个设计代码量3700行,本课设仅供参考 1 【课程设计】教务信息管理系统 Time Limit:1000MS Memory Limit:65535K 题型: 人工评判题 语言: 无限制 描述 设计一个教务信息管理系统该程序具有以下功能 1录入如下信息 学生基本信息如学号、姓名、性别、年龄、宿舍号码、电话号码等。 课程基本信息课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否等。 如果重修需要考虑重修学期、重修成绩并且要考虑多次重修的情况。
2录入选课信息 3录入学生成绩 3按班统计学生选课情况及考试成绩。 4按课程统计学生名单及考试成绩。 5统计并输出每个同学已修学分及不及级课程。 6实现单词组合查询课程名例如输入“JAVA设计”查询可以查到如下课程 《JAVA语言与程序设计》 《JAVA程序设计》 《JAVA语言与算法设计》 注因为上面课程名中均包含“设计”和“教程”两个单词 同理输入“JAVA算法设计”查询则只能查到《JAVA语言与算法设计》 任务要求 1按照分析、设计、编码、调试和测试过程完成应用程序 2学习并使用流程图等工具并在撰写报告中使用 3程序的各项功能在程序运行时以菜单方式选择并执行 4要求用户输入数据时要给出清晰、明确的提示包括输入数据的内容、格式及结束方式等 5所有的信息存储在文件中并实现文件读写操作。 6记录添加删除操作时先从文件载入数据用链表存放批量操作完后数据从链表写入文件。 7【加分选做】根据学生的选课能够生成一个学生的课表形式与我校教务处系统中的课表相似并将时间有冲突的课程标记为红色 输入格式
提示 1学生基本信息可以设计一个结构体类型 2自己构思并增加的除规定功能之外的新功能酌情加分。
结构体及函数声明
#define _CRT_SECURE_NO_WARNINGS
#include Stdio.h
#include iostream
#include string
using namespace std;
#includemalloc.h
#pragma once
#define InitStudentNum 1000
typedef struct Grade {//学生学号int StudentNum;//学生是否选课 1为选 0为不选int Judge 0;//重修 0为不用重修 1为重修int Retake0;//平时成绩double OrdinaryGrade0;//考试成绩double TestGrade0;//总成绩double TotalGrade0;
};//单个课程结构
typedef struct Course {//课程编号int SubNum;//课程名字char SubName[20];//任课老师string Teacher;//任课地点string Position;//任课时间string Time;//评价char Evaluation[10][200] {0};//课程学分int SubCredits 0;int Capacity 0;struct Grade Grade[InitStudentNum];struct Course* next;
}Course,*LinkCourse;//学生个人信息结构体(完成)
typedef struct PersonalInformation {//学生学号int StudentNum;//学生姓名string StudentName;//学生性别string StudentSex;//学生年龄string StudentAge;//学生宿舍号码string StudentDorm;//学生电话号码string StudentPhone;
};//学生结构
typedef struct Student {struct PersonalInformation PersonalInformation;//学生学分int StudentCredits 0;//下一个学生struct Student* next;
}Student, * LinkStudent; //学生账号
typedef struct UserStudent {int StudentNum;string Account;string Password;struct UserStudent* next;
}UserStudent,*LinkUserStudent;
//教师账号
typedef struct UserTeacher {string Account;string Password;struct UserTeacher* next;
}UserTeacher,*LinkUserTeacher;
//管理员账号
typedef struct UserAdministrator {string Account;string Password;struct UserAdministrator* next;
}UserAdministrator,*LinkUserAdministrator;//通过学号找到学生函数
LinkStudent SearchStudent(int StudentNum, LinkStudent StudentHead);
//复制课程链表
LinkCourse copyCourse(LinkCourse CourseHead);
//通过name字符关键词筛选CopyHead中符合条件的节点
LinkCourse NameCourse(LinkCourse CopyHead, char name[]);
//通过课程编号查找课程
LinkCourse SearchCourseID(int SubNum, LinkCourse CourseHead);
//课程关键字搜索得到复制的课程指针
LinkCourse SearchCourse_byword(LinkCourse CourseHead);
//通过关键词或编号得到课程
LinkCourse GetCourse(LinkCourse CourseHead);
//录入管理员账号
LinkUserAdministrator EntryAdministrator(LinkUserAdministrator AdministratorHead);
//录入教师账号
LinkUserTeacher EntryTeacher(LinkUserTeacher UserTeacherHead);
//录入学生账号
LinkUserStudent EntryStudent(LinkUserStudent UserStudentHead);
//删除账号
void AccountSystem_Delete(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//删除学生账号
LinkUserStudent StudentAccount_Delete(LinkUserStudent UserStudentHead);
//删除教师账号
LinkUserTeacher TeacherAccount_Delete(LinkUserTeacher UserTeacherHead);
//删除管理员账号
LinkUserAdministrator AdministratorAccount_Delete(LinkUserAdministrator UserAdministratorHead);
//修改密码
void Account_ChangePassword(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//修改学生密码
LinkUserStudent StudentAccount_ChangePassword(LinkUserStudent UserStudentHead);
//修改教师密码
LinkUserTeacher TeacherAccount_ChangePassword(LinkUserTeacher UserTeacherHead);
//修改管理员密码
LinkUserAdministrator AdministratorAccount_ChangePassword(LinkUserAdministrator UserAdministratorHead);
//保存账号
void AccountStore(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//读取账号
LinkUserAdministrator Administrator_AccountRead(LinkUserAdministrator UserAdministratorHead);
LinkUserTeacher Teacher_AccountRead(LinkUserTeacher UserTeacherHead);
LinkUserStudent Student_AccountRead(LinkUserStudent UserStudentHead);
//登录函数
char login(LinkUserAdministrator AdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//学生界面菜单
void Student_Begin();
//个人成绩查看
void PersonalGrade_Search(LinkStudent One, LinkCourse CourseHead);
//不及格课程查看
void SearchPersonalFailCourse(LinkStudent One, LinkCourse CourseHead);
//个人学分查看
void PersonalCreadits_Search(LinkStudent One);
//个人信息查看
void PersonalInformation_Search(LinkStudent One);
//个人课程查看
void PersonalCourse_Search(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead);
//选课中心
void PersonalCourse_Choose(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//个人信息修改
void ModifyPersonalInformation(LinkStudent One);
//学生输入界面
void Input_Student(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead);
//教师界面菜单
void Teacher_Begin();
//教师界面输入
void Input_Teacher(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead);
//添加学生个人
void PushStudent(LinkStudent StudentHead);
//修改学生个人信息
LinkStudent ModifyStudent(LinkStudent StudentHead);
//新建学生链表
LinkStudent CreateStudentList(LinkStudent StudentHead);
//存取学生链表数据
void StoreStudentList(LinkStudent StudentHead);
//删除学生函数
LinkStudent DeleteStudent(LinkStudent StudentHead);
//学生个人信息查看
void SearchInformation(LinkStudent StudentHead);
//学生个人信息录入
LinkStudent PnInformation(LinkStudent StudentHead);
//学生课程链表初始化,设置课程数量且将学号录入
LinkCourse InitCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//添加课程
void AddCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//删除课程函数
LinkCourse DeleteCoursse(LinkCourse CourseHead);
//修改课程信息
void ModifyCourse(LinkCourse CourseHead);
//课程评价
void CourseEvaluation_Operate(LinkCourse CourseHead);
//课程评价查看
void CourseEvaluation_Search(LinkCourse CourseHead);
//按班级录入选课信息
LinkCourse CourseSelection_entry(LinkCourse CourseHead);
//选课学生信息查看
void CourseSelection_view(LinkCourse CourseHead, LinkStudent StudentHead);
//查询学生的选课情况
void SearchStudentCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//查询一个班级的选课情况
void SearchClassCourse(LinkStudent StudentHead, LinkCourse CourseHead);
//查看课程信息
void CourseInformation_View(LinkCourse CourseHead);
//通过编号查看课程信息
void searchcourse(LinkCourse coursehead);
//存取课程链表数据(完成)
void StoreCourseList(LinkCourse CourseHead);
//学生课程成绩录入
void GradeInput(LinkCourse CourseHead, LinkStudent StudentHead);
//学生学分查询
void Creadits_Search(LinkStudent StudentHead);
//查询重修学生的课程
void SearchFailCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//查询课程重修
void Search_CourseRetake(LinkCourse CourseHead, LinkStudent StudentHead);
//按课程录入学生考试成绩。
void GradeInput_ThroughCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//获取课程评价
void GetCourseEvaluation(LinkCourse Course);
//读取课程数据函数
LinkCourse ReadCourseList(LinkStudent StudentHead);
//菜单
void Begin();
//成绩系统菜单
void GradeSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//课程系统菜单
void CourseSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//信息系统菜单
void InformationSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//帐号系统菜单
void AccountSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//初始化菜单
void Initialization(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//读取学生文件数据函数
LinkStudent ReadStudentList();
//查询一个班级的成绩
void SearchClassGrade(LinkStudent StudentHead, LinkCourse CourseHead);
//查询成绩
void SearchCourse(LinkStudent StudentHead, LinkCourse CourseHead);
//数据保存
void StoreData(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//管理员菜单
void Input_Administrator(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);函数定义
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
#include 结构体.h
#include iostream
#include string
#includemalloc.h
#includeconio.h
using namespace std;
#define PATH1 StudentData.text
#define PATH2 CourseData.text
#define PATH3 Teacher_Account.text
#define PATH4 Administrator_Account.text
#define PATH5 Student_Account.text
#define InitStudentNum 1000
#define AddStudent 30;
//**************************************基础函数块**************************************//通过学号找到学生函数
LinkStudent SearchStudent(int StdNum, LinkStudent StudentHead) {LinkStudent p;p StudentHead;while (p) {p p-next;//先判定是否为空再判定是否是这个学号if (!p) {cout 学号不存在! endl;system(pause);system(cls);//如果不存在返回NULL标志错误return NULL;}if (p-PersonalInformation.StudentNum StdNum)break;//如果找到该学号即返回p}return p;
}//复制课程链表
LinkCourse copyCourse(LinkCourse CourseHead) {LinkCourse q, p, head1, tem CourseHead;head1 new Course;*head1 *tem;p head1;q p;tem tem-next;while (tem) {p new Course;*p *tem;p-next NULL;q-next p;q p;tem tem-next;}return head1;
}//通过name字符关键词筛选CopyHead中符合条件的节点
LinkCourse NameCourse(LinkCourse CopyHead, char name[]) {LinkCourse q, p CopyHead;q p;p p-next;int length strlen(name);int i 0, tem, j 0;int vis 0;//循环整个copy链表while (p) {//循环节点的20个字符while (j 20) {//如果和name[0]相同即开始比对if (name[0] p-SubName[j]) {//定一个临时值存放 不修改jtem j;for (i 0; i length; i) {//比对不成功即退出if (name[i] ! p-SubName[tem]) {break;}}//如果全部比对成功标记为1,留在链表中if (i length - 1) { vis 1; }}//比对后 让i归位i 0;//j继续比对j;//如果到了尽头就退出if (p-SubName[j] \0)break;}if (vis 0) {//标记为0 去除p节点q-next p-next;p q-next;}else {//标记为1 进行下一个搜索 q p;p p-next;}vis 0;//归位j 0;i 0;}return CopyHead;
}//通过课程编号查找课程
LinkCourse SearchCourseID(int SubNum, LinkCourse CourseHead) {LinkCourse p;p CourseHead;while (p) {p p-next;if (!p) {cout 编号不存在! endl;system(pause);system(cls);//如果不存在返回NULL标志错误return NULL;}//如果找到该编号即返回pif (p-SubNum SubNum)break;}return p;
}//课程关键字搜索得到复制的课程指针
LinkCourse SearchCourse_byword(LinkCourse CourseHead) {system(cls);LinkCourse p CourseHead-next;cout 请输入操作的课程关键字: endl;char name[20];//输入关键字cin name;int tnum 0;int length strlen(name);int i, j 0;//查找有多少个 for (i 0; i length; i) {if (name[i] )tnum;}tnum 1;i 0;//copy链表LinkCourse copyhead copyCourse(CourseHead);//循环tnum1次while (tnum--) {char tem[20];//如果没等于或者\0则录入temwhile (name[i] ! name[i] ! \0) {tem[j] name[i];}//tem录入完后要在后面加一个\0;j;tem[j] \0;//查找tem的链表copyhead NameCourse(copyhead, tem);j 0;if (name[i] ) { i 1; }}system(cls);p copyhead-next;length 0;while (p) {length;p p-next;}copyhead-SubNum length;system(cls);cout 查询到有 copyhead-SubNum 个相关课程 endl;if (copyhead-SubNum 0) {system(pause);system(cls);return NULL;}int num 1;p copyhead-next;while (p) {cout 序号: num endl;cout 课程编号: p-SubNum endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout ———————————————————— endl;p p-next;}if (copyhead-SubNum ! 1) {cout 请通过课程序号选择 endl;cin num;system(cls);}else {num 1;}p copyhead;while (num--) {p p-next;if (p NULL) { cout 课程不存在! endl; return NULL; }}return p;
}//通过关键词或编号得到课程
LinkCourse GetCourse(LinkCourse CourseHead) {system(cls);char judge;char name[20];int tnum, num;int length;int i, j, id;LinkCourse copyhead NULL, p NULL;while (1) {cout 您想要通过什么方式找到课程? endl;cout a:按关键词搜索课程 endl;cout b:按编号搜索课程 endl;cout #:返回上一层 endl;cin judge;switch (judge){caseb:cout 查看的课程编号是 endl;int SubNum;cin SubNum;p SearchCourseID(SubNum, CourseHead);if (p NULL) { return NULL; }system(cls);cout 查看的课程是: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 课程容量: p-Capacity/60 endl;cout ———————————————————— endl;return p;casea:p SearchCourse_byword(CourseHead);if (p NULL)break;id p-SubNum;p SearchCourseID(id, CourseHead);system(cls);cout 查看的课程是: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout ———————————————————— endl;return p;case#:return NULL;default:cout 请正确输入! endl;system(pause);system(cls);}}
}//**************************************程序登录功能块**************************************//录入管理员账号
LinkUserAdministrator EntryAdministrator(LinkUserAdministrator AdministratorHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return AdministratorHead;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);LinkUserAdministrator q AdministratorHead, p new UserAdministrator;p-next NULL;while (1) {if (q-next NULL)break;q q-next;}q-next p;cout 管理员成员创建成功! endl;cout 请设置账号 endl;cin p-Account;cout 请设置密码 endl;cin p-Password;system(pause);system(cls);return AdministratorHead;
}
//录入教师账号
LinkUserTeacher EntryTeacher(LinkUserTeacher UserTeacherHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return UserTeacherHead;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);LinkUserTeacher q UserTeacherHead, p new UserTeacher;p-next NULL;while (1) {if (q-next NULL)break;q q-next;}q-next p;cout 教师成员创建成功! endl;cout 请设置账号 endl;cin p-Account;cout 请设置密码 endl;cin p-Password;system(pause);system(cls);return UserTeacherHead;
}
//录入学生账号
LinkUserStudent EntryStudent(LinkUserStudent UserStudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return UserStudentHead;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);LinkUserStudent q UserStudentHead, p new UserStudent;p-next NULL;while (1) {if (q-next NULL)break;q q-next;}q-next p;cout 学生成员创建成功! endl;cout 请输入您的学号 endl;cin p-StudentNum;cout 请设置账号 endl;cin p-Account;cout 请设置密码 endl;cin p-Password;system(pause);system(cls);return UserStudentHead;
}//删除账号
void AccountSystem_Delete(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);char judge;while (1) {cout ———————————————————— endl;cout | 请选择删除账号类型 | endl;cout |———————————————————| endl;cout | a.学生 | endl;cout | b.教师 | endl;cout | c.管理员 | endl;cout ———————————————————— endl;cin judge;switch (judge){caseA:casea:UserStudentHead StudentAccount_Delete(UserStudentHead);return;caseb:caseB:UserTeacherHead TeacherAccount_Delete(UserTeacherHead);return;casec:caseC:UserAdministratorHead AdministratorAccount_Delete(UserAdministratorHead);return;default:break;}}}//删除学生账号
LinkUserStudent StudentAccount_Delete(LinkUserStudent UserStudentHead) {system(cls);cout 请输入要删除的账号 endl;string Account;cin Account;LinkUserStudent pre, One UserStudentHead-next;pre UserStudentHead;while (1) {if (!One-Account.compare(Account)) {break;}pre One;One One-next;if (One NULL) {cout 不存在该账户 endl;system(pause);return UserStudentHead;}}cout 请输入要删除的账号密码 endl;string Password;cin Password;if (!One-Password.compare(Password)) {pre-next One-next;cout 删除成功 endl;system(pause);return UserStudentHead;}else {cout 密码错误 endl;system(pause);return UserStudentHead;}
}
//删除教师账号
LinkUserTeacher TeacherAccount_Delete(LinkUserTeacher UserTeacherHead) {system(cls);cout 请输入要删除的账号 endl;string Account;cin Account;LinkUserTeacher pre, One UserTeacherHead-next;pre UserTeacherHead;while (1) {if (!One-Account.compare(Account)) {break;}pre One;One One-next;if (One NULL) {cout 不存在该账户 endl;system(pause);return UserTeacherHead;}}cout 请输入要删除的账号密码 endl;string Password;cin Password;if (!One-Password.compare(Password)) {pre-next One-next;cout 删除成功 endl;system(pause);return UserTeacherHead;}else {cout 密码错误 endl;system(pause);return UserTeacherHead;}
}
//删除管理员账号
LinkUserAdministrator AdministratorAccount_Delete(LinkUserAdministrator UserAdministratorHead) {system(cls);cout 请输入要删除的账号 endl;string Account;cin Account;LinkUserAdministrator pre, One UserAdministratorHead-next;pre UserAdministratorHead;while (1) {if (!One-Account.compare(Account)) {break;}pre One;One One-next;if (One NULL) {cout 不存在该账户 endl;system(pause);return UserAdministratorHead;}}cout 请输入要删除的账号密码 endl;string Password;cin Password;if (!One-Password.compare(Password)) {pre-next One-next;cout 删除成功 endl;system(pause);return UserAdministratorHead;}else {cout 密码错误 endl;system(pause);return UserAdministratorHead;}
}//修改密码
void Account_ChangePassword(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return;default:cout 请重新输入! endl;system(pause);system(cls);break;}if (Flag 1)break;}system(cls);char judge;while (1) {cout ———————————————————— endl;cout | 请选择账号类型 | endl;cout |———————————————————| endl;cout | a.学生 | endl;cout | b.教师 | endl;cout | c.管理员 | endl;cout ———————————————————— endl;cin judge;switch (judge){caseA:casea:UserStudentHead StudentAccount_ChangePassword(UserStudentHead);return;caseb:caseB:UserTeacherHead TeacherAccount_ChangePassword(UserTeacherHead);return;casec:caseC:UserAdministratorHead AdministratorAccount_ChangePassword(UserAdministratorHead);return;default:break;}}}//修改学生密码
LinkUserStudent StudentAccount_ChangePassword(LinkUserStudent UserStudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return UserStudentHead;default:cout 请重新输入! endl;system(pause);system(cls);break;}if (Flag 1)break;}system(cls);cout 请输入您的账号 endl;string Account;cin Account;LinkUserStudent One UserStudentHead-next;while (1) {if (!One-Account.compare(Account)) {break;}One One-next;if (One NULL) {cout 不存在该账户 endl;system(pause);return UserStudentHead;}}cout 请输入要原账户的账号密码: endl;string Password;cin Password;if (!One-Password.compare(Password)) {cout 请输入新的账号密码: endl;cin One-Password;cout 修改成功 endl;system(pause);}else {cout 密码错误 endl;system(pause);return UserStudentHead;}
}
//修改教师密码
LinkUserTeacher TeacherAccount_ChangePassword(LinkUserTeacher UserTeacherHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return UserTeacherHead;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);cout 请输入您的账号 endl;string Account;cin Account;LinkUserTeacher One UserTeacherHead-next;while (1) {if (!One-Account.compare(Account)) {break;}One One-next;if (One NULL) {cout 不存在该账户 endl;system(pause);return UserTeacherHead;}}cout 请输入要原账户的账号密码: endl;string Password;cin Password;if (!One-Password.compare(Password)) {cout 请输入新的账号密码: endl;cin One-Password;cout 修改成功 endl;system(pause);}else {cout 密码错误 endl;system(pause);return UserTeacherHead;}
}
//修改管理员密码
LinkUserAdministrator AdministratorAccount_ChangePassword(LinkUserAdministrator UserAdministratorHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return UserAdministratorHead;default:cout 请重新输入! endl;system(pause);system(cls);break;}if (Flag 1)break;}system(cls);cout 请输入您的账号 endl;string Account;cin Account;LinkUserAdministrator One UserAdministratorHead-next;while (1) {if (!One-Account.compare(Account)) {break;}One One-next;if (One NULL) {cout 不存在该账户 endl;system(pause);return UserAdministratorHead;}}cout 请输入要原账户的账号密码: endl;string Password;cin Password;if (!One-Password.compare(Password)) {cout 请输入新的账号密码: endl;cin One-Password;cout 修改成功 endl;system(pause);}else {cout 密码错误 endl;system(pause);return UserAdministratorHead;}
}//保存账号
void AccountStore(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {LinkUserAdministrator p UserAdministratorHead;LinkUserTeacher q UserTeacherHead;LinkUserStudent r UserStudentHead;cout 正在存储数据 endl;if (UserAdministratorHead-next NULL) { cout 管理员账户数据不存在! endl; return; }if (UserTeacherHead-next NULL) { cout 教师账户数据不存在! endl; return; }if (UserStudentHead-next NULL) { cout 学生账户数据不存在! endl; return; }FILE* fp fopen(PATH4, wb);if (fp NULL) { cout 储存管理员数据失败! endl; return; }//写入时也要把头节点写进去while (p ! NULL) {fwrite(p, sizeof(UserAdministrator), 1, fp);p p-next;}cout 存储管理员数据成功 endl;fclose(fp);fp fopen(PATH3, wb);if (fp NULL) { cout 储存教师数据失败! endl; return; }//写入时也要把头节点写进去while (q ! NULL) {fwrite(q, sizeof(UserTeacher), 1, fp);q q-next;}cout 存储教师数据成功 endl;fclose(fp);fp fopen(PATH5, wb);if (fp NULL) { cout 储存学生数据失败! endl; return; }//写入时也要把头节点写进去while (r ! NULL) {fwrite(r, sizeof(UserStudent), 1, fp);r r-next;}cout 存储学生数据成功 endl;fclose(fp);fp NULL;system(pause);
}//读取账号
LinkUserAdministrator Administrator_AccountRead(LinkUserAdministrator UserAdministratorHead) {cout 正在读取管理员数据 endl;LinkUserAdministrator p1, p2;UserAdministratorHead new UserAdministrator;p2 UserAdministratorHead;UserAdministratorHead-next NULL;FILE* fp fopen(PATH4, rb);int i;if (fp NULL) {cout 管理员数据文件不存在 endl;cout 将为您初始化,请根据信息进行输入! endl;UserAdministratorHead EntryAdministrator(UserAdministratorHead);system(cls);}else {//读取时先读取第一个头节点fread(UserAdministratorHead, sizeof(*UserAdministratorHead), 1, fp);p1 new UserAdministrator;i 0;while ((fread(p1, sizeof(*p1), 1, fp)) 1) {i;p1-next NULL;p2-next p1;p2 p1;p1 new UserAdministrator;}if (i 0) { cout 空文件! endl; return UserAdministratorHead; }delete(p1);fclose(fp);cout 读取管理员数据成功 endl;}return UserAdministratorHead;
}
LinkUserTeacher Teacher_AccountRead(LinkUserTeacher UserTeacherHead) {cout 正在读取教师数据 endl;LinkUserTeacher p3, p4;UserTeacherHead new UserTeacher;p4 UserTeacherHead;UserTeacherHead-next NULL;FILE* fp fopen(PATH3, rb);if (fp NULL) {cout 教师数据文件不存在 endl;cout 将为您初始化,请根据信息进行输入! endl;UserTeacherHead EntryTeacher(UserTeacherHead);system(cls);}else {//读取时先读取第一个头节点fread(UserTeacherHead, sizeof(*UserTeacherHead), 1, fp);p3 new UserTeacher;int i 0;while ((fread(p3, sizeof(*p3), 1, fp)) 1) {i;p3-next NULL;p4-next p3;p4 p3;p3 new UserTeacher;}if (i 0) { cout 空文件! endl; return UserTeacherHead; }delete(p3);fclose(fp);cout 读取教师数据成功 endl;}return UserTeacherHead;
}
LinkUserStudent Student_AccountRead(LinkUserStudent UserStudentHead) {cout 正在读取学生账户数据 endl;LinkUserStudent p5, p6;UserStudentHead new UserStudent;p6 UserStudentHead;UserStudentHead-next NULL;FILE* fp fopen(PATH5, rb);int i;if (fp NULL) {cout 学生账户数据文件不存在 endl;cout 将为您初始化,请根据信息进行输入! endl;system(pause);UserStudentHead EntryStudent(UserStudentHead);system(cls);return UserStudentHead;}else {//读取时先读取第一个头节点fread(UserStudentHead, sizeof(*UserStudentHead), 1, fp);p5 new UserStudent;i 0;while ((fread(p5, sizeof(*p5), 1, fp)) 1) {i;p5-next NULL;p6-next p5;p6 p5;p5 new UserStudent;}if (i 0) { cout 空文件! endl; return UserStudentHead; }delete(p5);fclose(fp);cout 读取学生数数据成功 endl;}system(pause);system(cls);return UserStudentHead;
}//登录函数
char login(LinkUserAdministrator AdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead) {char judge;while (1) {char cAccount[20], cPassword[20];string Account, Password;char flag;int i;cout ———————————————————— endl;cout | 欢迎使用学生教务系统 | endl;cout | 请选择账户类型登录 | endl;cout |———————————————————| endl;cout | a.学生 | endl;cout | b.教师 | endl;cout | c.管理员 | endl;cout ———————————————————— endl;cin judge;char ch;if (judge a || judge A) {cout 请输入账号: ;getchar();i 0;while ((ch _getch()) ! \r i 20) {if (ch \b) {if (i 0) {i--;cout \b \b;}else {putchar(7);}}else {cAccount[i] ch;cout *;}}cAccount[i] \0;cout endl;cout 请输入密码: ;i 0;while ((ch _getch()) ! \r i 20) {if (ch \b) {if (i 0) {i--;cout \b \b;}else {putchar(7);}}else {cPassword[i] ch;cout *;}}cPassword[i] \0;Password cPassword;Account cAccount;cout endl;LinkUserStudent p UserStudentHead-next;while (1) {if (!p-Account.compare(Account)) {if (!p-Password.compare(Password)) {cout 登录成功! endl;//将该学生学号返回到头指针学号UserStudentHead-StudentNum p-StudentNum;system(pause);system(cls);flag a;return flag;}}p p-next;if (!p) {cout 账户或密码错误 endl;flag #;return flag;}}}else if (judge b || judge B) {cout 请输入账号: ;getchar();i 0;while ((ch _getch()) ! \r i 20) {if (ch \b) {if (i 0) {i--;cout \b \b;}else {putchar(7);}}else {cAccount[i] ch;cout *;}}cAccount[i] \0;cout endl;cout 请输入密码: ;i 0;while ((ch _getch()) ! \r i 20) {if (ch \b) {if (i 0) {i--;cout \b \b;}else {putchar(7);}}else {cPassword[i] ch;cout *;}}cPassword[i] \0;Password cPassword;Account cAccount;cout endl;LinkUserTeacher p UserTeacherHead-next;while (1) {if (!p-Account.compare(Account)) {if (!p-Password.compare(Password)) {cout 登录成功! endl;system(pause);system(cls);flag b;return flag;}}p p-next;if (!p) {cout 账户或密码错误 endl;flag #;return flag;}}}else if (judge c || judge C) {cout 请输入账号: ;getchar();i 0;while ((ch _getch()) ! \r i 20) {if (ch \b) {if (i 0) {i--;cout \b \b;}else {putchar(7);}}else {cAccount[i] ch;cout *;}}cAccount[i] \0;cout endl;cout 请输入密码: ;i 0;while ((ch _getch()) ! \r i 20) {if (ch \b) {if (i 0) {i--;cout \b \b;}else {putchar(7);}}else {cPassword[i] ch;cout *;}}cPassword[i] \0;Password cPassword;Account cAccount;cout endl;LinkUserAdministrator p AdministratorHead-next;while (1) {if (!p-Account.compare(Account)) {if (!p-Password.compare(Password)) {cout 登录成功! endl;system(pause);system(cls);flag c;return flag;}}p p-next;if (!p) {cout 账户或密码错误 endl;flag #;return flag;}}}cout 请重新输入 endl;system(pause);system(cls);}
}//**************************************学生权限功能块**************************************//学生界面菜单
void Student_Begin() {cout ———————————————————— endl;cout | 请输入数字进行操作 | endl;cout |———————————————————| endl;cout | a:个人成绩查看 | endl;cout | b:个人不及格课程查看 | endl;cout | c:个人学分查看 | endl;cout | d:个人课程查看 | endl;cout | e:个人信息查看 | endl;cout | f:个人信息修改 | endl;cout | g:查询课程信息 | endl;cout | h:选课中心 | endl;cout | i:课程评价 | endl;cout | j:课程评价查看 | endl;cout | k:个人账户密码修改 | endl;cout | :保存数据 | endl;cout | #:退出程序 | endl;cout ———————————————————— endl;}//个人成绩查看
void PersonalGrade_Search(LinkStudent One, LinkCourse CourseHead) {system(cls);LinkCourse p CourseHead;int i;int StdNum One-PersonalInformation.StudentNum;int Subcase CourseHead-SubNum;cout ———————————————————— endl;cout 学号: One-PersonalInformation.StudentNum endl;cout 姓名: One-PersonalInformation.StudentName endl;cout ———————————————————— endl;while (Subcase--) {p p-next;for (i 0; i InitStudentNum; i) {if (p-Grade[i].StudentNum StdNum) {break;}}if (p-Grade[i].Judge 1) {cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 重修次数: p-Grade[i].Retake endl;cout 平时成绩为 p-Grade[i].OrdinaryGrade endl;cout 考试成绩为 p-Grade[i].TestGrade endl;cout 总成绩为 p-Grade[i].TotalGrade endl;cout ———————————————————— endl;}}system(pause);system(cls);
}//查询重修学生的课程
void SearchFailCourse(LinkCourse CourseHead,LinkStudent StudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);cout 请输入查询的学生学号: endl;int StdNum;cin StdNum;LinkStudent One;One SearchStudent(StdNum, StudentHead);//如果搜索不到学生if (One NULL)return;SearchPersonalFailCourse(One, CourseHead);
}//查询个人的重修课程
void SearchPersonalFailCourse(LinkStudent One, LinkCourse CourseHead) {LinkCourse p CourseHead;int i;int StdNum One-PersonalInformation.StudentNum;int Subcase CourseHead-SubNum;cout ———————————————————— endl;cout 学号: One-PersonalInformation.StudentNum endl;cout 姓名: One-PersonalInformation.StudentName endl;cout ———————————————————— endl;while (Subcase--) {p p-next;for (i 0; i InitStudentNum; i) {if (p-Grade[i].StudentNum StdNum) {break;}}if (p-Grade[i].TestGrade 60 p-Grade[i].Judge 1) {cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 重修次数: p-Grade[i].Retake endl;cout 平时成绩为 p-Grade[i].OrdinaryGrade endl;cout 考试成绩为 p-Grade[i].TestGrade endl;cout 总成绩为 p-Grade[i].TotalGrade endl;cout ———————————————————— endl;}}system(pause);system(cls);
}
//个人学分查看
void PersonalCreadits_Search(LinkStudent One) {system(cls);cout ———————————————————— endl;cout 您所获得的学分是: One-StudentCredits endl;cout ———————————————————— endl;system(pause);
};//个人信息查看
void PersonalInformation_Search(LinkStudent One) {system(cls);cout ———————————————————— endl;cout 学生学号: One-PersonalInformation.StudentNum endl;cout 学生姓名: One-PersonalInformation.StudentName endl;cout 学生性别: One-PersonalInformation.StudentSex endl;cout 学生年龄: One-PersonalInformation.StudentAge endl;cout 学生宿舍地址: One-PersonalInformation.StudentDorm endl;cout 学生手机号码: One-PersonalInformation.StudentPhone endl;cout ———————————————————— endl;system(pause);system(cls);
}//个人课程查看
void PersonalCourse_Search(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead) {int StudentNum StudentHead-PersonalInformation.StudentNum;int StudentId One-PersonalInformation.StudentNum;system(cls);cout ———————————————————— endl;cout StudentId 拥有的课程: endl;cout ———————————————————— endl;LinkCourse p CourseHead-next;int num 1;while (1) {for (int j 0; j StudentNum; j) {if (p-Grade[j].StudentNum StudentId) {if (p-Grade[j].Judge 1) {cout num . p-SubName endl;cout ———————————————————— endl;cout 编号为 p-SubNum 的课程: endl;cout 课程学分: p-SubCredits endl;cout 任课老师: p-Teacher endl;cout 任课地点: p-Position endl;cout 任课时间: p-Time endl;cout ———————————————————— endl;}}}p p-next;if (!p)break;}system(pause);
};//选课中心
void PersonalCourse_Choose(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead) {//学生总人数int StudentNum StudentHead-PersonalInformation.StudentNum;//学生个人IDint StudentId One-PersonalInformation.StudentNum;system(cls);LinkCourse p NULL;char choose;while (1) {system(cls);cout ———————————————————— endl;cout 当前学生总数: StudentHead-PersonalInformation.StudentNum endl;cout 当前课程总数: CourseHead-SubNum endl;cout ———————————————————— endl;cout | 请选择选课模式 | endl;cout |———————————————————| endl;cout | a:搜索单门课程进行选课 | endl;cout | b:对所有课程依次进行选课 | endl;cout | :数据保存 | endl;cout | #:返回上一层 | endl;cout ———————————————————— endl;cin choose;int flag 0;switch (choose) {case #://返回上一层return;case ://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;case a: case A:system(cls);cout 您想要通过什么方式找到课程? endl;cout a:课程关键词搜索 endl;cout b:课程编号搜索 endl;char judge;int id;cin judge;switch (judge){casea:caseA:p SearchCourse_byword(CourseHead);if (p NULL)return;id p-SubNum;p SearchCourseID(id, CourseHead);break;caseb:caseB:system(cls);cout 请输入课程编号: endl;int coursenum;cin coursenum;p SearchCourseID(coursenum, CourseHead);if (p NULL)return;break;default:cout 请正确输入 endl;break;}while (1) {cout 编号为 p-SubNum 的课程: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 任课老师: p-Teacher endl;cout 任课地点: p-Position endl;cout 任课时间: p-Time endl;cout 课程容量: p-Capacity /60 endl;cout 是否选择该课程:Y/N endl;cin judge;switch (judge) {caseY:casey:for (int j 0; j StudentNum; j) {if (p-Grade[j].StudentNum StudentId) {if (p-Grade[j].Judge 0) {if (p-Capacity 60) {cout 当前课程容量已满 endl;system(pause);return;}p-Grade[j].Judge 1;p-Capacity;cout 选课成功! endl;system(pause);return;}else {cout 您已选择该课程,请勿重新选择! endl;system(pause);return;}}}return;casen:caseN:return;default:cout 请重新输入! endl;system(pause);system(cls);break;}}case b: case B:system(cls);cout 请对可选课程进行选择: endl;p CourseHead-next;while (1) {while (1) {cout 编号为 p-SubNum 的课程: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 任课老师: p-Teacher endl;cout 任课地点: p-Position endl;cout 任课时间: p-Time endl;cout 课程容量: p-Capacity /60 endl;cout 是否选择该课程:Y/N endl;char judge;cin judge;switch (judge) {caseY:for (int j 0; j StudentNum; j) {if (p-Grade[j].StudentNum StudentId) {if (p-Grade[j].Judge 0) {if (p-Capacity 60) {cout 当前课程容量已满 endl;system(pause);flag 1;break;}p-Grade[j].Judge 1;cout 选课成功! endl;p-Capacity;system(pause);system(cls);flag 1;break;}else {cout 您已选择该课程,请勿重新选择! endl;system(pause);system(cls);flag 1;break;}}}caseN:system(cls);flag 1;break;default:cout 请重新输入! endl;system(pause);break;}if (flag 1) {flag 0;break;}}p p-next;if (!p)break;}break;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}system(pause);
}//个人信息修改
void ModifyPersonalInformation(LinkStudent One) {char judge;PersonalInformation_Search(One);while (1) {system(cls);cout ———————————————————— endl;cout 请输入需要修改的选项 endl;cout ———————————————————— endl;cout | a:学生名字 | endl;cout | b:学生性别 | endl;cout | c:学生年龄 | endl;cout | d:学生宿舍 | endl;cout | e:学生手机号码 | endl;cout | #:返回上一层 | endl;cout ———————————————————— endl;cin judge;switch (judge){case #://返回上一层return;casea:cin One-PersonalInformation.StudentName;cout 修改成功 endl;system(pause);system(cls);return;caseb:cin One-PersonalInformation.StudentSex;cout 修改成功 endl;system(pause);system(cls);return;casec:cin One-PersonalInformation.StudentAge;cout 修改成功 endl;system(pause);system(cls);return;cased:cin One-PersonalInformation.StudentDorm;cout 修改成功 endl;system(pause);system(cls);return;casee:cin One-PersonalInformation.StudentPhone;cout 修改成功 endl;system(pause);system(cls);return;default:system(cls);cout 请按格式正确输入! endl;break;}}
}//学生输入界面
void Input_Student(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead) {system(cls);LinkUserStudent UserOne UserStudentHead;LinkStudent One SearchStudent(UserOne-StudentNum, StudentHead);char choose;while (1) {system(cls);cout ———————————————————— endl;cout 欢迎您! One-PersonalInformation.StudentName endl;Student_Begin();cin choose;switch (choose) {case #://退出程序cout 退出成功欢迎下次使用! endl;return;case a:caseA://个人成绩查看PersonalGrade_Search(One, CourseHead);break;case b: case B://查询学生重修课程system(cls);SearchPersonalFailCourse(One, CourseHead);break;case c:caseC://个人学分查看PersonalCreadits_Search(One);break;case d:caseD://个人课程查看PersonalCourse_Search(One, StudentHead, CourseHead);break;case e:caseE://个人信息查看PersonalInformation_Search(One);break;case f:case F://个人信息修改ModifyPersonalInformation(One);break;case g:caseG://查看课程信息CourseInformation_View(CourseHead);break;case h:caseH://选课中心PersonalCourse_Choose(One, StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;case i:caseI://课程评价CourseEvaluation_Operate(CourseHead);break;case j:caseJ://课程评价查看CourseEvaluation_Search(CourseHead);break;case k:caseK://学生个人账户密码修改StudentAccount_ChangePassword(UserStudentHead);break;case ://数据保存StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}
}//**************************************教师权限功能块**************************************//教师界面菜单
void Teacher_Begin() {cout ———————————————————— endl;cout | 请输入数字进行操作 | endl;cout |———————————————————| endl;cout | a:学生成绩录入 | endl;cout | b:学生成绩查看 | endl;cout | c:查询学生重修课程 | endl;cout | d:查询课程重修学生 | endl;cout | e:学生个人信息查看 | endl;cout | f:课程信息修改 | endl;cout | g:查看选课信息 | endl;cout | h:查看课程信息 | endl;cout | i:查看课程评价 | endl;cout | j:修改账户密码 | endl;cout | :保存数据 | endl;cout | #:退出程序 | endl;cout ———————————————————— endl;
}
//教师界面输入
void Input_Teacher(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system(cls);cout ———————————————————— endl;cout 当前学生总数: StudentHead-PersonalInformation.StudentNum endl;cout 当前课程总数: CourseHead-SubNum endl;Teacher_Begin();cin choose;switch (choose) {case #://退出程序cout 退出成功欢迎下次使用! endl;return;case a: case A://学生成绩录入GradeInput(CourseHead, StudentHead);break;case b: case B://学生成绩查看SearchCourse(StudentHead, CourseHead);break;case c: case C://查询学生重修课程SearchFailCourse(CourseHead, StudentHead);break;case d: case D://查询课程重修学生Search_CourseRetake(CourseHead, StudentHead);break;case e: case E://学生个人信息查看SearchInformation(StudentHead);break;case F:case f://课程信息修改ModifyCourse(CourseHead);break;case g:case G://查看选课信息CourseSelection_view(CourseHead, StudentHead);break;case h:caseH://查看课程信息CourseInformation_View(CourseHead);break;case i:caseI://查看课程评价CourseEvaluation_Search(CourseHead);break;case j:caseJ://教师个人账户密码修改TeacherAccount_ChangePassword(UserTeacherHead);break;case ://保存(完成)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}
}//**************************************学生信息基础功能块**************************************//添加学生个人
void PushStudent(LinkStudent StudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);LinkStudent std, p StudentHead;std new Student;//首先定义next要置空std-next NULL;int Class;cout 请输入该学生所在班级: endl;cin Class;//找到最后该班学号最后一个while (p-next-PersonalInformation.StudentNum (100 * (Class 1))) {p p-next;if (p-next NULL) {//如果到了尽头,即判断最后一个是否满足//如果不满足即不存在该班级if (p-PersonalInformation.StudentNum (100 * Class)) {cout 添加失败,该班级不存在! endl;system(pause);system(cls);return;}else {//满足就连接到链表末尾std-PersonalInformation.StudentNum p-PersonalInformation.StudentNum 1;//学生总数1StudentHead-PersonalInformation.StudentNum;printf(已设置该学生学号为: %04d\n, std-PersonalInformation.StudentNum);p-next std;break;}}}//插入链表if (p-next ! std) {std-PersonalInformation.StudentNum p-PersonalInformation.StudentNum 1;std-next p-next;p-next std;//学生总数1StudentHead-PersonalInformation.StudentNum;printf(已设置该学生学号为: %04d\n, std-PersonalInformation.StudentNum);}cout 请填写该学生姓名(张三): endl;cout 请填写该学生性别(男/女): endl;cout 请填写该学生年龄: endl;cout 请填写该学生宿舍地址(泰山区xx栋xxx): endl;cout 请填写该学生手机号码: endl;cin std-PersonalInformation.StudentName;cin std-PersonalInformation.StudentSex;cin std-PersonalInformation.StudentAge;cin std-PersonalInformation.StudentDorm;cin std-PersonalInformation.StudentPhone;cout 填写成功记得保存信息哦 endl;system(pause);system(cls);
}//修改学生个人信息
LinkStudent ModifyStudent(LinkStudent StudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return StudentHead;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);LinkStudent p;cout 请输入需要修改的学生学号 endl;int studentNum;cin studentNum;if ((p SearchStudent(studentNum, StudentHead)) NULL)return StudentHead;while (1) {system(cls);cout ———————————————————— endl;cout | 请输入选项进行操作 | endl;cout |———————————————————| endl;cout | a:学生名字 | endl;cout | b:学生性别 | endl;cout | c:学生年龄 | endl;cout | d:学生宿舍 | endl;cout | e:学生手机号码 | endl;cout ———————————————————— endl;char judge;cin judge;switch (judge){casea:cin p-PersonalInformation.StudentName;cout 修改成功 endl;system(pause);system(cls);return StudentHead;caseb:cin p-PersonalInformation.StudentSex;cout 修改成功 endl;system(pause);system(cls);return StudentHead;casec:cin p-PersonalInformation.StudentAge;cout 修改成功 endl;system(pause);system(cls);return StudentHead;cased:cin p-PersonalInformation.StudentDorm;cout 修改成功 endl;system(pause);system(cls);return StudentHead;casee:cin p-PersonalInformation.StudentPhone;cout 修改成功 endl;system(pause);system(cls);return StudentHead;default:system(cls);cout 请按格式正确输入! endl;break;}}
}//新建学生链表
LinkStudent CreateStudentList(LinkStudent StudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return StudentHead;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);int n;int ClassStdNum;cout 请输入学生总数和每班人数 endl;cin n ClassStdNum;LinkStudent q StudentHead, p;//Student的头节点学号存放学生总数StudentHead-PersonalInformation.StudentNum n;int num 1, hundred 100;for (int i 1; i n; i) {p new Student;p-next NULL;//学号直接初始化p-PersonalInformation.StudentNum num hundred;//将学生链表连接起来q-next p;q p;//如果num到达该班人数则num;if (num ClassStdNum) {num 1;hundred 100;}}cout 学生信息初始化完成 endl;system(pause);system(cls);return StudentHead;
}//存取学生链表数据
void StoreStudentList(LinkStudent StudentHead) {system(cls);cout 正在存储学生数据 endl;if (StudentHead-next NULL) { cout 该学生信息表不存在! endl; return; }LinkStudent p;p StudentHead;FILE* fp fopen(PATH1, wb);if (fp NULL) { cout 储存文件失败! endl; return; }//写入时也要把头节点写进去while (p ! NULL) {fwrite(p, sizeof(Student), 1, fp);p p-next;}cout 存储学生数据成功 endl;fclose(fp);fp NULL;system(pause);system(cls);
}//删除学生函数
LinkStudent DeleteStudent(LinkStudent StudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return StudentHead;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);cout 请输入要删除的学生学号 endl;int StdNum;cin StdNum;LinkStudent q, p;q p StudentHead;while (p) {q p;p p-next;if (!p) {cout 学号不存在! endl;system(pause);system(cls);//如果不存在返回NULL标志错误return NULL;}//如果找到该学号即返回pif (p-PersonalInformation.StudentNum StdNum)break;}q-next p-next;//p-next NULL;//delete(p); StudentHead-PersonalInformation.StudentNum--;cout 删除成功! endl;system(pause);system(cls);return StudentHead;
}//学生个人信息查看
void SearchInformation(LinkStudent StudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);cout 查看的学生学号是 endl;int StdNum;cin StdNum;LinkStudent p;if ((p SearchStudent(StdNum, StudentHead)) NULL) {return;}cout 该学生姓名: p-PersonalInformation.StudentName endl;cout 该学生性别: p-PersonalInformation.StudentSex endl;cout 该学生年龄: p-PersonalInformation.StudentAge endl;cout 该学生宿舍地址: p-PersonalInformation.StudentDorm endl;cout 该学生手机号码: p-PersonalInformation.StudentPhone endl;system(pause);system(cls);
}//学生个人信息录入
LinkStudent PnInformation(LinkStudent StudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return StudentHead;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);int StdNum;cout 请输入录入个人信息的学生学号 endl;cin StdNum;LinkStudent p;if ((p SearchStudent(StdNum, StudentHead)) NULL) {return StudentHead;}cout 请填写该学生姓名(张三): endl;cout 请填写该学生性别(男/女): endl;cout 请填写该学生年龄: endl;cout 请填写该学生宿舍地址(泰山区xx栋xxx): endl;cout 请填写该学生手机号码: endl;cin p-PersonalInformation.StudentName;cin p-PersonalInformation.StudentSex;cin p-PersonalInformation.StudentAge;cin p-PersonalInformation.StudentDorm;cin p-PersonalInformation.StudentPhone;cout 填写成功记得保存信息哦 endl;system(pause);system(cls);return StudentHead;
}
//**************************************课程基础功能块**************************************//学生课程链表初始化,设置课程数量且将学号录入
LinkCourse InitCourse(LinkCourse CourseHead, LinkStudent StudentHead) {system(cls);cout 您是否要进行课程初始化(Y/N) endl;cout 课程初始化前一定要设置好学生名单哦! endl;char judge;cin judge;if (judge N || judge n)return CourseHead;system(cls);cout 请输入开设课程数量: endl;int Num;cin Num;//课程头节点存放课程数量CourseHead-SubNum Num;LinkCourse p2, p1;p2 CourseHead;system(cls);for (int i 1; i Num; i) {p1 new Course;p1-next NULL;p1-SubNum i;cout 系统已分配课程编号为 p1-SubNum endl;cout 请设置开设课程编号名称: endl;cin p1-SubName;cout 请设置该课程的学分: endl;cin p1-SubCredits;p2-next p1;p2 p1;system(cls);}p2 CourseHead-next;LinkStudent ps StudentHead-next;int n StudentHead-PersonalInformation.StudentNum;int i 0;while (p2) {while (ps) {p2-Grade[i].StudentNum ps-PersonalInformation.StudentNum;ps ps-next;i;}ps StudentHead-next;p2 p2-next;i 0;}cout 课程初始化成功! endl;system(pause);system(cls);return CourseHead;
}//添加课程
void AddCourse(LinkCourse CourseHead, LinkStudent StudentHead) {system(cls);char Judge;int Flag 0;while (1) {cout 是否要进行操作?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);LinkCourse newcourse new Course;newcourse-next NULL;LinkCourse p SearchCourseID(CourseHead-SubNum, CourseHead);p-next newcourse;CourseHead-SubNum;newcourse-SubNum CourseHead-SubNum;cout 已分配该课程编号为: CourseHead-SubNum endl;cout ———————————————————— endl;cout 请输入添加课程的名字: endl;cin newcourse-SubName;cout 请输入添加课程的学分: endl;cin newcourse-SubCredits;cout 请输入添加课程的任课老师: endl;cin newcourse-Teacher;cout 请输入添加课程的任课地点: endl;cin newcourse-Position;cout 请输入添加课程的任课时间: endl;cin newcourse-Time;//分配成绩的学号LinkStudent ps StudentHead;int i 0;while (ps) {newcourse-Grade[i].StudentNum ps-PersonalInformation.StudentNum;ps ps-next;i;}cout 添加成功 endl;system(pause);system(cls);
}//删除课程函数
LinkCourse DeleteCoursse(LinkCourse CourseHead) {LinkCourse q, p;q p CourseHead;system(cls);cout 您想要通过什么方式找到课程? endl;cout a:课程关键词搜索 endl;cout b:课程编号搜索 endl;cout #:返回上一层 endl;char judge;int id;int flag 0;while (1) {cin judge;switch (judge){casea:p SearchCourse_byword(CourseHead);if (p NULL)return NULL;id p-SubNum;p SearchCourseID(id, CourseHead);while (q-next ! p) {q q-next;}flag 1;break;caseb:cout 请输入要删除的课程编号 endl;int SubNum;cin SubNum;LinkCourse q, p;q p CourseHead;while (p) {q p;p p-next;if (!p) {cout 编号不存在! endl;system(pause);system(cls);//如果不存在返回NULL标志错误return NULL;}//如果找到该编号即返回pif (p-SubNum SubNum)break;}flag 1;break;case#:return CourseHead;default:cout 请正确输入 endl;break;}if (flag 1)break;}q-next p-next;p q-next;//重新按序排序课程编号int subnum;if (q CourseHead) {subnum 1;}else {subnum q-SubNum 1;}while (p) {p-SubNum subnum;p p-next;}//删除后课程数量-1CourseHead-SubNum--;cout 删除成功! endl;system(pause);system(cls);return CourseHead;
}//修改课程信息
void ModifyCourse(LinkCourse CourseHead) {LinkCourse p CourseHead;int flag 0, id;char judge;while(1){system(cls);cout 您想要通过什么方式找到课程? endl;cout a:课程关键词搜索 endl;cout b:课程编号搜索 endl;cout #:返回上一层 endl;cin judge;switch (judge){case#:return;casea:caseA:p SearchCourse_byword(CourseHead);if (p NULL)return;id p-SubNum;p SearchCourseID(id, CourseHead);flag 1;break;caseb:caseB:system(cls);cout 请输入查看的课程编号: endl;int coursenum;cin coursenum;p SearchCourseID(coursenum, CourseHead);if (p NULL)return;flag 1;break;default:cout 请正确输入 endl;break;}if (flag 1)break;
}while (1) {cout ———————————————————— endl;cout 编号为 p-SubNum 的课程: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 任课老师: p-Teacher endl;cout 任课地点: p-Position endl;cout 任课时间: p-Time endl;system(pause);system(cls);cout 编号为 p-SubNum 的课程: endl;cout 请选择需要修改的信息: endl;cout ———————————————————— endl;cout a:课程名称 endl;cout b:课程学分: endl;cout c:任课老师: endl;cout d:任课地点: endl;cout e:任课时间: endl;cin judge;switch (judge){casea:cout 请输入课程名称 endl;cin p-SubName;cout 修改成功!记得保存信息哦 endl;system(pause);system(cls);return;caseb:cout 请输入课程学分 endl;cin p-SubCredits;cout 修改成功!记得保存信息哦 endl;system(pause);system(cls);return;casec:cout 请输入任课老师 endl;cin p-Teacher;cout 修改成功!记得保存信息哦 endl;system(pause);system(cls);return;cased:cout 请输入任课地点 endl;cin p-Position;cout 修改成功!记得保存信息哦 endl;system(pause);system(cls);return;casee:cout 请输入任课时间 endl;cin p-Time;cout 修改成功!记得保存信息哦 endl;system(pause);system(cls);return;default:cout 请正确输入! endl;system(pause);system(cls);break;}}
}//课程评价
void CourseEvaluation_Operate(LinkCourse CourseHead) {LinkCourse p CourseHead;int flag0, id;char judge;while (1) {system(cls);cout 您想要通过什么方式找到课程? endl;cout a:课程关键词搜索 endl;cout b:课程编号搜索 endl;cout #:返回上一层 endl;cin judge;switch (judge){case#:return;casea:caseA:p SearchCourse_byword(CourseHead);if (p NULL)return;id p-SubNum;p SearchCourseID(id, CourseHead);flag 1;break;caseb:caseB:system(cls);cout 请输入查看的课程编号: endl;int coursenum;cin coursenum;p SearchCourseID(coursenum, CourseHead);if (p NULL)return;flag 1;break;default:cout 请正确输入 endl;system(pause);break;}if (flag 1)break;}cout ———————————————————— endl;cout 编号为 p-SubNum 的课程: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 任课老师: p-Teacher endl;cout 任课地点: p-Position endl;cout 任课时间: p-Time endl;system(pause);system(cls);cout 请输入您的评价: endl;cout ———————————————————— endl;int i 0;while (p-Evaluation[i][0]!\0) {i;if (i 10) {break;}}if (i 10) {cout 评价已满! endl;system(pause);return;}cin p-Evaluation[i];cout 感谢您的评价 endl;system(pause);}//课程评价查看
void CourseEvaluation_Search(LinkCourse CourseHead) {LinkCourse p CourseHead;system(cls);cout 您想要通过什么方式找到课程? endl;cout a:课程关键词搜索 endl;cout b:课程编号搜索 endl;cout #:返回上一层 endl;char judge;int id;int flag 0;while (1) {cin judge;switch (judge){case#:return;casea:caseA:p SearchCourse_byword(CourseHead);if (p NULL)return;id p-SubNum;p SearchCourseID(id, CourseHead);flag 1;break;caseb:caseB:system(cls);cout 请输入查看的课程编号: endl;int coursenum;cin coursenum;p SearchCourseID(coursenum, CourseHead);if (p NULL)return;flag 1;break;default:cout 请正确输入 endl;system(pause);break;}if (flag 1)break;}cout ———————————————————— endl;cout 编号为 p-SubNum 的课程: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 任课老师: p-Teacher endl;cout 任课地点: p-Position endl;cout 任课时间: p-Time endl;cout ———————————————————— endl;cout 课程评价: endl;int i 1;while (p-Evaluation[i][0]! \0) {cout p-Evaluation[i] endl;;cout ———————————————————— endl;i;}system(pause);
}//按班级录入选课信息
LinkCourse CourseSelection_entry(LinkCourse CourseHead) {int i, j;LinkCourse p;p GetCourse(CourseHead);if (p NULL) { return CourseHead; }cout 请输入录入选课的班级: endl;cin i;i * 100;j 0;while (p-Grade[j].StudentNum i) {j;}while (p-Grade[j].StudentNum i p-Grade[j].StudentNum i 100) {int select;while (1) {cout 学号: p-Grade[j].StudentNum endl;cout 该学生是否选择课程,1为选择,0为未选择 endl;cin select;if (select 1) {if (p-Grade[j].Judge 1) {cout 该学生已选课 endl;break;}else {if (p-Capacity 60) {cout 当前课程容量已满 endl;system(pause);break;}p-Grade[j].Judge 1;p-Capacity;cout 选课成功! endl;system(pause);break;}}else if (select 0) {if (p-Grade[j].Judge 1) {cout 该学生将退选课程! endl;p-Grade[j].Judge 0;p-Capacity--;system(pause);break;}break;}else {cout 请正确输入! endl;}}j;}cout 输入成功 endl;system(pause);system(cls);return CourseHead;
}//查询选课情况
void CourseSelection_view(LinkCourse CourseHead, LinkStudent StudentHead) {system(cls);char judge;int j0,num StudentHead-PersonalInformation.StudentNum;LinkCourse p;LinkStudent One;int StudentNum;while (1) {cout 请选择查询模式 endl;cout a.查询课程选课的学生 endl;cout b.查询学生的选课情况 endl;cout #.返回上一层 endl;cin judge;int flag 0;switch (judge) {casea:caseA:p GetCourse(CourseHead);if (p NULL)return;cout ———————————————————— endl;while (num--) {if (p-Grade[j].Judge 1) {cout 学号: p-Grade[j].StudentNum endl;One SearchStudent(p-Grade[j].StudentNum, StudentHead);cout 姓名: One-PersonalInformation.StudentName endl;cout ———————————————————— endl;}j;}system(pause);system(cls);flag 1;return;caseb:caseB://查询学生的选课情况SearchStudentCourse(CourseHead, StudentHead);return;case#:return;default:break;}if (flag 1)break;}return;
}//查询学生的选课情况
void SearchStudentCourse(LinkCourse CourseHead, LinkStudent StudentHead) {system(cls);char judge;int j 0, num StudentHead-PersonalInformation.StudentNum;LinkCourse p;LinkStudent One;int StudentNum;while (1) {cout 请选择查询模式 endl;cout a.按班查询学生选课情况 endl;cout b.查询学生个人选课情况 endl;cout #.返回上一层 endl;cin judge;int flag 0;switch (judge) {casea:caseA:SearchClassCourse(StudentHead, CourseHead);return;caseb:caseB:system(cls);int StdNum;cout 请输入查询的学生学号: endl;cin StdNum;One SearchStudent(StdNum, StudentHead);if (One NULL)return;PersonalCourse_Search(One, StudentHead, CourseHead);return;case#:return;default:break;}if (flag 1)break;}
}//查看课程信息
void CourseInformation_View(LinkCourse CourseHead) {LinkCourse p CourseHead;system(cls);cout 您想要通过什么方式找到课程? endl;cout a:课程关键词搜索 endl;cout b:课程编号搜索 endl;cout #:返回上一层 endl;char judge;int id;cin judge;switch (judge){casea:caseA:p SearchCourse_byword(CourseHead);if (p NULL)return;id p-SubNum;p SearchCourseID(id, CourseHead);break;caseb:caseB:system(cls);cout 请输入查看的课程编号: endl;int coursenum;cin coursenum;p SearchCourseID(coursenum, CourseHead);if (p NULL)return;break;case#:return;default:cout 请正确输入 endl;break;}cout ———————————————————— endl;cout 编号为 p-SubNum 的课程: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout 任课老师: p-Teacher endl;cout 任课地点: p-Position endl;cout 任课时间: p-Time endl;cout 课程容量: p-Capacity /60 endl;system(pause);system(cls);}//通过编号查看课程信息
void searchcourse(LinkCourse coursehead) {system(cls);cout 请输入查看的课程编号: endl;int coursenum;cin coursenum;LinkCourse p;p SearchCourseID(coursenum, coursehead);if (p NULL)return;cout 编号为 coursenum 的课程: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;system(pause);system(cls);
}//存取课程链表数据(完成)
void StoreCourseList(LinkCourse CourseHead) {cout 正在存储课程数据 endl;if (CourseHead-next NULL) { cout 课程信息表不存在! endl; return; }LinkCourse p;p CourseHead;FILE* fp fopen(PATH2, wb);if (fp NULL) { cout 储存文件失败! endl; return; }//写入时也要把头节点写进去while (p ! NULL) {fwrite(p, sizeof(Course), 1, fp);p p-next;}cout 存储课程数据成功 endl;fclose(fp);fp NULL;system(pause);system(cls);
}//学生课程成绩录入
void GradeInput(LinkCourse CourseHead, LinkStudent StudentHead) {LinkCourse p CourseHead;char judge;int id;int flag 0;while (1) {system(cls);cout 您想要通过什么方式录入成绩? endl;cout a:按课程对全部选课学生进行录入 endl;cout b:按课程对个别选课学生进行录入 endl;cout #:返回上一层 endl;cin judge;switch (judge){casea:case A://按课程对全部选课学生进行录入GradeInput_ThroughCourse(CourseHead, StudentHead);return;caseb:case B:flag 1;break;case#:return;default:cout 请正确输入 endl;system(pause);system(cls);}if (flag 1)break;}system(cls);flag 0;while (1) {cout 您想要通过什么方式找到课程? endl;cout a:课程关键词搜索 endl;cout b:课程编号搜索 endl;cin judge;switch (judge){casea:p SearchCourse_byword(CourseHead);if (p NULL)break;id p-SubNum;p SearchCourseID(id, CourseHead);flag 1;break;caseb:system(cls);cout 请输入查看的课程编号: endl;cin id;p SearchCourseID(id, CourseHead);if (p NULL)return;system(cls);flag 1;break;default:cout 请正确输入 endl;system(pause);system(cls);}if (flag 1)break;}cout 您正在查看的课程 p-SubName endl;cout 请输入要操作课程的学生学号 endl;int StudentNum;cin StudentNum;int i 0;LinkStudent Student SearchStudent(StudentNum, StudentHead);//学号不存在if (Student NULL)return;while (p-Grade[i].StudentNum ! StudentNum) {i;if (i StudentHead-PersonalInformation.StudentNum) {cout 学号不存在! endl;system(pause);return;}}if (p-Grade[i].Judge 0) {cout 该学生未选课! endl;system(pause);return;}if (p-Grade[i].TotalGrade ! 0) {system(cls);char Judge;int Flag 0;while (1) {cout 该学生成绩已录入! endl;cout 该学生成绩是否需要重新录入?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:return;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}system(cls);}cout 学号: p-Grade[i].StudentNum endl;Student SearchStudent(p-Grade[i].StudentNum, StudentHead);cout 姓名: Student-PersonalInformation.StudentName endl;cout 平时成绩: endl;cin p-Grade[i].OrdinaryGrade;cout 考试成绩: endl;cin p-Grade[i].TestGrade;p-Grade[i].TotalGrade p-Grade[i].OrdinaryGrade * 0.4 p-Grade[i].TestGrade * 0.6;if (p-Grade[i].TestGrade 60) {p-Grade[i].Retake 1;}else {if (p-Grade[i].Retake ! 0) {p-Grade[i].TotalGrade 60;}Student-StudentCredits p-SubCredits;}cout 学生成绩输入完成 endl;system(pause);system(cls);
}//学生学分查询
void Creadits_Search(LinkStudent StudentHead) {char judge;int i, j;LinkStudent One StudentHead;int flag;while (1) {system(cls);cout 请选择查询成绩功能 endl;cout a.按班统计学生学分 endl;cout b.按学生学号查询学分 endl;cout #:返回上一层 endl;cin judge;switch (judge){casea:system(cls);cout 请输入查询学分的班级: endl;cin i;i * 100;while (One-PersonalInformation.StudentNum i) {One One-next;}while (One-PersonalInformation.StudentNum i One-PersonalInformation.StudentNum i 100) {cout 学号: One-PersonalInformation.StudentNum endl;cout 学分: One-StudentCredits endl;cout *************************************************************** endl;One One-next;}system(pause);system(cls);return;caseb:cout 查看的学生学号是 endl;int StdNum;cin StdNum;One SearchStudent(StdNum, StudentHead);if (One NULL)return;cout 学号: One-PersonalInformation.StudentNum endl;cout 学分: One-StudentCredits endl;cout *************************************************************** endl;system(pause);system(cls);return;case#:return;default:cout 请重新输入 endl;system(pause);break;}}
};//查询课程重修
void Search_CourseRetake(LinkCourse CourseHead, LinkStudent StudentHead) {system(cls);char judge;int flag 0;LinkCourse copyhead NULL, p NULL;int id, i;while (1) {cout 请选择查询课程功能 endl;cout a.按关键词搜索课程 endl;cout b.按编号搜索课程 endl;cout #:返回上一层 endl;cin judge;switch (judge){casea:caseA:p SearchCourse_byword(CourseHead);if (p NULL)return;id p-SubNum;p SearchCourseID(id, CourseHead);flag 1;break;caseb:caseB:cout 查看的课程编号是 endl;int SubNum;cin SubNum;p SearchCourseID(SubNum, CourseHead);if (p NULL) return;id p-SubNum;p SearchCourseID(id, CourseHead);flag 1;break;case#:return;default:cout 请重新输入! endl;system(pause);system(cls);break;}if (flag 1)break;}system(cls);cout 课程是: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout ———————————————————— endl;LinkStudent q;for (i 0; i StudentHead-PersonalInformation.StudentNum; i) {if (p-Grade[i].Judge 1 p-Grade[i].Retake 0) {cout 学号: p-Grade[i].StudentNum endl;q SearchStudent(p-Grade[i].StudentNum, StudentHead);cout 姓名: q-PersonalInformation.StudentName endl;cout 重修次数 p-Grade[i].Retake endl;cout 平时成绩: p-Grade[i].OrdinaryGrade endl;cout 考试成绩: p-Grade[i].TestGrade endl;;cout 综合成绩: p-Grade[i].TotalGrade endl;;cout ———————————————————— endl;}}system(pause);system(cls);};//按课程录入学生考试成绩。
void GradeInput_ThroughCourse(LinkCourse CourseHead, LinkStudent StudentHead) {char judge;LinkCourse copyhead NULL, p NULL;int id, i,flag0;while (1) {system(cls);cout 请选择查询课程功能 endl;cout a.按关键词搜索课程 endl;cout b.按编号搜索课程 endl;cin judge;switch (judge){caseb:caseB:cout 查看的课程编号是 endl;cin id;p SearchCourseID(id, CourseHead);if (p NULL) return;flag 1;break;casea:caseA:p SearchCourse_byword(CourseHead);if (p NULL)return;id p-SubNum;p SearchCourseID(id, CourseHead);flag 1;break;default:break;}if (flag 1)break;}cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout ———————————————————— endl;system(pause);system(cls);LinkStudent q;int nxt 0;cout 请依次对选课学生成绩进行填写 endl;for (i 0; i StudentHead-PersonalInformation.StudentNum; i) {if (p-Grade[i].Judge 1) {cout 学号: p-Grade[i].StudentNum endl;q SearchStudent(p-Grade[i].StudentNum, StudentHead);cout 姓名: q-PersonalInformation.StudentName endl;if (p-Grade[i].TotalGrade ! 0) {char Judge;int Flag 0;while (1) {cout 该学生成绩已录入! endl;cout 该学生成绩是否需要重新录入?(Y/N) endl;cin Judge;switch (Judge){case Y:case y:Flag 1;break;case N:case n:nxt 1;Flag 1;break;default:cout 请重新输入! endl;system(pause);break;}if (Flag 1)break;}if (nxt) {nxt 0;system(cls);continue;}system(cls);}else {cout 平时成绩: endl;cin p-Grade[i].OrdinaryGrade;cout 考试成绩: endl;cin p-Grade[i].TestGrade;p-Grade[i].TotalGrade p-Grade[i].OrdinaryGrade * 0.4 p-Grade[i].TestGrade * 0.6;}if (p-Grade[i].TestGrade 60) {p-Grade[i].Retake 1;}else {if (p-Grade[i].Retake ! 0) {p-Grade[i].TotalGrade 60;}q-StudentCredits p-SubCredits;}cout 学生成绩输入完成 endl;cout ———————————————————— endl;}}system(pause);system(cls);
};//获取该课课程评价
void GetCourseEvaluation(LinkCourse Course) {int i 0;cout ———————————————————— endl;cout | 课程评价 | endl;cout |———————————————————| endl;while (strlen(Course-Evaluation[i]) 0) {cout i 1 . Course-Evaluation[i] endl;cout |———————————————————| endl;i;}
}//读取课程数据函数
LinkCourse ReadCourseList(LinkStudent StudentHead) {cout 正在读取课程数据 endl;LinkCourse p1, p2, CourseHead new Course;p2 CourseHead;CourseHead-next NULL;FILE* fp fopen(PATH2, rb);if (fp NULL) {cout 数据文件不存在 endl;cout 将为您初始化,请根据信息进行输入! endl;system(pause);CourseHead InitCourse(CourseHead, StudentHead);return CourseHead;}//读取时先读取第一个头节点fread(CourseHead, sizeof(*CourseHead), 1, fp);p1 new Course;int i 0;while ((fread(p1, sizeof(*p1), 1, fp)) 1) {i;p1-next NULL;p2-next p1;p2 p1;p1 new Course;}if (i 0) { cout 空文件! endl; return CourseHead; }delete(p1);fclose(fp);cout 读取文件数据成功 endl;system(pause);system(cls);return CourseHead;
}//菜单
void Begin() {cout ———————————————————— endl;cout | 请输入数字进行操作 | endl;cout |———————————————————| endl;cout | a:成绩系统 | endl;cout | b:课程系统 | endl;cout | c:信息系统 | endl;cout | d:账号系统 | endl;cout | e:初始化 | endl;cout | :数据保存 | endl;cout | #:退出程序 | endl;cout ———————————————————— endl;
}
//成绩系统菜单
void GradeSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system(cls);cout ———————————————————— endl;cout 当前学生总数: StudentHead-PersonalInformation.StudentNum endl;cout 当前课程总数: CourseHead-SubNum endl;cout ———————————————————— endl;cout | 请输入数字进行操作 | endl;cout |———————————————————| endl;cout | a:学生成绩录入 | endl;cout | b:学生成绩查询 | endl;cout | c:查询课程重修学生 | endl;cout | d:查询学生不及格课程 | endl;cout | e:查询学生学分 | endl;cout | :数据保存 | endl;cout | #:返回上一层 | endl;cout ———————————————————— endl;cin choose;switch (choose) {case #://返回上一层return;case a: case A://学生成绩录入GradeInput(CourseHead, StudentHead);break;case b: case B://学生成绩查看SearchCourse(StudentHead, CourseHead);break;case c: case C://查询课程重修学生Search_CourseRetake(CourseHead, StudentHead);break;case d: case D://查询学生不及格课程system(cls);cout 请输入查询的学生学号: endl;int StdNum;cin StdNum;LinkStudent One;One SearchStudent(StdNum, StudentHead);if (One NULL)return;SearchPersonalFailCourse(One, CourseHead);break;case e: case E://查询学分Creadits_Search(StudentHead);break;case ://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}
}//课程系统菜单
void CourseSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system(cls);cout ———————————————————— endl;cout 当前学生总数: StudentHead-PersonalInformation.StudentNum endl;cout 当前课程总数: CourseHead-SubNum endl;cout ———————————————————— endl;cout | 请输入数字进行操作 | endl;cout |———————————————————| endl;cout | a:课程初始化 | endl;cout | b:修改课程信息 | endl;cout | c:添加课程 | endl;cout | d:删除课程 | endl;cout | e:按班级录入选课信息 | endl;cout | f:查询选课情况 | endl;cout | g:查询课程信息 | endl;cout | h:课程重修查看 | endl;cout | i:课程评价 | endl;cout | j:课程评价查看 | endl;cout | :数据保存 | endl;cout | #:返回上一层 | endl;cout ———————————————————— endl;cin choose;switch (choose) {case #://返回上一层return;case a: case A://课程初始化InitCourse(CourseHead, StudentHead);break;case b: case B://修改课程ModifyCourse(CourseHead);break;casec:caseC://添加课程AddCourse(CourseHead, StudentHead);break;cased:caseD://删除课程函数DeleteCoursse(CourseHead);break;casee:caseE://按班级录入选课信息CourseSelection_entry(CourseHead);break;casef:caseF://选课信息查看CourseSelection_view(CourseHead, StudentHead);break;caseg:caseG://查看课程信息CourseInformation_View(CourseHead);break;caseh:caseH://课程重修查看Search_CourseRetake(CourseHead, StudentHead);break;casei:caseI://课程评价CourseEvaluation_Operate(CourseHead);break;casej:caseJ://课程评价查看CourseEvaluation_Search(CourseHead);break;case ://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}
}//信息系统菜单
void InformationSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system(cls);cout ———————————————————— endl;cout 当前学生总数: StudentHead-PersonalInformation.StudentNum endl;cout 当前课程总数: CourseHead-SubNum endl;cout ———————————————————— endl;cout | 请输入数字进行操作 | endl;cout |———————————————————| endl;cout | a:学生个人信息录入 | endl;cout | b:学生个人信息查看 | endl;cout | c:学生个人添加 | endl;cout | d:学生个人删除 | endl;cout | e:学生个人修改 | endl;cout | :数据保存 | endl;cout | #:返回上一层 | endl;cout ———————————————————— endl;cin choose;switch (choose) {case #://返回上一层return;case a: case A://学生个人信息录入StudentHead PnInformation(StudentHead);break;case b: case B://学生个人信息查看SearchInformation(StudentHead);break;casec:case C://学生个人添加PushStudent(StudentHead);break;cased:case D://学生个人删除DeleteStudent(StudentHead);break;casee:case E://学生个人修改ModifyStudent(StudentHead);break;case ://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}
}//帐号系统菜单
void AccountSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system(cls);cout ———————————————————— endl;cout 当前学生总数: StudentHead-PersonalInformation.StudentNum endl;cout 当前课程总数: CourseHead-SubNum endl;cout ———————————————————— endl;cout | 请输入数字进行操作 | endl;cout |———————————————————| endl;cout | a:读取账号 | endl;cout | b:添加管理员帐号 | endl;cout | c:添加教师账号 | endl;cout | d:添加学生账号 | endl;cout | e:删除账号 | endl;cout | f:修改密码 | endl;cout | :数据保存 | endl;cout | #:返回上一层 | endl;cout ———————————————————— endl;cin choose;switch (choose) {case #://返回上一层return;casea:caseA://读取账号UserStudentHead Student_AccountRead(UserStudentHead);UserTeacherHead Teacher_AccountRead(UserTeacherHead);UserAdministratorHead Administrator_AccountRead(UserAdministratorHead);return;caseb:caseB://录入管理员账号EntryAdministrator(UserAdministratorHead);return;casec:caseC://录入教师账号EntryTeacher(UserTeacherHead);return;cased:caseD://录入学生账号EntryStudent(UserStudentHead);return;casee:caseE://删除账号AccountSystem_Delete(UserAdministratorHead, UserTeacherHead, UserStudentHead);return;casef:caseF://修改密码Account_ChangePassword(UserAdministratorHead, UserTeacherHead, UserStudentHead);return;case ://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);return;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}
}//初始化菜单
void Initialization(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {system(cls);char choose;while (1) {cout ———————————————————— endl;cout 当前学生总数: StudentHead-PersonalInformation.StudentNum endl;cout 当前课程总数: CourseHead-SubNum endl;cout ———————————————————— endl;cout | 请输入数字进行操作 | endl;cout |———————————————————| endl;cout | a:初始化学生数据 | endl;cout | b:初始化课程数据 | endl;cout | :保存数据 | endl;cout | #:返回上一层 | endl;cout ———————————————————— endl;cin choose;switch (choose) {case #://返回上一层return;case a: case A://初始化学生信息StudentHead CreateStudentList(StudentHead);break;caseb:case B://课程初始化InitCourse(CourseHead, StudentHead);break;case ://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}
}//读取学生文件数据函数
LinkStudent ReadStudentList() {cout 正在读取学生数据 endl;LinkStudent p1, p2, StudentHead new Student;p2 StudentHead;StudentHead-next NULL;FILE* fp fopen(PATH1, rb);if (fp NULL) {cout 数据文件不存在 endl;cout 将为您初始化,请根据信息进行输入! endl;StudentHead CreateStudentList(StudentHead);return StudentHead;}//读取时先读取第一个头节点fread(StudentHead, sizeof(*StudentHead), 1, fp);p1 new Student;int i 0;while ((fread(p1, sizeof(*p1), 1, fp)) 1) {i;p1-next NULL;p2-next p1;p2 p1;p1 new Student;}if (i 0) { cout 空文件! endl; return StudentHead; }delete(p1);fclose(fp);cout 读取文件数据成功 endl;system(pause);system(cls);return StudentHead;
}//查询一个班级的成绩
void SearchClassGrade(LinkStudent StudentHead, LinkCourse CourseHead) {system(cls);cout 您想要查看哪一班级的成绩? endl;int Class;cin Class;Class * 100;int AllStdNum StudentHead-PersonalInformation.StudentNum;LinkStudent One, p StudentHead-next;while (p) {if (p-PersonalInformation.StudentNum Class) {break;}p p-next;}for (int i 0; i AllStdNum; i) {if (p-PersonalInformation.StudentNum Class 100)break;PersonalGrade_Search(p, CourseHead);p p-next;}
}//查询一个班级的选课情况
void SearchClassCourse(LinkStudent StudentHead, LinkCourse CourseHead) {system(cls);cout 您想要查看哪一班级的选课情况? endl;int Class;cin Class;Class * 100;int AllStdNum StudentHead-PersonalInformation.StudentNum;LinkStudent p StudentHead-next;while (p) {if (p-PersonalInformation.StudentNum Class) {break;}p p-next;}for (int i 0; i AllStdNum; i) {if (p-PersonalInformation.StudentNum Class 100)break;PersonalCourse_Search(p,StudentHead,CourseHead);p p-next;}
}//查询成绩
void SearchCourse(LinkStudent StudentHead, LinkCourse CourseHead) {char judge;char name[20];int tnum, num;int length;int i, j, id;LinkCourse copyhead NULL, p NULL;LinkStudent One;int flag 0;while (1) {system(cls);cout 您想要通过什么方式查看成绩? endl;cout a:查看学生个人所有课程成绩 endl;cout b:按课程查看全部选课学生成绩 endl;cout c:按班级查看学生成绩 endl;cout #:返回上一层 endl;cin judge;switch (judge){casea:case A://查看学生个人所有课程成绩system(cls);int StdNum;cout 请输入查询的学生学号: endl;cin StdNum;One SearchStudent(StdNum, StudentHead);if (One NULL)return;PersonalGrade_Search(One, CourseHead);return;caseb:case B:while (1) {system(cls);cout 请选择查询课程功能 endl;cout a.按关键词搜索课程 endl;cout b.按编号搜索课程 endl;cin judge;switch (judge){caseb:cout 查看的课程编号是 endl;int SubNum;cin SubNum;p SearchCourseID(SubNum, CourseHead);if (p NULL) { return; }flag 1;break;casea:p SearchCourse_byword(CourseHead);if (p NULL)break;id p-SubNum;p SearchCourseID(id, CourseHead);flag 1;break;default:cout 请正确输入! endl;system(pause);system(cls);}if (flag 1)break;}system(cls);cout 查看的课程是: endl;cout 课程名称: p-SubName endl;cout 课程学分: p-SubCredits endl;cout ———————————————————— endl;for (i 0; i StudentHead-PersonalInformation.StudentNum; i) {if (p-Grade[i].Judge 1) {cout 学号: p-Grade[i].StudentNum endl;One SearchStudent(p-Grade[i].StudentNum, StudentHead);cout 姓名: One-PersonalInformation.StudentName endl;cout 平时成绩: p-Grade[i].OrdinaryGrade endl;cout 考试成绩: p-Grade[i].TestGrade endl;cout 总成绩: p-Grade[i].TotalGrade endl;cout ———————————————————— endl;}}system(pause);return;casec:case C:system(cls);SearchClassGrade(StudentHead, CourseHead);return;case#:return;default:cout 请正确输入 endl;system(pause);system(cls);}if (flag 1)break;}system(cls);flag 0;
}//数据保存
void StoreData(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead) {StoreStudentList(StudentHead);StoreCourseList(CourseHead);AccountStore(UserAdministratorHead, UserTeacherHead, UserStudentHead);
};//管理员菜单
void Input_Administrator(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system(cls);cout ———————————————————— endl;cout 当前学生总数: StudentHead-PersonalInformation.StudentNum endl;cout 当前课程总数: CourseHead-SubNum endl;Begin();cin choose;switch (choose) {case #://退出程序cout 退出成功欢迎下次使用! endl;return;case a: case A://成绩系统GradeSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case b: case B://课程系统CourseSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case c: case C://信息系统InformationSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case d: case D://账户系统AccountSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case e: case E://初始化Initialization(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case ://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system(cls);cout 请按正确格式输入 endl;system(pause);system(cls);break;}}
}函数调用
#define _CRT_SECURE_NO_WARNINGS
#include Stdio.h
#include 结构体.h
#include string
#include iostream
#includeconio.h
using namespace std;
#includemalloc.h
#define OK 1
#define ERROR 0
#define InitStudentNum 1000
#define PATH1 StudentData.text
#define PATH2 CourseData.text
#define PATH3 Teacher_Account.text
#define PATH4 Administrator_Account.text
#define PATH5 Student_Account.textint main() {ios::sync_with_stdio(0), cin.tie(0);LinkStudent q,p,StudentHead;LinkCourse CourseHead new Course;LinkUserAdministrator UserAdministratorHeadnew UserAdministrator;LinkUserStudent UserStudentHeadnew UserStudent;LinkUserTeacher UserTeacherHeadnew UserTeacher;UserStudentHead-next NULL;UserTeacherHead-next NULL;UserAdministratorHead-next NULL;//启动程序时先读取文件StudentHeadReadStudentList();CourseHead ReadCourseList(StudentHead);UserAdministratorHeadAdministrator_AccountRead(UserAdministratorHead);UserTeacherHeadTeacher_AccountRead(UserTeacherHead);UserStudentHeadStudent_AccountRead(UserStudentHead);//输入操作char loginJudge;while (1) {loginJudgelogin(UserAdministratorHead, UserStudentHead, UserTeacherHead);if (loginJudge a) {Input_Student(StudentHead, CourseHead, UserTeacherHead, UserAdministratorHead, UserStudentHead);return 1;}else if (loginJudge b) {Input_Teacher(StudentHead, CourseHead,UserTeacherHead,UserAdministratorHead,UserStudentHead);return 1;}else if (loginJudge c ) {Input_Administrator(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);return 1;}else if (loginJudge #) {cout 请重新输入 endl;system(pause);system(cls);}}return 0;
}