教学管理系统设计

本文介绍了一个教学管理系统的设计,包括课程、教师和学生信息管理,选课功能,以及成绩录入、查看与统计。通过操作序号实现不同模块的操作,如增加、删除、修改和查询。

系统要求设计

问题:实现一个教学管理系统:主要包括基础信息设置、选课、成绩管理等功能。

任务要求:

1.基础信息设置。

  1. 课程信息(课程号、课程名、学分数、学时数)增删改查。
  2. 教师信息(教师号、姓名、职称)增删改查
  3. 学生信息(学号、姓名、专业、班级)增删改查。

2.选课

  1. 教师选课。输入教师编号,输入课程编号,完成选课。
  2. 学生选课。输入学号、课程号,完成选课。
  3. 输入教师编号,可以显示教师信息和该教师讲授的所有课程信息
  4. 输入课程编号、可以显示课程信息,教师信息、全部选课学生信息。
  5. 输入学生编号,可以查看所选全部课程和授课教师信息。
  6. 统计每门课程的选课学生数,按从大到小输出

3.成绩管理

  1. 输入教师课程编号,依次提示选课学生信息,输入成绩
  2. 输入学生编号,显示该学生全部所选课程的成绩。
  3. 输入课程编号,显示该课程的所有学生成绩,从高到低排序。
  4. 输入课程编号,显示该课程的成绩分布以及平均成绩。
#include<iostream>
#include<map>
#include"one.h"
using namespace std;
void all_structure()
{
	while (1)
	{
		cout << "请输入操作的序号" << endl;
		cout << "1.基础信息设置" << endl;
		cout << "2.选课" << endl;
		cout << "3.成绩管理" << endl;
		cout << "4.退出程序" << endl;
		cin >> whole_op;
		if (whole_op == 1)
		{
			Basics_information();
		}
		else if (whole_op == 2)
		{
			select_course();
		}
		else if (whole_op == 3)
		{
			score();
		}
		else if (whole_op == 4)
		{
			cout << "已退出" << endl;
			break;
		}
		else
		{
			cout << "请重新输入序号" << endl;
		}
	}
	
}
int main()
{
	all_structure();
}
#include<iostream>
#include<map>
#include<vector>
#include<algorithm> 
#include"var.h" 
using namespace std;
bool cmp_total(struct Course a,struct Course b)//比较选课学生数 
{
	return a.total>b.total;
}
bool cmp_score(const pair<struct Student,float> &a1,const pair<struct Student,float> &a2)//比较成绩
{
	return a1.second>a2.second;
 } 
