C++课程设计--学生选课系统

一、设计思路

1、设计问题

 

 

(1)如何登录?通过用户名找到对应对象?

(2)管理员如何对课程、学生、老师进行增删查改?

(3)如何循环输入课程、老师、学生信息?课程有多个上课时间和地点怎么办?

(4)管理员如何查看学生成绩,选课情况?

(5)学生、老师如何进行选、退课?如何判断时间是否冲突?是否选过?

(6)学生选、退课后如何将名单反馈给老师?

(7)课程数据类内,如何储存选了课的学生信息?

(8)老师如何给学生提交平时成绩和考试成绩?并将成绩分别反馈给课程数据和对应学生?

(9)学生如何对自己的成绩进行查询?老师如何查看所授课程的选课学生的成绩?

(10)学生、老师如何查看可选的课程?

 (11)学生、老师如何查看自身的选课情况和课程表?

2、解决思路

 

 

 

本系统是对课程、老师、信息进行操作,需有课程、老师、学生的数据类。

老师、学生要进行自主选退课等操作,需由老师、学生的操作类。

而管理员可以对课程、老师、学生的基础信息进行增删查改,须有一个管理员操作类。

(1)打开系统,首先是选择是用户还是管理员,管理员直接进入管理操作类;用户登录通过用户名(学号or工号)唯一,可在学生、老师总数据内查找是否存在对应的对象,并判断是老师还是学生,然后进入对应的操作类进行操作,操作完成要对相应修改、添加的信息进行保存。

(2)管理员有所有课程、学生、老师的信息,找到单个对象,通过数据类的函数对数据类进行操作,显示、删除或修改等。

(3)管理员循环输入课程、学生、老师信息,可以通过while实现,对于第一步输入进行判断,-1结束,跳出循环,否则继续输入,最后保存。

(4)学生、老师选、退课,通过输入的课程号及班号到数据库内查询,若存在,通过数据类函数调用判断当前情况与要选的课程是否冲突,冲突输出提示,反之保存课程信息,并将对应老师填上,或者保存学生信息。

(5)课程数据类内可以建一个学生信息的结构体向量,用来保存选了课的学生的基础信息,并将其反馈给老师,可以通过读老师文件时,将课程给老师时,带上这个结构体向量,可以将选课学生名单反馈给老师。

(6)老师要分别输入选课学生的平时成绩和考试成绩(默认3:7),将其保存,并将其保存到课程数据类内的学生结构体内,学生、老师、管理员查成绩时,可以通关函数调用数据计算绩点等。

(7)学生、老师选课是对所有课程进行选择,在老师、学生数据类内,应有一个课程向量来储存所有的课程,选课时全部显示,方便老师、学生进行选课。

(8)课程表可以在数据类内建一个string二维数组,用于储存对应时间上的课程名称,无课时为空。选课时用于判断时间是否冲突。

3、系统功能规划

 

 

 

学生选课系统使用对象有:管理员、所有学生、所有老师。

(1)系统通过用户登录,分别进入对应操作界面,角色有:管理员、老师、学生。

(2)管理员功能:完成对学生、教师、课程基本数据的“增删查改”;对选课结果及学生成绩进行查询(查某个学生、查某个教师教的某门课、某门课程的选课情况及学生成绩)。

学生功能: 查看课程;选、退课;查询个人的选课情况及成绩情况;显示课程表。

老师功能: 查看课程;选、退课;查询个人的选课情况;显示课程表、显示选课学生名单;录入学生成绩并反馈到每个学生选课信息中

 

二、具体实现

1、类设计

 

 

 

(1)学生结构体:

学号、姓名、班级、平时成绩、考试成绩。

(2)课程数据类:

私有成员:课程号、课程名称、学分、课容量、教学班号、任课老师(初始值-1)、上课时间、地点(多个)、学生结构体向量。

公有成员函数:取、改成员函数;构造函数;整体输入、输出流;

(3)学生数据类:

私有成员:学号、姓名、班级、选课数目、课程向量、平均学分绩点、课程表。

公有成员函数:取、改成员函数;构造函数;整体输入、输出流;

