0


【课程设计】教务信息管理系统

**

大学第一个设计,代码量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;}
标签:

本文转载自: https://blog.csdn.net/Boucy/article/details/117395887
版权归原作者 Boucy 所有, 如有侵权,请联系我们删除。

“【课程设计】教务信息管理系统”的评论:

还没有评论