大作业 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;
}

 

posted @ 2015-09-14 09:22  qscqesze  阅读(648)  评论(0编辑  收藏  举报