大学第一个设计,代码量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);
//删除账号
void AccountSystem_Delete(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//删除学生账号
LinkUserStudent StudentAccount_Delete(LinkUserStudent UserStudentHead);
//删除教师账号
LinkUserTeacher TeacherAccount_Delete(LinkUserTeacher UserTeacherHead);
//删除管理员账号
LinkUserAdministrator AdministratorAccount_Delete(LinkUserAdministrator UserAdministratorHead);
//修改密码
void Account_ChangePassword(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//修改学生密码
LinkUserStudent StudentAccount_ChangePassword(LinkUserStudent UserStudentHead);
//修改教师密码
LinkUserTeacher TeacherAccount_ChangePassword(LinkUserTeacher UserTeacherHead);
//修改管理员密码
LinkUserAdministrator AdministratorAccount_ChangePassword(LinkUserAdministrator UserAdministratorHead);
//保存账号
void AccountStore(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//读取账号
LinkUserAdministrator Administrator_AccountRead(LinkUserAdministrator UserAdministratorHead);
LinkUserTeacher Teacher_AccountRead(LinkUserTeacher UserTeacherHead);
LinkUserStudent Student_AccountRead(LinkUserStudent UserStudentHead);
//登录函数
char login(LinkUserAdministrator AdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//学生界面菜单
void Student_Begin();
//个人成绩查看
void PersonalGrade_Search(LinkStudent One, LinkCourse CourseHead);
//不及格课程查看
void SearchPersonalFailCourse(LinkStudent One, LinkCourse CourseHead);
//个人学分查看
void PersonalCreadits_Search(LinkStudent One);
//个人信息查看
void PersonalInformation_Search(LinkStudent One);
//个人课程查看
void PersonalCourse_Search(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead);
//选课中心
void PersonalCourse_Choose(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//个人信息修改
void ModifyPersonalInformation(LinkStudent One);
//学生输入界面
void Input_Student(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead);
//教师界面菜单
void Teacher_Begin();
//教师界面输入
void Input_Teacher(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead);
//添加学生个人
void PushStudent(LinkStudent StudentHead);
//修改学生个人信息
LinkStudent ModifyStudent(LinkStudent StudentHead);
//新建学生链表
LinkStudent CreateStudentList(LinkStudent StudentHead);
//存取学生链表数据
void StoreStudentList(LinkStudent StudentHead);
//删除学生函数
LinkStudent DeleteStudent(LinkStudent StudentHead);
//学生个人信息查看
void SearchInformation(LinkStudent StudentHead);
//学生个人信息录入
LinkStudent PnInformation(LinkStudent StudentHead);
//学生课程链表初始化,设置课程数量且将学号录入
LinkCourse InitCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//添加课程
void AddCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//删除课程函数
LinkCourse DeleteCoursse(LinkCourse CourseHead);
//修改课程信息
void ModifyCourse(LinkCourse CourseHead);
//课程评价
void CourseEvaluation_Operate(LinkCourse CourseHead);
//课程评价查看
void CourseEvaluation_Search(LinkCourse CourseHead);
//按班级录入选课信息
LinkCourse CourseSelection_entry(LinkCourse CourseHead);
//选课学生信息查看
void CourseSelection_view(LinkCourse CourseHead, LinkStudent StudentHead);
//查询学生的选课情况
void SearchStudentCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//查询一个班级的选课情况
void SearchClassCourse(LinkStudent StudentHead, LinkCourse CourseHead);
//查看课程信息
void CourseInformation_View(LinkCourse CourseHead);
//通过编号查看课程信息
void searchcourse(LinkCourse coursehead);
//存取课程链表数据(完成)
void StoreCourseList(LinkCourse CourseHead);
//学生课程成绩录入
void GradeInput(LinkCourse CourseHead, LinkStudent StudentHead);
//学生学分查询
void Creadits_Search(LinkStudent StudentHead);
//查询重修学生的课程
void SearchFailCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//查询课程重修
void Search_CourseRetake(LinkCourse CourseHead, LinkStudent StudentHead);
//按课程录入学生考试成绩。
void GradeInput_ThroughCourse(LinkCourse CourseHead, LinkStudent StudentHead);
//获取课程评价
void GetCourseEvaluation(LinkCourse Course);
//读取课程数据函数
LinkCourse ReadCourseList(LinkStudent StudentHead);
//菜单
void Begin();
//成绩系统菜单
void GradeSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//课程系统菜单
void CourseSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//信息系统菜单
void InformationSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//帐号系统菜单
void AccountSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//初始化菜单
void Initialization(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
//读取学生文件数据函数
LinkStudent ReadStudentList();
//查询一个班级的成绩
void SearchClassGrade(LinkStudent StudentHead, LinkCourse CourseHead);
//查询成绩
void SearchCourse(LinkStudent StudentHead, LinkCourse CourseHead);
//数据保存
void StoreData(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead);
//管理员菜单
void Input_Administrator(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead);
函数定义
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "结构体.h"
#include <iostream>
#include <string>
#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标志错误
return NULL;
}
if (p->PersonalInformation.StudentNum == StdNum)break;
//如果找到该学号即返回p
}
return p;
}
//复制课程链表
LinkCourse copyCourse(LinkCourse CourseHead) {
LinkCourse q, p, head1, tem = CourseHead;
head1 = new Course;
*head1 = *tem;
p = head1;
q = p;
tem = tem->next;
while (tem) {
p = new Course;
*p = *tem;
p->next = NULL;
q->next = p;
q = p;
tem = tem->next;
}
return head1;
}
//通过name字符关键词筛选CopyHead中符合条件的节点
LinkCourse NameCourse(LinkCourse CopyHead, char name[]) {
LinkCourse q, p = CopyHead;
q = p;
p = p->next;
int length = strlen(name);
int i = 0, tem, j = 0;
int vis = 0;
//循环整个copy链表
while (p) {
//循环节点的20个字符
while (j < 20) {
//如果和name[0]相同即开始比对
if (name[0] == p->SubName[j]) {
//定一个临时值存放 不修改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标志错误
return NULL;
}
//如果找到该编号即返回p
if (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'则录入tem
while (name[i] != '+' && name[i] != '\0') {
tem[j++] = name[i++];
}
//tem录入完后要在后面加一个'\0';
j++;
tem[j] = '\0';
//查找tem的链表
copyhead = NameCourse(copyhead, tem);
j = 0;
if (name[i] == '+') { i += 1; }
}
system("cls");
p = copyhead->next;
length = 0;
while (p) {
length++;
p = p->next;
}
copyhead->SubNum = length;
system("cls");
cout << "查询到有" << copyhead->SubNum << "个相关课程" << endl;
if (copyhead->SubNum == 0) {
system("pause");
system("cls");
return NULL;
}
int num = 1;
p = copyhead->next;
while (p) {
cout << "序号: " << num++ << endl;
cout << "课程编号: " << p->SubNum << endl;
cout << "课程名称: " << p->SubName << endl;
cout << "课程学分: " << p->SubCredits << endl;
cout << "————————————————————" << endl;
p = p->next;
}
if (copyhead->SubNum != 1) {
cout << "请通过课程序号选择" << endl;
cin >> num;
system("cls");
}
else {
num = 1;
}
p = copyhead;
while (num--) {
p = p->next;
if (p == NULL) { cout << "课程不存在!" << endl; return NULL; }
}
return p;
}
//通过关键词或编号得到课程
LinkCourse GetCourse(LinkCourse CourseHead) {
system("cls");
char judge;
char name[20];
int tnum, num;
int length;
int i, j, id;
LinkCourse copyhead = NULL, p = NULL;
while (1) {
cout << "您想要通过什么方式找到课程?" << endl;
cout << "a:按关键词搜索课程" << endl;
cout << "b:按编号搜索课程" << endl;
cout << "#:返回上一层" << endl;
cin >> judge;
switch (judge)
{
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 << "课程学分: " << 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'#':
return NULL;
default:cout << "请正确输入!" << endl;
system("pause");
system("cls");
}
}
}
//**************************************程序登录功能块**************************************
//录入管理员账号
LinkUserAdministrator EntryAdministrator(LinkUserAdministrator AdministratorHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return AdministratorHead;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
LinkUserAdministrator q = AdministratorHead, p = new UserAdministrator;
p->next = NULL;
while (1) {
if (q->next == NULL)break;
q = q->next;
}
q->next = p;
cout << "管理员成员创建成功!" << endl;
cout << "请设置账号" << endl;
cin >> p->Account;
cout << "请设置密码" << endl;
cin >> p->Password;
system("pause");
system("cls");
return AdministratorHead;
}
//录入教师账号
LinkUserTeacher EntryTeacher(LinkUserTeacher UserTeacherHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return UserTeacherHead;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
LinkUserTeacher q = UserTeacherHead, p = new UserTeacher;
p->next = NULL;
while (1) {
if (q->next == NULL)break;
q = q->next;
}
q->next = p;
cout << "教师成员创建成功!" << endl;
cout << "请设置账号" << endl;
cin >> p->Account;
cout << "请设置密码" << endl;
cin >> p->Password;
system("pause");
system("cls");
return UserTeacherHead;
}
//录入学生账号
LinkUserStudent EntryStudent(LinkUserStudent UserStudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return UserStudentHead;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
LinkUserStudent q = UserStudentHead, p = new UserStudent;
p->next = NULL;
while (1) {
if (q->next == NULL)break;
q = q->next;
}
q->next = p;
cout << "学生成员创建成功!" << endl;
cout << "请输入您的学号" << endl;
cin >> p->StudentNum;
cout << "请设置账号" << endl;
cin >> p->Account;
cout << "请设置密码" << endl;
cin >> p->Password;
system("pause");
system("cls");
return UserStudentHead;
}
//删除账号
void AccountSystem_Delete(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
char judge;
while (1) {
cout << "————————————————————" << endl;
cout << "| 请选择删除账号类型 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a.学生 |" << endl;
cout << "| b.教师 |" << endl;
cout << "| c.管理员 |" << endl;
cout << "————————————————————" << endl;
cin >> judge;
switch (judge)
{
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;
}
}
//修改密码
void Account_ChangePassword(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return;
default:
cout << "请重新输入!" << endl;
system("pause");
system("cls");
break;
}
if (Flag == 1)break;
}
system("cls");
char judge;
while (1) {
cout << "————————————————————" << endl;
cout << "| 请选择账号类型 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a.学生 |" << endl;
cout << "| b.教师 |" << endl;
cout << "| c.管理员 |" << endl;
cout << "————————————————————" << endl;
cin >> judge;
switch (judge)
{
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;
}
}
//保存账号
void AccountStore(LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
LinkUserAdministrator p = UserAdministratorHead;
LinkUserTeacher q = UserTeacherHead;
LinkUserStudent r = UserStudentHead;
cout << "正在存储数据" << endl;
if (UserAdministratorHead->next == NULL) { cout << "管理员账户数据不存在!" << endl; return; }
if (UserTeacherHead->next == NULL) { cout << "教师账户数据不存在!" << endl; return; }
if (UserStudentHead->next == NULL) { cout << "学生账户数据不存在!" << endl; return; }
FILE* fp = fopen(PATH4, "wb");
if (fp == NULL) { cout << "储存管理员数据失败!" << endl; return; }
//写入时也要把头节点写进去
while (p != NULL) {
fwrite(p, sizeof(UserAdministrator), 1, fp);
p = p->next;
}
cout << "存储管理员数据成功!" << endl;
fclose(fp);
fp = fopen(PATH3, "wb");
if (fp == NULL) { cout << "储存教师数据失败!" << endl; return; }
//写入时也要把头节点写进去
while (q != NULL) {
fwrite(q, sizeof(UserTeacher), 1, fp);
q = q->next;
}
cout << "存储教师数据成功!" << endl;
fclose(fp);
fp = fopen(PATH5, "wb");
if (fp == NULL) { cout << "储存学生数据失败!" << endl; return; }
//写入时也要把头节点写进去
while (r != NULL) {
fwrite(r, sizeof(UserStudent), 1, fp);
r = r->next;
}
cout << "存储学生数据成功!" << endl;
fclose(fp);
fp = NULL;
system("pause");
}
//读取账号
LinkUserAdministrator Administrator_AccountRead(LinkUserAdministrator UserAdministratorHead) {
cout << "正在读取管理员数据!" << endl;
LinkUserAdministrator p1, p2;
UserAdministratorHead = new UserAdministrator;
p2 = UserAdministratorHead;
UserAdministratorHead->next = NULL;
FILE* fp = fopen(PATH4, "rb");
int i;
if (fp == NULL) {
cout << "管理员数据文件不存在!" << endl;
cout << "将为您初始化,请根据信息进行输入!" << endl;
UserAdministratorHead = EntryAdministrator(UserAdministratorHead);
system("cls");
}
else {
//读取时先读取第一个头节点
fread(UserAdministratorHead, sizeof(*UserAdministratorHead), 1, fp);
p1 = new UserAdministrator;
i = 0;
while ((fread(p1, sizeof(*p1), 1, fp)) == 1) {
i++;
p1->next = NULL;
p2->next = p1;
p2 = p1;
p1 = new UserAdministrator;
}
if (i == 0) { cout << "空文件!" << endl; return UserAdministratorHead; }
delete(p1);
fclose(fp);
cout << "读取管理员数据成功!" << endl;
}
return UserAdministratorHead;
}
LinkUserTeacher Teacher_AccountRead(LinkUserTeacher UserTeacherHead) {
cout << "正在读取教师数据!" << endl;
LinkUserTeacher p3, p4;
UserTeacherHead = new UserTeacher;
p4 = UserTeacherHead;
UserTeacherHead->next = NULL;
FILE* fp = fopen(PATH3, "rb");
if (fp == NULL) {
cout << "教师数据文件不存在!" << endl;
cout << "将为您初始化,请根据信息进行输入!" << endl;
UserTeacherHead = EntryTeacher(UserTeacherHead);
system("cls");
}
else {
//读取时先读取第一个头节点
fread(UserTeacherHead, sizeof(*UserTeacherHead), 1, fp);
p3 = new UserTeacher;
int i = 0;
while ((fread(p3, sizeof(*p3), 1, fp)) == 1) {
i++;
p3->next = NULL;
p4->next = p3;
p4 = p3;
p3 = new UserTeacher;
}
if (i == 0) { cout << "空文件!" << endl; return UserTeacherHead; }
delete(p3);
fclose(fp);
cout << "读取教师数据成功!" << endl;
}
return UserTeacherHead;
}
LinkUserStudent Student_AccountRead(LinkUserStudent UserStudentHead) {
cout << "正在读取学生账户数据!" << endl;
LinkUserStudent p5, p6;
UserStudentHead = new UserStudent;
p6 = UserStudentHead;
UserStudentHead->next = NULL;
FILE* fp = fopen(PATH5, "rb");
int i;
if (fp == NULL) {
cout << "学生账户数据文件不存在!" << endl;
cout << "将为您初始化,请根据信息进行输入!" << endl;
system("pause");
UserStudentHead = EntryStudent(UserStudentHead);
system("cls");
return UserStudentHead;
}
else {
//读取时先读取第一个头节点
fread(UserStudentHead, sizeof(*UserStudentHead), 1, fp);
p5 = new UserStudent;
i = 0;
while ((fread(p5, sizeof(*p5), 1, fp)) == 1) {
i++;
p5->next = NULL;
p6->next = p5;
p6 = p5;
p5 = new UserStudent;
}
if (i == 0) { cout << "空文件!" << endl; return UserStudentHead; }
delete(p5);
fclose(fp);
cout << "读取学生数数据成功!" << endl;
}
system("pause");
system("cls");
return UserStudentHead;
}
//登录函数
char login(LinkUserAdministrator AdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead) {
char judge;
while (1) {
char cAccount[20], cPassword[20];
string Account, Password;
char flag;
int i;
cout << "————————————————————" << endl;
cout << "| 欢迎使用学生教务系统 |" << endl;
cout << "| 请选择账户类型登录 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a.学生 |" << endl;
cout << "| b.教师 |" << endl;
cout << "| c.管理员 |" << endl;
cout << "————————————————————" << endl;
cin >> judge;
char ch;
if (judge == 'a' || judge == 'A') {
cout << "请输入账号: ";
getchar();
i = 0;
while ((ch = _getch()) != '\r' && i <= 20) {
if (ch == '\b') {
if (i > 0) {
i--;
cout << "\b \b";
}
else {
putchar(7);
}
}
else {
cAccount[i++] = ch;
cout << "*";
}
}
cAccount[i] = '\0';
cout << endl;
cout << "请输入密码: ";
i = 0;
while ((ch = _getch()) != '\r' && i <= 20) {
if (ch == '\b') {
if (i > 0) {
i--;
cout << "\b \b";
}
else {
putchar(7);
}
}
else {
cPassword[i++] = ch;
cout << "*";
}
}
cPassword[i] = '\0';
Password = cPassword;
Account = cAccount;
cout << endl;
LinkUserStudent p = UserStudentHead->next;
while (1) {
if (!p->Account.compare(Account)) {
if (!p->Password.compare(Password)) {
cout << "登录成功!" << endl;
//将该学生学号返回到头指针学号
UserStudentHead->StudentNum = p->StudentNum;
system("pause");
system("cls");
flag = 'a';
return flag;
}
}
p = p->next;
if (!p) {
cout << "账户或密码错误!" << endl;
flag = '#';
return flag;
}
}
}
else if (judge == 'b' || judge == 'B') {
cout << "请输入账号: ";
getchar();
i = 0;
while ((ch = _getch()) != '\r' && i <= 20) {
if (ch == '\b') {
if (i > 0) {
i--;
cout << "\b \b";
}
else {
putchar(7);
}
}
else {
cAccount[i++] = ch;
cout << "*";
}
}
cAccount[i] = '\0';
cout << endl;
cout << "请输入密码: ";
i = 0;
while ((ch = _getch()) != '\r' && i <= 20) {
if (ch == '\b') {
if (i > 0) {
i--;
cout << "\b \b";
}
else {
putchar(7);
}
}
else {
cPassword[i++] = ch;
cout << "*";
}
}
cPassword[i] = '\0';
Password = cPassword;
Account = cAccount;
cout << endl;
LinkUserTeacher p = UserTeacherHead->next;
while (1) {
if (!p->Account.compare(Account)) {
if (!p->Password.compare(Password)) {
cout << "登录成功!" << endl;
system("pause");
system("cls");
flag = 'b';
return flag;
}
}
p = p->next;
if (!p) {
cout << "账户或密码错误!" << endl;
flag = '#';
return flag;
}
}
}
else if (judge == 'c' || judge == 'C') {
cout << "请输入账号: ";
getchar();
i = 0;
while ((ch = _getch()) != '\r' && i <= 20) {
if (ch == '\b') {
if (i > 0) {
i--;
cout << "\b \b";
}
else {
putchar(7);
}
}
else {
cAccount[i++] = ch;
cout << "*";
}
}
cAccount[i] = '\0';
cout << endl;
cout << "请输入密码: ";
i = 0;
while ((ch = _getch()) != '\r' && i <= 20) {
if (ch == '\b') {
if (i > 0) {
i--;
cout << "\b \b";
}
else {
putchar(7);
}
}
else {
cPassword[i++] = ch;
cout << "*";
}
}
cPassword[i] = '\0';
Password = cPassword;
Account = cAccount;
cout << endl;
LinkUserAdministrator p = AdministratorHead->next;
while (1) {
if (!p->Account.compare(Account)) {
if (!p->Password.compare(Password)) {
cout << "登录成功!" << endl;
system("pause");
system("cls");
flag = 'c';
return flag;
}
}
p = p->next;
if (!p) {
cout << "账户或密码错误!" << endl;
flag = '#';
return flag;
}
}
}
cout << "请重新输入!" << endl;
system("pause");
system("cls");
}
}
//**************************************学生权限功能块**************************************
//学生界面菜单
void Student_Begin() {
cout << "————————————————————" << endl;
cout << "| 请输入数字进行操作 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a:个人成绩查看 |" << endl;
cout << "| b:个人不及格课程查看 |" << endl;
cout << "| c:个人学分查看 |" << endl;
cout << "| d:个人课程查看 |" << endl;
cout << "| e:个人信息查看 |" << endl;
cout << "| f:个人信息修改 |" << endl;
cout << "| g:查询课程信息 |" << endl;
cout << "| h:选课中心 |" << endl;
cout << "| i:课程评价 |" << endl;
cout << "| j:课程评价查看 |" << endl;
cout << "| k:个人账户密码修改 |" << endl;
cout << "| @:保存数据 |" << endl;
cout << "| #:退出程序 |" << endl;
cout << "————————————————————" << endl;
}
//个人成绩查看
void PersonalGrade_Search(LinkStudent One, LinkCourse CourseHead) {
system("cls");
LinkCourse p = CourseHead;
int i;
int StdNum = One->PersonalInformation.StudentNum;
int Subcase = CourseHead->SubNum;
cout << "————————————————————" << endl;
cout << "学号: " << One->PersonalInformation.StudentNum << endl;
cout << "姓名: " << One->PersonalInformation.StudentName << endl;
cout << "————————————————————" << endl;
while (Subcase--) {
p = p->next;
for (i = 0; i < InitStudentNum; i++) {
if (p->Grade[i].StudentNum == StdNum) {
break;
}
}
if (p->Grade[i].Judge == 1) {
cout << "课程名称: " << p->SubName << endl;
cout << "课程学分: " << p->SubCredits << endl;
cout << "重修次数: " << p->Grade[i].Retake << endl;
cout << "平时成绩为" << p->Grade[i].OrdinaryGrade << endl;
cout << "考试成绩为" << p->Grade[i].TestGrade << endl;
cout << "总成绩为" << p->Grade[i].TotalGrade << endl;
cout << "————————————————————" << endl;
}
}
system("pause");
system("cls");
}
//查询重修学生的课程
void SearchFailCourse(LinkCourse CourseHead,LinkStudent StudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
cout << "请输入查询的学生学号: " << endl;
int StdNum;
cin >> StdNum;
LinkStudent One;
One = SearchStudent(StdNum, StudentHead);
//如果搜索不到学生
if (One == NULL)return;
SearchPersonalFailCourse(One, CourseHead);
}
//查询个人的重修课程
void SearchPersonalFailCourse(LinkStudent One, LinkCourse CourseHead) {
LinkCourse p = CourseHead;
int i;
int StdNum = One->PersonalInformation.StudentNum;
int Subcase = CourseHead->SubNum;
cout << "————————————————————" << endl;
cout << "学号: " << One->PersonalInformation.StudentNum << endl;
cout << "姓名: " << One->PersonalInformation.StudentName << endl;
cout << "————————————————————" << endl;
while (Subcase--) {
p = p->next;
for (i = 0; i < InitStudentNum; i++) {
if (p->Grade[i].StudentNum == StdNum) {
break;
}
}
if (p->Grade[i].TestGrade < 60 && p->Grade[i].Judge == 1) {
cout << "课程名称: " << p->SubName << endl;
cout << "课程学分: " << p->SubCredits << endl;
cout << "重修次数: " << p->Grade[i].Retake << endl;
cout << "平时成绩为" << p->Grade[i].OrdinaryGrade << endl;
cout << "考试成绩为" << p->Grade[i].TestGrade << endl;
cout << "总成绩为" << p->Grade[i].TotalGrade << endl;
cout << "————————————————————" << endl;
}
}
system("pause");
system("cls");
}
//个人学分查看
void PersonalCreadits_Search(LinkStudent One) {
system("cls");
cout << "————————————————————" << endl;
cout << "您所获得的学分是: " << One->StudentCredits << endl;
cout << "————————————————————" << endl;
system("pause");
};
//个人信息查看
void PersonalInformation_Search(LinkStudent One) {
system("cls");
cout << "————————————————————" << endl;
cout << " 学生学号:" << One->PersonalInformation.StudentNum << endl;
cout << " 学生姓名:" << One->PersonalInformation.StudentName << endl;
cout << " 学生性别:" << One->PersonalInformation.StudentSex << endl;
cout << " 学生年龄:" << One->PersonalInformation.StudentAge << endl;
cout << " 学生宿舍地址:" << One->PersonalInformation.StudentDorm << endl;
cout << " 学生手机号码:" << One->PersonalInformation.StudentPhone << endl;
cout << "————————————————————" << endl;
system("pause");
system("cls");
}
//个人课程查看
void PersonalCourse_Search(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead) {
int StudentNum = StudentHead->PersonalInformation.StudentNum;
int StudentId = One->PersonalInformation.StudentNum;
system("cls");
cout << "————————————————————" << endl;
cout <<StudentId<< "拥有的课程: " << endl;
cout << "————————————————————" << endl;
LinkCourse p = CourseHead->next;
int num = 1;
while (1) {
for (int j = 0; j < StudentNum; j++) {
if (p->Grade[j].StudentNum == StudentId) {
if (p->Grade[j].Judge == 1) {
cout << num++ << ". " << p->SubName << endl;
cout << "————————————————————" << endl;
cout << "编号为" << p->SubNum << "的课程:" << endl;
cout << "课程学分:" << p->SubCredits << endl;
cout << "任课老师:" << p->Teacher << endl;
cout << "任课地点:" << p->Position << endl;
cout << "任课时间:" << p->Time << endl;
cout << "————————————————————" << endl;
}
}
}
p = p->next;
if (!p)break;
}
system("pause");
};
//选课中心
void PersonalCourse_Choose(LinkStudent One, LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead) {
//学生总人数
int StudentNum = StudentHead->PersonalInformation.StudentNum;
//学生个人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");
}
//个人信息修改
void ModifyPersonalInformation(LinkStudent One) {
char judge;
PersonalInformation_Search(One);
while (1) {
system("cls");
cout << "————————————————————" << endl;
cout << "请输入需要修改的选项" << endl;
cout << "————————————————————" << endl;
cout << "| a:学生名字 |" << endl;
cout << "| b:学生性别 |" << endl;
cout << "| c:学生年龄 |" << endl;
cout << "| d:学生宿舍 |" << endl;
cout << "| e:学生手机号码 |" << endl;
cout << "| #:返回上一层 |" << endl;
cout << "————————————————————" << endl;
cin >> judge;
switch (judge)
{
case '#':
//返回上一层
return;
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;
}
}
}
//学生输入界面
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':
//查询学生重修课程
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;
}
}
}
//**************************************教师权限功能块**************************************
//教师界面菜单
void Teacher_Begin() {
cout << "————————————————————" << endl;
cout << "| 请输入数字进行操作 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a:学生成绩录入 |" << endl;
cout << "| b:学生成绩查看 |" << endl;
cout << "| c:查询学生重修课程 |" << endl;
cout << "| d:查询课程重修学生 |" << endl;
cout << "| e:学生个人信息查看 |" << endl;
cout << "| f:课程信息修改 |" << endl;
cout << "| g:查看选课信息 |" << endl;
cout << "| h:查看课程信息 |" << endl;
cout << "| i:查看课程评价 |" << endl;
cout << "| j:修改账户密码 |" << endl;
cout << "| @:保存数据 |" << endl;
cout << "| #:退出程序 |" << endl;
cout << "————————————————————" << endl;
}
//教师界面输入
void Input_Teacher(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserTeacher UserTeacherHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead) {
char choose;
while (1) {
system("cls");
cout << "————————————————————" << endl;
cout << "当前学生总数:" << StudentHead->PersonalInformation.StudentNum << endl;
cout << "当前课程总数:" << CourseHead->SubNum << endl;
Teacher_Begin();
cin >> choose;
switch (choose) {
case '#':
//退出程序
cout << "退出成功欢迎下次使用!" << endl;
return;
case 'a': case 'A':
//学生成绩录入
GradeInput(CourseHead, StudentHead);
break;
case 'b': case 'B':
//学生成绩查看
SearchCourse(StudentHead, CourseHead);
break;
case 'c': case 'C':
//查询学生重修课程
SearchFailCourse(CourseHead, StudentHead);
break;
case 'd': case 'D':
//查询课程重修学生
Search_CourseRetake(CourseHead, StudentHead);
break;
case 'e': case 'E':
//学生个人信息查看
SearchInformation(StudentHead);
break;
case 'F':case 'f':
//课程信息修改
ModifyCourse(CourseHead);
break;
case 'g':case 'G':
//查看选课信息
CourseSelection_view(CourseHead, StudentHead);
break;
case 'h':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;
}
}
}
//**************************************学生信息基础功能块**************************************
//添加学生个人
void PushStudent(LinkStudent StudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
LinkStudent std, p = StudentHead;
std = new Student;
//首先定义next要置空
std->next = NULL;
int Class;
cout << "请输入该学生所在班级:" << endl;
cin >> Class;
//找到最后该班学号最后一个
while (p->next->PersonalInformation.StudentNum < (100 * (Class + 1))) {
p = p->next;
if (p->next == NULL) {
//如果到了尽头,即判断最后一个是否满足
//如果不满足即不存在该班级
if (p->PersonalInformation.StudentNum < (100 * Class)) {
cout << "添加失败,该班级不存在!" << endl;
system("pause");
system("cls");
return;
}
else {
//满足就连接到链表末尾
std->PersonalInformation.StudentNum = p->PersonalInformation.StudentNum + 1;
//学生总数+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 = new Student;
p->next = NULL;
//学号直接初始化
p->PersonalInformation.StudentNum = num + hundred;
//将学生链表连接起来
q->next = p;
q = p;
//如果num到达该班人数则
num++;
if (num > ClassStdNum) {
num = 1;
hundred += 100;
}
}
cout << "学生信息初始化完成" << endl;
system("pause");
system("cls");
return StudentHead;
}
//存取学生链表数据
void StoreStudentList(LinkStudent StudentHead) {
system("cls");
cout << "正在存储学生数据" << endl;
if (StudentHead->next == NULL) { cout << "该学生信息表不存在!" << endl; return; }
LinkStudent p;
p = StudentHead;
FILE* fp = fopen(PATH1, "wb");
if (fp == NULL) { cout << "储存文件失败!" << endl; return; }
//写入时也要把头节点写进去
while (p != NULL) {
fwrite(p, sizeof(Student), 1, fp);
p = p->next;
}
cout << "存储学生数据成功!" << endl;
fclose(fp);
fp = NULL;
system("pause");
system("cls");
}
//删除学生函数
LinkStudent DeleteStudent(LinkStudent StudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return StudentHead;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
cout << "请输入要删除的学生学号" << endl;
int StdNum;
cin >> StdNum;
LinkStudent q, p;
q = p = StudentHead;
while (p) {
q = p;
p = p->next;
if (!p) {
cout << "学号不存在!" << endl;
system("pause");
system("cls");
//如果不存在返回NULL标志错误
return NULL;
}
//如果找到该学号即返回p
if (p->PersonalInformation.StudentNum == StdNum)break;
}
q->next = p->next;
//p->next = NULL;
//delete(p);
StudentHead->PersonalInformation.StudentNum--;
cout << "删除成功!" << endl;
system("pause");
system("cls");
return StudentHead;
}
//学生个人信息查看
void SearchInformation(LinkStudent StudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
cout << "查看的学生学号是" << endl;
int StdNum;
cin >> StdNum;
LinkStudent p;
if ((p = SearchStudent(StdNum, StudentHead)) == NULL) {
return;
}
cout << "该学生姓名:" << p->PersonalInformation.StudentName << endl;
cout << "该学生性别:" << p->PersonalInformation.StudentSex << endl;
cout << "该学生年龄:" << p->PersonalInformation.StudentAge << endl;
cout << "该学生宿舍地址:" << p->PersonalInformation.StudentDorm << endl;
cout << "该学生手机号码:" << p->PersonalInformation.StudentPhone << endl;
system("pause");
system("cls");
}
//学生个人信息录入
LinkStudent PnInformation(LinkStudent StudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return StudentHead;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
int StdNum;
cout << "请输入录入个人信息的学生学号" << endl;
cin >> StdNum;
LinkStudent p;
if ((p = SearchStudent(StdNum, StudentHead)) == NULL) {
return StudentHead;
}
cout << "请填写该学生姓名(张三):" << endl;
cout << "请填写该学生性别(男/女):" << endl;
cout << "请填写该学生年龄:" << endl;
cout << "请填写该学生宿舍地址(泰山区xx栋xxx):" << endl;
cout << "请填写该学生手机号码:" << endl;
cin >> p->PersonalInformation.StudentName;
cin >> p->PersonalInformation.StudentSex;
cin >> p->PersonalInformation.StudentAge;
cin >> p->PersonalInformation.StudentDorm;
cin >> p->PersonalInformation.StudentPhone;
cout << "填写成功!记得保存信息哦!" << endl;
system("pause");
system("cls");
return StudentHead;
}
//**************************************课程基础功能块**************************************
//学生课程链表初始化,设置课程数量且将学号录入
LinkCourse InitCourse(LinkCourse CourseHead, LinkStudent StudentHead) {
system("cls");
cout << "您是否要进行课程初始化?(Y/N)" << endl;
cout << "课程初始化前一定要设置好学生名单哦!" << endl;
char judge;
cin >> judge;
if (judge == 'N' || judge == 'n')return CourseHead;
system("cls");
cout << "请输入开设课程数量:" << endl;
int Num;
cin >> Num;
//课程头节点存放课程数量
CourseHead->SubNum = Num;
LinkCourse p2, p1;
p2 = CourseHead;
system("cls");
for (int i = 1; i <= Num; i++) {
p1 = new Course;
p1->next = NULL;
p1->SubNum = i;
cout << "系统已分配课程编号为 " << p1->SubNum << endl;
cout << "请设置开设课程编号名称: " << endl;
cin >> p1->SubName;
cout << "请设置该课程的学分: " << endl;
cin >> p1->SubCredits;
p2->next = p1;
p2 = p1;
system("cls");
}
p2 = CourseHead->next;
LinkStudent ps = StudentHead->next;
int n = StudentHead->PersonalInformation.StudentNum;
int i = 0;
while (p2) {
while (ps) {
p2->Grade[i].StudentNum = ps->PersonalInformation.StudentNum;
ps = ps->next;
i++;
}
ps = StudentHead->next;
p2 = p2->next;
i = 0;
}
cout << "课程初始化成功!" << endl;
system("pause");
system("cls");
return CourseHead;
}
//添加课程
void AddCourse(LinkCourse CourseHead, LinkStudent StudentHead) {
system("cls");
char Judge;
int Flag = 0;
while (1) {
cout << "是否要进行操作?(Y/N)" << endl;
cin >> Judge;
switch (Judge)
{
case 'Y':case 'y':
Flag = 1;
break;
case 'N':case 'n':
return;
default:
cout << "请重新输入!" << endl;
system("pause");
break;
}
if (Flag == 1)break;
}
system("cls");
LinkCourse newcourse = new Course;
newcourse->next = NULL;
LinkCourse p = SearchCourseID(CourseHead->SubNum, CourseHead);
p->next = newcourse;
CourseHead->SubNum++;
newcourse->SubNum = CourseHead->SubNum;
cout << "已分配该课程编号为: " << CourseHead->SubNum << endl;
cout << "————————————————————" << endl;
cout << "请输入添加课程的名字:" << endl;
cin >> newcourse->SubName;
cout << "请输入添加课程的学分:" << endl;
cin >> newcourse->SubCredits;
cout << "请输入添加课程的任课老师:" << endl;
cin >> newcourse->Teacher;
cout << "请输入添加课程的任课地点:" << endl;
cin >> newcourse->Position;
cout << "请输入添加课程的任课时间:" << endl;
cin >> newcourse->Time;
//分配成绩的学号
LinkStudent ps = StudentHead;
int i = 0;
while (ps) {
newcourse->Grade[i].StudentNum = ps->PersonalInformation.StudentNum;
ps = ps->next;
i++;
}
cout << "添加成功!" << endl;
system("pause");
system("cls");
}
//删除课程函数
LinkCourse DeleteCoursse(LinkCourse CourseHead) {
LinkCourse q, p;
q = p = CourseHead;
system("cls");
cout << "您想要通过什么方式找到课程?" << endl;
cout << "a:课程关键词搜索" << endl;
cout << "b:课程编号搜索" << endl;
cout << "#:返回上一层" << endl;
char judge;
int id;
int flag = 0;
while (1) {
cin >> judge;
switch (judge)
{
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标志错误
return NULL;
}
//如果找到该编号即返回p
if (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;
}
//修改课程信息
void ModifyCourse(LinkCourse CourseHead) {
LinkCourse p = CourseHead;
int flag = 0, id;
char judge;
while(1){
system("cls");
cout << "您想要通过什么方式找到课程?" << endl;
cout << "a:课程关键词搜索" << endl;
cout << "b:课程编号搜索" << endl;
cout << "#:返回上一层" << endl;
cin >> judge;
switch (judge)
{
case'#':
return;
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;
}
}
}
//课程评价
void CourseEvaluation_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");
}
//课程评价查看
void CourseEvaluation_Search(LinkCourse CourseHead) {
LinkCourse p = CourseHead;
system("cls");
cout << "您想要通过什么方式找到课程?" << endl;
cout << "a:课程关键词搜索" << endl;
cout << "b:课程编号搜索" << endl;
cout << "#:返回上一层" << endl;
char judge;
int id;
int flag = 0;
while (1) {
cin >> judge;
switch (judge)
{
case'#':
return;
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;
}
}
else if (select == 0) {
if (p->Grade[j].Judge == 1) {
cout << "该学生将退选课程!" << endl;
p->Grade[j].Judge = 0;
p->Capacity--;
system("pause");
break;
}
break;
}
else {
cout << "请正确输入!" << endl;
}
}
j++;
}
cout << "输入成功!" << endl;
system("pause");
system("cls");
return CourseHead;
}
//查询选课情况
void CourseSelection_view(LinkCourse CourseHead, LinkStudent StudentHead) {
system("cls");
char judge;
int 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;
}
//查询学生的选课情况
void SearchStudentCourse(LinkCourse CourseHead, LinkStudent StudentHead) {
system("cls");
char judge;
int j = 0, num = StudentHead->PersonalInformation.StudentNum;
LinkCourse p;
LinkStudent One;
int StudentNum;
while (1) {
cout << "请选择查询模式" << endl;
cout << "a.按班查询学生选课情况" << endl;
cout << "b.查询学生个人选课情况" << endl;
cout << "#.返回上一层" << endl;
cin >> judge;
int flag = 0;
switch (judge) {
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;
}
}
//查看课程信息
void CourseInformation_View(LinkCourse CourseHead) {
LinkCourse p = CourseHead;
system("cls");
cout << "您想要通过什么方式找到课程?" << endl;
cout << "a:课程关键词搜索" << endl;
cout << "b:课程编号搜索" << endl;
cout << "#:返回上一层" << endl;
char judge;
int id;
cin >> judge;
switch (judge)
{
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");
}
//通过编号查看课程信息
void searchcourse(LinkCourse coursehead) {
system("cls");
cout << "请输入查看的课程编号:" << endl;
int coursenum;
cin >> coursenum;
LinkCourse p;
p = SearchCourseID(coursenum, coursehead);
if (p == NULL)return;
cout << "编号为" << coursenum << "的课程:" << endl;
cout << "课程名称:" << p->SubName << endl;
cout << "课程学分:" << p->SubCredits << endl;
system("pause");
system("cls");
}
//存取课程链表数据(完成)
void StoreCourseList(LinkCourse CourseHead) {
cout << "正在存储课程数据" << endl;
if (CourseHead->next == NULL) { cout << "课程信息表不存在!" << endl; return; }
LinkCourse p;
p = CourseHead;
FILE* fp = fopen(PATH2, "wb");
if (fp == NULL) { cout << "储存文件失败!" << endl; return; }
//写入时也要把头节点写进去
while (p != NULL) {
fwrite(p, sizeof(Course), 1, fp);
p = p->next;
}
cout << "存储课程数据成功!" << endl;
fclose(fp);
fp = NULL;
system("pause");
system("cls");
}
//学生课程成绩录入
void GradeInput(LinkCourse CourseHead, LinkStudent StudentHead) {
LinkCourse p = CourseHead;
char judge;
int id;
int flag = 0;
while (1) {
system("cls");
cout << "您想要通过什么方式录入成绩?" << endl;
cout << "a:按课程对全部选课学生进行录入" << endl;
cout << "b:按课程对个别选课学生进行录入" << endl;
cout << "#:返回上一层" << endl;
cin >> judge;
switch (judge)
{
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");
}
//学生学分查询
void Creadits_Search(LinkStudent StudentHead) {
char judge;
int i, j;
LinkStudent One = StudentHead;
int flag;
while (1) {
system("cls");
cout << "请选择查询成绩功能" << endl;
cout << "a.按班统计学生学分" << endl;
cout << "b.按学生学号查询学分" << endl;
cout << "#:返回上一层" << endl;
cin >> judge;
switch (judge)
{
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;
}
}
};
//查询课程重修
void Search_CourseRetake(LinkCourse CourseHead, LinkStudent StudentHead) {
system("cls");
char judge;
int flag = 0;
LinkCourse copyhead = NULL, p = NULL;
int id, i;
while (1) {
cout << "请选择查询课程功能" << endl;
cout << "a.按关键词搜索课程" << endl;
cout << "b.按编号搜索课程" << endl;
cout << "#:返回上一层" << endl;
cin >> judge;
switch (judge)
{
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");
};
//按课程录入学生考试成绩。
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.按关键词搜索课程" << 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");
};
//获取该课课程评价
void GetCourseEvaluation(LinkCourse Course) {
int i = 0;
cout << "————————————————————" << endl;
cout << "| 课程评价 |" << endl;
cout << "|———————————————————|" << endl;
while (strlen(Course->Evaluation[i]) > 0) {
cout << i + 1 << "." << Course->Evaluation[i] << endl;
cout << "|———————————————————|" << endl;
i++;
}
}
//读取课程数据函数
LinkCourse ReadCourseList(LinkStudent StudentHead) {
cout << "正在读取课程数据!" << endl;
LinkCourse p1, p2, CourseHead = new Course;
p2 = CourseHead;
CourseHead->next = NULL;
FILE* fp = fopen(PATH2, "rb");
if (fp == NULL) {
cout << "数据文件不存在!" << endl;
cout << "将为您初始化,请根据信息进行输入!" << endl;
system("pause");
CourseHead = InitCourse(CourseHead, StudentHead);
return CourseHead;
}
//读取时先读取第一个头节点
fread(CourseHead, sizeof(*CourseHead), 1, fp);
p1 = new Course;
int i = 0;
while ((fread(p1, sizeof(*p1), 1, fp)) == 1) {
i++;
p1->next = NULL;
p2->next = p1;
p2 = p1;
p1 = new Course;
}
if (i == 0) { cout << "空文件!" << endl; return CourseHead; }
delete(p1);
fclose(fp);
cout << "读取文件数据成功!" << endl;
system("pause");
system("cls");
return CourseHead;
}
//菜单
void Begin() {
cout << "————————————————————" << endl;
cout << "| 请输入数字进行操作 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a:成绩系统 |" << endl;
cout << "| b:课程系统 |" << endl;
cout << "| c:信息系统 |" << endl;
cout << "| d:账号系统 |" << endl;
cout << "| e:初始化 |" << endl;
cout << "| @:数据保存 |" << endl;
cout << "| #:退出程序 |" << endl;
cout << "————————————————————" << endl;
}
//成绩系统菜单
void GradeSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
char choose;
while (1) {
system("cls");
cout << "————————————————————" << endl;
cout << "当前学生总数:" << StudentHead->PersonalInformation.StudentNum << endl;
cout << "当前课程总数:" << CourseHead->SubNum << endl;
cout << "————————————————————" << endl;
cout << "| 请输入数字进行操作 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a:学生成绩录入 |" << endl;
cout << "| b:学生成绩查询 |" << endl;
cout << "| c:查询课程重修学生 |" << endl;
cout << "| d:查询学生不及格课程 |" << endl;
cout << "| e:查询学生学分 |" << endl;
cout << "| @:数据保存 |" << endl;
cout << "| #:返回上一层 |" << endl;
cout << "————————————————————" << endl;
cin >> choose;
switch (choose) {
case '#':
//返回上一层
return;
case 'a': case 'A':
//学生成绩录入
GradeInput(CourseHead, StudentHead);
break;
case 'b': case 'B':
//学生成绩查看
SearchCourse(StudentHead, CourseHead);
break;
case 'c': case 'C':
//查询课程重修学生
Search_CourseRetake(CourseHead, StudentHead);
break;
case 'd': case 'D':
//查询学生不及格课程
system("cls");
cout << "请输入查询的学生学号: " << endl;
int StdNum;
cin >> StdNum;
LinkStudent One;
One = SearchStudent(StdNum, StudentHead);
if (One == NULL)return;
SearchPersonalFailCourse(One, CourseHead);
break;
case 'e': case 'E':
//查询学分
Creadits_Search(StudentHead);
break;
case '@':
//保存数据
StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);
break;
default:
system("cls");
cout << "请按正确格式输入" << endl;
system("pause");
system("cls");
break;
}
}
}
//课程系统菜单
void CourseSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
char choose;
while (1) {
system("cls");
cout << "————————————————————" << endl;
cout << "当前学生总数:" << StudentHead->PersonalInformation.StudentNum << endl;
cout << "当前课程总数:" << CourseHead->SubNum << endl;
cout << "————————————————————" << endl;
cout << "| 请输入数字进行操作 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a:课程初始化 |" << endl;
cout << "| b:修改课程信息 |" << endl;
cout << "| c:添加课程 |" << endl;
cout << "| d:删除课程 |" << endl;
cout << "| e:按班级录入选课信息 |" << endl;
cout << "| f:查询选课情况 |" << endl;
cout << "| g:查询课程信息 |" << endl;
cout << "| h:课程重修查看 |" << endl;
cout << "| i:课程评价 |" << endl;
cout << "| j:课程评价查看 |" << endl;
cout << "| @:数据保存 |" << endl;
cout << "| #:返回上一层 |" << endl;
cout << "————————————————————" << endl;
cin >> choose;
switch (choose) {
case '#':
//返回上一层
return;
case 'a': case 'A':
//课程初始化
InitCourse(CourseHead, StudentHead);
break;
case 'b': case 'B':
//修改课程
ModifyCourse(CourseHead);
break;
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;
}
}
}
//信息系统菜单
void InformationSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
char choose;
while (1) {
system("cls");
cout << "————————————————————" << endl;
cout << "当前学生总数:" << StudentHead->PersonalInformation.StudentNum << endl;
cout << "当前课程总数:" << CourseHead->SubNum << endl;
cout << "————————————————————" << endl;
cout << "| 请输入数字进行操作 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a:学生个人信息录入 |" << endl;
cout << "| b:学生个人信息查看 |" << endl;
cout << "| c:学生个人添加 |" << endl;
cout << "| d:学生个人删除 |" << endl;
cout << "| e:学生个人修改 |" << endl;
cout << "| @:数据保存 |" << endl;
cout << "| #:返回上一层 |" << endl;
cout << "————————————————————" << endl;
cin >> choose;
switch (choose) {
case '#':
//返回上一层
return;
case 'a': case 'A':
//学生个人信息录入
StudentHead = PnInformation(StudentHead);
break;
case 'b': case 'B':
//学生个人信息查看
SearchInformation(StudentHead);
break;
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;
}
}
}
//帐号系统菜单
void AccountSystem_Begin(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
char choose;
while (1) {
system("cls");
cout << "————————————————————" << endl;
cout << "当前学生总数:" << StudentHead->PersonalInformation.StudentNum << endl;
cout << "当前课程总数:" << CourseHead->SubNum << endl;
cout << "————————————————————" << endl;
cout << "| 请输入数字进行操作 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a:读取账号 |" << endl;
cout << "| b:添加管理员帐号 |" << endl;
cout << "| c:添加教师账号 |" << endl;
cout << "| d:添加学生账号 |" << endl;
cout << "| e:删除账号 |" << endl;
cout << "| f:修改密码 |" << endl;
cout << "| @:数据保存 |" << endl;
cout << "| #:返回上一层 |" << endl;
cout << "————————————————————" << endl;
cin >> choose;
switch (choose) {
case '#':
//返回上一层
return;
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;
}
}
}
//初始化菜单
void Initialization(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
system("cls");
char choose;
while (1) {
cout << "————————————————————" << endl;
cout << "当前学生总数:" << StudentHead->PersonalInformation.StudentNum << endl;
cout << "当前课程总数:" << CourseHead->SubNum << endl;
cout << "————————————————————" << endl;
cout << "| 请输入数字进行操作 |" << endl;
cout << "|———————————————————|" << endl;
cout << "| a:初始化学生数据 |" << endl;
cout << "| b:初始化课程数据 |" << endl;
cout << "| @:保存数据 |" << endl;
cout << "| #:返回上一层 |" << endl;
cout << "————————————————————" << endl;
cin >> choose;
switch (choose) {
case '#':
//返回上一层
return;
case 'a': case 'A':
//初始化学生信息
StudentHead = CreateStudentList(StudentHead);
break;
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 = new Student;
p2 = StudentHead;
StudentHead->next = NULL;
FILE* fp = fopen(PATH1, "rb");
if (fp == NULL) {
cout << "数据文件不存在!" << endl;
cout << "将为您初始化,请根据信息进行输入!" << endl;
StudentHead = CreateStudentList(StudentHead);
return StudentHead;
}
//读取时先读取第一个头节点
fread(StudentHead, sizeof(*StudentHead), 1, fp);
p1 = new Student;
int i = 0;
while ((fread(p1, sizeof(*p1), 1, fp)) == 1) {
i++;
p1->next = NULL;
p2->next = p1;
p2 = p1;
p1 = new Student;
}
if (i == 0) { cout << "空文件!" << endl; return StudentHead; }
delete(p1);
fclose(fp);
cout << "读取文件数据成功!" << endl;
system("pause");
system("cls");
return StudentHead;
}
//查询一个班级的成绩
void SearchClassGrade(LinkStudent StudentHead, LinkCourse CourseHead) {
system("cls");
cout << "您想要查看哪一班级的成绩?" << endl;
int Class;
cin >> Class;
Class *= 100;
int AllStdNum = StudentHead->PersonalInformation.StudentNum;
LinkStudent One, p = StudentHead->next;
while (p) {
if (p->PersonalInformation.StudentNum > Class) {
break;
}
p = p->next;
}
for (int i = 0; i < AllStdNum; i++) {
if (p->PersonalInformation.StudentNum > Class + 100)break;
PersonalGrade_Search(p, CourseHead);
p = p->next;
}
}
//查询一个班级的选课情况
void SearchClassCourse(LinkStudent StudentHead, LinkCourse CourseHead) {
system("cls");
cout << "您想要查看哪一班级的选课情况?" << endl;
int Class;
cin >> Class;
Class *= 100;
int AllStdNum = StudentHead->PersonalInformation.StudentNum;
LinkStudent p = StudentHead->next;
while (p) {
if (p->PersonalInformation.StudentNum > Class) {
break;
}
p = p->next;
}
for (int i = 0; i < AllStdNum; i++) {
if (p->PersonalInformation.StudentNum > Class + 100)break;
PersonalCourse_Search(p,StudentHead,CourseHead);
p = p->next;
}
}
//查询成绩
void SearchCourse(LinkStudent StudentHead, LinkCourse CourseHead) {
char judge;
char name[20];
int tnum, num;
int length;
int i, j, id;
LinkCourse copyhead = NULL, p = NULL;
LinkStudent One;
int flag = 0;
while (1) {
system("cls");
cout << "您想要通过什么方式查看成绩?" << endl;
cout << "a:查看学生个人所有课程成绩" << endl;
cout << "b:按课程查看全部选课学生成绩" << endl;
cout << "c:按班级查看学生成绩" << endl;
cout << "#:返回上一层" << endl;
cin >> judge;
switch (judge)
{
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;
}
//数据保存
void StoreData(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserStudent UserStudentHead, LinkUserTeacher UserTeacherHead) {
StoreStudentList(StudentHead);
StoreCourseList(CourseHead);
AccountStore(UserAdministratorHead, UserTeacherHead, UserStudentHead);
};
//管理员菜单
void Input_Administrator(LinkStudent StudentHead, LinkCourse CourseHead, LinkUserAdministrator UserAdministratorHead, LinkUserTeacher UserTeacherHead, LinkUserStudent UserStudentHead) {
char choose;
while (1) {
system("cls");
cout << "————————————————————" << endl;
cout << "当前学生总数:" << StudentHead->PersonalInformation.StudentNum << endl;
cout << "当前课程总数:" << CourseHead->SubNum << endl;
Begin();
cin >> choose;
switch (choose) {
case '#':
//退出程序
cout << "退出成功欢迎下次使用!" << endl;
return;
case 'a': case 'A':
//成绩系统
GradeSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);
break;
case 'b': case 'B':
//课程系统
CourseSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);
break;
case 'c': case 'C':
//信息系统
InformationSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);
break;
case 'd': case 'D':
//账户系统
AccountSystem_Begin(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);
break;
case 'e': case 'E':
//初始化
Initialization(StudentHead, CourseHead, UserAdministratorHead, UserTeacherHead, UserStudentHead);
break;
case '@':
//保存数据
StoreData(StudentHead, CourseHead, UserAdministratorHead, UserStudentHead, UserTeacherHead);
break;
default:
system("cls");
cout << "请按正确格式输入" << endl;
system("pause");
system("cls");
break;
}
}
}
函数调用
#define _CRT_SECURE_NO_WARNINGS
#include <Stdio.h>
#include "结构体.h"
#include <string>
#include <iostream>
#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;
}