void Course_add()//课程增加
{
	struct Course c;
	cout << "请输入课程号" << endl;
	cin >> c.Course_num;
	cout << "请输入课程名" << endl;
	cin >> c.Course_name;
	cout << "输入课程学分数" << endl;
	cin >> c.Course_credit;
	cout << "输入课程学时数" << endl;
	cin >> c.Course_period;
	Course_map.insert(pair<int, struct Course>(c.Course_num, c));
	cout << "增加成功!" << endl;
}
void Course_del(int id)//课程删除
{
	map<int, struct Course>::iterator iter;
	for (iter = Course_map.begin(); iter != Course_map.end(); iter++) {
		if (iter->first == id) {
			Course_map.erase(iter);
			cout << "该课程信息已删除!\n";
			break;
		}
	}
	if (iter == Course_map.end()) {
		cout << "该课程不在课程库中" << endl;
	}
}
void Course_seek(int id)//课程查找
{
	map<int, struct Course>::iterator iter;
	for (iter = Course_map.begin(); iter != Course_map.end(); iter++) {
		if (iter->first == id) {
			cout << "该课程在课程库中,课程名为" << iter->second.Course_name << "," << "学分数为" << iter->second.Course_credit << "," << "学时数为" << iter->second.Course_period << endl;
			break;
		}
	}
	if (iter == Course_map.end()) {
		cout << "该课程不在课程库中" << endl;
	}
}
void Course_revise(int id)//课程修改
{
	map<int, struct Course>::iterator iter;
	for (iter = Course_map.begin(); iter != Course_map.end(); iter++) {
		if (iter->first == id) {
			break;
		}
	}
	struct Course c;


	if (iter == Course_map.end()) {

		cout << "该课程不在课程库中,无法修改内容" << endl;
		cout << "选择是否插入信息" << endl << "1.插入" << endl << "2.不插入" << endl;

		int n;
		cin >> n;
		if (n == 1) {
			c.Course_num = id;
			cout << "请输入需插入的课程名" << endl;
			cin >> c.Course_name;
			cout << "请输入需插入的课程学分数" << endl;
			cin >> c.Course_credit;
			cout << "请输入需插入的课程学时数" << endl;
			cin >> c.Course_period;
			Course_map.insert(pair<int, struct Course>(id, c));
			cout << "插入成功!" << endl;
		}
		else {
			cout << "无操作" << endl;
		}

	}
	else {
		c.Course_num = id;
		cout << "请输入需修改的课程姓名" << endl;
		cin >> c.Course_name;
		cout << "请输入需修改的课程学分数" << endl;
		cin >> c.Course_credit;
		cout << "请输入需修改的课程学时数" << endl;
		cin >> c.Course_period;
		Course_map[iter->first] = c;
		cout << "已修改成功!" << endl;
		cout << "课程名为" << iter->second.Course_name << "," << "学分数为" << iter->second.Course_credit << "," << "学时数为" << iter->second.Course_period << endl;

	}
}
void Teacher_add() //教师增加
{
	struct Teacher t;
	cout << "请输入教师号" << endl;
	cin >> t.Teacher_id;
	cout << "请输入教师姓名" << endl;
	cin >> t.Teacher_name;
	cout << "请输入教师职称" << endl;
	cin >> t.Teacher_position;
	Teacher_map.insert(pair<int, struct Teacher>(t.Teacher_id, t));
	cout << "增加成功!\n";
}
void Teacher_del(int id)//教师删除
{
	map<int, struct Teacher>::iterator iter;
	for (iter = Teacher_map.begin(); iter != Teacher_map.end(); iter++) {
		if (iter->first == id) {
			Teacher_map.erase(iter);
			cout << "该老师信息已删除!\n";
			break;
		}
	}
	if (iter == Teacher_map.end()) {
		cout << "该教师不在职" << endl;
	}
}
void Teacher_seek(int id)//教师查找
{
	map<int, struct Teacher>::iterator iter;
	for (iter = Teacher_map.begin(); iter != Teacher_map.end(); iter++) {
		if (iter->first == id) {
			cout << "该老师在职,姓名为" << iter->second.Teacher_name << "职称为" << iter->second.Teacher_position << endl;
			break;
		}
	}
	if (iter == Teacher_map.end()) {
		cout << "该教师不在职" << endl;
	}
}
void Teacher_revise(int id)//教师修改
{
	map<int, struct Teacher>::iterator iter;
	for (iter = Teacher_map.begin(); iter != Teacher_map.end(); iter++) {
		if (iter->first == id) {
			break;
		}
	}
	struct Teacher t;


	if (iter == Teacher_map.end()) {

		cout << "该教师不在职,无法修改内容" << endl;
		cout << "选择是否插入信息" << endl << "1.插入" << endl << "2.不插入" << endl;

		int n;
		cin >> n;
		if (n == 1) {
			t.Teacher_id = id;
			cout << "请输入需插入的教师姓名" << endl;
			cin >> t.Teacher_name;
			cout << "请输入需插入的教师职称" << endl;
			cin >> t.Teacher_position;
			Teacher_map.insert(pair<int, struct Teacher>(id, t));
		}
		else {
			cout << "无操作" << endl;
		}

	}
	else {
		t.Teacher_id = id;
		printf("请输入修改后的教师姓名\n");
		cin >> t.Teacher_name;
		printf("请输入修改后的教师职称\n");
		cin >> t.Teacher_position;
		Teacher_map[iter->first] = t;
		cout << "已修改成功!" << endl;
		cout << "姓名为" << iter->second.Teacher_name << "职称为" << iter->second.Teacher_position << endl;
	}
}
void stu_add() //学生增加
{
	struct Student s;
	cout << "请输入学生学号" << endl;
	cin >> s.stu_id;
	cout << "请输入学生姓名" << endl;
	cin >> s.stu_name;
	cout << "请输入学生班级" << endl;
	cin >> s.stu_class;
	cout << "请输入学生专业" << endl;
	cin >> s.stu_major;

	student_map.insert(pair<int, struct Student>(s.stu_id, s));
	cout << "增加成功!\n";
}
void stu_del(int id)//学生删除
{
	map<int, struct Student>::iterator iter;
	for (iter = student_map.begin(); iter != student_map.end(); iter++) {
		if (iter->first == id) {
			student_map.erase(iter);
			cout << "该学生信息已删除!\n";
			break;
		}
	}
	if (iter == student_map.end()) {
		cout << "该学生不在本校中!" << endl;
	}
}
void stu_seek(int id)//学生查找
{
	map<int, struct Student>::iterator iter;
	for (iter = student_map.begin(); iter != student_map.end(); iter++) {
		if (iter->first == id) {
			cout << "该学生在本校中,姓名为" << iter->second.stu_name << "," << "班级为" << iter->second.stu_class << "," << "专业为" << iter->second.stu_major << endl;
			break;
		}
	}
	if (iter == student_map.end()) {
		cout << "该学生不在本校中" << endl;
	}
}
void stu_revise(int id)//学生修改
{
	map<int, struct Student>::iterator iter;
	for (iter = student_map.begin(); iter != student_map.end(); iter++) {
		if (iter->first == id) {
			break;
		}
	}
	struct Student s;
	if (iter == student_map.end()) {

		cout << "该学生不在本校中,无法修改内容" << endl;
		cout << "选择是否插入信息" << endl << "1.插入" << endl << "2.不插入" << endl;
		int n;
		cin >> n;
		if (n == 1) {
			s.stu_id = id;
			cout << "请输入需插入的学生姓名" << endl;
			cin >> s.stu_name;
			cout << "请输入需插入的学生班级" << endl;
			cin >> s.stu_class;
			cout << "请输入需插入的学生专业" << endl;
			cin >> s.stu_major;
			student_map.insert(pair<int, struct Student>(id, s));
			cout << "插入成功" << endl;
		}
		else {
			cout << "无操作" << endl;
		}

	}
	else {
		s.stu_id = id;
		cout << "请输入修改后的学生姓名" << endl;
		cin >> s.stu_name;
		cout << "请输入修改后的学生班级" << endl;
		cin >> s.stu_class;
		cout << "请输入修改后的学生专业" << endl;
		cin >> s.stu_major;
		student_map[iter->first] = s;
		cout << "已修改成功!" << endl;
		cout << "姓名为" << iter->second.stu_name << "," << "班级为" << iter->second.stu_class << "," << "专业为" << iter->second.stu_major << endl;
	}
}
void Course_information()  //课程信息
{
	while (1)
	{
		cout << "1.增加课程" << endl;
		cout << "2.删除课程" << endl;
		cout << "3.修改课程内容" << endl;
		cout << "4.查找课程" << endl;
		cout << "5.退出课程信息设置" << endl;
		cout << "请输入操作的序号" << endl;
		cin >> course_op;
		if (course_op == 1)
		{
			Course_add();
		}
		else if (course_op == 2)
		{
			int id;
			cout << "请输入要删除的课程号" << endl;
			cin >> id;
			Course_del(id);
		}
		else if (course_op == 3)
		{
			int id;
			cout << "请输入要修改具体内容的课程号" << endl;
			cin >> id;
			Course_revise(id);
		}
		else if (course_op == 4)
		{
			int id;
			cout << "请输入要查找的课程号" << endl;
			cin >> id;
			Course_seek(id);
		}
		else if (course_op == 5)
		{
			cout << "已退出信息设置" << endl;
			break;
		}
		else
		{
			cout << "请重新输入序号" << endl;
		}
	}
}
void Teacher_information()//教师信息
{
	while (1)
	{
		cout << "请输入操作的序号" << endl;
		cout << "1.增加教师" << endl;
		cout << "2.删除教师" << endl;
		cout << "3.修改教师内容" << endl;
		cout << "4.查找教师" << endl;
		cout << "5.退出教师信息设置" << endl;
		cin >> teacher_op;
		if (teacher_op == 1)
		{
			Teacher_add();
		}
		else if (teacher_op == 2)
		{
			int id;
			cout << "请输入要删除的教师号" << endl;
			cin >> id;
			Teacher_del(id);
		}
		else if (teacher_op == 3)
		{
			int id;
			cout << "请输入要修改具体内容的教师号" << endl;
			cin >> id;
			Teacher_revise(id);
		}
		else if (teacher_op == 4)
		{
			int id;
			cout << "请输入要查找的教师号" << endl;
			cin >> id;
			Teacher_seek(id);
		}
		else if (teacher_op == 5)
		{
			cout << "已退出信息设置" << endl;
			break;
		}
		else
		{
			cout << "请重新输入序号" << endl;
		}
	}
}
void Student_information()//学生信息
{
	while (1)
	{
		cout << "请输入操作的序号" << endl;
		cout << "1.增加学生" << endl;
		cout << "2.删除学生" << endl;
		cout << "3.修改学生内容" << endl;
		cout << "4.查找学生" << endl;
		cout << "5.退出学生信息设置" << endl;
		cin >> stu_op;
		if (stu_op == 1)
		{
			stu_add();
		}
		else if (stu_op == 2)
		{
			int id;
			cout << "请输入要删除的学生学号" << endl;
			cin >> id;
			stu_del(id);
		}
		else if (stu_op == 3)
		{
			int id;
			cout << "请输入要修改具体内容的学生学号" << endl;
			cin >> id;
			stu_revise(id);
		}
		else if (stu_op == 4)
		{
			int id;
			cout << "请输入要查找的学生学号" << endl;
			cin >> id;
			stu_seek(id);
		}
		else if (stu_op == 5)
		{
			cout << "已退出信息设置" << endl;
			break;
		}
		else
		{
			cout << "请重新输入序号" << endl;
		}
	}
}
void Basics_information()//基本信息设置
{
	while (1)
	{
		cout << "请输入操作的序号" << endl;
		cout << "1.课程信息" << endl;
		cout << "2.教师信息" << endl;
		cout << "3.学生信息" << endl;
		cout << "4.退出信息设置" << endl;
		cin >> one_op;
		if (one_op == 1)
		{
			Course_information();
		}
		else if (one_op == 2)
		{
			Teacher_information();
		}
		else if (one_op == 3)
		{
			Student_information();
		}
		else if (one_op == 4)
		{
			cout << "已退出信息设置" << endl;
			break;
		}
		else
		{
			cout << "请重新输入序号" << endl;
		}
	}

}




