大作业 XXX大学 课程管理系统

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