佛山有那些定制網(wǎng)站建設(shè)公司百度貼吧官網(wǎng)入口
大學(xué)第一個設(shè)計,代碼量3700+行,本課設(shè)僅供參考
1 【課程設(shè)計】教務(wù)信息管理系統(tǒng)
Time Limit:1000MS Memory Limit:65535K
題型: 人工評判題 語言: 無限制
描述
設(shè)計一個教務(wù)信息管理系統(tǒng),該程序具有以下功能:
(1)錄入如下信息:
學(xué)生基本信息:如學(xué)號、姓名、性別、年齡、宿舍號碼、電話號碼等。
課程基本信息:課程編號、課程名稱、考試成績、平時成績、綜合成績、學(xué)分、重修否等。
如果重修,需要考慮重修學(xué)期、重修成績,并且要考慮多次重修的情況。
(2)錄入選課信息
(3)錄入學(xué)生成績
(3)按班統(tǒng)計學(xué)生選課情況及考試成績。
(4)按課程統(tǒng)計學(xué)生名單及考試成績。
(5)統(tǒng)計并輸出每個同學(xué)已修學(xué)分及不及級課程。
(6)實現(xiàn)單詞組合查詢課程名,例如輸入“JAVA+設(shè)計”查詢,可以查到如下課程
《JAVA語言與程序設(shè)計》
《JAVA程序設(shè)計》
《JAVA語言與算法設(shè)計》
注:因為上面課程名中均包含“設(shè)計”和“教程”兩個單詞
同理,輸入“JAVA+算法+設(shè)計”查詢,則只能查到《JAVA語言與算法設(shè)計》
任務(wù)要求:
(1)按照分析、設(shè)計、編碼、調(diào)試和測試過程完成應(yīng)用程序;
(2)學(xué)習(xí)并使用流程圖等工具,并在撰寫報告中使用;
(3)程序的各項功能在程序運(yùn)行時,以菜單方式選擇并執(zhí)行;
(4)要求用戶輸入數(shù)據(jù)時,要給出清晰、明確的提示,包括:輸入數(shù)據(jù)的內(nèi)容、格式及結(jié)束方式等
(5)所有的信息存儲在文件中,并實現(xiàn)文件讀寫操作。
(6)記錄添加刪除操作時,先從文件載入數(shù)據(jù),用鏈表存放,批量操作完后,數(shù)據(jù)從鏈表寫入文件。
(7)【加分選做】根據(jù)學(xué)生的選課,能夠生成一個學(xué)生的課表(形式與我校教務(wù)處系統(tǒng)中的課表相似),并將時間有沖突的課程標(biāo)記為紅色
輸入格式
提示
(1)學(xué)生基本信息可以設(shè)計一個結(jié)構(gòu)體類型
(2)自己構(gòu)思并增加的除規(guī)定功能之外的新功能,酌情加分。
結(jié)構(gòu)體及函數(shù)聲明
#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 {//學(xué)生學(xué)號int StudentNum;//學(xué)生是否選課 1為選 0為不選int Judge = 0;//重修 0為不用重修 1為重修int Retake=0;//平時成績double OrdinaryGrade=0;//考試成績double TestGrade=0;//總成績double TotalGrade=0;
};//單個課程結(jié)構(gòu)
typedef struct Course {//課程編號int SubNum;//課程名字char SubName[20];//任課老師string Teacher;//任課地點(diǎn)string Position;//任課時間string Time;//評價char Evaluation[10][200] = {'0'};//課程學(xué)分int SubCredits = 0;int Capacity = 0;struct Grade Grade[InitStudentNum];struct Course* next;
}Course,*LinkCourse;//學(xué)生個人信息結(jié)構(gòu)體(完成)
typedef struct PersonalInformation {//學(xué)生學(xué)號int StudentNum;//學(xué)生姓名string StudentName;//學(xué)生性別string StudentSex;//學(xué)生年齡string StudentAge;//學(xué)生宿舍號碼string StudentDorm;//學(xué)生電話號碼string StudentPhone;
};//學(xué)生結(jié)構(gòu)
typedef struct Student {struct PersonalInformation PersonalInformation;//學(xué)生學(xué)分int StudentCredits = 0;//下一個學(xué)生struct Student* next;
}Student, * LinkStudent; //學(xué)生賬號
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;//通過學(xué)號找到學(xué)生函數(shù)
LinkStudent SearchStudent(int StudentNum, LinkStudent StudentHead);
//復(fù)制課程鏈表
LinkCourse copyCourse(LinkCourse CourseHead);
//通過name字符關(guān)鍵詞篩選CopyHead中符合條件的節(jié)點(diǎn)
LinkCourse NameCourse(LinkCourse CopyHead, char name[]);
//通過課程編號查找課程
LinkCourse SearchCourseID(int SubNum, LinkCourse CourseHead);
//課程關(guān)鍵字搜索得到復(fù)制的課程指針
LinkCourse SearchCourse_byword(LinkCourse CourseHead);
//通過關(guān)鍵詞或編號得到課程
LinkCourse GetCourse(LinkCourse CourseHead);
//錄入管理員賬號
LinkUserAdministrator EntryAdministrator(LinkUserAdministrator AdministratorHead);
//錄入教師賬號
LinkUserTeacher EntryTeacher(LinkUserTeacher UserTeacherHead);
//錄入學(xué)生賬號
LinkUserStudent EntryStudent(LinkUserStudent UserStudentHead);
//刪除賬號
void AccountSystem_Delete(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//刪除學(xué)生賬號
LinkUserStudent StudentAccount_Delete(LinkUserStudent UserStudentHead);
//刪除教師賬號
LinkUserTeacher TeacherAccount_Delete(LinkUserTeacher UserTeacherHead);
//刪除管理員賬號
LinkUserAdministrator AdministratorAccount_Delete(LinkUserAdministrator UserAdministratorHead);
//修改密碼
void Account_ChangePassword(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//修改學(xué)生密碼
LinkUserStudent StudentAccount_ChangePassword(LinkUserStudent UserStudentHead);
//修改教師密碼
LinkUserTeacher TeacherAccount_ChangePassword(LinkUserTeacher UserTeacherHead);
//修改管理員密碼
LinkUserAdministrator AdministratorAccount_ChangePassword(LinkUserAdministrator UserAdministratorHead);
//保存賬號
void AccountStore(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//讀取賬號
LinkUserAdministrator Administrator_AccountRead(LinkUserAdministrator UserAdministratorHead);
LinkUserTeacher Teacher_AccountRead(LinkUserTeacher UserTeacherHead);
LinkUserStudent Student_AccountRead(LinkUserStudent UserStudentHead);
//登錄函數(shù)
char login(LinkUserAdministrator AdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//學(xué)生界面菜單
void Student_Begin();
//個人成績查看
void PersonalGrade_Search(LinkStudent One, LinkCourse CourseHead);
//不及格課程查看
void SearchPersonalFailCourse(LinkStudent One, LinkCourse CourseHead);
//個人學(xué)分查看
void PersonalCreadits_Search(LinkStudent One);
//個人信息查看
void PersonalInformation_Search(LinkStudent One);
//個人課程查看
void PersonalCourse_Search(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead);
//選課中心
void PersonalCourse_Choose(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//個人信息修改
void ModifyPersonalInformation(LinkStudent One);
//學(xué)生輸入界面
void Input_Student(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead);
//教師界面菜單
void Teacher_Begin();
//教師界面輸入
void Input_Teacher(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead);
//添加學(xué)生個人
void PushStudent(LinkStudent StudentHead);
//修改學(xué)生個人信息
LinkStudent ModifyStudent(LinkStudent StudentHead);
//新建學(xué)生鏈表
LinkStudent CreateStudentList(LinkStudent StudentHead);
//存取學(xué)生鏈表數(shù)據(jù)
void StoreStudentList(LinkStudent StudentHead);
//刪除學(xué)生函數(shù)
LinkStudent DeleteStudent(LinkStudent StudentHead);
//學(xué)生個人信息查看
void SearchInformation(LinkStudent StudentHead);
//學(xué)生個人信息錄入
LinkStudent PnInformation(LinkStudent StudentHead);
//學(xué)生課程鏈表初始化,設(shè)置課程數(shù)量且將學(xué)號錄入
LinkCourse InitCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//添加課程
void AddCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//刪除課程函數(shù)
LinkCourse DeleteCoursse(LinkCourse CourseHead);
//修改課程信息
void ModifyCourse(LinkCourse CourseHead);
//課程評價
void CourseEvaluation_Operate(LinkCourse CourseHead);
//課程評價查看
void CourseEvaluation_Search(LinkCourse CourseHead);
//按班級錄入選課信息
LinkCourse CourseSelection_entry(LinkCourse CourseHead);
//選課學(xué)生信息查看
void CourseSelection_view(LinkCourse CourseHead, LinkStudent StudentHead);
//查詢學(xué)生的選課情況
void SearchStudentCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//查詢一個班級的選課情況
void SearchClassCourse(LinkStudent StudentHead, LinkCourse CourseHead);
//查看課程信息
void CourseInformation_View(LinkCourse CourseHead);
//通過編號查看課程信息
void searchcourse(LinkCourse coursehead);
//存取課程鏈表數(shù)據(jù)(完成)
void StoreCourseList(LinkCourse CourseHead);
//學(xué)生課程成績錄入
void GradeInput(LinkCourse CourseHead, LinkStudent StudentHead);
//學(xué)生學(xué)分查詢
void Creadits_Search(LinkStudent StudentHead);
//查詢重修學(xué)生的課程
void SearchFailCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//查詢課程重修
void Search_CourseRetake(LinkCourse CourseHead, LinkStudent StudentHead);
//按課程錄入學(xué)生考試成績。
void GradeInput_ThroughCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//獲取課程評價
void GetCourseEvaluation(LinkCourse Course);
//讀取課程數(shù)據(jù)函數(shù)
LinkCourse ReadCourseList(LinkStudent StudentHead);
//菜單
void Begin();
//成績系統(tǒng)菜單
void GradeSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//課程系統(tǒng)菜單
void CourseSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//信息系統(tǒng)菜單
void InformationSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//帳號系統(tǒng)菜單
void AccountSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//初始化菜單
void Initialization(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//讀取學(xué)生文件數(shù)據(jù)函數(shù)
LinkStudent ReadStudentList();
//查詢一個班級的成績
void SearchClassGrade(LinkStudent StudentHead, LinkCourse CourseHead);
//查詢成績
void SearchCourse(LinkStudent StudentHead, LinkCourse CourseHead);
//數(shù)據(jù)保存
void StoreData(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//管理員菜單
void Input_Administrator(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
函數(shù)定義
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "結(jié)構(gòu)體.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;
//**************************************基礎(chǔ)函數(shù)塊**************************************//通過學(xué)號找到學(xué)生函數(shù)
LinkStudent SearchStudent(int StdNum, LinkStudent StudentHead) {LinkStudent p;p = StudentHead;while (p) {p = p->next;//先判定是否為空再判定是否是這個學(xué)號!if (!p) {cout << "學(xué)號不存在!" << endl;system("pause");system("cls");//如果不存在返回NULL標(biāo)志錯誤return NULL;}if (p->PersonalInformation.StudentNum == StdNum)break;//如果找到該學(xué)號即返回p}return p;
}//復(fù)制課程鏈表
LinkCourse copyCourse(LinkCourse CourseHead) {LinkCourse q, p, head1, tem = CourseHead;head1 = new Course;*head1 = *tem;p = head1;q = p;tem = tem->next;while (tem) {p = new Course;*p = *tem;p->next = NULL;q->next = p;q = p;tem = tem->next;}return head1;
}//通過name字符關(guān)鍵詞篩選CopyHead中符合條件的節(jié)點(diǎn)
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;//循環(huán)整個copy鏈表while (p) {//循環(huán)節(jié)點(diǎn)的20個字符while (j < 20) {//如果和name[0]相同即開始比對if (name[0] == p->SubName[j]) {//定一個臨時值存放 不修改jtem = j;for (i = 0; i < length; i++) {//比對不成功即退出if (name[i] != p->SubName[tem++]) {break;}}//如果全部比對成功標(biāo)記為1,留在鏈表中if (i == length - 1) { vis = 1; }}//比對后 讓i歸位i = 0;//j++繼續(xù)比對j++;//如果到了盡頭就退出if (p->SubName[j] == '\0')break;}if (vis == 0) {//標(biāo)記為0 去除p節(jié)點(diǎn)q->next = p->next;p = q->next;}else {//標(biāo)記為1 進(jìn)行下一個搜索 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標(biāo)志錯誤return NULL;}//如果找到該編號即返回pif (p->SubNum == SubNum)break;}return p;
}//課程關(guān)鍵字搜索得到復(fù)制的課程指針
LinkCourse SearchCourse_byword(LinkCourse CourseHead) {system("cls");LinkCourse p = CourseHead->next;cout << "請輸入操作的課程關(guān)鍵字:" << endl;char name[20];//輸入關(guān)鍵字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);//循環(huán)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 << "個相關(guān)課程" << endl;if (copyhead->SubNum == 0) {system("pause");system("cls");return NULL;}int num = 1;p = copyhead->next;while (p) {cout << "序號: " << num++ << endl;cout << "課程編號: " << p->SubNum << endl;cout << "課程名稱: " << p->SubName << endl;cout << "課程學(xué)分: " << p->SubCredits << endl;cout << "————————————————————" << endl;p = p->next;}if (copyhead->SubNum != 1) {cout << "請通過課程序號選擇" << endl;cin >> num;system("cls");}else {num = 1;}p = copyhead;while (num--) {p = p->next;if (p == NULL) { cout << "課程不存在!" << endl; return NULL; }}return p;
}//通過關(guān)鍵詞或編號得到課程
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:按關(guān)鍵詞搜索課程" << 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) { return NULL; }system("cls");cout << "查看的課程是: " << endl;cout << "課程名稱: " << p->SubName << endl;cout << "課程學(xué)分: " << 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 << "課程學(xué)分: " << p->SubCredits << endl;cout << "————————————————————" << endl;return p;case'#':return NULL;default:cout << "請正確輸入!" << endl;system("pause");system("cls");}}
}//**************************************程序登錄功能塊**************************************//錄入管理員賬號
LinkUserAdministrator EntryAdministrator(LinkUserAdministrator AdministratorHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(Y/N)" << endl;cin >> Judge;switch (Judge){case 'Y':case 'y':Flag = 1;break;case 'N':case 'n':return AdministratorHead;default:cout << "請重新輸入!" << endl;system("pause");break;}if (Flag == 1)break;}system("cls");LinkUserAdministrator q = AdministratorHead, p = new UserAdministrator;p->next = NULL;while (1) {if (q->next == NULL)break;q = q->next;}q->next = p;cout << "管理員成員創(chuàng)建成功!" << endl;cout << "請設(shè)置賬號" << endl;cin >> p->Account;cout << "請設(shè)置密碼" << endl;cin >> p->Password;system("pause");system("cls");return AdministratorHead;
}
//錄入教師賬號
LinkUserTeacher EntryTeacher(LinkUserTeacher UserTeacherHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(Y/N)" << endl;cin >> Judge;switch (Judge){case 'Y':case 'y':Flag = 1;break;case 'N':case 'n':return UserTeacherHead;default:cout << "請重新輸入!" << endl;system("pause");break;}if (Flag == 1)break;}system("cls");LinkUserTeacher q = UserTeacherHead, p = new UserTeacher;p->next = NULL;while (1) {if (q->next == NULL)break;q = q->next;}q->next = p;cout << "教師成員創(chuàng)建成功!" << endl;cout << "請設(shè)置賬號" << endl;cin >> p->Account;cout << "請設(shè)置密碼" << endl;cin >> p->Password;system("pause");system("cls");return UserTeacherHead;
}
//錄入學(xué)生賬號
LinkUserStudent EntryStudent(LinkUserStudent UserStudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(Y/N)" << endl;cin >> Judge;switch (Judge){case 'Y':case 'y':Flag = 1;break;case 'N':case 'n':return UserStudentHead;default:cout << "請重新輸入!" << endl;system("pause");break;}if (Flag == 1)break;}system("cls");LinkUserStudent q = UserStudentHead, p = new UserStudent;p->next = NULL;while (1) {if (q->next == NULL)break;q = q->next;}q->next = p;cout << "學(xué)生成員創(chuàng)建成功!" << endl;cout << "請輸入您的學(xué)號" << endl;cin >> p->StudentNum;cout << "請設(shè)置賬號" << endl;cin >> p->Account;cout << "請設(shè)置密碼" << endl;cin >> p->Password;system("pause");system("cls");return UserStudentHead;
}//刪除賬號
void AccountSystem_Delete(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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.學(xué)生 |" << 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;}}}//刪除學(xué)生賬號
LinkUserStudent StudentAccount_Delete(LinkUserStudent UserStudentHead) {system("cls");cout << "請輸入要刪除的賬號" << endl;string Account;cin >> Account;LinkUserStudent pre, One = UserStudentHead->next;pre = UserStudentHead;while (1) {if (!One->Account.compare(Account)) {break;}pre = One;One = One->next;if (One == NULL) {cout << "不存在該賬戶!" << endl;system("pause");return UserStudentHead;}}cout << "請輸入要刪除的賬號密碼" << endl;string Password;cin >> Password;if (!One->Password.compare(Password)) {pre->next = One->next;cout << "刪除成功!" << endl;system("pause");return UserStudentHead;}else {cout << "密碼錯誤!" << endl;system("pause");return UserStudentHead;}
}
//刪除教師賬號
LinkUserTeacher TeacherAccount_Delete(LinkUserTeacher UserTeacherHead) {system("cls");cout << "請輸入要刪除的賬號" << endl;string Account;cin >> Account;LinkUserTeacher pre, One = UserTeacherHead->next;pre = UserTeacherHead;while (1) {if (!One->Account.compare(Account)) {break;}pre = One;One = One->next;if (One == NULL) {cout << "不存在該賬戶!" << endl;system("pause");return UserTeacherHead;}}cout << "請輸入要刪除的賬號密碼" << endl;string Password;cin >> Password;if (!One->Password.compare(Password)) {pre->next = One->next;cout << "刪除成功!" << endl;system("pause");return UserTeacherHead;}else {cout << "密碼錯誤!" << endl;system("pause");return UserTeacherHead;}
}
//刪除管理員賬號
LinkUserAdministrator AdministratorAccount_Delete(LinkUserAdministrator UserAdministratorHead) {system("cls");cout << "請輸入要刪除的賬號" << endl;string Account;cin >> Account;LinkUserAdministrator pre, One = UserAdministratorHead->next;pre = UserAdministratorHead;while (1) {if (!One->Account.compare(Account)) {break;}pre = One;One = One->next;if (One == NULL) {cout << "不存在該賬戶!" << endl;system("pause");return UserAdministratorHead;}}cout << "請輸入要刪除的賬號密碼" << endl;string Password;cin >> Password;if (!One->Password.compare(Password)) {pre->next = One->next;cout << "刪除成功!" << endl;system("pause");return UserAdministratorHead;}else {cout << "密碼錯誤!" << endl;system("pause");return UserAdministratorHead;}
}//修改密碼
void Account_ChangePassword(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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.學(xué)生 |" << 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;}}}//修改學(xué)生密碼
LinkUserStudent StudentAccount_ChangePassword(LinkUserStudent UserStudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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 << "是否要進(jìn)行操作?(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 << "是否要進(jìn)行操作?(Y/N)" << endl;cin >> Judge;switch (Judge){case 'Y':case 'y':Flag = 1;break;case 'N':case 'n':return UserAdministratorHead;default:cout << "請重新輸入!" << endl;system("pause");system("cls");break;}if (Flag == 1)break;}system("cls");cout << "請輸入您的賬號" << endl;string Account;cin >> Account;LinkUserAdministrator One = UserAdministratorHead->next;while (1) {if (!One->Account.compare(Account)) {break;}One = One->next;if (One == NULL) {cout << "不存在該賬戶!" << endl;system("pause");return UserAdministratorHead;}}cout << "請輸入要原賬戶的賬號密碼:" << endl;string Password;cin >> Password;if (!One->Password.compare(Password)) {cout << "請輸入新的賬號密碼:" << endl;cin >> One->Password;cout << "修改成功!" << endl;system("pause");}else {cout << "密碼錯誤!" << endl;system("pause");return UserAdministratorHead;}
}//保存賬號
void AccountStore(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {LinkUserAdministrator p = UserAdministratorHead;LinkUserTeacher q = UserTeacherHead;LinkUserStudent r = UserStudentHead;cout << "正在存儲數(shù)據(jù)" << endl;if (UserAdministratorHead->next == NULL) { cout << "管理員賬戶數(shù)據(jù)不存在!" << endl; return; }if (UserTeacherHead->next == NULL) { cout << "教師賬戶數(shù)據(jù)不存在!" << endl; return; }if (UserStudentHead->next == NULL) { cout << "學(xué)生賬戶數(shù)據(jù)不存在!" << endl; return; }FILE* fp = fopen(PATH4, "wb");if (fp == NULL) { cout << "儲存管理員數(shù)據(jù)失敗!" << endl; return; }//寫入時也要把頭節(jié)點(diǎn)寫進(jìn)去while (p != NULL) {fwrite(p, sizeof(UserAdministrator), 1, fp);p = p->next;}cout << "存儲管理員數(shù)據(jù)成功!" << endl;fclose(fp);fp = fopen(PATH3, "wb");if (fp == NULL) { cout << "儲存教師數(shù)據(jù)失敗!" << endl; return; }//寫入時也要把頭節(jié)點(diǎn)寫進(jìn)去while (q != NULL) {fwrite(q, sizeof(UserTeacher), 1, fp);q = q->next;}cout << "存儲教師數(shù)據(jù)成功!" << endl;fclose(fp);fp = fopen(PATH5, "wb");if (fp == NULL) { cout << "儲存學(xué)生數(shù)據(jù)失敗!" << endl; return; }//寫入時也要把頭節(jié)點(diǎn)寫進(jìn)去while (r != NULL) {fwrite(r, sizeof(UserStudent), 1, fp);r = r->next;}cout << "存儲學(xué)生數(shù)據(jù)成功!" << endl;fclose(fp);fp = NULL;system("pause");
}//讀取賬號
LinkUserAdministrator Administrator_AccountRead(LinkUserAdministrator UserAdministratorHead) {cout << "正在讀取管理員數(shù)據(jù)!" << endl;LinkUserAdministrator p1, p2;UserAdministratorHead = new UserAdministrator;p2 = UserAdministratorHead;UserAdministratorHead->next = NULL;FILE* fp = fopen(PATH4, "rb");int i;if (fp == NULL) {cout << "管理員數(shù)據(jù)文件不存在!" << endl;cout << "將為您初始化,請根據(jù)信息進(jìn)行輸入!" << endl;UserAdministratorHead = EntryAdministrator(UserAdministratorHead);system("cls");}else {//讀取時先讀取第一個頭節(jié)點(diǎn)fread(UserAdministratorHead, sizeof(*UserAdministratorHead), 1, fp);p1 = new UserAdministrator;i = 0;while ((fread(p1, sizeof(*p1), 1, fp)) == 1) {i++;p1->next = NULL;p2->next = p1;p2 = p1;p1 = new UserAdministrator;}if (i == 0) { cout << "空文件!" << endl; return UserAdministratorHead; }delete(p1);fclose(fp);cout << "讀取管理員數(shù)據(jù)成功!" << endl;}return UserAdministratorHead;
}
LinkUserTeacher Teacher_AccountRead(LinkUserTeacher UserTeacherHead) {cout << "正在讀取教師數(shù)據(jù)!" << endl;LinkUserTeacher p3, p4;UserTeacherHead = new UserTeacher;p4 = UserTeacherHead;UserTeacherHead->next = NULL;FILE* fp = fopen(PATH3, "rb");if (fp == NULL) {cout << "教師數(shù)據(jù)文件不存在!" << endl;cout << "將為您初始化,請根據(jù)信息進(jìn)行輸入!" << endl;UserTeacherHead = EntryTeacher(UserTeacherHead);system("cls");}else {//讀取時先讀取第一個頭節(jié)點(diǎn)fread(UserTeacherHead, sizeof(*UserTeacherHead), 1, fp);p3 = new UserTeacher;int i = 0;while ((fread(p3, sizeof(*p3), 1, fp)) == 1) {i++;p3->next = NULL;p4->next = p3;p4 = p3;p3 = new UserTeacher;}if (i == 0) { cout << "空文件!" << endl; return UserTeacherHead; }delete(p3);fclose(fp);cout << "讀取教師數(shù)據(jù)成功!" << endl;}return UserTeacherHead;
}
LinkUserStudent Student_AccountRead(LinkUserStudent UserStudentHead) {cout << "正在讀取學(xué)生賬戶數(shù)據(jù)!" << endl;LinkUserStudent p5, p6;UserStudentHead = new UserStudent;p6 = UserStudentHead;UserStudentHead->next = NULL;FILE* fp = fopen(PATH5, "rb");int i;if (fp == NULL) {cout << "學(xué)生賬戶數(shù)據(jù)文件不存在!" << endl;cout << "將為您初始化,請根據(jù)信息進(jìn)行輸入!" << endl;system("pause");UserStudentHead = EntryStudent(UserStudentHead);system("cls");return UserStudentHead;}else {//讀取時先讀取第一個頭節(jié)點(diǎn)fread(UserStudentHead, sizeof(*UserStudentHead), 1, fp);p5 = new UserStudent;i = 0;while ((fread(p5, sizeof(*p5), 1, fp)) == 1) {i++;p5->next = NULL;p6->next = p5;p6 = p5;p5 = new UserStudent;}if (i == 0) { cout << "空文件!" << endl; return UserStudentHead; }delete(p5);fclose(fp);cout << "讀取學(xué)生數(shù)數(shù)據(jù)成功!" << endl;}system("pause");system("cls");return UserStudentHead;
}//登錄函數(shù)
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 << "| 歡迎使用學(xué)生教務(wù)系統(tǒng) |" << endl;cout << "| 請選擇賬戶類型登錄 |" << endl;cout << "|———————————————————|" << endl;cout << "| a.學(xué)生 |" << 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;//將該學(xué)生學(xué)號返回到頭指針學(xué)號UserStudentHead->StudentNum = p->StudentNum;system("pause");system("cls");flag = 'a';return flag;}}p = p->next;if (!p) {cout << "賬戶或密碼錯誤!" << endl;flag = '#';return flag;}}}else if (judge == 'b' || judge == 'B') {cout << "請輸入賬號: ";getchar();i = 0;while ((ch = _getch()) != '\r' && i <= 20) {if (ch == '\b') {if (i > 0) {i--;cout << "\b \b";}else {putchar(7);}}else {cAccount[i++] = ch;cout << "*";}}cAccount[i] = '\0';cout << endl;cout << "請輸入密碼: ";i = 0;while ((ch = _getch()) != '\r' && i <= 20) {if (ch == '\b') {if (i > 0) {i--;cout << "\b \b";}else {putchar(7);}}else {cPassword[i++] = ch;cout << "*";}}cPassword[i] = '\0';Password = cPassword;Account = cAccount;cout << endl;LinkUserTeacher p = UserTeacherHead->next;while (1) {if (!p->Account.compare(Account)) {if (!p->Password.compare(Password)) {cout << "登錄成功!" << endl;system("pause");system("cls");flag = 'b';return flag;}}p = p->next;if (!p) {cout << "賬戶或密碼錯誤!" << endl;flag = '#';return flag;}}}else if (judge == 'c' || judge == 'C') {cout << "請輸入賬號: ";getchar();i = 0;while ((ch = _getch()) != '\r' && i <= 20) {if (ch == '\b') {if (i > 0) {i--;cout << "\b \b";}else {putchar(7);}}else {cAccount[i++] = ch;cout << "*";}}cAccount[i] = '\0';cout << endl;cout << "請輸入密碼: ";i = 0;while ((ch = _getch()) != '\r' && i <= 20) {if (ch == '\b') {if (i > 0) {i--;cout << "\b \b";}else {putchar(7);}}else {cPassword[i++] = ch;cout << "*";}}cPassword[i] = '\0';Password = cPassword;Account = cAccount;cout << endl;LinkUserAdministrator p = AdministratorHead->next;while (1) {if (!p->Account.compare(Account)) {if (!p->Password.compare(Password)) {cout << "登錄成功!" << endl;system("pause");system("cls");flag = 'c';return flag;}}p = p->next;if (!p) {cout << "賬戶或密碼錯誤!" << endl;flag = '#';return flag;}}}cout << "請重新輸入!" << endl;system("pause");system("cls");}
}//**************************************學(xué)生權(quán)限功能塊**************************************//學(xué)生界面菜單
void Student_Begin() {cout << "————————————————————" << endl;cout << "| 請輸入數(shù)字進(jìn)行操作 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:個人成績查看 |" << endl;cout << "| b:個人不及格課程查看 |" << endl;cout << "| c:個人學(xué)分查看 |" << 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 << "| @:保存數(shù)據(jù) |" << endl;cout << "| #:退出程序 |" << endl;cout << "————————————————————" << endl;}//個人成績查看
void PersonalGrade_Search(LinkStudent One, LinkCourse CourseHead) {system("cls");LinkCourse p = CourseHead;int i;int StdNum = One->PersonalInformation.StudentNum;int Subcase = CourseHead->SubNum;cout << "————————————————————" << endl;cout << "學(xué)號: " << 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 << "課程學(xué)分: " << p->SubCredits << endl;cout << "重修次數(shù): " << p->Grade[i].Retake << endl;cout << "平時成績?yōu)?#34; << p->Grade[i].OrdinaryGrade << endl;cout << "考試成績?yōu)?#34; << p->Grade[i].TestGrade << endl;cout << "總成績?yōu)?#34; << p->Grade[i].TotalGrade << endl;cout << "————————————————————" << endl;}}system("pause");system("cls");
}//查詢重修學(xué)生的課程
void SearchFailCourse(LinkCourse CourseHead,LinkStudent StudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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 << "請輸入查詢的學(xué)生學(xué)號: " << endl;int StdNum;cin >> StdNum;LinkStudent One;One = SearchStudent(StdNum, StudentHead);//如果搜索不到學(xué)生if (One == NULL)return;SearchPersonalFailCourse(One, CourseHead);
}//查詢個人的重修課程
void SearchPersonalFailCourse(LinkStudent One, LinkCourse CourseHead) {LinkCourse p = CourseHead;int i;int StdNum = One->PersonalInformation.StudentNum;int Subcase = CourseHead->SubNum;cout << "————————————————————" << endl;cout << "學(xué)號: " << 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 << "課程學(xué)分: " << p->SubCredits << endl;cout << "重修次數(shù): " << p->Grade[i].Retake << endl;cout << "平時成績?yōu)?#34; << p->Grade[i].OrdinaryGrade << endl;cout << "考試成績?yōu)?#34; << p->Grade[i].TestGrade << endl;cout << "總成績?yōu)?#34; << p->Grade[i].TotalGrade << endl;cout << "————————————————————" << endl;}}system("pause");system("cls");
}
//個人學(xué)分查看
void PersonalCreadits_Search(LinkStudent One) {system("cls");cout << "————————————————————" << endl;cout << "您所獲得的學(xué)分是: " << One->StudentCredits << endl;cout << "————————————————————" << endl;system("pause");
};//個人信息查看
void PersonalInformation_Search(LinkStudent One) {system("cls");cout << "————————————————————" << endl;cout << " 學(xué)生學(xué)號:" << One->PersonalInformation.StudentNum << endl;cout << " 學(xué)生姓名:" << One->PersonalInformation.StudentName << endl;cout << " 學(xué)生性別:" << One->PersonalInformation.StudentSex << endl;cout << " 學(xué)生年齡:" << One->PersonalInformation.StudentAge << endl;cout << " 學(xué)生宿舍地址:" << One->PersonalInformation.StudentDorm << endl;cout << " 學(xué)生手機(jī)號碼:" << One->PersonalInformation.StudentPhone << endl;cout << "————————————————————" << endl;system("pause");system("cls");
}//個人課程查看
void PersonalCourse_Search(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead) {int StudentNum = StudentHead->PersonalInformation.StudentNum;int StudentId = One->PersonalInformation.StudentNum;system("cls");cout << "————————————————————" << endl;cout <<StudentId<< "擁有的課程: " << endl;cout << "————————————————————" << endl;LinkCourse p = CourseHead->next;int num = 1;while (1) {for (int j = 0; j < StudentNum; j++) {if (p->Grade[j].StudentNum == StudentId) {if (p->Grade[j].Judge == 1) {cout << num++ << ". " << p->SubName << endl;cout << "————————————————————" << endl;cout << "編號為" << p->SubNum << "的課程:" << endl;cout << "課程學(xué)分:" << p->SubCredits << endl;cout << "任課老師:" << p->Teacher << endl;cout << "任課地點(diǎn):" << p->Position << endl;cout << "任課時間:" << p->Time << endl;cout << "————————————————————" << endl;}}}p = p->next;if (!p)break;}system("pause");
};//選課中心
void PersonalCourse_Choose(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead) {//學(xué)生總?cè)藬?shù)int StudentNum = StudentHead->PersonalInformation.StudentNum;//學(xué)生個人IDint StudentId = One->PersonalInformation.StudentNum;system("cls");LinkCourse p = NULL;char choose;while (1) {system("cls");cout << "————————————————————" << endl;cout << "當(dāng)前學(xué)生總數(shù):" << StudentHead->PersonalInformation.StudentNum << endl;cout << "當(dāng)前課程總數(shù):" << CourseHead->SubNum << endl;cout << "————————————————————" << endl;cout << "| 請選擇選課模式 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:搜索單門課程進(jìn)行選課 |" << endl;cout << "| b:對所有課程依次進(jìn)行選課 |" << endl;cout << "| @:數(shù)據(jù)保存 |" << endl;cout << "| #:返回上一層 |" << endl;cout << "————————————————————" << endl;cin >> choose;int flag = 0;switch (choose) {case '#'://返回上一層return;case '@'://保存數(shù)據(jù)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;case 'a': case 'A':system("cls");cout << "您想要通過什么方式找到課程?" << endl;cout << "a:課程關(guān)鍵詞搜索" << 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 << "課程學(xué)分:" << p->SubCredits << endl;cout << "任課老師:" << p->Teacher << endl;cout << "任課地點(diǎn):" << 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 << "當(dāng)前課程容量已滿!" << 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 << "請對可選課程進(jìn)行選擇: " << endl;p = CourseHead->next;while (1) {while (1) {cout << "編號為" << p->SubNum << "的課程:" << endl;cout << "課程名稱:" << p->SubName << endl;cout << "課程學(xué)分:" << p->SubCredits << endl;cout << "任課老師:" << p->Teacher << endl;cout << "任課地點(diǎn):" << 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 << "當(dāng)前課程容量已滿!" << 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");
}//個人信息修改
void ModifyPersonalInformation(LinkStudent One) {char judge;PersonalInformation_Search(One);while (1) {system("cls");cout << "————————————————————" << endl;cout << "請輸入需要修改的選項" << endl;cout << "————————————————————" << endl;cout << "| a:學(xué)生名字 |" << endl;cout << "| b:學(xué)生性別 |" << endl;cout << "| c:學(xué)生年齡 |" << endl;cout << "| d:學(xué)生宿舍 |" << endl;cout << "| e:學(xué)生手機(jī)號碼 |" << 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;}}
}//學(xué)生輸入界面
void Input_Student(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead) {system("cls");LinkUserStudent UserOne = UserStudentHead;LinkStudent One = SearchStudent(UserOne->StudentNum, StudentHead);char choose;while (1) {system("cls");cout << "————————————————————" << endl;cout << " 歡迎您!" << One->PersonalInformation.StudentName << " " << endl;Student_Begin();cin >> choose;switch (choose) {case '#'://退出程序cout << "退出成功歡迎下次使用!" << endl;return;case 'a':case'A'://個人成績查看PersonalGrade_Search(One, CourseHead);break;case 'b': case 'B'://查詢學(xué)生重修課程system("cls");SearchPersonalFailCourse(One, CourseHead);break;case 'c':case'C'://個人學(xué)分查看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'://學(xué)生個人賬戶密碼修改StudentAccount_ChangePassword(UserStudentHead);break;case '@'://數(shù)據(jù)保存StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");cout << "請按正確格式輸入" << endl;system("pause");system("cls");break;}}
}//**************************************教師權(quán)限功能塊**************************************//教師界面菜單
void Teacher_Begin() {cout << "————————————————————" << endl;cout << "| 請輸入數(shù)字進(jìn)行操作 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:學(xué)生成績錄入 |" << endl;cout << "| b:學(xué)生成績查看 |" << endl;cout << "| c:查詢學(xué)生重修課程 |" << endl;cout << "| d:查詢課程重修學(xué)生 |" << endl;cout << "| e:學(xué)生個人信息查看 |" << endl;cout << "| f:課程信息修改 |" << endl;cout << "| g:查看選課信息 |" << endl;cout << "| h:查看課程信息 |" << endl;cout << "| i:查看課程評價 |" << endl;cout << "| j:修改賬戶密碼 |" << endl;cout << "| @:保存數(shù)據(jù) |" << endl;cout << "| #:退出程序 |" << endl;cout << "————————————————————" << endl;
}
//教師界面輸入
void Input_Teacher(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system("cls");cout << "————————————————————" << endl;cout << "當(dāng)前學(xué)生總數(shù):" << StudentHead->PersonalInformation.StudentNum << endl;cout << "當(dāng)前課程總數(shù):" << CourseHead->SubNum << endl;Teacher_Begin();cin >> choose;switch (choose) {case '#'://退出程序cout << "退出成功歡迎下次使用!" << endl;return;case 'a': case 'A'://學(xué)生成績錄入GradeInput(CourseHead, StudentHead);break;case 'b': case 'B'://學(xué)生成績查看SearchCourse(StudentHead, CourseHead);break;case 'c': case 'C'://查詢學(xué)生重修課程SearchFailCourse(CourseHead, StudentHead);break;case 'd': case 'D'://查詢課程重修學(xué)生Search_CourseRetake(CourseHead, StudentHead);break;case 'e': case 'E'://學(xué)生個人信息查看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;}}
}//**************************************學(xué)生信息基礎(chǔ)功能塊**************************************//添加學(xué)生個人
void PushStudent(LinkStudent StudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(Y/N)" << endl;cin >> Judge;switch (Judge){case 'Y':case 'y':Flag = 1;break;case 'N':case 'n':return;default:cout << "請重新輸入!" << endl;system("pause");break;}if (Flag == 1)break;}system("cls");LinkStudent std, p = StudentHead;std = new Student;//首先定義next要置空std->next = NULL;int Class;cout << "請輸入該學(xué)生所在班級:" << endl;cin >> Class;//找到最后該班學(xué)號最后一個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;//學(xué)生總數(shù)+1StudentHead->PersonalInformation.StudentNum++;printf("已設(shè)置該學(xué)生學(xué)號為: %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;//學(xué)生總數(shù)+1StudentHead->PersonalInformation.StudentNum++;printf("已設(shè)置該學(xué)生學(xué)號為: %04d\n", std->PersonalInformation.StudentNum);}cout << "請?zhí)顚懺搶W(xué)生姓名(張三):" << endl;cout << "請?zhí)顚懺搶W(xué)生性別(男/女):" << endl;cout << "請?zhí)顚懺搶W(xué)生年齡:" << endl;cout << "請?zhí)顚懺搶W(xué)生宿舍地址(泰山區(qū)xx棟xxx):" << endl;cout << "請?zhí)顚懺搶W(xué)生手機(jī)號碼:" << 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");
}//修改學(xué)生個人信息
LinkStudent ModifyStudent(LinkStudent StudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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 << "請輸入需要修改的學(xué)生學(xué)號" << endl;int studentNum;cin >> studentNum;if ((p = SearchStudent(studentNum, StudentHead)) == NULL)return StudentHead;while (1) {system("cls");cout << "————————————————————" << endl;cout << "| 請輸入選項進(jìn)行操作 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:學(xué)生名字 |" << endl;cout << "| b:學(xué)生性別 |" << endl;cout << "| c:學(xué)生年齡 |" << endl;cout << "| d:學(xué)生宿舍 |" << endl;cout << "| e:學(xué)生手機(jī)號碼 |" << 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;}}
}//新建學(xué)生鏈表
LinkStudent CreateStudentList(LinkStudent StudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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 << "請輸入學(xué)生總數(shù)和每班人數(shù)" << endl;cin >> n >> ClassStdNum;LinkStudent q = StudentHead, p;//Student的頭節(jié)點(diǎn)學(xué)號存放學(xué)生總數(shù)StudentHead->PersonalInformation.StudentNum = n;int num = 1, hundred = 100;for (int i = 1; i <= n; i++) {p = new Student;p->next = NULL;//學(xué)號直接初始化p->PersonalInformation.StudentNum = num + hundred;//將學(xué)生鏈表連接起來q->next = p;q = p;//如果num到達(dá)該班人數(shù)則num++;if (num > ClassStdNum) {num = 1;hundred += 100;}}cout << "學(xué)生信息初始化完成" << endl;system("pause");system("cls");return StudentHead;
}//存取學(xué)生鏈表數(shù)據(jù)
void StoreStudentList(LinkStudent StudentHead) {system("cls");cout << "正在存儲學(xué)生數(shù)據(jù)" << endl;if (StudentHead->next == NULL) { cout << "該學(xué)生信息表不存在!" << endl; return; }LinkStudent p;p = StudentHead;FILE* fp = fopen(PATH1, "wb");if (fp == NULL) { cout << "儲存文件失敗!" << endl; return; }//寫入時也要把頭節(jié)點(diǎn)寫進(jìn)去while (p != NULL) {fwrite(p, sizeof(Student), 1, fp);p = p->next;}cout << "存儲學(xué)生數(shù)據(jù)成功!" << endl;fclose(fp);fp = NULL;system("pause");system("cls");
}//刪除學(xué)生函數(shù)
LinkStudent DeleteStudent(LinkStudent StudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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 << "請輸入要刪除的學(xué)生學(xué)號" << endl;int StdNum;cin >> StdNum;LinkStudent q, p;q = p = StudentHead;while (p) {q = p;p = p->next;if (!p) {cout << "學(xué)號不存在!" << endl;system("pause");system("cls");//如果不存在返回NULL標(biāo)志錯誤return NULL;}//如果找到該學(xué)號即返回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;
}//學(xué)生個人信息查看
void SearchInformation(LinkStudent StudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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 << "查看的學(xué)生學(xué)號是" << endl;int StdNum;cin >> StdNum;LinkStudent p;if ((p = SearchStudent(StdNum, StudentHead)) == NULL) {return;}cout << "該學(xué)生姓名:" << p->PersonalInformation.StudentName << endl;cout << "該學(xué)生性別:" << p->PersonalInformation.StudentSex << endl;cout << "該學(xué)生年齡:" << p->PersonalInformation.StudentAge << endl;cout << "該學(xué)生宿舍地址:" << p->PersonalInformation.StudentDorm << endl;cout << "該學(xué)生手機(jī)號碼:" << p->PersonalInformation.StudentPhone << endl;system("pause");system("cls");
}//學(xué)生個人信息錄入
LinkStudent PnInformation(LinkStudent StudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(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 << "請輸入錄入個人信息的學(xué)生學(xué)號" << endl;cin >> StdNum;LinkStudent p;if ((p = SearchStudent(StdNum, StudentHead)) == NULL) {return StudentHead;}cout << "請?zhí)顚懺搶W(xué)生姓名(張三):" << endl;cout << "請?zhí)顚懺搶W(xué)生性別(男/女):" << endl;cout << "請?zhí)顚懺搶W(xué)生年齡:" << endl;cout << "請?zhí)顚懺搶W(xué)生宿舍地址(泰山區(qū)xx棟xxx):" << endl;cout << "請?zhí)顚懺搶W(xué)生手機(jī)號碼:" << 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;
}
//**************************************課程基礎(chǔ)功能塊**************************************//學(xué)生課程鏈表初始化,設(shè)置課程數(shù)量且將學(xué)號錄入
LinkCourse InitCourse(LinkCourse CourseHead, LinkStudent StudentHead) {system("cls");cout << "您是否要進(jìn)行課程初始化?(Y/N)" << endl;cout << "課程初始化前一定要設(shè)置好學(xué)生名單哦!" << endl;char judge;cin >> judge;if (judge == 'N' || judge == 'n')return CourseHead;system("cls");cout << "請輸入開設(shè)課程數(shù)量:" << endl;int Num;cin >> Num;//課程頭節(jié)點(diǎn)存放課程數(shù)量CourseHead->SubNum = Num;LinkCourse p2, p1;p2 = CourseHead;system("cls");for (int i = 1; i <= Num; i++) {p1 = new Course;p1->next = NULL;p1->SubNum = i;cout << "系統(tǒng)已分配課程編號為 " << p1->SubNum << endl;cout << "請設(shè)置開設(shè)課程編號名稱: " << endl;cin >> p1->SubName;cout << "請設(shè)置該課程的學(xué)分: " << endl;cin >> p1->SubCredits;p2->next = p1;p2 = p1;system("cls");}p2 = CourseHead->next;LinkStudent ps = StudentHead->next;int n = StudentHead->PersonalInformation.StudentNum;int i = 0;while (p2) {while (ps) {p2->Grade[i].StudentNum = ps->PersonalInformation.StudentNum;ps = ps->next;i++;}ps = StudentHead->next;p2 = p2->next;i = 0;}cout << "課程初始化成功!" << endl;system("pause");system("cls");return CourseHead;
}//添加課程
void AddCourse(LinkCourse CourseHead, LinkStudent StudentHead) {system("cls");char Judge;int Flag = 0;while (1) {cout << "是否要進(jìn)行操作?(Y/N)" << endl;cin >> Judge;switch (Judge){case 'Y':case 'y':Flag = 1;break;case 'N':case 'n':return;default:cout << "請重新輸入!" << endl;system("pause");break;}if (Flag == 1)break;}system("cls");LinkCourse newcourse = new Course;newcourse->next = NULL;LinkCourse p = SearchCourseID(CourseHead->SubNum, CourseHead);p->next = newcourse;CourseHead->SubNum++;newcourse->SubNum = CourseHead->SubNum;cout << "已分配該課程編號為: " << CourseHead->SubNum << endl;cout << "————————————————————" << endl;cout << "請輸入添加課程的名字:" << endl;cin >> newcourse->SubName;cout << "請輸入添加課程的學(xué)分:" << endl;cin >> newcourse->SubCredits;cout << "請輸入添加課程的任課老師:" << endl;cin >> newcourse->Teacher;cout << "請輸入添加課程的任課地點(diǎn):" << endl;cin >> newcourse->Position;cout << "請輸入添加課程的任課時間:" << endl;cin >> newcourse->Time;//分配成績的學(xué)號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");
}//刪除課程函數(shù)
LinkCourse DeleteCoursse(LinkCourse CourseHead) {LinkCourse q, p;q = p = CourseHead;system("cls");cout << "您想要通過什么方式找到課程?" << endl;cout << "a:課程關(guān)鍵詞搜索" << 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)return NULL;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標(biāo)志錯誤return NULL;}//如果找到該編號即返回pif (p->SubNum == SubNum)break;}flag = 1;break;case'#':return CourseHead;default:cout << "請正確輸入!" << endl;break;}if (flag == 1)break;}q->next = p->next;p = q->next;//重新按序排序課程編號int subnum;if (q == CourseHead) {subnum = 1;}else {subnum = q->SubNum + 1;}while (p) {p->SubNum = subnum++;p = p->next;}//刪除后課程數(shù)量-1CourseHead->SubNum--;cout << "刪除成功!" << endl;system("pause");system("cls");return CourseHead;
}//修改課程信息
void ModifyCourse(LinkCourse CourseHead) {LinkCourse p = CourseHead;int flag = 0, id;char judge;while(1){system("cls");cout << "您想要通過什么方式找到課程?" << endl;cout << "a:課程關(guān)鍵詞搜索" << 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 << "課程學(xué)分:" << p->SubCredits << endl;cout << "任課老師:" << p->Teacher << endl;cout << "任課地點(diǎn):" << p->Position << endl;cout << "任課時間:" << p->Time << endl;system("pause");system("cls");cout << "編號為" << p->SubNum << "的課程:" << endl;cout << "請選擇需要修改的信息:" << endl;cout << "————————————————————" << endl;cout << "a:課程名稱" << endl;cout << "b:課程學(xué)分:" << endl;cout << "c:任課老師:" << endl;cout << "d:任課地點(diǎn):" << 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 << "請輸入課程學(xué)分" << 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 << "請輸入任課地點(diǎn)" << 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;}}
}//課程評價
void CourseEvaluation_Operate(LinkCourse CourseHead) {LinkCourse p = CourseHead;int flag=0, id;char judge;while (1) {system("cls");cout << "您想要通過什么方式找到課程?" << endl;cout << "a:課程關(guān)鍵詞搜索" << 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 << "課程學(xué)分:" << p->SubCredits << endl;cout << "任課老師:" << p->Teacher << endl;cout << "任課地點(diǎn):" << p->Position << endl;cout << "任課時間:" << p->Time << endl;system("pause");system("cls");cout << "請輸入您的評價:" << endl;cout << "————————————————————" << endl;int i = 0;while (p->Evaluation[i][0]!='\0') {i++;if (i == 10) {break;}}if (i == 10) {cout << "評價已滿!" << endl;system("pause");return;}cin >> p->Evaluation[i];cout << "感謝您的評價!" << endl;system("pause");}//課程評價查看
void CourseEvaluation_Search(LinkCourse CourseHead) {LinkCourse p = CourseHead;system("cls");cout << "您想要通過什么方式找到課程?" << endl;cout << "a:課程關(guān)鍵詞搜索" << 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 << "課程學(xué)分:" << p->SubCredits << endl;cout << "任課老師:" << p->Teacher << endl;cout << "任課地點(diǎn):" << 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 << "學(xué)號: " << p->Grade[j].StudentNum << endl;cout << "該學(xué)生是否選擇課程,1為選擇,0為未選擇" << endl;cin >> select;if (select == 1) {if (p->Grade[j].Judge == 1) {cout << "該學(xué)生已選課" << endl;break;}else {if (p->Capacity > 60) {cout << "當(dāng)前課程容量已滿!" << endl;system("pause");break;}p->Grade[j].Judge = 1;p->Capacity++;cout << "選課成功!" << endl;system("pause");break;}}else if (select == 0) {if (p->Grade[j].Judge == 1) {cout << "該學(xué)生將退選課程!" << endl;p->Grade[j].Judge = 0;p->Capacity--;system("pause");break;}break;}else {cout << "請正確輸入!" << endl;}}j++;}cout << "輸入成功!" << endl;system("pause");system("cls");return CourseHead;
}//查詢選課情況
void CourseSelection_view(LinkCourse CourseHead, LinkStudent StudentHead) {system("cls");char judge;int j=0,num = StudentHead->PersonalInformation.StudentNum;LinkCourse p;LinkStudent One;int StudentNum;while (1) {cout << "請選擇查詢模式" << endl;cout << "a.查詢課程選課的學(xué)生" << endl;cout << "b.查詢學(xué)生的選課情況" << 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 << "學(xué)號: " << 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'://查詢學(xué)生的選課情況SearchStudentCourse(CourseHead, StudentHead);return;case'#':return;default:break;}if (flag == 1)break;}return;
}//查詢學(xué)生的選課情況
void SearchStudentCourse(LinkCourse CourseHead, LinkStudent StudentHead) {system("cls");char judge;int j = 0, num = StudentHead->PersonalInformation.StudentNum;LinkCourse p;LinkStudent One;int StudentNum;while (1) {cout << "請選擇查詢模式" << endl;cout << "a.按班查詢學(xué)生選課情況" << endl;cout << "b.查詢學(xué)生個人選課情況" << 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 << "請輸入查詢的學(xué)生學(xué)號: " << endl;cin >> StdNum;One = SearchStudent(StdNum, StudentHead);if (One == NULL)return;PersonalCourse_Search(One, StudentHead, CourseHead);return;case'#':return;default:break;}if (flag == 1)break;}
}//查看課程信息
void CourseInformation_View(LinkCourse CourseHead) {LinkCourse p = CourseHead;system("cls");cout << "您想要通過什么方式找到課程?" << endl;cout << "a:課程關(guān)鍵詞搜索" << 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 << "課程學(xué)分:" << p->SubCredits << endl;cout << "任課老師:" << p->Teacher << endl;cout << "任課地點(diǎn):" << p->Position << endl;cout << "任課時間:" << p->Time << endl;cout << "課程容量: " << p->Capacity << "/60" << endl;system("pause");system("cls");}//通過編號查看課程信息
void searchcourse(LinkCourse coursehead) {system("cls");cout << "請輸入查看的課程編號:" << endl;int coursenum;cin >> coursenum;LinkCourse p;p = SearchCourseID(coursenum, coursehead);if (p == NULL)return;cout << "編號為" << coursenum << "的課程:" << endl;cout << "課程名稱:" << p->SubName << endl;cout << "課程學(xué)分:" << p->SubCredits << endl;system("pause");system("cls");
}//存取課程鏈表數(shù)據(jù)(完成)
void StoreCourseList(LinkCourse CourseHead) {cout << "正在存儲課程數(shù)據(jù)" << endl;if (CourseHead->next == NULL) { cout << "課程信息表不存在!" << endl; return; }LinkCourse p;p = CourseHead;FILE* fp = fopen(PATH2, "wb");if (fp == NULL) { cout << "儲存文件失敗!" << endl; return; }//寫入時也要把頭節(jié)點(diǎn)寫進(jìn)去while (p != NULL) {fwrite(p, sizeof(Course), 1, fp);p = p->next;}cout << "存儲課程數(shù)據(jù)成功!" << endl;fclose(fp);fp = NULL;system("pause");system("cls");
}//學(xué)生課程成績錄入
void GradeInput(LinkCourse CourseHead, LinkStudent StudentHead) {LinkCourse p = CourseHead;char judge;int id;int flag = 0;while (1) {system("cls");cout << "您想要通過什么方式錄入成績?" << endl;cout << "a:按課程對全部選課學(xué)生進(jìn)行錄入" << endl;cout << "b:按課程對個別選課學(xué)生進(jìn)行錄入" << endl;cout << "#:返回上一層" << endl;cin >> judge;switch (judge){case'a':case 'A'://按課程對全部選課學(xué)生進(jìn)行錄入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:課程關(guān)鍵詞搜索" << 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 << "請輸入要操作課程的學(xué)生學(xué)號" << endl;int StudentNum;cin >> StudentNum;int i = 0;LinkStudent Student = SearchStudent(StudentNum, StudentHead);//學(xué)號不存在if (Student == NULL)return;while (p->Grade[i].StudentNum != StudentNum) {i++;if (i == StudentHead->PersonalInformation.StudentNum) {cout << "學(xué)號不存在!" << endl;system("pause");return;}}if (p->Grade[i].Judge == 0) {cout << "該學(xué)生未選課!" << endl;system("pause");return;}if (p->Grade[i].TotalGrade != 0) {system("cls");char Judge;int Flag = 0;while (1) {cout << "該學(xué)生成績已錄入!" << endl;cout << "該學(xué)生成績是否需要重新錄入?(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 << "學(xué)號: " << 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 << "學(xué)生成績輸入完成" << endl;system("pause");system("cls");
}//學(xué)生學(xué)分查詢
void Creadits_Search(LinkStudent StudentHead) {char judge;int i, j;LinkStudent One = StudentHead;int flag;while (1) {system("cls");cout << "請選擇查詢成績功能" << endl;cout << "a.按班統(tǒng)計學(xué)生學(xué)分" << endl;cout << "b.按學(xué)生學(xué)號查詢學(xué)分" << endl;cout << "#:返回上一層" << endl;cin >> judge;switch (judge){case'a':system("cls");cout << "請輸入查詢學(xué)分的班級: " << endl;cin >> i;i *= 100;while (One->PersonalInformation.StudentNum < i) {One = One->next;}while (One->PersonalInformation.StudentNum > i && One->PersonalInformation.StudentNum < i + 100) {cout << "學(xué)號: " << One->PersonalInformation.StudentNum << endl;cout << "學(xué)分: " << One->StudentCredits << endl;cout << "***************************************************************" << endl;One = One->next;}system("pause");system("cls");return;case'b':cout << "查看的學(xué)生學(xué)號是" << endl;int StdNum;cin >> StdNum;One = SearchStudent(StdNum, StudentHead);if (One == NULL)return;cout << "學(xué)號: " << One->PersonalInformation.StudentNum << endl;cout << "學(xué)分: " << One->StudentCredits << endl;cout << "***************************************************************" << endl;system("pause");system("cls");return;case'#':return;default:cout << "請重新輸入!" << endl;system("pause");break;}}
};//查詢課程重修
void Search_CourseRetake(LinkCourse CourseHead, LinkStudent StudentHead) {system("cls");char judge;int flag = 0;LinkCourse copyhead = NULL, p = NULL;int id, i;while (1) {cout << "請選擇查詢課程功能" << endl;cout << "a.按關(guān)鍵詞搜索課程" << 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 << "課程學(xué)分: " << 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 << "學(xué)號: " << p->Grade[i].StudentNum << endl;q = SearchStudent(p->Grade[i].StudentNum, StudentHead);cout << "姓名: " << q->PersonalInformation.StudentName << endl;cout << "重修次數(shù)" << 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");};//按課程錄入學(xué)生考試成績。
void GradeInput_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.按關(guān)鍵詞搜索課程" << 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 << "課程學(xué)分: " << p->SubCredits << endl;cout << "————————————————————" << endl;system("pause");system("cls");LinkStudent q;int nxt = 0;cout << "請依次對選課學(xué)生成績進(jìn)行填寫" << endl;for (i = 0; i < StudentHead->PersonalInformation.StudentNum; i++) {if (p->Grade[i].Judge == 1) {cout << "學(xué)號: " << 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 << "該學(xué)生成績已錄入!" << endl;cout << "該學(xué)生成績是否需要重新錄入?(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 << "學(xué)生成績輸入完成" << endl;cout << "————————————————————" << endl;}}system("pause");system("cls");
};//獲取該課課程評價
void GetCourseEvaluation(LinkCourse Course) {int i = 0;cout << "————————————————————" << endl;cout << "| 課程評價 |" << endl;cout << "|———————————————————|" << endl;while (strlen(Course->Evaluation[i]) > 0) {cout << i + 1 << "." << Course->Evaluation[i] << endl;cout << "|———————————————————|" << endl;i++;}
}//讀取課程數(shù)據(jù)函數(shù)
LinkCourse ReadCourseList(LinkStudent StudentHead) {cout << "正在讀取課程數(shù)據(jù)!" << endl;LinkCourse p1, p2, CourseHead = new Course;p2 = CourseHead;CourseHead->next = NULL;FILE* fp = fopen(PATH2, "rb");if (fp == NULL) {cout << "數(shù)據(jù)文件不存在!" << endl;cout << "將為您初始化,請根據(jù)信息進(jìn)行輸入!" << endl;system("pause");CourseHead = InitCourse(CourseHead, StudentHead);return CourseHead;}//讀取時先讀取第一個頭節(jié)點(diǎn)fread(CourseHead, sizeof(*CourseHead), 1, fp);p1 = new Course;int i = 0;while ((fread(p1, sizeof(*p1), 1, fp)) == 1) {i++;p1->next = NULL;p2->next = p1;p2 = p1;p1 = new Course;}if (i == 0) { cout << "空文件!" << endl; return CourseHead; }delete(p1);fclose(fp);cout << "讀取文件數(shù)據(jù)成功!" << endl;system("pause");system("cls");return CourseHead;
}//菜單
void Begin() {cout << "————————————————————" << endl;cout << "| 請輸入數(shù)字進(jìn)行操作 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:成績系統(tǒng) |" << endl;cout << "| b:課程系統(tǒng) |" << endl;cout << "| c:信息系統(tǒng) |" << endl;cout << "| d:賬號系統(tǒng) |" << endl;cout << "| e:初始化 |" << endl;cout << "| @:數(shù)據(jù)保存 |" << endl;cout << "| #:退出程序 |" << endl;cout << "————————————————————" << endl;
}
//成績系統(tǒng)菜單
void GradeSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system("cls");cout << "————————————————————" << endl;cout << "當(dāng)前學(xué)生總數(shù):" << StudentHead->PersonalInformation.StudentNum << endl;cout << "當(dāng)前課程總數(shù):" << CourseHead->SubNum << endl;cout << "————————————————————" << endl;cout << "| 請輸入數(shù)字進(jìn)行操作 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:學(xué)生成績錄入 |" << endl;cout << "| b:學(xué)生成績查詢 |" << endl;cout << "| c:查詢課程重修學(xué)生 |" << endl;cout << "| d:查詢學(xué)生不及格課程 |" << endl;cout << "| e:查詢學(xué)生學(xué)分 |" << endl;cout << "| @:數(shù)據(jù)保存 |" << endl;cout << "| #:返回上一層 |" << endl;cout << "————————————————————" << endl;cin >> choose;switch (choose) {case '#'://返回上一層return;case 'a': case 'A'://學(xué)生成績錄入GradeInput(CourseHead, StudentHead);break;case 'b': case 'B'://學(xué)生成績查看SearchCourse(StudentHead, CourseHead);break;case 'c': case 'C'://查詢課程重修學(xué)生Search_CourseRetake(CourseHead, StudentHead);break;case 'd': case 'D'://查詢學(xué)生不及格課程system("cls");cout << "請輸入查詢的學(xué)生學(xué)號: " << endl;int StdNum;cin >> StdNum;LinkStudent One;One = SearchStudent(StdNum, StudentHead);if (One == NULL)return;SearchPersonalFailCourse(One, CourseHead);break;case 'e': case 'E'://查詢學(xué)分Creadits_Search(StudentHead);break;case '@'://保存數(shù)據(jù)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");cout << "請按正確格式輸入" << endl;system("pause");system("cls");break;}}
}//課程系統(tǒng)菜單
void CourseSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system("cls");cout << "————————————————————" << endl;cout << "當(dāng)前學(xué)生總數(shù):" << StudentHead->PersonalInformation.StudentNum << endl;cout << "當(dāng)前課程總數(shù):" << CourseHead->SubNum << endl;cout << "————————————————————" << endl;cout << "| 請輸入數(shù)字進(jìn)行操作 |" << 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 << "| @:數(shù)據(jù)保存 |" << 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'://刪除課程函數(shù)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 '@'://保存數(shù)據(jù)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");cout << "請按正確格式輸入" << endl;system("pause");system("cls");break;}}
}//信息系統(tǒng)菜單
void InformationSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system("cls");cout << "————————————————————" << endl;cout << "當(dāng)前學(xué)生總數(shù):" << StudentHead->PersonalInformation.StudentNum << endl;cout << "當(dāng)前課程總數(shù):" << CourseHead->SubNum << endl;cout << "————————————————————" << endl;cout << "| 請輸入數(shù)字進(jìn)行操作 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:學(xué)生個人信息錄入 |" << endl;cout << "| b:學(xué)生個人信息查看 |" << endl;cout << "| c:學(xué)生個人添加 |" << endl;cout << "| d:學(xué)生個人刪除 |" << endl;cout << "| e:學(xué)生個人修改 |" << endl;cout << "| @:數(shù)據(jù)保存 |" << endl;cout << "| #:返回上一層 |" << endl;cout << "————————————————————" << endl;cin >> choose;switch (choose) {case '#'://返回上一層return;case 'a': case 'A'://學(xué)生個人信息錄入StudentHead = PnInformation(StudentHead);break;case 'b': case 'B'://學(xué)生個人信息查看SearchInformation(StudentHead);break;case'c':case 'C'://學(xué)生個人添加PushStudent(StudentHead);break;case'd':case 'D'://學(xué)生個人刪除DeleteStudent(StudentHead);break;case'e':case 'E'://學(xué)生個人修改ModifyStudent(StudentHead);break;case '@'://保存數(shù)據(jù)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");cout << "請按正確格式輸入" << endl;system("pause");system("cls");break;}}
}//帳號系統(tǒng)菜單
void AccountSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system("cls");cout << "————————————————————" << endl;cout << "當(dāng)前學(xué)生總數(shù):" << StudentHead->PersonalInformation.StudentNum << endl;cout << "當(dāng)前課程總數(shù):" << CourseHead->SubNum << endl;cout << "————————————————————" << endl;cout << "| 請輸入數(shù)字進(jìn)行操作 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:讀取賬號 |" << endl;cout << "| b:添加管理員帳號 |" << endl;cout << "| c:添加教師賬號 |" << endl;cout << "| d:添加學(xué)生賬號 |" << endl;cout << "| e:刪除賬號 |" << endl;cout << "| f:修改密碼 |" << endl;cout << "| @:數(shù)據(jù)保存 |" << 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'://錄入學(xué)生賬號EntryStudent(UserStudentHead);return;case'e':case'E'://刪除賬號AccountSystem_Delete(UserAdministratorHead, UserTeacherHead, UserStudentHead);return;case'f':case'F'://修改密碼Account_ChangePassword(UserAdministratorHead, UserTeacherHead, UserStudentHead);return;case '@'://保存數(shù)據(jù)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);return;default:system("cls");cout << "請按正確格式輸入" << endl;system("pause");system("cls");break;}}
}//初始化菜單
void Initialization(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {system("cls");char choose;while (1) {cout << "————————————————————" << endl;cout << "當(dāng)前學(xué)生總數(shù):" << StudentHead->PersonalInformation.StudentNum << endl;cout << "當(dāng)前課程總數(shù):" << CourseHead->SubNum << endl;cout << "————————————————————" << endl;cout << "| 請輸入數(shù)字進(jìn)行操作 |" << endl;cout << "|———————————————————|" << endl;cout << "| a:初始化學(xué)生數(shù)據(jù) |" << endl;cout << "| b:初始化課程數(shù)據(jù) |" << endl;cout << "| @:保存數(shù)據(jù) |" << endl;cout << "| #:返回上一層 |" << endl;cout << "————————————————————" << endl;cin >> choose;switch (choose) {case '#'://返回上一層return;case 'a': case 'A'://初始化學(xué)生信息StudentHead = CreateStudentList(StudentHead);break;case'b':case 'B'://課程初始化InitCourse(CourseHead, StudentHead);break;case '@'://保存數(shù)據(jù)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");cout << "請按正確格式輸入" << endl;system("pause");system("cls");break;}}
}//讀取學(xué)生文件數(shù)據(jù)函數(shù)
LinkStudent ReadStudentList() {cout << "正在讀取學(xué)生數(shù)據(jù)!" << endl;LinkStudent p1, p2, StudentHead = new Student;p2 = StudentHead;StudentHead->next = NULL;FILE* fp = fopen(PATH1, "rb");if (fp == NULL) {cout << "數(shù)據(jù)文件不存在!" << endl;cout << "將為您初始化,請根據(jù)信息進(jìn)行輸入!" << endl;StudentHead = CreateStudentList(StudentHead);return StudentHead;}//讀取時先讀取第一個頭節(jié)點(diǎn)fread(StudentHead, sizeof(*StudentHead), 1, fp);p1 = new Student;int i = 0;while ((fread(p1, sizeof(*p1), 1, fp)) == 1) {i++;p1->next = NULL;p2->next = p1;p2 = p1;p1 = new Student;}if (i == 0) { cout << "空文件!" << endl; return StudentHead; }delete(p1);fclose(fp);cout << "讀取文件數(shù)據(jù)成功!" << endl;system("pause");system("cls");return StudentHead;
}//查詢一個班級的成績
void SearchClassGrade(LinkStudent StudentHead, LinkCourse CourseHead) {system("cls");cout << "您想要查看哪一班級的成績?" << endl;int Class;cin >> Class;Class *= 100;int AllStdNum = StudentHead->PersonalInformation.StudentNum;LinkStudent One, p = StudentHead->next;while (p) {if (p->PersonalInformation.StudentNum > Class) {break;}p = p->next;}for (int i = 0; i < AllStdNum; i++) {if (p->PersonalInformation.StudentNum > Class + 100)break;PersonalGrade_Search(p, CourseHead);p = p->next;}
}//查詢一個班級的選課情況
void SearchClassCourse(LinkStudent StudentHead, LinkCourse CourseHead) {system("cls");cout << "您想要查看哪一班級的選課情況?" << endl;int Class;cin >> Class;Class *= 100;int AllStdNum = StudentHead->PersonalInformation.StudentNum;LinkStudent p = StudentHead->next;while (p) {if (p->PersonalInformation.StudentNum > Class) {break;}p = p->next;}for (int i = 0; i < AllStdNum; i++) {if (p->PersonalInformation.StudentNum > Class + 100)break;PersonalCourse_Search(p,StudentHead,CourseHead);p = p->next;}
}//查詢成績
void SearchCourse(LinkStudent StudentHead, LinkCourse CourseHead) {char judge;char name[20];int tnum, num;int length;int i, j, id;LinkCourse copyhead = NULL, p = NULL;LinkStudent One;int flag = 0;while (1) {system("cls");cout << "您想要通過什么方式查看成績?" << endl;cout << "a:查看學(xué)生個人所有課程成績" << endl;cout << "b:按課程查看全部選課學(xué)生成績" << endl;cout << "c:按班級查看學(xué)生成績" << endl;cout << "#:返回上一層" << endl;cin >> judge;switch (judge){case'a':case 'A'://查看學(xué)生個人所有課程成績system("cls");int StdNum;cout << "請輸入查詢的學(xué)生學(xué)號: " << 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.按關(guān)鍵詞搜索課程" << 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 << "課程學(xué)分: " << p->SubCredits << endl;cout << "————————————————————" << endl;for (i = 0; i < StudentHead->PersonalInformation.StudentNum; i++) {if (p->Grade[i].Judge == 1) {cout << "學(xué)號: " << 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;
}//數(shù)據(jù)保存
void StoreData(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead) {StoreStudentList(StudentHead);StoreCourseList(CourseHead);AccountStore(UserAdministratorHead, UserTeacherHead, UserStudentHead);
};//管理員菜單
void Input_Administrator(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {char choose;while (1) {system("cls");cout << "————————————————————" << endl;cout << "當(dāng)前學(xué)生總數(shù):" << StudentHead->PersonalInformation.StudentNum << endl;cout << "當(dāng)前課程總數(shù):" << CourseHead->SubNum << endl;Begin();cin >> choose;switch (choose) {case '#'://退出程序cout << "退出成功歡迎下次使用!" << endl;return;case 'a': case 'A'://成績系統(tǒng)GradeSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case 'b': case 'B'://課程系統(tǒng)CourseSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case 'c': case 'C'://信息系統(tǒng)InformationSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case 'd': case 'D'://賬戶系統(tǒng)AccountSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case 'e': case 'E'://初始化Initialization(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);break;case '@'://保存數(shù)據(jù)StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);break;default:system("cls");cout << "請按正確格式輸入" << endl;system("pause");system("cls");break;}}
}
函數(shù)調(diào)用
#define _CRT_SECURE_NO_WARNINGS
#include <Stdio.h>
#include "結(jié)構(gòu)體.h"
#include <string>
#include <iostream>
#include<conio.h>
using namespace std;
#include<malloc.h>
#define OK 1
#define ERROR 0
#define InitStudentNum 1000
#define PATH1 "StudentData.text"
#define PATH2 "CourseData.text"
#define PATH3 "Teacher_Account.text"
#define PATH4 "Administrator_Account.text"
#define PATH5 "Student_Account.text"int main() {ios::sync_with_stdio(0), cin.tie(0);LinkStudent q,p,StudentHead;LinkCourse CourseHead = new Course;LinkUserAdministrator UserAdministratorHead=new UserAdministrator;LinkUserStudent UserStudentHead=new UserStudent;LinkUserTeacher UserTeacherHead=new UserTeacher;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);return 1;}else if (loginJudge == 'b') {Input_Teacher(StudentHead, CourseHead,UserTeacherHead,UserAdministratorHead,UserStudentHead);return 1;}else if (loginJudge == 'c' ) {Input_Administrator(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);return 1;}else if (loginJudge == '#') {cout << "請重新輸入!" << endl;system("pause");system("cls");}}return 0;
}