void teacher_select(int teacher_id, int course_id) //教师选课
{

	map<int, struct Teacher>::iterator iter;
	for (iter = Teacher_map.begin(); iter != Teacher_map.end(); iter++) {
		if (iter->first == teacher_id) {
			break;
		}
	}
	if (iter == Teacher_map.end()) {
		cout << "该老师不在职,无法选课!" << endl;
	}
	else {
		map<int, struct Course>::iterator iter1;
		for (iter1 = Course_map.begin(); iter1 != Course_map.end(); iter1++) {
			if (iter1->first == course_id) {
				cout << "该课程在课程库中,课程名为" << iter1->second.Course_name << "," << "学分数为" << iter1->second.Course_credit << "," << "学时数为" << iter1->second.Course_period << endl;
				break;
			}
		}
		if (iter1 == Course_map.end()) {
			cout << "该课程不在课程库中,无法选此课!" << endl;
		}
		else {
			iter->second.cour.push_back(iter1->second);
			vector<struct Student> a;
			iter->second.cour_stu.insert(pair<struct Course,vector<struct Student> >(iter1->second,a));
			cout <<iter->second.Teacher_name<< "老师选课成功!" << endl;
			iter1->second.tea_course.push_back(iter->second);
		}
	}
}
void student_select(int stu_id,int cou_id)//学生选课 
{
	map<int, struct Student>::iterator iter;
	for (iter = student_map.begin(); iter != student_map.end(); iter++) {
		if (iter->first == stu_id) {
			break;
		}
	}
	if (iter == student_map.end()) {
			cout << "该学生不在本校系统中!" << endl;
	}else
	{
		map<int, struct Course>::iterator iter1;
		for (iter1 = Course_map.begin(); iter1 != Course_map.end(); iter1++) {
			if (iter1->first == cou_id) {
				cout << "该课程在课程库中,课程名为" << iter1->second.Course_name <<","<< "学分数为" << iter1->second.Course_credit<<","<<"学时数为"<<iter1->second.Course_period<< endl;
				break;
			}
		}
		if (iter1 == Course_map.end()) {
			cout << "该课程不在课程库中,无法选此课!" << endl;
		}else
		{
			vector<struct Teacher> a = iter1->second.tea_course;
			if (a.empty()) 
			{
				cout << "没有教此课的老师" << endl;
			}
			else 
			{
				cout << "教此课的老师如下" << endl;
				for (int i = 0; i < a.size(); i++) 
				{
					cout << i + 1 << "." << a[i].Teacher_name << endl;
				}
				map<int, struct Teacher>::iterator iter2;
				string s;
				cout << "请输入选择老师姓名" << endl;
				cin >> s;
				int tea_id;
				for (iter2 = Teacher_map.begin(); iter2 != Teacher_map.end(); iter2++) 
				{
					if (iter2->second.Teacher_name == s) 
					{
						break;
					}
				}
				if(iter2==Teacher_map.end())
				{
				cout<<"该老师不存在"<<endl;
				}
				else
				{
					iter->second.cour_tea.insert(pair<struct Course,struct Teacher>(iter1->second,iter2->second));
					iter->second.cour.push_back(iter1->second);
					map<struct Course, vector<Student> >::iterator iter3;
					for(iter3=iter2->second.cour_stu.begin();iter3!=iter2->second.cour_stu.end();iter3++)
					{
						if(iter3->first.Course_num==iter1->second.Course_num)
						{
							break;
						}
					}
					iter3->second.push_back(iter->second);
					iter->second.cour_tea.insert(pair<struct Course,struct Teacher>(iter1->second,iter2->second));
					iter1->second.stu_course.push_back(iter->second);
					cout<<"选择老师成功!"<<endl;
					iter1->second.total++;
				}	
			}	
		} 
	}
}
void teacher_print(int id)//输入教师编号,显示教师信息
{
	map<int, struct Teacher>::iterator iter;
	for (iter = Teacher_map.begin(); iter != Teacher_map.end(); iter++) {
		if (iter->first == id) {
			break;
		}
	}
	if (iter == Teacher_map.end()) {
		cout << "该老师不在职" << endl;
	}
	else {
		while(1)
		{
			cout << "请选择操作的序号" << endl;
			cout << "1.教师信息" << endl;
			cout << "2.该老师讲授的所有课程信息" << endl;
			cout << "3.退出显示" << endl; 
			cin >> two_tea_op;
			if (two_tea_op == 1) 
			{
				cout << "老师的教师号为" << iter->second.Teacher_id << ",姓名为" << iter->second.Teacher_name << ",职称为" << iter->second.Teacher_position << endl;
			}
			else if (two_tea_op == 2) 
			{
				vector<struct Course> a = iter->second.cour;
				if (a.empty()) 
				{
					cout << "该老师没有讲授的课程!" << endl;
				}
				vector<struct Course>::iterator iter2;
				for (iter2 = a.begin(); iter2 != a.end(); iter2++) 
				{
					cout << "课程编号为" << iter2->Course_num << "," << "课程名为" << iter2->Course_name << "的课程已被" << iter->second.Teacher_name << "老师选中!" << endl;
				}
			}
			else if(two_tea_op==3)
			{
				cout<<"已退出教师信息显示"<<endl; 
				break;
			} 
			else
			{
			 	cout<<"请重新输入"<<endl; 
			}
		}
	}
}
void course_print(int id) //输入课程编号,显示课程信息,教师信息,全部选课学生信息 
{
	
	map<int, struct Course>::iterator iter;
	for (iter = Course_map.begin(); iter != Course_map.end(); iter++) 
	{
		if (iter->first == id) 
		{
			break;
		}
	}
	if (iter == Course_map.end()) 
	{
		cout << "该课程不存在" << endl;
	}
	else {
		while(1)
		{
			cout << "请选择操作的序号" << endl;
			cout << "1.课程信息" << endl;
			cout << "2.教师信息" << endl;
			cout << "3.学生信息" << endl;
			cout << "4.退出显示" << endl; 
			cin >> two_course_op;
			if (two_course_op == 1) 
			{
				cout << "课程编号为" << iter->second.Course_num << ",课程名为" << iter->second.Course_name <<",课程学分数为"<<iter->second.Course_credit<<",课程学时数为"<<iter->second.Course_period<< endl;
			}
			else if (two_course_op == 2) 
			{
				vector<struct Teacher>a = iter->second.tea_course;
				if (a.empty()) 
				{
					cout << "没有老师选择此课!" << endl;
				}
				else 
				{
					vector<struct Teacher>::iterator iter2;
					for (iter2 = a.begin(); iter2 != a.end(); iter2++) 
					{
						cout << "教师编号为" << iter2->Teacher_id << ",职称为" << iter2->Teacher_position << "的" << iter2->Teacher_name << "老师选择此课!" << endl;				
					}
				}
			}
			else if(two_course_op==3)
			{
				vector<struct Student>::iterator iter2;
				vector<struct Student> a=iter->second.stu_course;
				for (iter2 = a.begin(); iter2 != a.end(); iter2++) 
				{
					cout <<iter2->stu_name<< "学生学号为" << iter2->stu_id << ",班级为" << iter2->stu_class << "专业为" << iter2->stu_major<<"的"<<iter2->stu_name << "同学选择此课!" << endl;				
				}
			}
			else if(two_course_op==4)
			{
				cout<<"已退出学生信息显示" <<endl; 
				break;
			}
			else {
				cout<<"请重新输入"<<endl; 
			}
		}		
	}
}
void stu_print(int id)//查看所选全部课程和授课教师信息 
{
	map<int, struct Student>::iterator iter;
	for (iter = student_map.begin(); iter != student_map.end(); iter++) 
	{
		if (iter->first == id) 
		{
			break;
		}
	}
	if (iter == student_map.end()) 
	{
		cout << "该学生不在本校系统中!" << endl;
	}
	else 
	{
		while(1)
		{
			cout << "请选择操作的序号" << endl;
			cout << "1.所选课程信息" << endl;
			cout << "2.授课教师信息" << endl;
			cout << "3.退出显示" << endl; 
			cin >> two_stu_op;
			if (two_stu_op == 1) 
			{
				vector<struct Course> b=iter->second.cour;
				for (int i=0;i<b.size();i++)
				{
					cout<<"课程编号为"<<b[i].Course_num<<"的课程名为"<<b[i].Course_name<<"的课程已被"<<iter->second.stu_name<<"学生所选"<<endl;
				}
			}
			else if (two_stu_op== 2) 
			{
				map<struct Course, struct Teacher>::iterator iter1;
				for(iter1=iter->second.cour_tea.begin();iter1!=iter->second.cour_tea.end();iter1++)
				{
					cout<<iter->second.stu_name<<"同学选的"<<iter1->first.Course_name<<"课程的老师为"<<iter1->second.Teacher_name<<endl;
				}
			}
			else if(two_stu_op==3)
			{
				cout<<"已退出学生信息显示" <<endl; 
				break;
			}
			else 
			{
				cout<<"请重新输入"<<endl; 
			}
		}	
			
	}
}
void stu_sort()//按从大到小输出 
{
	vector<struct Course>a;
	map<int, struct Course>::iterator iter;
	for(iter=Course_map.begin();iter!=Course_map.end();iter++){
		a.push_back(iter->second);
	}
	sort(a.begin(),a.end(),cmp_total);
	for(int i=0;i<a.size();i++)
	{
		cout<<"选名为"<<a[i].Course_name<<"的学生数总共有"<<a[i].total<<endl;
	}
}
void select_course()
{
	while (1)
	{
		cout << "请输入操作的序号" << endl;
		cout << "1.教师选课" << endl;
		cout << "2.学生选课"<<endl;
		cout << "3.显示教师信息和教师讲授的所有课程" << endl;
		cout << "4.显示课程信息,教师信息,全部选课学生信息" << endl;
		cout << "5.显示所选全部课程和授课老师信息" << endl;
		cout << "6.显示每门课程的选课学生数,从大到小输出" << endl; 
		cout << "7.退出选课" << endl;
		cin >> two_op;
		if (two_op == 1)
		{
			cout<<"请输入教师号和课程号"<<endl;
			int teacher_id;//教师号
			int course_id;//课程号
			cin>>teacher_id>>course_id;
			teacher_select(teacher_id,course_id);
		}
		else if (two_op == 2)
		{
			cout<<"请输入学生学号和课程号"<<endl;
			int student_id;//学生号
			int course_id;//课程号
			cin>>student_id>>course_id;
			student_select(student_id,course_id);
		}
		else if (two_op == 3)
		{
			cout<<"请输入教师号"<<endl;
			int teacher_id;//教师号
			cin >> teacher_id;
			teacher_print(teacher_id);
		}
		else if (two_op == 4)
		{
			cout<<"请输入课程号"<<endl;
			int course_id;//课程号
			cin >> course_id;
			course_print(course_id);
		}
		else if (two_op == 5)
		{
			cout<<"请输入学生学号"<<endl;
			int student_id;
			cin>>student_id;
			stu_print(student_id);
		}
		else if(two_op==6)
		{
			stu_sort();
		}
		else if (two_op == 7)
		{
			cout << "已退出" << endl;
			break;
		}
		else
		{
			cout << "请重新输入" << endl;
		}
	}
}