(4)老师数据类:

    私有成员:工号、姓名、院系、选课数目、课程向量、课程表。

公有成员函数:取、改成员函数;构造函数;整体输入、输出流;

(5)管理操作类:

    私有成员:课程向量、学生向量、老师向量。

公有成员函数:课程、学生、老师的增删查改函数;课程、学生、老师文件的读取、存储;菜单。

(6)老师操作类:

    私有成员:一个老师对象;课程向量;

公有成员函数:课程的文件读取、存储;选课;退课;选课结果及选课学生成绩显示;

(7)学生操作类:

    私有成员:一个学生对象;课程向量;

公有成员函数:课程的文件读取、存储;选课;退课;选课结果及成绩显示;

(8)登录类:

     需要所有学生、老师信息及其文件,与管理信息相同的太多,所以继承了管理类。只需新建一个菜单,进行登录,然后通过输入的用户名进行判断是学生还是老师,继而找到对应对象的操作类,进行选择操作。

2、功能实现过程



(1)循环添加课程(添加老师与学生类似,删除、修改同理):
课程输入流:
istream&operator>>(istream &is,course &d)
    {string a,b,c;
    float x;
    int z,i=0,k=0;
        cout<<"请依次输入课程代号、课程名称、学分、课容量、教学班号,输入-1结束"<>a;
        if(a=="-1") {d.setno("-1");return is;}
        is>>b;
        is>>x;
        is>>z>>c;
        course t(a,b,x,z,c);
        while(1)
        {cout<<"输入上课时间、地点,输入-1结束"<>t.time[i];
            if(t.time[i]==-1) break;
            is>>t.where[i];
            i++;
        }
        d=t;
        d.n=i;
        return is;
}
管理员进行循环输入课程:
  void guanli::addcourse()
{
    int a;
    course z;
    while(1)
    {system("cls");
        cin>>z;
        if(z.getno()=="-1") break;
        a=searchcourse(z.getno(),z.getbanhao());
        if(a!=-1) cout<<"已存在此门课程"<>x1)
     {if(x1.getno()=="-1") break;
     infile>>m;
     x1.setteacher(m);
        infile>>n;
        for(int i=0;i>m>>z>>l>>x>>y;
            x1.addstudent(m,z,l,x,y);
        }
        c.push_back(x1);
        ma.insert(make_pair(x1.getno(),c.size()-1));
     }
     infile.close();system("cls");
 }
存文件
void guanli::save1()
 {
int j,k;
     ofstream outfile("d:\\20164235-course.tet",ios::out);
     if(!outfile) return ;
     for(int i=0;i>z;
            if(z=="-1") break;
        else
            {cin>>hao;
                if(s.chakecheng(z)!=-1) {cout<<"此门课程已选过"<>ji;
           cout<>aa;
                if(aa=="-1") break;
                cin>>b;
                if(t.chakecheng(aa,b)==-1) cout<<"输入有误,请重新输入"<>z;
                if(z==-1) break;
                else if(z==1)
                pschengji(aa,b);
                else if(z==2) kschengji(aa,b);
                }
                }
                system("pause");}
            }
