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

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


  • 14
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学生成绩管理系统 摘 要 随着互联网的飞速发展,越来越多的信息通过网络服务的承载和共享,在促进人类社会大跨步向未来迈进的同时, 也为教育事业带来了蓬勃而持久的春天,而我们也赶上了一个好时代,使得学校与社会,群体与群体之间相互交叉和融合,而教育行业作为人类未来的引路者,与时俱进,应运而产生了不可忽视的教务网络。信息化教育、电化教育、教务管理、数字化校园等名词不断涌现,而自大学到幼儿园,在线教务管理在教育的各个环节都起着至关重要的作用,在线成绩管理系统更是方便和简化了教育评价的工作步骤,因此,在线成绩管理系统的卡发和实现成为了教务管理中的一个重要环节。 关键词 信息化教育/教育事业/教务管理 目 录 中文摘要 Ⅰ 英文摘要 Ⅱ 1绪论 1 1.1 教务信息化分析 1 1.1.1 信息化教育 1 1.1.2 教育信息化 1 1.1.3 当前教育信息化的特征分析 1 1.2 需求分析 1 1.3 系统设计的目的和意义 2 2系统分析 3 2.1 可行性分析 3 2.2 实施方案分析 3 2.2.1 开发语言的取 3 2.2.2 开发工具 4 2.3 系统功能分析 5 3数据库设计 5 3.1 实体数据分析 5 3.2 实体关系分析 6 3.3 数据库概念分析 6 3.4 数据库表设计 8 4详细设计 10 4.1 学生模块 10 4.1.1注册模块 10 4.1.2登录模块 11 4.1.3查询成绩模块 12 4.2 教师模块 13 4.2.1学期信息模块 13 4.2.2班级信息模块 14 4.2.3学生信息模块 14 4.2.4课程信息模块 16 4.2.5成绩信息模块 17 4.2.6系统管理模块 17 5系统测试 19 5.1 测试的重要性  19 5.2 测试的目的   20 5.3 测试的步骤  20 5.4测试的主要内容  20 致 谢 22 参考文献 23 1绪论 1.1教务信息化分析 1.1.1信息化教育 信息化教育,是指在现代认知发展策略的指导下,充分运用现代信息技术,开发出适合当前潮流、符合个体认知发展规律、并且能够培养学生信息素养的新型教育方式。 1.1.2教育信息化 教育信息化,是指在现代教育教学过程中,通过利用适当的媒介,并辅以适当的设计和引导,优化教育过程,使学习者成长为符合社会发展的需求的人的社会活动过程。 1.1.3当前教育信息化的特征分析 随着第二次工业革命的发展,媒体设备被应用到人类生活中的方方面面,多媒体教学也应运而融入教育活动中,当代教育信息化的表现多种多样,主要表现在以下几个方面: 1.幻灯片与投影仪类设备的应用; 2.依赖网络的教育信息传播; 3.教务信息化策略的实施; 4.个人微型计算机以及便携式移动设备的使用; 5.高度的信息公开策略。 1.2需求分析 作为教务管理平台中的一个至关重要的系统,在线成绩管理系统的出现,将教育者和学习者的距离拉近。在学校教学中,总体分为三个群体:教务管理者、普通教师、学生教务管理者通过协调学校教育教学过程中的各种关系和矛盾,从而使教学过程更具有效率;普通教师通过教学设计和课堂、课外教学,以及对学生进行阶段性和形成性评价,促进了学生的认知发展;学生通过在校学习,提升了自己的认知结构。 1.3系统设计的目的和意义 对于一个学校而言,学生成绩的管理和查询是一项非常重要的工作,所以学生成绩管理系该主要实现学生成绩的信息化的管理与查询,学生成绩管理系统的开发所需要的资金少,系统正常运行后,能够实现学生成绩在网上进行成绩查询,节省了大量的人力和时间,而且可以减少成绩查询与管理中可能会出现的一些错误,所以,学生成绩管理系统的开发是十分必要的,而且它所带来的实用效益将远远大于本系统的开发成本,该系统操作非常简便,即使不太会使用计算机的人,只要经过培训,也能够很好的使用该系统,即使是管理员,只要经过简单的说明,也能够很快的学会系统的使用,只有对数据库和数据结构进行系统详细的分析,才能开发出满足系统所需要的各种对象,以及各个对象之间的关系,学生成绩管理系统对象有学生,教师,管理员,学生可以在网上查询自己的成绩信息,只要学生能够上网,就随时能够查到自己的成绩,并可以根据需要保存在校期间的所有成绩,学校管理员可以完成对学生信息的管理,教师信息的管理和学生成绩的管理,教师也可以使用这个系统来进行学生成绩的录入和所教授班级成绩的查询。 ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值