**
大学第一个设计,代码量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;
#include<malloc.h>
#pragma once
#define InitStudentNum 1000
typedef struct Grade {//学生学号
int StudentNum;//学生是否选课 1为选 0为不选
int Judge =0;//重修 0为不用重修 1为重修
int Retake=0;//平时成绩
double OrdinaryGrade=0;//考试成绩
double TestGrade=0;//总成绩
double TotalGrade=0;};//单个课程结构
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);//删除账号voidAccountSystem_Delete(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);//删除学生账号
LinkUserStudent StudentAccount_Delete(LinkUserStudent UserStudentHead);//删除教师账号
LinkUserTeacher TeacherAccount_Delete(LinkUserTeacher UserTeacherHead);//删除管理员账号
LinkUserAdministrator AdministratorAccount_Delete(LinkUserAdministrator UserAdministratorHead);//修改密码voidAccount_ChangePassword(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);//修改学生密码
LinkUserStudent StudentAccount_ChangePassword(LinkUserStudent UserStudentHead);//修改教师密码
LinkUserTeacher TeacherAccount_ChangePassword(LinkUserTeacher UserTeacherHead);//修改管理员密码
LinkUserAdministrator AdministratorAccount_ChangePassword(LinkUserAdministrator UserAdministratorHead);//保存账号voidAccountStore(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);//学生界面菜单voidStudent_Begin();//个人成绩查看voidPersonalGrade_Search(LinkStudent One, LinkCourse CourseHead);//不及格课程查看voidSearchPersonalFailCourse(LinkStudent One, LinkCourse CourseHead);//个人学分查看voidPersonalCreadits_Search(LinkStudent One);//个人信息查看voidPersonalInformation_Search(LinkStudent One);//个人课程查看voidPersonalCourse_Search(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead);//选课中心voidPersonalCourse_Choose(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);//个人信息修改voidModifyPersonalInformation(LinkStudent One);//学生输入界面voidInput_Student(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead);//教师界面菜单voidTeacher_Begin();//教师界面输入voidInput_Teacher(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead);//添加学生个人voidPushStudent(LinkStudent StudentHead);//修改学生个人信息
LinkStudent ModifyStudent(LinkStudent StudentHead);//新建学生链表
LinkStudent CreateStudentList(LinkStudent StudentHead);//存取学生链表数据voidStoreStudentList(LinkStudent StudentHead);//删除学生函数
LinkStudent DeleteStudent(LinkStudent StudentHead);//学生个人信息查看voidSearchInformation(LinkStudent StudentHead);//学生个人信息录入
LinkStudent PnInformation(LinkStudent StudentHead);//学生课程链表初始化,设置课程数量且将学号录入
LinkCourse InitCourse(LinkCourse CourseHead, LinkStudent StudentHead);//添加课程voidAddCourse(LinkCourse CourseHead, LinkStudent StudentHead);//删除课程函数
LinkCourse DeleteCoursse(LinkCourse CourseHead);//修改课程信息voidModifyCourse(LinkCourse CourseHead);//课程评价voidCourseEvaluation_Operate(LinkCourse CourseHead);//课程评价查看voidCourseEvaluation_Search(LinkCourse CourseHead);//按班级录入选课信息
LinkCourse CourseSelection_entry(LinkCourse CourseHead);//选课学生信息查看voidCourseSelection_view(LinkCourse CourseHead, LinkStudent StudentHead);//查询学生的选课情况voidSearchStudentCourse(LinkCourse CourseHead, LinkStudent StudentHead);//查询一个班级的选课情况voidSearchClassCourse(LinkStudent StudentHead, LinkCourse CourseHead);//查看课程信息voidCourseInformation_View(LinkCourse CourseHead);//通过编号查看课程信息voidsearchcourse(LinkCourse coursehead);//存取课程链表数据(完成)voidStoreCourseList(LinkCourse CourseHead);//学生课程成绩录入voidGradeInput(LinkCourse CourseHead, LinkStudent StudentHead);//学生学分查询voidCreadits_Search(LinkStudent StudentHead);//查询重修学生的课程voidSearchFailCourse(LinkCourse CourseHead, LinkStudent StudentHead);//查询课程重修voidSearch_CourseRetake(LinkCourse CourseHead, LinkStudent StudentHead);//按课程录入学生考试成绩。voidGradeInput_ThroughCourse(LinkCourse CourseHead, LinkStudent StudentHead);//获取课程评价voidGetCourseEvaluation(LinkCourse Course);//读取课程数据函数
LinkCourse ReadCourseList(LinkStudent StudentHead);//菜单voidBegin();//成绩系统菜单voidGradeSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);//课程系统菜单voidCourseSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);//信息系统菜单voidInformationSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);//帐号系统菜单voidAccountSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);//初始化菜单voidInitialization(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);//读取学生文件数据函数
LinkStudent ReadStudentList();//查询一个班级的成绩voidSearchClassGrade(LinkStudent StudentHead, LinkCourse CourseHead);//查询成绩voidSearchCourse(LinkStudent StudentHead, LinkCourse CourseHead);//数据保存voidStoreData(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);//管理员菜单voidInput_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>
#include<malloc.h>
#include<conio.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标志错误returnNULL;}if(p->PersonalInformation.StudentNum == StdNum)break;//如果找到该学号即返回p}return p;}//复制课程链表
LinkCourse copyCourse(LinkCourse CourseHead){
LinkCourse q, p, head1, tem = CourseHead;
head1 =newCourse;*head1 =*tem;
p = head1;
q = p;
tem = tem->next;while(tem){
p =newCourse;*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]){//定一个临时值存放 不修改j
tem = 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标志错误returnNULL;}//如果找到该编号即返回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);//循环tnum+1次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");returnNULL;}
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;returnNULL;}}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){case'b':
cout <<"查看的课程编号是"<< endl;
int SubNum;
cin >> SubNum;
p =SearchCourseID(SubNum, CourseHead);if(p ==NULL){returnNULL;}system("cls");
cout <<"查看的课程是: "<< endl;
cout <<"课程名称: "<< p->SubName << endl;
cout <<"课程学分: "<< p->SubCredits << endl;
cout <<"课程容量: "<< p->Capacity<<"/60"<< endl;
cout <<"————————————————————"<< endl;return p;case'a':
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'#':returnNULL;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 =newUserAdministrator;
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 =newUserTeacher;
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 =newUserStudent;
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;}//删除账号voidAccountSystem_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){case'A':case'a':
UserStudentHead =StudentAccount_Delete(UserStudentHead);return;case'b':case'B':
UserTeacherHead =TeacherAccount_Delete(UserTeacherHead);return;case'c':case'C':
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;}}//修改密码voidAccount_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){case'A':case'a':
UserStudentHead =StudentAccount_ChangePassword(UserStudentHead);return;case'b':case'B':
UserTeacherHead =TeacherAccount_ChangePassword(UserTeacherHead);return;case'c':case'C':
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;}}//保存账号voidAccountStore(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 =newUserAdministrator;
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 =newUserAdministrator;
i =0;while((fread(p1,sizeof(*p1),1, fp))==1){
i++;
p1->next =NULL;
p2->next = p1;
p2 = p1;
p1 =newUserAdministrator;}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 =newUserTeacher;
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 =newUserTeacher;
int i =0;while((fread(p3,sizeof(*p3),1, fp))==1){
i++;
p3->next =NULL;
p4->next = p3;
p4 = p3;
p3 =newUserTeacher;}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 =newUserStudent;
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 =newUserStudent;
i =0;while((fread(p5,sizeof(*p5),1, fp))==1){
i++;
p5->next =NULL;
p6->next = p5;
p6 = p5;
p5 =newUserStudent;}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;}}}elseif(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;}}}elseif(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");}}//**************************************学生权限功能块**************************************//学生界面菜单voidStudent_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;}//个人成绩查看voidPersonalGrade_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");}//查询重修学生的课程voidSearchFailCourse(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);}//查询个人的重修课程voidSearchPersonalFailCourse(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");}//个人学分查看voidPersonalCreadits_Search(LinkStudent One){system("cls");
cout <<"————————————————————"<< endl;
cout <<"您所获得的学分是: "<< One->StudentCredits << endl;
cout <<"————————————————————"<< endl;system("pause");};//个人信息查看voidPersonalInformation_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");}//个人课程查看voidPersonalCourse_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");};//选课中心voidPersonalCourse_Choose(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead){//学生总人数
int StudentNum = StudentHead->PersonalInformation.StudentNum;//学生个人ID
int 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){case'a':case'A':
p =SearchCourse_byword(CourseHead);if(p ==NULL)return;
id = p->SubNum;
p =SearchCourseID(id, CourseHead);break;case'b':case'B':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){case'Y':case'y':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;case'n':case'N':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){case'Y':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;}}}case'N':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");}//个人信息修改voidModifyPersonalInformation(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;case'a':cin >> One->PersonalInformation.StudentName;
cout <<"修改成功!"<< endl;system("pause");system("cls");return;case'b':cin >> One->PersonalInformation.StudentSex;
cout <<"修改成功!"<< endl;system("pause");system("cls");return;case'c':cin >> One->PersonalInformation.StudentAge;
cout <<"修改成功!"<< endl;system("pause");system("cls");return;case'd':cin >> One->PersonalInformation.StudentDorm;
cout <<"修改成功!"<< endl;system("pause");system("cls");return;case'e':cin >> One->PersonalInformation.StudentPhone;
cout <<"修改成功!"<< endl;system("pause");system("cls");return;default:system("cls");
cout <<"请按格式正确输入!"<< endl;break;}}}//学生输入界面voidInput_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':case'A'://个人成绩查看PersonalGrade_Search(One, CourseHead);break;case'b':case'B'://查询学生重修课程system("cls");SearchPersonalFailCourse(One, CourseHead);break;case'c':case'C'://个人学分查看PersonalCreadits_Search(One);break;case'd':case'D'://个人课程查看PersonalCourse_Search(One, StudentHead, CourseHead);break;case'e':case'E'://个人信息查看PersonalInformation_Search(One);break;case'f':case'F'://个人信息修改ModifyPersonalInformation(One);break;case'g':case'G'://查看课程信息CourseInformation_View(CourseHead);break;case'h':case'H'://选课中心PersonalCourse_Choose(One, StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;case'i':case'I'://课程评价CourseEvaluation_Operate(CourseHead);break;case'j':case'J'://课程评价查看CourseEvaluation_Search(CourseHead);break;case'k':case'K'://学生个人账户密码修改StudentAccount_ChangePassword(UserStudentHead);break;case'@'://数据保存StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");
cout <<"请按正确格式输入"<< endl;system("pause");system("cls");break;}}}//**************************************教师权限功能块**************************************//教师界面菜单voidTeacher_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;}//教师界面输入voidInput_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':case'H'://查看课程信息CourseInformation_View(CourseHead);break;case'i':case'I'://查看课程评价CourseEvaluation_Search(CourseHead);break;case'j':case'J'://教师个人账户密码修改TeacherAccount_ChangePassword(UserTeacherHead);break;case'@'://保存(完成)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");
cout <<"请按正确格式输入"<< endl;system("pause");system("cls");break;}}}//**************************************学生信息基础功能块**************************************//添加学生个人voidPushStudent(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 =newStudent;//首先定义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;//学生总数+1
StudentHead->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;//学生总数+1
StudentHead->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){case'a':cin >> p->PersonalInformation.StudentName;
cout <<"修改成功!"<< endl;system("pause");system("cls");return StudentHead;case'b':cin >> p->PersonalInformation.StudentSex;
cout <<"修改成功!"<< endl;system("pause");system("cls");return StudentHead;case'c':cin >> p->PersonalInformation.StudentAge;
cout <<"修改成功!"<< endl;system("pause");system("cls");return StudentHead;case'd':cin >> p->PersonalInformation.StudentDorm;
cout <<"修改成功!"<< endl;system("pause");system("cls");return StudentHead;case'e':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 =newStudent;
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;}//存取学生链表数据voidStoreStudentList(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标志错误returnNULL;}//如果找到该学号即返回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;}//学生个人信息查看voidSearchInformation(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 =newCourse;
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;}//添加课程voidAddCourse(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 =newCourse;
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){case'a':
p =SearchCourse_byword(CourseHead);if(p ==NULL)returnNULL;
id = p->SubNum;
p =SearchCourseID(id, CourseHead);while(q->next != p){
q = q->next;}
flag =1;break;case'b':
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标志错误returnNULL;}//如果找到该编号即返回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;}//删除后课程数量-1
CourseHead->SubNum--;
cout <<"删除成功!"<< endl;system("pause");system("cls");return CourseHead;}//修改课程信息voidModifyCourse(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;case'a':case'A':
p =SearchCourse_byword(CourseHead);if(p ==NULL)return;
id = p->SubNum;
p =SearchCourseID(id, CourseHead);
flag =1;break;case'b':case'B':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){case'a':
cout <<"请输入课程名称"<< endl;
cin >> p->SubName;
cout <<"修改成功!记得保存信息哦!"<< endl;system("pause");system("cls");return;case'b':
cout <<"请输入课程学分"<< endl;
cin >> p->SubCredits;
cout <<"修改成功!记得保存信息哦!"<< endl;system("pause");system("cls");return;case'c':
cout <<"请输入任课老师"<< endl;
cin >> p->Teacher;
cout <<"修改成功!记得保存信息哦!"<< endl;system("pause");system("cls");return;case'd':
cout <<"请输入任课地点"<< endl;
cin >> p->Position;
cout <<"修改成功!记得保存信息哦!"<< endl;system("pause");system("cls");return;case'e':
cout <<"请输入任课时间"<< endl;
cin >> p->Time;
cout <<"修改成功!记得保存信息哦!"<< endl;system("pause");system("cls");return;default:
cout <<"请正确输入!"<< endl;system("pause");system("cls");break;}}}//课程评价voidCourseEvaluation_Operate(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;case'a':case'A':
p =SearchCourse_byword(CourseHead);if(p ==NULL)return;
id = p->SubNum;
p =SearchCourseID(id, CourseHead);
flag =1;break;case'b':case'B':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");}//课程评价查看voidCourseEvaluation_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;case'a':case'A':
p =SearchCourse_byword(CourseHead);if(p ==NULL)return;
id = p->SubNum;
p =SearchCourseID(id, CourseHead);
flag =1;break;case'b':case'B':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;}}elseif(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;}//查询选课情况voidCourseSelection_view(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){case'a':case'A':
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;case'b':case'B'://查询学生的选课情况SearchStudentCourse(CourseHead, StudentHead);return;case'#':return;default:break;}if(flag ==1)break;}return;}//查询学生的选课情况voidSearchStudentCourse(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){case'a':case'A':SearchClassCourse(StudentHead, CourseHead);return;case'b':case'B':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;}}//查看课程信息voidCourseInformation_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){case'a':case'A':
p =SearchCourse_byword(CourseHead);if(p ==NULL)return;
id = p->SubNum;
p =SearchCourseID(id, CourseHead);break;case'b':case'B':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");}//通过编号查看课程信息voidsearchcourse(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");}//存取课程链表数据(完成)voidStoreCourseList(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");}//学生课程成绩录入voidGradeInput(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){case'a':case'A'://按课程对全部选课学生进行录入GradeInput_ThroughCourse(CourseHead, StudentHead);return;case'b':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){case'a':
p =SearchCourse_byword(CourseHead);if(p ==NULL)break;
id = p->SubNum;
p =SearchCourseID(id, CourseHead);
flag =1;break;case'b':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");}//学生学分查询voidCreadits_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){case'a':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;case'b':
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;}}};//查询课程重修voidSearch_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){case'a':case'A':
p =SearchCourse_byword(CourseHead);if(p ==NULL)return;
id = p->SubNum;
p =SearchCourseID(id, CourseHead);
flag =1;break;case'b':case'B':
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");};//按课程录入学生考试成绩。voidGradeInput_ThroughCourse(LinkCourse CourseHead, LinkStudent StudentHead){
char judge;
LinkCourse copyhead =NULL, p =NULL;
int id, i,flag=0;while(1){system("cls");
cout <<"请选择查询课程功能"<< endl;
cout <<"a.按关键词搜索课程"<< endl;
cout <<"b.按编号搜索课程"<< endl;
cin >> judge;switch(judge){case'b':case'B':
cout <<"查看的课程编号是"<< endl;
cin >> id;
p =SearchCourseID(id, CourseHead);if(p ==NULL)return;
flag =1;break;case'a':case'A':
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");};//获取该课课程评价voidGetCourseEvaluation(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 =newCourse;
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 =newCourse;
int i =0;while((fread(p1,sizeof(*p1),1, fp))==1){
i++;
p1->next =NULL;
p2->next = p1;
p2 = p1;
p1 =newCourse;}if(i ==0){ cout <<"空文件!"<< endl;return CourseHead;}delete(p1);fclose(fp);
cout <<"读取文件数据成功!"<< endl;system("pause");system("cls");return CourseHead;}//菜单voidBegin(){
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;}//成绩系统菜单voidGradeSystem_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;}}}//课程系统菜单voidCourseSystem_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;case'c':case'C'://添加课程AddCourse(CourseHead, StudentHead);break;case'd':case'D'://删除课程函数DeleteCoursse(CourseHead);break;case'e':case'E'://按班级录入选课信息CourseSelection_entry(CourseHead);break;case'f':case'F'://选课信息查看CourseSelection_view(CourseHead, StudentHead);break;case'g':case'G'://查看课程信息CourseInformation_View(CourseHead);break;case'h':case'H'://课程重修查看Search_CourseRetake(CourseHead, StudentHead);break;case'i':case'I'://课程评价CourseEvaluation_Operate(CourseHead);break;case'j':case'J'://课程评价查看CourseEvaluation_Search(CourseHead);break;case'@'://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");
cout <<"请按正确格式输入"<< endl;system("pause");system("cls");break;}}}//信息系统菜单voidInformationSystem_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;case'c':case'C'://学生个人添加PushStudent(StudentHead);break;case'd':case'D'://学生个人删除DeleteStudent(StudentHead);break;case'e':case'E'://学生个人修改ModifyStudent(StudentHead);break;case'@'://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");
cout <<"请按正确格式输入"<< endl;system("pause");system("cls");break;}}}//帐号系统菜单voidAccountSystem_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;case'a':case'A'://读取账号
UserStudentHead =Student_AccountRead(UserStudentHead);
UserTeacherHead =Teacher_AccountRead(UserTeacherHead);
UserAdministratorHead =Administrator_AccountRead(UserAdministratorHead);return;case'b':case'B'://录入管理员账号EntryAdministrator(UserAdministratorHead);return;case'c':case'C'://录入教师账号EntryTeacher(UserTeacherHead);return;case'd':case'D'://录入学生账号EntryStudent(UserStudentHead);return;case'e':case'E'://删除账号AccountSystem_Delete(UserAdministratorHead, UserTeacherHead, UserStudentHead);return;case'f':case'F'://修改密码Account_ChangePassword(UserAdministratorHead, UserTeacherHead, UserStudentHead);return;case'@'://保存数据StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);return;default:system("cls");
cout <<"请按正确格式输入"<< endl;system("pause");system("cls");break;}}}//初始化菜单voidInitialization(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;case'b':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 =newStudent;
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 =newStudent;
int i =0;while((fread(p1,sizeof(*p1),1, fp))==1){
i++;
p1->next =NULL;
p2->next = p1;
p2 = p1;
p1 =newStudent;}if(i ==0){ cout <<"空文件!"<< endl;return StudentHead;}delete(p1);fclose(fp);
cout <<"读取文件数据成功!"<< endl;system("pause");system("cls");return StudentHead;}//查询一个班级的成绩voidSearchClassGrade(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;}}//查询一个班级的选课情况voidSearchClassCourse(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;}}//查询成绩voidSearchCourse(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){case'a':case'A'://查看学生个人所有课程成绩system("cls");
int StdNum;
cout <<"请输入查询的学生学号: "<< endl;
cin >> StdNum;
One =SearchStudent(StdNum, StudentHead);if(One ==NULL)return;PersonalGrade_Search(One, CourseHead);return;case'b':case'B':while(1){system("cls");
cout <<"请选择查询课程功能"<< endl;
cout <<"a.按关键词搜索课程"<< endl;
cout <<"b.按编号搜索课程"<< endl;
cin >> judge;switch(judge){case'b':
cout <<"查看的课程编号是"<< endl;
int SubNum;
cin >> SubNum;
p =SearchCourseID(SubNum, CourseHead);if(p ==NULL){return;}
flag =1;break;case'a':
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;case'c':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;}//数据保存voidStoreData(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead){StoreStudentList(StudentHead);StoreCourseList(CourseHead);AccountStore(UserAdministratorHead, UserTeacherHead, UserStudentHead);};//管理员菜单voidInput_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>
#include<conio.h>
using namespace std;
#include<malloc.h>
#define OK1
#define ERROR0
#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.text"
int main(){
ios::sync_with_stdio(0), cin.tie(0);
LinkStudent q,p,StudentHead;
LinkCourse CourseHead =newCourse;
LinkUserAdministrator UserAdministratorHead=newUserAdministrator;
LinkUserStudent UserStudentHead=newUserStudent;
LinkUserTeacher UserTeacherHead=newUserTeacher;
UserStudentHead->next =NULL;
UserTeacherHead->next =NULL;
UserAdministratorHead->next =NULL;//启动程序时先读取文件
StudentHead=ReadStudentList();
CourseHead =ReadCourseList(StudentHead);
UserAdministratorHead=Administrator_AccountRead(UserAdministratorHead);
UserTeacherHead=Teacher_AccountRead(UserTeacherHead);
UserStudentHead=Student_AccountRead(UserStudentHead);//输入操作
char loginJudge;while(1){
loginJudge=login(UserAdministratorHead, UserStudentHead, UserTeacherHead);if(loginJudge =='a'){Input_Student(StudentHead, CourseHead, UserTeacherHead, UserAdministratorHead, UserStudentHead);return1;}elseif(loginJudge =='b'){Input_Teacher(StudentHead, CourseHead,UserTeacherHead,UserAdministratorHead,UserStudentHead);return1;}elseif(loginJudge =='c'){Input_Administrator(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);return1;}elseif(loginJudge =='#'){
cout <<"请重新输入!"<< endl;system("pause");system("cls");}}return0;}
版权归原作者 Boucy 所有, 如有侵权,请联系我们删除。