大作业 XXX大学 课程管理系统
#include<stdio.h> #include<iostream> #include<string.h> #include <fstream> #include<time.h> #include<windows.h> #include<algorithm> #include<vector> #include <stdlib.h> using namespace std; int Now_Type=0; struct Cla//课程 { int Num;//课程编号 string Name;//课程名字 string Depatment;//开设学院 double Score;//课程学分 int Time;//课程学时 int Property;//课程性质,1为必修,0为选修 string Teacher;//教师姓名 int ClassTime[10];//课程上课时间 string place;//上课地点 int StuNum;//学生人数 int MaxNum;//限制人数 string Explan;//说明 string Book;//教材说明 }; struct Stu//学生 { long long Num;//学号 string Depatment;//院系 string Major;//专业 string Name;//姓名 int Sex;//性别 1为男,0,为女 long long PhoneNumber;//电话号码 string code;//密码 string Mail;//邮箱信息 vector<Cla> Choose_Class;//该学生选过的课程 }; bool cmp(Cla A,Cla B) { return A.StuNum> B.StuNum; } bool cmp1(Cla A,Cla B) { return A.MaxNum-A.StuNum> B.MaxNum-B.StuNum; } struct Tea//教师 { long long Num;//编号 string Depatment;//院系 string name;//姓名 string mail;//邮箱 string code;//密码 vector<Cla> Teach_Class;//该老师所教课程 }; vector<Stu> Student; vector<Tea> Teacher; vector<Cla> Class; Stu Now_Stu; Tea Now_Tea; Cla Now_Cla; int Get_Num_Len(long long x) { int len = 0; while(x) { len++; x/=10; } return len; } void See_Choose_Tea() { void See_Choose(); system("cls"); printf("您正在查询教师自己开设过的课程的选课情况\n"); printf("请稍等\n"); printf("\n"); for(int i=0;i<Now_Tea.Teach_Class.size();i++) { Cla CCC = Now_Tea.Teach_Class[i]; printf("课程编号:%d\n",CCC.Num); cout<<"课程名字: "<<CCC.Name<<endl; printf("课程学分: %d\n",CCC.Score); printf("课程学时: %d\n",CCC.Time); printf("课程性质: %d\n",CCC.Property); cout<<"课程教师: "<<CCC.Teacher<<endl; printf("课程上课时间: %d %d\n",CCC.ClassTime[0],CCC.ClassTime[1]); cout<<"上课地点: "<<CCC.place<<endl; printf("学生人数: %d\n",CCC.StuNum); cout<<"课程说明: "<<CCC.Explan<<endl; cout<<"教材说明: "<<CCC.Book<<endl; printf("\n"); printf("\n"); printf("\n"); } printf("输入A,返回上一级\n"); string s; while(cin>>s) { if(s[0]=='A') { See_Choose(); break; } } } void See_Choose_Stu_Stu(string name) { void See_Choose_Stu(); system("cls"); printf("您正在根据学生姓名查询课程 \n"); printf("请稍等\n"); printf("\n"); int flag = -1; for(int i=0;i<Student.size();i++) { if(Student[i].Name == name) { flag = i; break; } } if(flag==-1) { printf("查无此人,请检查您的姓名是否输入正确\n"); printf("输入A,返回上一级"); string s; while(cin>>s) { if(s[0]=='A') { See_Choose_Stu(); break; } } return; } printf("他所选择过的课程为\n"); Stu CCC = Student[flag]; for(int i=0;i<CCC.Choose_Class.size();i++) { Cla AAA = CCC.Choose_Class[i]; cout<<CCC.Choose_Class[i].Name<<endl; } printf("输入A,返回上一级"); string s; while(cin>>s) { if(s[0]=='A') { See_Choose_Stu(); break; } } } void See_Choose_Stu_Cla(string name) { void See_Choose_Stu(); system("cls"); printf("您正在根据课程查询学生姓名 \n"); printf("请稍等\n"); printf("\n"); int flag = -1; for(int i=0;i<Class.size();i++) { if(Class[i].Name == name) { flag = i; break; } } if(flag==-1) { printf("查无此课程,请检查您的课程名称是否输入正确\n"); printf("输入A,返回上一级"); string s; while(cin>>s) { if(s[0]=='A') { See_Choose_Stu(); break; } } return; } printf("选择过的课程的学生为\n"); Cla CCC = Class[flag]; for(int i=0;i<Student.size();i++) { int flag1 = 0; for(int j = 0;j<Student[i].Choose_Class.size();j++) { if(Student[i].Choose_Class[j].Name == name) { cout<<Student[i].Name<<endl; break; } } } printf("输入A,返回上一级"); string s; while(cin>>s) { if(s[0]=='A') { See_Choose_Stu(); break; } } } void See_Choose_Stu() { void See_Choose(); system("cls"); printf("您正在查询选择某门课程的学生信息\n"); printf("请稍等\n"); printf("\n"); while(1) { printf("请输入您要进行的操作\n"); printf("A.根据学生姓名查询课程\n"); printf("B.根据课程查询学生姓名\n"); printf("C.返回上一级\n"); string s; cin>>s; if(s.size()>1) { printf("您的输入有误,请重新输入\n"); continue; } if(s[0]=='A') { string name; printf("请输入你要查询的课程名字\n"); cin>>name; See_Choose_Stu_Stu(name); break; } else if(s[0]=='B') { string name; printf("请输入你要查询的学生名字\n"); cin>>name; See_Choose_Stu_Cla(name); break; } else { See_Choose(); break; } } printf("请输入您要查询的学生"); for(int i=0;i<Now_Tea.Teach_Class.size();i++) { Cla CCC = Now_Tea.Teach_Class[i]; printf("课程编号:%d\n",CCC.Num); cout<<"课程名字: "<<CCC.Name<<endl; printf("课程学分: %d\n",CCC.Score); printf("课程学时: %d\n",CCC.Time); printf("课程性质: %d\n",CCC.Property); cout<<"课程教师: "<<CCC.Teacher<<endl; printf("课程上课时间: %d %d\n",CCC.ClassTime[0],CCC.ClassTime[1]); cout<<"上课地点: "<<CCC.place<<endl; printf("学生人数: %d\n",CCC.StuNum); cout<<"课程说明: "<<CCC.Explan<<endl; cout<<"教材说明: "<<CCC.Book<<endl; printf("\n"); printf("\n"); printf("\n"); } printf("输入A,返回上一级\n"); string s; while(cin>>s) { if(s[0]=='A') { See_Choose(); break; } } } void See_Choose() { void Tea_Choose(); system("cls"); printf("您已成功进入 教师端 选课管理系统 查看选课情况\n"); Sleep(3000); while(1) { printf("请问您要进行的操作是?\n"); printf("A.查询教师自己开设过的课程的选课情况\n"); printf("B.查询选择某门课程的学生信息\n"); printf("C.返回上一级\n"); string s; cin>>s; if(s.size()>1) { printf("您的输入有误,请重新输入\n"); continue; } if(s[0]=='A') { See_Choose_Tea();//查询教师自己开设过的课程的选课情况 break; } else if(s[0]=='B') { See_Choose_Stu();//查询选择某门课程的学生信息 break; } else if(s[0]=='C') { Tea_Choose();//返回上一级 break; } printf("您的输入有误,请重新输入\n"); } Tea_Choose(); } void Del_Class_Class() { void Del_Class(); system("cls"); printf("正在删除中,请稍等\n"); for(int i=0;i<Now_Tea.Teach_Class.size();i++) { if(Now_Tea.Teach_Class[i].Num<30) { string Name = Now_Tea.Teach_Class[i].Name; for(int j=0;j<Student.size();j++) { for(int k = 0;k<Student[j].Choose_Class.size();k++) { if(Student[j].Choose_Class[k].Name == Name) { Student[j].Choose_Class.erase(Student[j].Choose_Class.begin()+k); k--; } } } Now_Tea.Teach_Class.erase(Now_Tea.Teach_Class.begin()+i); i--; } } printf("删除成功!\n"); printf("返回上一级 请输入A\n"); string s; while(cin>>s) { if(s[0]=='A') { Del_Class(); break; } } } void Del_Class() { void Tea_Choose(); system("cls"); printf("您已成功进入 教师端 选课管理系统 删除选课操作\n"); Sleep(3000); printf("您确定要删除人数低于30人的课程吗?"); string s; while(1) { printf("A.确认\n"); printf("B.返回上一级"); if(s.size()>1) { printf("您的输入有误,请重新输入\n"); continue; } if(s[0]=='A') { Del_Class_Class();//删除人数低于30人的课程 break; } else if(s[0]=='B') { Tea_Choose();//返回上一级 break; } printf("您的输入有误,请重新输入\n"); } } void Check_information() { void Tea_Choose(); system("cls"); printf("您已成功进入 教师端 选课管理系统 统计选课信息\n"); Sleep(3000); printf("正在统计您的选课信息,清稍等\n"); printf("您所开设的课程数目为%d\n",Now_Tea.Teach_Class.size()); printf("分别是:\n"); sort(Now_Tea.Teach_Class.begin(),Now_Tea.Teach_Class.end(),cmp); for(int i=0;i<Now_Tea.Teach_Class.size();i++) { cout<<"课程名称:"<<Now_Tea.Teach_Class[i].Name<<" 课程人数:"<<Now_Tea.Teach_Class[i].StuNum<<endl; } printf("返回上一级,请输入A"); string s; while(cin>>s) { if(s[0]=='A') { Tea_Choose(); return; } } } void Tea_Choose() { void teacher(); system("cls"); printf("您已成功进入 教师端 选课管理系统\n"); Sleep(3000); while(1) { printf("请问您要进行的操作是?\n"); printf("A.查看选课情况\n"); printf("B.删除选课\n"); printf("C.统计选课信息\n"); printf("D.返回上一级\n"); string s; cin>>s; if(s.size()>1) { printf("您的输入有误,请重新输入\n"); continue; } if(s[0]=='A') { See_Choose();//查看选课情况 break; } else if(s[0]=='B') { Del_Class();//删除选课 break; } else if(s[0]=='C') { Check_information();//统计选课信息 break; } else if(s[0]=='D') { teacher();//返回上一级 break; } printf("您的输入有误,请重新输入\n"); } teacher(); } void Tea_Class_Query() { void Tea_Class(); system("cls"); printf("您已成功进入 教师端 课程管理 课程查询\n"); Sleep(3000); while(1) { printf("请输入课程编号,进行查询"); int Num; cin>>Num; for(int i=0;i<Class.size();i++) { if(Class[i].Num==Num) { Cla CCC = Class[i]; printf("课程编号:%d\n",CCC.Num); cout<<"课程名字: "<<CCC.Name<<endl; printf("课程学分: %d\n",CCC.Score); printf("课程学时: %d\n",CCC.Time); printf("课程性质: %d\n",CCC.Property); cout<<"课程教师: "<<CCC.Teacher<<endl; printf("课程上课时间: %d %d\n",CCC.ClassTime[0],CCC.ClassTime[1]); cout<<"上课地点: "<<CCC.place<<endl; printf("学生人数: %d\n",CCC.StuNum); cout<<"课程说明: "<<CCC.Explan<<endl; cout<<"教材说明: "<<CCC.Book<<endl; } } printf("继续查询请输入A\n"); printf("返回上一级,请输入B\n"); string s; while(cin>>s) { if(s[0]=='A') break; if(s[0]=='B') { Tea_Class(); return; } } } } void Tea_Class_Add() { void Tea_Class(); system("cls"); printf("您已成功进入 教师端 课程管理 添加课程\n"); if(Now_Tea.Teach_Class.size()==2) { printf("对不起,您的课程已经达到两节,不能继续添加课程\n"); Sleep(3000); Tea_Class(); } Sleep(3000); while(1) { Cla TTT; while(1) { printf("请输入新添加课程的课程编号\n"); cin>>TTT.Num; if(Get_Num_Len(TTT.Num)!=6) printf("您的编号不是六位数字,请重新输入\n"); else { int flag = 0; for(int i=0;i<Class.size();i++) if(Class[i].Num == TTT.Num) flag =1; if(flag) printf("对不起,该门课程已经存在,请重新输入\n"); else break; } } while(1) { printf("请输入新添加课程的课程名字\n"); cin>>TTT.Name; int flag = 0; for(int i=0;i<Class.size();i++) if(Class[i].Name == TTT.Name) flag =1; if(flag) printf("对不起,该门课程已经存在,请重新输入\n"); else break; } while(1) { printf("请输入新添加课程的课程学分\n"); cin>>TTT.Score; if(TTT.Score>=1&&TTT.Score<=4) break; else printf("您输入的学分并不在1-4之间,请重新输入\n"); } printf("请输入新添加课程的课程学时\n"); cin>>TTT.Time; printf("请输入新添加课程的课程性质 1表示必修 0表示选修\n"); cin>>TTT.Property; printf("请输入新添加课程的上课时间\n"); cin>>TTT.ClassTime[0]>>TTT.ClassTime[1]; printf("请输入新添加课程的上课地点\n"); cin>>TTT.place; printf("请输入新添加课程的说明\n"); cin>>TTT.Explan; printf("请输入新添加课程的教材说明\n"); cin>>TTT.Book; printf("请输入新添加课程的上线人数 1为80人 0为100人"); cin>>TTT.MaxNum; if(TTT.MaxNum==1)TTT.MaxNum=80; else TTT.MaxNum=100; TTT.StuNum = 0; printf("输入结束,请稍等\n"); Class.push_back(TTT); Now_Tea.Teach_Class.push_back(TTT); for(int i=0;i<Teacher.size();i++) if(Teacher[i].Num == Now_Tea.Num) Teacher[i] = Now_Tea; printf("添加课程成功!\n"); string s; printf("请输入A.继续添加课程,B.返回上一级\n"); while(cin>>s) { if(s[0]=='A') break; if(s[0]=='B') { Tea_Class(); return; } } } } void Tea_Class_Change() { void Tea_Class(); system("cls"); printf("您已成功进入 教师端 课程管理 修改课程\n"); Sleep(3000); while(1) { printf("请输入您要修改的课程编号\n"); int Num;cin>>Num; int flag = 0; for(int i=0;i<Class.size();i++) { if(Class[i].Num == Num) { flag = i; break; } } if(Class[flag].StuNum>0) { printf("由于该课程已有学生选择,所以只能修改限制人数\n"); printf("请问你想把该门课程的限制人数修改成多少?\n"); int NNum;cin>>NNum; Class[flag].MaxNum = NNum; printf("修改成功!\n"); printf("请输入A.继续修改课程,B.返回上一级\n"); string s; while(cin>>s) { if(s[0]=='A') break; if(s[0]=='B') { Tea_Class(); return; } } } else { printf("由于该课程无学生选择,所以能修改教材、课程简介、限制人数\n"); printf("请问你想把该门课程的教材简介修改成什么,输入-1表示不修改\n"); string SS;cin>>SS; if(SS!="-1") Class[flag].Book = SS; printf("请问你想把该门课程的课程简介修改成什么,输入-1表示不修改\n"); cin>>SS; if(SS!="-1") Class[flag].Explan = SS; printf("请问你想把该门课程的限制人数修改成多少?输入-1表示不修改\n"); int NNum;cin>>NNum; if(NNum!=-1) Class[flag].MaxNum = NNum; printf("修改成功!\n"); printf("请输入A.继续修改课程,B.返回上一级\n"); string s; while(cin>>s) { if(s[0]=='A') break; if(s[0]=='B') { Tea_Class(); return; } } } } } void Tea_Class_Del() { void Tea_Class(); system("cls"); printf("您已成功进入 教师端 课程管理 删除课程\n"); Sleep(3000); while(1) { printf("请问你要删除的课程编号是什么?\n"); int Num;cin>>Num; for(int i=0;i<Class.size();i++) { if(Class[i].Num == Num) { if(Class[i].StuNum>0) { printf("由于该课程选课人数>0,所以删除失败\n"); } else { Class.erase(Class.begin()+i); printf("删除成功!\n"); break; } } } printf("继续删除请输入A,返回上一级请输入B\n"); string s; while(cin>>s) { if(s[0]=='A') break; if(s[0]=='B') { Tea_Class(); return; } } } } void Tea_Class() { void teacher(); system("cls"); printf("您已成功进入 教师端 课程管理\n"); Sleep(3000); while(1) { printf("请问您要进行的操作是?\n"); printf("A.课程查询\n"); printf("B.添加课程\n"); printf("C.修改课程\n"); printf("D.删除课程\n"); printf("E.返回上一级\n"); string s; cin>>s; if(s.size()>1) { printf("您的输入有误,请重新输入\n"); continue; } if(s[0]=='A') { Tea_Class_Query();//课程查询 break; } else if(s[0]=='B') { Tea_Class_Add();//添加课程 break; } else if(s[0]=='C') { Tea_Class_Change();//修改课程 break; } else if(s[0]=='D') { Tea_Class_Del();//删除课程 break; } else if(s[0]=='E') { teacher();//返回上一级 break; } printf("您的输入有误,请重新输入\n"); } } void Tea_Inf() { void teacher(); system("cls"); printf("您已成功进入 教师端 个人信息管理\n"); Sleep(3000); while(1) { printf("请输入新的密码\n"); string SS;cin>>SS; Now_Tea.code=SS; printf("请输入新的邮箱\n"); cin>>SS; Now_Tea.mail=SS; printf("修改成功!\n"); for(int i=0;i<Teacher.size();i++) if(Teacher[i].name==Now_Tea.name) Teacher[i]=Now_Tea; printf("请输入 A.重新修改,B.返回上一级"); while(1) { cin>>SS; if(SS[0]=='A') break; if(SS[0]=='B') { teacher(); return; } } } } void teacher() { void start(); system("cls"); printf("欢迎使用北京邮电大学学生选课管理系统\n"); printf("您现在使用的是 教师端\n"); Sleep(3000); printf("请登录\n"); int Num; string Input_Code; string Code="-1"; int flag = 0; while(1) { printf("请输入您的教师工号\n"); cin>>Num; if(Get_Num_Len(Num)!=10) { printf("教师工号应为10位数字,您的填写有误,请重新输入\n"); continue; } for(int i=0;i<Teacher.size();i++) { if(Teacher[i].Num == Num) { flag = i; Code = Teacher[i].code; } } printf("请输入您的教师密码\n"); cin>>Input_Code; if(Code=="-1"||Input_Code != Code) { printf("密码输入错误,或者该老师并不存在,请重新输入."); continue; } Now_Type = 0; Now_Tea = Teacher[flag]; break; } printf("登陆成功\n"); Sleep(3000); system("cls"); cout<<Now_Tea.name<<"老师,您已经成功登陆选课系统教师端"<<endl; while(1) { printf("请问您要进行的操作是?\n"); printf("A.选课管理\n"); printf("B.课程管理\n"); printf("C.个人信息管理\n"); printf("D.返回上一级\n"); string s; cin>>s; if(s.size()>1) { printf("您的输入有误,请重新输入\n"); continue; } if(s[0]=='A') { Tea_Choose();//选课管理 break; } else if(s[0]=='B') { Tea_Class();//课程管理 break; } else if(s[0]=='C') { Tea_Inf();//个人信息管理 break; } else if(s[0]=='D') { start();//返回上一级 break; } printf("您的输入有误,请重新输入\n"); } start(); } void student_Choose() { void student(); system("cls"); printf("您已成功进入 学生端 学生选课\n"); Sleep(3000); if(Now_Stu.Choose_Class.size()>2) { printf("对不起,您已经选择超过三门课了,不能继续选择了,请输入A,返回上一级."); string s; while(cin>>s) { if(s[0]=='A') { student(); return; } } } while(1) { printf("请输入您要选择的课程编号.\n"); int Num;cin>>Num; int flag = -1; for(int i=0;i<Class.size();i++) if(Class[i].Num==Num) flag = i; if(flag==-1) { printf("查无此课,请重新输入\n"); continue; } if(Class[flag].MaxNum==Class[flag].StuNum) { printf("对不起,该门课选报人数已经达到上限,请重新选课\n"); continue; } Class[flag].StuNum++; Now_Stu.Choose_Class.push_back(Class[flag]); printf("添加成功!"); for(int i=0;i<Student.size();i++) if(Student[i].Name == Now_Stu.Name) Student[i] = Now_Stu; printf("输入A.继续添加课程,B.返回上一级\n"); string s; while(cin>>s) { if(s[0]=='A') break; if(s[0]=='B') { student(); return; } } } } void student_query() { void student(); system("cls"); printf("您已成功进入 学生端 查询课程\n"); Sleep(3000); while(1) { printf("请问您要进行的操作是?\n"); printf("A.根据课程名查询\n"); printf("B.根据开课学院查询\n"); printf("C.根据课余量排序所有课程\n"); printf("D.根据选课人数排序所有课程\n"); printf("F.返回上一级\n"); string s; cin>>s; if(s.size()>1) { printf("您的输入有误,请重新输入\n"); continue; } if(s[0]=='A') { printf("请输入您想查询的课程名?\n"); string ss;cin>>ss; printf("下面是搜索结果\n"); for(int i=0;i<Class.size();i++) { if(Class[i].Name==ss) { Cla CCC = Class[i]; printf("课程编号:%d\n",CCC.Num); cout<<"课程名字: "<<CCC.Name<<endl; printf("课程学分: %d\n",CCC.Score); printf("课程学时: %d\n",CCC.Time); printf("课程性质: %d\n",CCC.Property); cout<<"课程教师: "<<CCC.Teacher<<endl; printf("课程上课时间: %d %d\n",CCC.ClassTime[0],CCC.ClassTime[1]); cout<<"上课地点: "<<CCC.place<<endl; printf("学生人数: %d\n",CCC.StuNum); cout<<"课程说明: "<<CCC.Explan<<endl; cout<<"教材说明: "<<CCC.Book<<endl; } } } else if(s[0]=='B') { printf("请输入您想查询的学院?\n"); string ss;cin>>ss; printf("下面是搜索结果\n"); for(int i=0;i<Class.size();i++) { if(Class[i].Depatment==ss) { Cla CCC = Class[i]; printf("课程编号:%d\n",CCC.Num); cout<<"课程名字: "<<CCC.Name<<endl; printf("课程学分: %d\n",CCC.Score); printf("课程学时: %d\n",CCC.Time); printf("课程性质: %d\n",CCC.Property); cout<<"课程教师: "<<CCC.Teacher<<endl; printf("课程上课时间: %d %d\n",CCC.ClassTime[0],CCC.ClassTime[1]); cout<<"上课地点: "<<CCC.place<<endl; printf("学生人数: %d\n",CCC.StuNum); cout<<"课程说明: "<<CCC.Explan<<endl; cout<<"教材说明: "<<CCC.Book<<endl; } } } else if(s[0]=='C') { sort(Class.begin(),Class.end(),cmp1); printf("已经按照课余量降序排序了~\n"); for(int i=0;i<Class.size();i++) { Cla CCC = Class[i]; printf("课程编号:%d\n",CCC.Num); cout<<"课程名字: "<<CCC.Name<<endl; printf("课程学分: %d\n",CCC.Score); printf("课程学时: %d\n",CCC.Time); printf("课程性质: %d\n",CCC.Property); cout<<"课程教师: "<<CCC.Teacher<<endl; printf("课程上课时间: %d %d\n",CCC.ClassTime[0],CCC.ClassTime[1]); cout<<"上课地点: "<<CCC.place<<endl; printf("学生人数: %d\n",CCC.StuNum); cout<<"课程说明: "<<CCC.Explan<<endl; cout<<"教材说明: "<<CCC.Book<<endl; } } else if(s[0]=='D') { sort(Class.begin(),Class.end(),cmp); printf("已经按照选课人数升序排序了~\n"); for(int i=0;i<Class.size();i++) { Cla CCC = Class[i]; printf("课程编号:%d\n",CCC.Num); cout<<"课程名字: "<<CCC.Name<<endl; printf("课程学分: %d\n",CCC.Score); printf("课程学时: %d\n",CCC.Time); printf("课程性质: %d\n",CCC.Property); cout<<"课程教师: "<<CCC.Teacher<<endl; printf("课程上课时间: %d %d\n",CCC.ClassTime[0],CCC.ClassTime[1]); cout<<"上课地点: "<<CCC.place<<endl; printf("学生人数: %d\n",CCC.StuNum); cout<<"课程说明: "<<CCC.Explan<<endl; cout<<"教材说明: "<<CCC.Book<<endl; } } else if(s[0]=='F') { student(); return; } else printf("您的输入有误,请重新输入\n"); } } void student_result() { void student(); system("cls"); printf("您已成功进入 学生端 查看选课结果\n"); Sleep(3000); printf("您选过的课为\n"); for(int i=0;i<Now_Stu.Choose_Class.size();i++) { Cla CCC = Now_Stu.Choose_Class[i]; printf("课程编号:%d\n",CCC.Num); cout<<"课程名字: "<<CCC.Name<<endl; printf("课程学分: %d\n",CCC.Score); printf("课程学时: %d\n",CCC.Time); printf("课程性质: %d\n",CCC.Property); cout<<"课程教师: "<<CCC.Teacher<<endl; printf("课程上课时间: %d %d\n",CCC.ClassTime[0],CCC.ClassTime[1]); cout<<"上课地点: "<<CCC.place<<endl; printf("学生人数: %d\n",CCC.StuNum); cout<<"课程说明: "<<CCC.Explan<<endl; cout<<"教材说明: "<<CCC.Book<<endl; } printf("输入A,返回上一级\n"); string s; while(cin>>s) { if(s[0]=='A') { student(); return; } } } void student_del() { void student(); system("cls"); printf("您已成功进入 学生端 删除选课结果\n"); Sleep(3000); while(1) { printf("请输入您要删除的课程的课程编号:\n"); int Num;cin>>Num; for(int i=0;i<Now_Stu.Choose_Class.size();i++) { if(Now_Stu.Choose_Class[i].Num==Num) { Now_Stu.Choose_Class.erase(Now_Stu.Choose_Class.begin()+i); printf("删除成功!\n"); } else if(i==Now_Stu.Choose_Class.size()-1) { printf("您并没有选择该课程!\n"); } } printf("输入A.继续删除课程,B.返回上一级\n"); string s; while(cin>>s) { if(s[0]=='A') break; if(s[0]=='B') { student(); return; } } } } void student_inf() { void student(); system("cls"); printf("您已成功进入 学生端 个人信息管理\n"); Sleep(3000); while(1) { printf("请输入新的密码\n"); string SS;cin>>SS; Now_Stu.code=SS; printf("请输入新的邮箱\n"); cin>>SS; Now_Stu.Mail=SS; printf("修改成功!\n"); for(int i=0;i<Student.size();i++) if(Student[i].Num == Now_Stu.Num) Student[i] = Now_Stu; printf("请输入 A.重新修改,B.返回上一级"); while(1) { cin>>SS; if(SS[0]=='A') break; if(SS[0]=='B') { student(); return; } } } } void student() { void start(); system("cls"); printf("欢迎使用北京邮电大学学生选课管理系统\n"); printf("您现在使用的是 学生端\n"); Sleep(3000); printf("请登录\n"); int Num; string Input_Code; string Code="-1"; int flag = 0; while(1) { printf("请输入您的学生学号\n"); cin>>Num; if(Get_Num_Len(Num)!=10) { printf("学生学号应为10位数字,您的填写有误,请重新输入\n"); continue; } for(int i=0;i<Student.size();i++) { if(Student[i].Num == Num) { flag = i; Code = Student[i].code; } } printf("请输入您的学生密码\n"); cin>>Input_Code; if(Code=="-1"||Input_Code != Code) { printf("密码输入错误,或者该学生并不存在,请重新输入."); continue; } Now_Type = 0; Now_Stu = Student[flag]; break; } printf("登陆成功\n"); Sleep(3000); system("cls"); cout<<Now_Stu.Name<<"同学,您已经成功登陆选课系统教师端"<<endl; while(1) { printf("请问您要进行的操作是?\n"); printf("A.学生选课\n"); printf("B.查询课程\n"); printf("C.查询选课结果\n"); printf("D.删除选课结果\n"); printf("E.个人信息管理\n"); printf("F.返回上一级\n"); string s; cin>>s; if(s.size()>1) { printf("您的输入有误,请重新输入\n"); continue; } if(s[0]=='A') { student_Choose();//学生选课 break; } else if(s[0]=='B') { student_query();//查询课程 break; } else if(s[0]=='C') { student_result();//查询选课结果 break; } else if(s[0]=='D') { student_del();//删除选课结果 break; } else if(s[0]=='E') { student_inf();//个人信息管理 break; } else if(s[0]=='F') { start();//返回上一级 break; } printf("您的输入有误,请重新输入\n"); } start(); } void register_teacher() { system("cls"); void start(); printf("欢迎使用北京邮电大学学生选课管理系统\n"); printf("您现在正在注册老师用户\n"); Sleep(3000); Tea CCC; while(1){ printf("请输入您要注册的教师编号\n"); cin>>CCC.Num; if(Get_Num_Len(CCC.Num)!=10) printf("输入格式有误,请重新输入\n"); else break; } printf("请输入您要注册的教师院系\n"); cin>>CCC.Depatment; printf("请输入您要注册的教师姓名\n"); cin>>CCC.name; while(1) { printf("请输入您要注册的教师邮箱\n"); cin>>CCC.mail; int flag = 0; for(int i=0;i<CCC.mail.size();i++) { if(CCC.mail[i]=='@') { for(int j=i;j<CCC.mail.size();j++) { if(CCC.mail[j]=='.') flag = 1; } } } if(flag) break; else printf("输入格式有误,请重新输入\n"); } printf("请输入您要注册的教师账号密码\n"); cin>>CCC.code; Teacher.push_back(CCC); Sleep(3000); printf("注册成功!\n"); printf("5s后返回上一级菜单!\n"); start(); } void register_student() { system("cls"); void start(); printf("欢迎使用北京邮电大学学生选课管理系统\n"); printf("您现在正在注册学生用户\n"); Sleep(3000); Stu CCC; while(1){ printf("请输入您要注册的学生学号\n"); cin>>CCC.Num; if(Get_Num_Len(CCC.Num)!=10) printf("输入格式有误,请重新输入\n"); else break; } printf("请输入您要注册的学生院系\n"); cin>>CCC.Depatment; printf("请输入您要注册的学生专业\n"); cin>>CCC.Major; printf("请输入您要注册的学生姓名\n"); cin>>CCC.Name; printf("请输入您要注册的学生性别,1为男,0为女\n"); cin>>CCC.Sex; printf("请输入您要注册的学生电话号码\n"); cin>>CCC.PhoneNumber; while(1) { printf("请输入您要注册的学生邮箱\n"); cin>>CCC.Mail; int flag = 0; for(int i=0;i<CCC.Mail.size();i++) { if(CCC.Mail[i]=='@') { for(int j=i;j<CCC.Mail.size();j++) { if(CCC.Mail[j]=='.') flag = 1; } } } if(flag) break; else printf("输入格式有误,请重新输入\n"); } printf("请输入您要注册的学生账号密码\n"); cin>>CCC.code; Student.push_back(CCC); printf("注册成功!\n"); printf("5s后返回上一级菜单!\n"); start(); } void save() { void start(); system("cls"); printf("正在保存信息\n"); ofstream ocout; if(Class.size()!=0) { ocout.open("Class.txt"); ocout<<Class.size()<<endl; for(int i=0;i<Class.size();i++) { ocout<<Class[i].Num<<" "<<Class[i].Name<<" "<<Class[i].Depatment<<" "<<Class[i].Score<<" "<<Class[i].Time; ocout<<" "<<Class[i].Property<<" "<<Class[i].Teacher<<" "<<Class[i].place<<" "<<Class[i].StuNum<<" "<<Class[i].MaxNum<<" "<<Class[i].Explan<<" "<<Class[i].Book<<endl; } ocout.close(); } if(Teacher.size()!=0) { ocout.open("Teacher.txt"); ocout<<Teacher.size()<<endl; for(int i=0;i<Teacher.size();i++) { ocout<<Teacher[i].Num<<" "<<Teacher[i].Depatment<<" "<<Teacher[i].name<<" "<<Teacher[i].mail<<" "<<Teacher[i].code<<" "; ocout<<Teacher[i].Teach_Class.size()<<" "; for(int j=0;j<Teacher[i].Teach_Class.size();j++) { for(int t=0;t<Class.size();t++) { if(Teacher[i].Teach_Class[j].Num == Class[t].Num) ocout<<Class[t].Num<<" "; } } ocout<<endl; } ocout.close(); } if(Student.size()!=0) { ocout.open("Student.txt"); ocout<<Student.size()<<endl; for(int i=0;i<Student.size();i++) { ocout<<Student[i].Num<<" "<<Student[i].Depatment<<" "<<Student[i].Major<<" "<<Student[i].Name<<" "<<Student[i].Sex<<" "<<Student[i].PhoneNumber<<" "<<Student[i].code<<" "<<Student[i].Mail<<" "; ocout<<Student[i].Choose_Class.size()<<" "; for(int j=0;j<Student[i].Choose_Class.size();j++) { for(int t=0;t<Class.size();t++) { if(Student[i].Choose_Class[j].Num == Class[t].Num) ocout<<Class[t].Num<<" "; } } } ocout.close(); } printf("保存成功,返回上一级\n"); Sleep(3000); start(); } void start() { system("cls"); printf("欢迎使用北京邮电大学学生选课管理系统\n"); Sleep(3000); system("cls"); printf("请问您接下来的操作是?\n"); printf("A.进入教师端\n"); printf("B.进入学生端\n"); printf("C.注册老师用户\n"); printf("D.注册学生用户\n"); printf("E.保存当前内容\n"); while(1) { printf("你的选择是:"); string s; cin>>s; if(s.size()>1) { printf("你的输入有误,请重新选择.\n"); continue; } if(s[0]=='A') { teacher();//教师端 break; } if(s[0]=='B') { student();//学生端 break; } if(s[0]=='C') { register_teacher();//注册老师用户 break; } if(s[0]=='D') { register_student();//注册学生用户 break; } if(s[0]=='E') { save(); break; } printf("你的输入有误,请重新选择.\n"); } } void pre() { ifstream icin; icin.open("Class.txt"); Cla C; int nnum;icin>>nnum; for(int i=0;i<nnum;i++) { icin>>C.Num>>C.Name>>C.Depatment>>C.Score>>C.Time>>C.Property>>C.Teacher>>C.place>>C.StuNum>>C.MaxNum>>C.Explan>>C.Book; if(i==0) continue; Class.push_back(C); } /////////////////////////////////////////// //Class文件格式: //第一行一个数字n表示有多少节课 //接下来n行一共12个属性 /////////////////////////////////////////// icin.close(); icin.open("Teacher.txt"); Tea B; icin>>nnum; for(int i=0;i<nnum;i++) { icin>>B.Num>>B.Depatment>>B.name>>B.mail>>B.code; int K;icin>>K; int temp; for(int j=0;j<K;j++) { icin>>temp; B.Teach_Class.push_back(Class[temp]); } Teacher.push_back(B); } /////////////////////////////////////////// //Teacher文件格式: //第一行一个数字n表示有多少老师 //接下来n行一共5个属性,然后一个数字M,表示这个老师教授M堂课,课分别是哪几节 /////////////////////////////////////////// icin.close(); icin.open("Student.txt"); Stu A; icin>>nnum; for(int i=0;i<nnum;i++) { icin>>A.Num>>A.Depatment>>A.Major>>A.Name>>A.Sex>>A.PhoneNumber>>A.code>>A.Mail; int K;icin>>K; int temp; for(int j=0;j<K;j++) { icin>>temp; A.Choose_Class.push_back(Class[temp]); } Student.push_back(A); } icin.close(); /////////////////////////////////////////// //Teacher文件格式: //第一行一个数字n表示有多少学生 //接下来n行一共8个属性,然后一个数字M,表示这个学生上M堂课,课分别是哪几节 /////////////////////////////////////////// } int main() { Class.clear(); Teacher.clear(); Student.clear(); pre(); start(); return 0; }