系统要求设计
问题:实现一个教学管理系统:主要包括基础信息设置、选课、成绩管理等功能。
任务要求:
1.基础信息设置。
- 课程信息(课程号、课程名、学分数、学时数)增删改查。
- 教师信息(教师号、姓名、职称)增删改查
- 学生信息(学号、姓名、专业、班级)增删改查。
2.选课
- 教师选课。输入教师编号,输入课程编号,完成选课。
- 学生选课。输入学号、课程号,完成选课。
- 输入教师编号,可以显示教师信息和该教师讲授的所有课程信息
- 输入课程编号、可以显示课程信息,教师信息、全部选课学生信息。
- 输入学生编号,可以查看所选全部课程和授课教师信息。
- 统计每门课程的选课学生数,按从大到小输出
3.成绩管理
- 输入教师课程编号,依次提示选课学生信息,输入成绩
- 输入学生编号,显示该学生全部所选课程的成绩。
- 输入课程编号,显示该课程的所有学生成绩,从高到低排序。
- 输入课程编号,显示该课程的成绩分布以及平均成绩。
#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;
本设计存在些缺点,我们需要手动添加每个课程老师学生,我们可以通过设计输入流读入文件中所有的信息提高效率,本缺点可自行更改
本文介绍了一个教学管理系统的设计,包括课程、教师和学生信息管理,选课功能,以及成绩录入、查看与统计。通过操作序号实现不同模块的操作,如增加、删除、修改和查询。
7727

被折叠的 条评论
为什么被折叠?