(6)老师所授课程选课情况及成绩展示:
课程类里展示选课的学生
void course::displaystudent()
{
    int i;
    cout<<"共有"<>aa;
                if(aa=="-1") {break;}
                cin>>b;
                if(t.chakecheng(aa,b)==-1) {cout<<"输入有误,请重新输入"<

2、分析运行结果

 

 

 

本系统基本实现了管理员对课程、学生、老师信息的增删查改

学生、老师也可以选退课,信息可以及时反馈老师可以为学生评定成绩,学生、老师、管理员均可查看成绩。任老师有选课学生名单,基本上实现了选课系统的基础功能

但是当多个人同时进行选课时,难免会有信息更替导致信息传递有延迟,使得所看信息不是最新的

再者,系统运行时间较长

 

3、改进想法

 

 

 

想法原来挺多的。。但是能想到的都尽力实现了,我存储学生成绩用的是结构体(因为上一次已经把成绩都输好了,改起来太麻烦,就没有改),我感觉老师要的成绩类存储与结构体用法大同小异吧?!而且这个结构体用起来感觉挺方便的。。。

这一次的系统相对于上一次的,我将课程里储存上了对应选课学生信息,使得调用输出时更加方便了,优化了上一次现输出现调用延长程序运行时间的BUG。

另一处改动的地方就是对于成绩,加了平时成绩,后期需要对学生成绩进行运算保存,绩点的运算是读文件时进行函数调用运算保存的,没有直接存在文件里

再就是没有对学生根据绩点进行排名,按照正常的,应该是专业内排名,还需建专业类~~~

选课学生名单也没有进行排序。。因为应该是根据专业内的学号进行排名。。

以上都是可以加班级类、专业类进行改进的、

四、设计体会与小结

1、设计遇到的问题及解决办法

 

 

 

  1. 读文件、写文件问题

一开始并不会文件,然后就根据老师给的莫办自己摸索,再千万次程序非正常停止后,恍然大悟,就是一个输入输出,只不过是文件输入,输出到文件。。。注意输入输出对应就好—。—、

   2、老师选课、学生选课后(退课同)要经信息反馈;

特别学生选课后,要将学生名单反馈给老师,一大串的函数调用,各种调,说实话,写的过程整个人都是懵的,完全不知道怎么完成的…

反正就是暴力解决,需要哪里取哪里。再就是通过频繁文件读取,更新实时信息,我的信息并不是都直接存到文件里,很多是读文件时保存的,(例如:读老师信息时,文件里只有课程号与班号,然后对其进行查找,然后再存到老师向量里,感觉这样,信息准确度更高)

  3.老师输入成绩,并进行反馈

我的这些信息,都是存到课程数据类的学生结构体内,学生查成绩时现到课程里面查找自己的成绩,然后进行计算,再保存输出、

4.操作类里只有一个对象

本来刚想的时候感觉很繁琐,没有什么思路,后来摸索着尝试,再就是跟别人讨论,发现放到构造函数里进行类的转换操作,也实现了对单个对象进行操作、

(5)登录类问题

我的登录类(名字是caozuo)直接继承了管理类,因为登录类里面需要所有的信息,(学生老师选的课程读文件时现添加,保证信息的准确性)所以方便起见直接继承了。。。不知道安不安全、、、但是在写一遍太繁琐、、所以还是用了继承

PS:写的时候其实遇到挺多麻烦,但大多是因为对系统的不熟悉,写了这一个系统后,感觉其实不难,就是麻烦,各种函数调用。。。写的恶心。。或许也是会者不难,难者不会吧。重要的,还是对系统的功能的分析理解,全面分析好系统的功能,才能完善系统!

 

2、通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高

本次设计系统学习的知识不少,会了类的定义与使用,还学了继承,也应用到了本次系统里,再就是懂得很多代码错误,英语能力或许也有提高,\(^o^)/~

巩固的知识才是真的多!vector、map、迭代器的应用啊;改代码、写代码能力呀;对系统的功能分析能力呀;结构体、类、继承的应用点啊;还有就是平心静气的写代码能力,真的好磨砺人哦(⊙o⊙),课程设计这一个周不必说了、蓝瘦!在宿舍时也是,基本上每次写代码都要连续坐5、6个小时,一气呵成才行,不然再继续的时候,真的有一种想全部删了重写的冲动(因为根本不知道上次改的什么、、而且短时间内改的,很多是错误的。。)

    至于提高,那必须是全面提高呀!巩固的知识都是提高,我觉得对自身最有用的就是改代码能力,不仅是改自己的,还帮别人看过几眼,改代码能力真的显著提高!对于写系统会出的错,我也基本都见过了,实在是出过的错比我吃的饭都多╮(╯▽╰)╭。写代码能力也提高不少,后来的几次,刚写的代码错误很少了,基本上都能够实现想要达成的目的。老师上课时讲的对系统的功能分析也使我获益匪浅,虽然我分析功能这一方面还不够优秀,但也是提高不少。

3、有何感想

 

 

 

感想嘛。自己就还是个小菜鸟,还要继续努力呀!做系统时(也不仅仅是系统),要思虑全面,对所有对象都考虑周全,再就是不能自以为是,觉得对的,很可能还有BUG对于每个功能进行实际操作一遍,很多时候,程序运行一遍过了之后,还是会有错误、那是没有运行顾及到的。

写代码真的是一个苦差事,写的时候烦的不行,总有一种坚持不下去的感觉。但是写完后,会感觉十分自豪,身心舒畅!现在看看自己的代码,也不知道是怎么完成的。。反正我能想到的功能都实现了~~也不知道这1500行代码是怎么出来的╮(╯▽╰)╭。总之收获很多,结局是美好的,很开心O(∩_∩)O

再就是,我不得不吐槽,这个codeblocks有毒啊!!!有时候写完代码,根本就没再改过,再打开就运行不了了?!。。明明上一次运行时好好的。。有两次交完作业之后又发现自己程序不能运行了。。。慌得不行!!!然而重新打开几次又莫名其妙好了,。。。真的是。。。也是对人心理素质的考验!!!o(>﹏<)o

代码:

#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct some
{
    string snumber;
    string sname;
    string sclas;
    float ps;
    float ks;
};
class course{
    vectorsss;
    mapss;//学号与位置
    map::iterator ss1;
    string name,no,banhao,teacher,where[5];
    int number,time[5],n;//课容量
    float xuefen,chengji;
public:
    course(string n,string na,float fen,int x,string z): no(n),name(na),xuefen(fen),number(x),banhao(z){chengji=0;teacher="-1";}
    course(){name="-1";no="-1";banhao="-1";teacher="-1";
    xuefen=0;number=0;chengji=0;}
    string getno(){return no;}
    void setno(string n){no=n;}
    string getbanhao(){return banhao;}
    void setbanhao(string n){banhao=n;}
    string getname(){return name;}
    void setname(string n){name=n;}
    string getteacher(){return teacher;}//任课老师
    string getsssnumber(int a){return sss[a].snumber;}//所含学生
    string getsssname(int a){return sss[a].sname;}
    string getsssclas(int a){return sss[a].sclas;}
    float getsssps(int a){return sss[a].ps;}
    float getsssks(int a){return sss[a].ks;}
    void displaystudent();
    int sssn(){return sss.size();}
    void addstudent(string a,string b,string c,float x,float y);
    void erasestudent(string a);
    void setteacher(string n){teacher=n;}
    float getxuefen(){return xuefen;}
    void setxuefen(float n){xuefen=n;}
    int getnumber(){return number;}
    void setnumber(int n){number=n;}
    float getichengji(string a){return sss[ss[a]].ps*0.3+sss[ss[a]].ks*0.7;}
    int getn(){return n;}
    void paixv();
    void tianjiaps(string a,float b){sss[ss[a]].ps=b;}
    void tianjiaks(string a,float b){sss[ss[a]].ks=b;}
    float getps(string a) {ss1=ss.find(a); if(ss1!=ss.end()) return sss[ss[a]].ps; else return -1;}
    float getks(string a) {ss1=ss.find(a); if(ss1!=ss.end()) return sss[ss[a]].ks; else return -1;}
    float getjiji(string a){ss1=ss.find(a); if(ss1!=ss.end()) return sss[ss[a]].ps*0.3+sss[ss[a]].ks*0.7;else return -1;}
    int gettime(int a){return time[a];}
    string getwhere(int a){return where[a];}
    friend ostream&operator<<(ostream &os,course &d);
    friend istream&operator>>(istream &is,course &d);
};
    ostream&operator<<(ostream &os,course &d)
    {
        int i;
        cout<<"课程代号\t课程名称\t课程学分\t课堂容量\t教学班号\t任课老师"<>(istream &is,course &d)
    {string a,b,c;
    float x;
    int z,i=0,k=0;
        cout<<"请依次输入课程代号、课程名称、学分、课容量、教学班号,输入-1结束"<>a;
        if(a=="-1") {d.setno("-1");return is;}
        is>>b;
        is>>x;
        is>>z>>c;
        course t(a,b,x,z,c);
        while(1)
        {cout<<"输入上课时间、地点,输入-1结束"<>t.time[i];
            if(t.time[i]==-1) break;
            is>>t.where[i];
            i++;
        }
        d=t;
        d.n=i;
        return is;
    }
    bool cmp1(course a,course b)//课程号字典排序
{
    return a.getno()second);paixv();}
}
void course::displaystudent()
{
    int i;
    cout<<"共有"<c;
    vector::iterator it;
    mapma;
    map::iterator ma1;
    course z;
    string name,number,clas;
    int n;//所选课程总和
    float average,jidian,zong;
    float s;//课程绩点总和
    int rankk;

    string kebiao[6][8];
    float all;//已选学分
public:
    student(string num,string na,string cla):number(num),name(na),clas(cla)
    {
        for(int i=0;i<=5;i++)
            for(int j=0;j<=7;j++)
            kebiao[i][j]="--------";
    }
    student(){
    name="-1";number="-1";clas="-1";
    }
    string getnumber(){return number;}
    void setnumber(string m){number=m;}
    string getname(){return name;}
    void setname(string m){name=m;}
    string getclas(){return clas;}
    void setclas(string m){clas=m;}
    int getn(){return c.size();}
    void setn(int a){n=a;}
    float getxuefen(){return all;}
    float getjidian(){return jidian;}
    void setjidian(float a){jidian=a;}
    float getaverage(){return average;}
    void NEW();
    int find(string a);
    void add(course a);
    void erasee(string noo);
    float dankechengji(int i){return c[i].getichengji(number);}
    void xiugai();
    int getfind();
    void paixv();
    void kebiaodisplay();
    void displayalll();
    int chake(int a){if(kebiao[a%10][a/10]!="--------") return 1;else return 0;}
    int chakecheng(string a){ma1=ma.find(a); if(ma1!=ma.end()) return ma[a];else return -1;}
    string courseno(int k){return c[k].getno();}
    string coursehao(int j){return c[j].getbanhao();}
    friend ostream&operator<<(ostream &os,student &d);
    friend istream&operator>>(istream &is,student &d);
    void displayall();
};
void student::displayalll()
{
    float zong=0,xuefen=0;
    int i,j;
    for(int i=0;i>(istream &is,student &d)
{
    string a,b,c,x;
    cout<<"依次输入学生学号、姓名、班级,按-1结束输入"<>a;
    if(a=="-1") {d.setnumber(a);return is;}
    is>>b>>c;
    student t(a,b,c);
    d=t;
    return is;
}
void student::paixv()
{
    ma.clear();
    sort(c.begin(),c.end(),cmp1);
    n=c.size();
    for(int i=0;ib.getjidian();
}
class teacher{
    string hao;
    string yuanxi;
    string name;
    int number;
    vectorc;
    vector::iterator it;
    mapma;
    map::iterator ma1;
    course z;
    string kebiao[6][8];
public:
    teacher(string a,string b,string c):hao(a),yuanxi(c),name(b)
    {for(int i=0;i<=5;i++)
            for(int j=0;j<=7;j++)
            kebiao[i][j]="--------";}
    teacher(){
    hao="-1";yuanxi="-1";name="-1";number=0;}
    string gethao(){return hao;}
    void sethao(string a){hao=a;}
    string getyuanxi(){return yuanxi;}
    void setyuanxi(string a){yuanxi=a;}
    string getname(){return name;}
    void setname(string a){name=a;}
    int getnumber(){return c.size();}
    void setnumber(int a){number=a;}
    void paixv();
    void add(course a);
    int chake(int a){if(kebiao[a%10][a/10]!="--------") return 1;else return 0;}
    int chakecheng(string a,string b){ma1=ma.find(a); if(ma1!=ma.end()&&c[ma[a]].getbanhao()==b) return ma[a];else return -1;}
    string courseno(int k){return c[k].getno();}
     int chakechengm(string a){ma1=ma.find(a); if(ma1!=ma.end()) return ma[a];else return -1;}
    string coursehao(int j){return c[j].getbanhao();}
    void erasee(string noo);
    void kebiaodisplay();
    void displaystudent(string a,string b);
    void setpschengji(string a,int i,float ji)
    {c[ma[a]].tianjiaps(c[ma[a]].getsssnumber(i),ji);}
    void setkschengji(string a,int i,float ji)
    {c[ma[a]].tianjiaks(c[ma[a]].getsssnumber(i),ji);}
    friend ostream&operator<<(ostream &os,teacher &d);
    friend istream&operator>>(istream &is,teacher &d);
};
void teacher::displaystudent(string a,string b)
{   ma1=ma.find(a);
    if(ma1!=ma.end()&&c[ma[a]].getbanhao()==b)
    c[ma[a]].displaystudent();
    else cout<<"输入有误,请重新输入"<>(istream &is,teacher &d)
{
    string a,b,c;
    cout<<"依次输入教师工号、教师姓名、院系,输入-1结束"<>a;
    if(a=="-1") {d.sethao(a);return is;}
    is>>b>>c;
    teacher t(a,b,c);
    d=t;
    return is;
}
bool cmpt(teacher a,teacher b)//学生按学号排序
{
    return a.gethao()second]<second);
    ma.erase(ma1);number=c.size();
    paixv();

}
class guanli
{

public:
    vectorc;
    vector::iterator it;
    mapma;
    map::iterator ma1;
    vectors;
    vector::iterator its;
    mapmas;
    map::iterator ma1s;
    vectort;
    vector::iterator itt;
    mapmat;
    map::iterator ma1t;
    void addcourse();
    void addstudent();
    void addteacher();

    int searchcourse(string no,string aa);
    int searchstudent(string no);
    int searchteacher(string no);

    void deletecourse();
    void deletestudent();
    void deleteteacher();

    void querycourse();
    int  qquerycourse(string name,string hao);
    void querystudent();
    int  qquerystudent(string name);
    void queryteacher();
    int  qqueryteacher(string name);

    void chargecourse();
    void chargestudent();
    void chargeteacher();

    void displaycourse(int a);
    void displaystudent();
    void displayteacher();

    void menudisplay1();
    void menudisplay2(int a);
    void menu2(int a);
    void menu1();

    void load1();
    void load2();
    void load3();
    void save1();
    void save2();
    void save3();

    void paixvc();
    void paixvs();
    void paixvt();
};
void guanli::paixvc()
{
    ma.clear();
    sort(c.begin(),c.end(),cmp1);
    for(int i=0;i>z;
        if(z.getno()=="-1") break;
        a=searchcourse(z.getno(),z.getbanhao());
        if(a!=-1) cout<<"已存在此门课程"<>z;
    if(z.getnumber()=="-1") break;
    if(searchstudent(z.getnumber())!=-1) cout<<"已存在此学号学生"<>z;
        if(z.gethao()=="-1") break;
    if(searchteacher(z.gethao())!=-1) cout<<"已存在此工号教师"<>name;
    if(name=="-1") break;
    cin>>a;
    k=searchcourse(name,a);
    if(k!=-1) {cout<>name;
    if(name=="-1") break;
    k=searchstudent(name);
    if(k!=-1) cout<>name;
    if(name=="-1") break;
    k=searchteacher(name);
    if(k!=-1) cout<>na;
        if(na=="-1") break;
        cin>>hao;
        k=searchcourse(na,hao);
        if(k!=-1) c.erase(c.begin()+k);
        else cout<<"课程号输入有误,请重新输入"<>na;
        if(na=="-1") break;
        k=searchstudent(na);
        if(k!=-1) s.erase(s.begin()+k);
        else cout<<"学号输入有误,请重新输入"<>na;
        if(na=="-1") break;
        k=searchteacher(na);
        if(k!=-1) t.erase(t.begin()+k);
        else cout<<"工号输入有误,请重新输入"<>na>>hao;
        if(na=="-1") break;
        k=searchcourse(na,hao);
        if(k!=-1)
        {
            cout<>zz;
            c[k]=zz;
            cout<<"修改后的信息:"<>na;
        if(na=="-1") break;
        k=searchstudent(na);
        if(k!=-1)
        {
            cout<>zz;
            s[k]=zz;
            cout<<"修改后的信息:"<>na;
        if(na=="-1") break;
        k=searchteacher(na);
       if(k!=-1)
        {
            cout<>zz;
            t[k]=zz;
            cout<<"修改后的信息:"<>x1)
     {if(x1.getno()=="-1") break;
     infile>>m;
     x1.setteacher(m);
        infile>>n;
        for(int i=0;i>m>>z>>l>>x>>y;
            x1.addstudent(m,z,l,x,y);
        }
        c.push_back(x1);
        ma.insert(make_pair(x1.getno(),c.size()-1));
     }
     infile.close();system("cls");
 }
 void guanli::load2()
 {
     int a;
     course x;
     string zz,hao;
     student x1;
     float l;
     ifstream infile("d:\\20164235-student.txt",ios::in);
     if(!infile) return ;
     s.clear();
     while(infile>>x1)
     {

         if(x1.getnumber()=="-1") break;
         infile>>l;
         x1.setjidian(l);
         infile>>a;
         while(a--)
         {infile>>zz>>hao;
            x1.add(c[qquerycourse(zz,hao)]);
         }
         x1.setn(a);x1.displayalll();
         s.push_back(x1);
         mas.insert(make_pair(x1.getnumber(),s.size()-1));
     }
     infile.close();system("cls");
 }
 void guanli::load3()
 {
     int a;
     course x;
     string zz,hao;
     teacher x1;
     ifstream infile("d:\\20164235-teacher.txt",ios::in);
     if(!infile) return ;
     t.clear();
    while(infile>>x1)
     {

         if(x1.gethao()=="-1") break;
         infile>>a;
         while(a--)
         {infile>>zz>>hao;

            x1.add(c[qquerycourse(zz,hao)]);
         }x1.setnumber(a);
         t.push_back(x1);
         mat.insert(make_pair(x1.gethao(),t.size()-1));
     }
     infile.close();system("cls");
 }
 void guanli::save1()
 {int j,k;
     ofstream outfile("d:\\20164235-course.txt",ios::out);
     if(!outfile) return ;
     for(int i=0;i>x;
        if(!x) break;
        system("cls");
        menu2(x);
    }
}
void guanli::menu2(int a)
{
    int x;
    system("cls");

    if(a==1)
    {
        while(1)
        {
        menudisplay2(a);
        cout<<"请输入你的选择"<>x;
        if(!x) break;
        switch(x)
        {
        case 1:
            addcourse();
            break;
        case 2:
            deletecourse();
            break;
        case 3:
            chargecourse();
            break;
        case 4:
            querycourse();
            break;
        case 5:
            displaycourse(1);
            break;
        }
        system("pause");
        system("cls");
    }
    }
    if(a==2)
    {
        while(1)
        {
            menudisplay2(a);
            cout<<"请输入你的选择"<>x;
        if(!x) break;
        switch(x)
        {
        case 1:
            addstudent();
            break;
        case 2:
            deletestudent();
            break;
        case 3:
            chargestudent();
            break;
        case 4:
            querystudent();
            break;
        case 5:
            displaystudent();
            break;
        }
        system("pause");
        system("cls");
        }
    }
    if(a==3)
    {
        while(1)
        {
            menudisplay2(a);
            cout<<"请输入你的选择"<>x;
        if(!x) break;
        switch(x)
        {
        case 1:
            addteacher();
            break;
        case 2:
            deleteteacher();
            break;
        case 3:
            chargeteacher();
            break;
        case 4:
            queryteacher();
            break;
        case 5:
            displayteacher();
            break;
        }
        system("pause");
        system("cls");
    }}

}
class studentcaozuo
{
    student s;
    vectorc;
    vector::iterator it;
    mapma;
    map::iterator ma1;
public:
    void displaycourse();
    void addc();
    void erasec();
    void load1();
    student A(){return s;}
    void xuanze();
    void jieguo();
    void save1();
    studentcaozuo(student a):s(a){load1();xuanze();save1();}
};
void studentcaozuo::save1()
 {int j,k;
     ofstream outfile("d:\\20164235-course.txt",ios::out);
     if(!outfile) return ;
     for(int i=0;i>a;
        if(a==0) break;
        else if(a==1) addc();
        else if(a==2) erasec();
        else if(a==3) s.displayall();
        else if(a==4) {system("cls");cout<>x1)
     {if(x1.getno()=="-1") break;
     infile>>m;
     x1.setteacher(m);
        infile>>n;
        for(int i=0;i>m>>z>>l>>x>>y;
            x1.addstudent(m,z,l,x,y);
        }
        c.push_back(x1);
        ma.insert(make_pair(x1.getno(),c.size()-1));
     }
     infile.close();system("cls");
 }
 void studentcaozuo::addc()
 {
        string z,hao;
        int i,j,t=0;
        while(1)
        {system("cls");
        load1();
        displaycourse();
     cout<>z;
            if(z=="-1") break;
        else
            {cin>>hao;
                if(s.chakecheng(z)!=-1) {cout<<"此门课程已选过"<>z;
            if(z=="-1") break;
        else
            {ma1=ma.find(z);
            if(ma1!=ma.end())
            {//cout<<"!"<second].erasestudent(s.getnumber());
            s.erasee(z);
            //ma.erase(ma1);
            //cout<<"已退选此门课程"<c;
    vector::iterator it;
    mapma;
    map::iterator ma1;
public:
    void addc();
    void erasec();
    void xuanze();
    void displaycourse();
    teacher A(){return t;}
    void load1();
    void save1();
    void pschengji(string a,string b);
    void kschengji(string a,string b);
    teachercaozuo(teacher a):t(a){load1();xuanze();save1();}
 };
 void teachercaozuo::pschengji(string a,string b)
 {system("cls");
     string k;
     int j;
     float ji;
    for(j=0;j>ji;
           cout<>ji;
           cout<>a;
        if(a==0) break;
        else if(a==1) addc();
        else if(a==2) erasec();
        else if(a==3)
            {string aa,b;
                while(1)
                {system("cls");
                cout<<"请输入课程号和教学班号,输入-1退出"<>aa;
                if(aa=="-1") {break;}
                cin>>b;
                if(t.chakecheng(aa,b)==-1) {cout<<"输入有误,请重新输入"<>aa;
                if(aa=="-1") break;
                cin>>b;
                if(t.chakecheng(aa,b)==-1) cout<<"输入有误,请重新输入"<>z;
                if(z==-1) break;
                else if(z==1)
                pschengji(aa,b);
                else if(z==2) kschengji(aa,b);
                }
                }
                system("pause");}
            }
            else if(a==5) {system("cls");cout<>z;
        if(z=="-1") break;
        else {cin>>hao;
                if(t.chakechengm(z)!=-1) {cout<<"已选过此门课程"<>z;
            if(z=="-1") break;
        else
        {   ma1=ma.find(z);
            if(ma1!=ma.end())
            {
      c[ma1->second].setteacher("-1");
            t.erasee(z);
            //ma.erase(ma1);
            //cout<<"已退选此课程"<>x1)
     {if(x1.getno()=="-1") break;
     infile>>m;
     x1.setteacher(m);
        infile>>n;
        for(int i=0;i>m>>z>>l>>x>>y;
            x1.addstudent(m,z,l,x,y);
        }
        c.push_back(x1);
        ma.insert(make_pair(x1.getno(),c.size()-1));
     }
     infile.close();system("cls");
 }
class caozuo:public guanli
{
public:
void menu1();
};
void caozuo::menu1()
{load1();load3();load2();system("cls");
    cout<<"*******************************************"<>a;
        if(a!="-1")
        {

            cout<<"密码(假设正确)"<>b;
            int ttt;
            ttt=qquerystudent(a);//tt==-1,招不到学生
            if(ttt!=-1)
                {cout<<"学生"<>a;
    if(a==1)
    {s.load1();
    s.load3();
    s.load2();
    //s.load3();
    s.menu1();
    s.save1();
    s.save2();
    s.save3();}
    else if(a==-1) break;
    else if(a==0)
    {
        ll.load1();
    ll.load3();
     ll.load2();
     //ll.load3();
    ll.menu1();

    }

    }
}

 

你可能感兴趣的:(数据结构,思维,心得与感想)