void tea_score(int id1,int id2)//教师输入成绩 
{
	map<int, struct Teacher>::iterator iter;
	for (iter = Teacher_map.begin(); iter != Teacher_map.end(); iter++) 
	{
		if (iter->first == id1) 
		{
			break;
		}
	}
	if(iter==Teacher_map.end())
	{
		cout<<"该老师不在职!"<<endl;
	}else
	{
		map<struct Course, vector<struct Student> >::iterator iter1;
		for (iter1 = iter->second.cour_stu.begin(); iter1 != iter->second.cour_stu.end(); iter1++) 
		{
			if (iter1->first.Course_num == id2) 
			{
				break;
			}
		}
		if(iter1==iter->second.cour_stu.end())
		{
		cout<<"该老师没教此课程!"<<endl;
		}else
		{
			vector<struct Student>::iterator iter2;
			if(iter1->second.empty())
			{
				cout<<"没有学生选此课"<<endl;
			}
			else
			{
				for(int i=0;i<iter1->second.size();i++)
				{
					cout<<"当前学生为"<<iter1->second[i].stu_name<<endl;
					cout<<"请老师为他输入"<<iter1->first.Course_name<<"课程的成绩"<<endl;
					float n;
					cin>>n;
					map<int,struct Student>::iterator iter3;
					for(iter3=student_map.begin();iter3!=student_map.end();iter3++)
					{
						if(iter3->first==iter1->second[i].stu_id)
						{
							break;
						}
					}
					if(iter3==student_map.end())
					{}
					else
					{
						iter3->second.cour_score.insert(pair<struct Course,float>(iter1->first,n));
					}
					map<int,struct Course>::iterator iter4;
					for(iter4=Course_map.begin();iter4!=Course_map.end();iter4++)
					{
						if(iter4->first==id2)
						{
							break;
						}
					}
					if(iter4==Course_map.end())
					{}
					else
					{
						for(int i=0;i<iter4->second.stu_course.size();i++)
						{
							if(iter4->second.stu_course[i].stu_id==iter1->second[i].stu_id)
							{
								iter4->second.stu_course[i].cour_score.insert(pair<struct Course,float>(iter4->second,n));
								break;
							}
						}
					}
				}
			}
		}
	}
}
void stu_score(int id)//学生所有课程成绩 
{
	map<int, struct Student>::iterator iter;
	for (iter = student_map.begin(); iter != student_map.end(); iter++) 
	{
		if (iter->first == id) 
		{
			break;
		}
	}
	if (iter == student_map.end()) 
	{
		cout << "该学生不在本校!" << endl;
	}
	else
	{
		map<struct Course, float>::iterator iter1;
		if(iter->second.cour.empty())
		{
			cout<<"该学生未选课!"<<endl;
		}
		else
		{
			for(iter1=iter->second.cour_score.begin();iter1!=iter->second.cour_score.end();iter1++)
			{
				cout<<"学生"<<iter->second.stu_name<<iter1->first.Course_name<<"的课程成绩为"<<iter1->second<<endl;
			}
		}
	}
}
void score_sort(int id)//课程所有学生成绩,从高到低排序 
{
	map<int, struct Course>::iterator iter;
	for (iter = Course_map.begin(); iter != Course_map.end(); iter++) 
	{
		if (iter->first == id) 
		{
			break;
		}
	}
	if (iter == Course_map.end()) 
	{
		cout << "该课程不在课程库中!" << endl;
	}
	else
	{
		if(iter->second.stu_course.empty())
		{
			cout<<"没有选此课的学生!"<<endl;
		}
		else
		{
			vector<pair<struct Student,float> > v;
			map<int, struct Student>::iterator iter2;
			
			for(iter2=student_map.begin();iter2!=student_map.end();iter2++)
			{
				for(int i=0;i<iter2->second.cour.size();i++)
				{
					if(iter2->second.cour[i].Course_num==id)
					{
						v.push_back(pair<struct Student,float>(iter2->second,iter2->second.cour_score[iter2->second.cour[i]]));
						break;
					}
				}		
			}
			sort(v.begin(),v.end(),cmp_score);
			cout<<iter->second.Course_name<<"课程的学生排名为:"<<endl; 
			for(int i=0;i<v.size();i++)
			{
				cout<<v[i].first.stu_name<<"的成绩"<<v[i].second<<endl; 
			}	
		}
	} 
}
void ave(int id)//输出平均成绩 
{
	int sum=0;
	int len;
	map<int, struct Course>::iterator iter;
	for (iter = Course_map.begin(); iter != Course_map.end(); iter++) 
	{
		if (iter->first == id) 
		{
			break;
		}
	}
	if (iter == Course_map.end()) 
	{
		cout << "该课程不在课程库中!" << endl;
	}
	else
	{
		if(iter->second.stu_course.empty())
		{
			cout<<"没有选此课的学生!"<<endl;
		}
		else
		{
			vector<pair<struct Student,float> > v;
			map<int, struct Student>::iterator iter2;
			for(iter2=student_map.begin();iter2!=student_map.end();iter2++)
			{
				for(int i=0;i<iter2->second.cour.size();i++)
				{
					if(iter2->second.cour[i].Course_num==id)
					{
						v.push_back(pair<struct Student,float>(iter2->second,iter2->second.cour_score[iter2->second.cour[i]]));
						break;
					}
				}	
			}
			len=v.size();
			int total1=0,total2=0,total3=0;
			for(int i=0;i<v.size();i++)
			{
				if(v[i].second>=90&&v[i].second<=100)
				{
					total1++;
					cout<<"成绩优秀"<<endl;
					cout<<v[i].first.stu_name<<"的成绩"<<v[i].second<<endl; 
				}
				else if(v[i].second>=60&&v[i].second<90)
				{
					total2++;
					cout<<"成绩及格"<<endl;
					cout<<v[i].first.stu_name<<"的成绩"<<v[i].second<<endl; 
				}
				else if(v[i].second>=0&&v[i].second<60)
				{
					total3++;
					cout<<"成绩不及格"<<endl;
					cout<<v[i].first.stu_name<<"的成绩"<<v[i].second<<endl; 
				}
				else
				{
					cout<<"成绩非法!"<<endl;
				}
				sum+=v[i].second;
			}
			cout<<"90-100分数段的学生有"<<total1<<"个"<<endl;
			cout<<"60-90分数段的学生有"<<total2<<"个"<<endl;
			cout<<"0-60分数段的学生有"<<total3<<"个"<<endl;
		}
	}
	float ave=sum*1.0/len;
	cout<<"平均成绩为:"<<endl; 
	printf("%.2lf\n",ave);
}
void score()
{
	while (1)
	{
		cout << "请输入操作的序号" << endl;
		cout << "1.老师输入课程成绩" << endl;
		cout << "2.显示学生全部课程成绩"<<endl;
		cout << "3.显示课程全部学生成绩,并排序" << endl;
		cout << "4.显示课程成绩分布,并输出平均成绩" << endl;
		cout << "5.退出选课" << endl;
		cin >> three_op;
		if (three_op == 1)
		{
			cout<<"请输入教师号和课程号"<<endl;
			int teacher_id,course_id;
			cin>>teacher_id>>course_id;
			tea_score(teacher_id,course_id); 
		}
		else if (three_op == 2)
		{
			cout<<"请输入学生学号"<<endl;
			int student_id;
			cin>>student_id;
			stu_score(student_id);
		}
		else if (three_op == 3)
		{
			cout<<"请输入课程号"<<endl;
			int course_id;
			cin>>course_id;
		 	score_sort(course_id);
		}
		else if (three_op == 4)
		{
			cout<<"请输入课程号"<<endl;
			int course_id;
			cin>>course_id;
			ave(course_id);
		}
		else if (two_op == 5)
		{
			cout << "已退出" << endl;
			break;
		}
		else
		{
			cout << "请重新输入" << endl;
		}
	}
}
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
struct Course {
	int Course_num;//课程号
	string Course_name;//课程名
	float Course_credit;//学分数
	float Course_period;//学时数
	vector<struct Student> stu_course;//选此课的学生
	vector<struct Teacher> tea_course;//选此课的老师
	int total=0;//选课学生数 
	friend bool operator < (const struct Course &a,const struct Course &b)//重写运算符 
	{
		return a.Course_num > b.Course_num;
	}
};
struct Teacher {
	int Teacher_id;//教师号
	string Teacher_name;//教师姓名
	string Teacher_position;//教师职称
	vector <struct Course> cour;//老师选的课
	map<struct Course,vector<struct Student> > cour_stu; //老师教的每个课程所对应的全部学生 
};
struct Student {
	int stu_id;//学生学号
	string stu_name;//学生姓名
	string stu_major;//学生专业
	string stu_class;//学生班级
	vector<struct Course> cour;//学生选的课
	map<struct Course,struct Teacher> cour_tea;//学生选的每一门课所对应的老师 
	map<struct Course,float> cour_score;//学生选的每门课所对应的成绩
	friend bool operator < (const  struct Student &a,const  struct Student &b)//重写运算符 
    {
        return a.stu_id>b.stu_id;
    } 
	
};
int whole_op;//整体操作选择
int one_op;//基础信息操作选择
int course_op;//课程信息操作选择
int teacher_op;//教师信息操作选择
int stu_op;//学生信息操作选择
int two_op;//选课操作选择
int two_tea_op;//显示教师信息
int two_course_op;//显示课程信息
int two_stu_op;//显示学生信息 
int three_op;//成绩操作选择
map<int, struct Course> Course_map;
map<int, struct Teacher> Teacher_map;
map<int, struct Student>student_map;

本设计存在些缺点,我们需要手动添加每个课程老师学生,我们可以通过设计输入流读入文件中所有的信息提高效率,本缺点可自行更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值