zoukankan      html  css  js  c++  java
  • 课表管理系统(C++)

    课表管理系统(C++)

    注意事项:

    该管理系统分为两个独立的程序分别实现不同需求,这两个程序仅仅是为了好玩,同时具有一定的实用性(针对个人),当时写的时候由于实际操作的固定性完全采用模拟形式,格式也非常固定,现在由于实际操作的变化该程序已经废弃了,但当时还是觉得蛮好玩的,毕竟也是在课程之外自己动手实现的一个具有一定实用性的小程序。

    在代码测试之前需要用到两个文件:
    2019-2020学年第一学期北校区教室使用情况.xls
    (课表管理系统测试用)3.xls

    具体的测试效果可参考源代码(仅仅为了好玩,学习价值不大)和视频。

    如有问题或错误敬请谅解,欢迎积极指出。

    课表去重系统(周一到周五):

    源代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<string>
    #include<vector>
    using namespace std;
    
    struct Gai{  //改课表
        string jiaoxuelou;
        string classname;
        int kaishi;
        int chixu;
    }gaikebiao[201];
    
    int main()
    {
        //基础课表的储存设计:如果使用数组,删除之后改为字符串"0"过滤输出
        //如果使用vector可直接erase删除
        //如果使用map只有键值,没有实值
        //可以使用set(既可以自动排序,又可以使用find进行快速查找并结合erase删除)
    
        //由于后面涉及到查找匹配不是单纯的字符串查询,而是通过单个字符进行查询,因此find不再好用,这里继续采用vector进行遍历搭配字符串下标方式进行查询匹配
    
        //基础课表的输入:
        vector<string>jieci[10];    //一般建立5个vector存放教室基本信息
        vector<string>::iterator it;
        int jieciin[10];  //一般来说一共五个大节,每个大节输入所要统计的基础课表的教室数量
        for(int i=0;i<5;i++){
            cout<<"输入基础课表上筛选后第"<<i+1<<"大节空课教室的数量:"<<endl;
            cin>>jieciin[i];
            string count;
            cout<<"输入基础课表上筛选后第"<<i+1<<"大节空课教室的教室名称:"<<endl;
            jieci[i].clear();
            for(int j=0;j<jieciin[i];j++){
                cin>>count;
                jieci[i].push_back(count);
            }
        }
    
        //基础课表的输出:
        cout<<"基础课表教室信息:"<<endl;
         for(int i=0;i<5;i++){
            cout<<"第"<<i+1<<"大节共有"<<jieci[i].size()<<"个空课教室";
            cout<<"第"<<i+1<<"大节空课教室信息:"<<endl;
            for(int j=1;j<=jieci[i].size();j++){
                cout<<jieci[i][j-1]<<" ";
                if(j%7==0)  //下面%7处理更加直观的显示数据(由于%7,因此使用j=1而不是j=0)
                    cout<<endl;
            }
            if(jieci[i].size()%7!=0)
                cout<<endl<<endl;
            else
                cout<<endl;
        }
    
        //改课表的输入:
        int gaikebiaoin;
        //int gaikebiaoin[10];  //五个大节的改课表的教室数量信息,现在直接对五个大节进行统计,不再一一筛选
        /*
        //对改课表的单节输入操作,后面改为所有一起输入
        for(int i=0;i<5;i++)
        {
            cin>>gaikebiaoin[i];
            for(int j=0;j<gaikebiaoin[i];j++){
                cin>>gaikebiao[j].classname;
            }
            for(int j=0;j<gaikebiaoin[i];j++){
                cin>>gaikebiao[j].kaishi;
            }
            for(int j=0;j<gaikebiaoin[i];j++){
                cin>>gaikebiao[j].chixu;
            }
        }
        */
    
        //直接输入所有改课表教室数据,不再一一筛选统计
        cout<<"输入筛选后所有改课表的教室数量:"<<endl;
        cin>>gaikebiaoin;  //输入改课表基础信息
        cout<<"输入筛选后所有改课表上的教室信息:教学楼 教室名 开始节次 持续节次"<<endl;
        for(int i=0;i<gaikebiaoin;i++){
            cin>>gaikebiao[i].jiaoxuelou;
        }
        for(int i=0;i<gaikebiaoin;i++){
            cin>>gaikebiao[i].classname;
        }
        for(int i=0;i<gaikebiaoin;i++){
            cin>>gaikebiao[i].kaishi;
        }
        for(int i=0;i<gaikebiaoin;i++){
            cin>>gaikebiao[i].chixu;
        }
    
        //课表的查找与删除:
        //可优化:if条件后面的选择可直接用>=代替==(还可以直接排除一大节中只占一小节的情况)
        for(int i=0;i<gaikebiaoin;i++){
            string count=gaikebiao[i].classname;
    
            //第一大节:
            if(gaikebiao[i].kaishi==1&&(gaikebiao[i].chixu>=1)){
                /*
                for(it=jieci[0].begin();it!=jieci[0].end();it++){
                    if(*it==count){
                        jieci[0].erase(it);  //if((*it)[0]==count[0])  //test:OK
                    }
                }
                */
    
                /*
                for(int j=0;j<jieci[0].size();j++){
                    //基础课表:5N201,改课表:N-201
                    if(jieci[0][j][1]==count[0]&&jieci[0][j][2]==count[2]&&jieci[0][j][3]==count[3]&&jieci[0][j][4]==count[4]);
                    //查重后删除,继续考虑使用迭代器指针的形式
                }
                */
    
                for(it=jieci[0].begin();it!=jieci[0].end();it++){
                    if((gaikebiao[i].jiaoxuelou=="北校5号楼")&&((*it)[1]==count[0]&&(*it)[2]==count[2]&&(*it)[3]==count[3]&&(*it)[4]==count[4])){
                        jieci[0].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校12号楼")&&(*it)[3]==count[0]&&(*it)[4]==count[1]&&(*it)[5]==count[2]){
                        jieci[0].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校3号楼")&&(*it)[2]==count[0]&&(*it)[3]==count[1]&&(*it)[4]==count[2]){
                        jieci[0].erase(it);
                    }
                }
            }
    
            //第二大节:
            if((gaikebiao[i].kaishi==1&&(gaikebiao[i].chixu>=3))
                    ||(gaikebiao[i].kaishi==3&&(gaikebiao[i].chixu>=1))){
                for(it=jieci[1].begin();it!=jieci[1].end();it++){
                    if((gaikebiao[i].jiaoxuelou=="北校5号楼")&&(*it)[1]==count[0]&&(*it)[2]==count[2]&&(*it)[3]==count[3]&&(*it)[4]==count[4]){
                        jieci[1].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校12号楼")&&(*it)[3]==count[0]&&(*it)[4]==count[1]&&(*it)[5]==count[2]){
                        jieci[1].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校3号楼")&&(*it)[2]==count[0]&&(*it)[3]==count[1]&&(*it)[4]==count[2]){
                        jieci[1].erase(it);
                    }
                }
            }
    
            //第三大节:
            if((gaikebiao[i].kaishi==1&&(gaikebiao[i].chixu>=5))
                    ||(gaikebiao[i].kaishi==3&&(gaikebiao[i].chixu>=3))
                    ||(gaikebiao[i].kaishi==5&&(gaikebiao[i].chixu>=1))){
                for(it=jieci[2].begin();it!=jieci[2].end();it++){
                    if((gaikebiao[i].jiaoxuelou=="北校5号楼")&&(*it)[1]==count[0]&&(*it)[2]==count[2]&&(*it)[3]==count[3]&&(*it)[4]==count[4]){
                        jieci[2].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校12号楼")&&(*it)[3]==count[0]&&(*it)[4]==count[1]&&(*it)[5]==count[2]){
                        jieci[2].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校3号楼")&&(*it)[2]==count[0]&&(*it)[3]==count[1]&&(*it)[4]==count[2]){
                        jieci[2].erase(it);
                    }
                }
            }
    
            //第四大节:
             if((gaikebiao[i].kaishi==1&&(gaikebiao[i].chixu>=7))
                    ||(gaikebiao[i].kaishi==3&&(gaikebiao[i].chixu>=5))
                    ||(gaikebiao[i].kaishi==5&&(gaikebiao[i].chixu>=3))
                    ||(gaikebiao[i].kaishi==7&&(gaikebiao[i].chixu>=1))){
                for(it=jieci[3].begin();it!=jieci[3].end();it++){
                    if((gaikebiao[i].jiaoxuelou=="北校5号楼")&&(*it)[1]==count[0]&&(*it)[2]==count[2]&&(*it)[3]==count[3]&&(*it)[4]==count[4]){
                        jieci[3].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校12号楼")&&(*it)[3]==count[0]&&(*it)[4]==count[1]&&(*it)[5]==count[2]){
                        jieci[3].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校3号楼")&&(*it)[2]==count[0]&&(*it)[3]==count[1]&&(*it)[4]==count[2]){
                        jieci[3].erase(it);
                    }
                }
            }
    
            //第五大节:
            if((gaikebiao[i].kaishi==1&&gaikebiao[i].chixu>=9)
                    ||(gaikebiao[i].kaishi==3&&gaikebiao[i].chixu>=7)
                    ||(gaikebiao[i].kaishi==5&&gaikebiao[i].chixu>=5)
                    ||(gaikebiao[i].kaishi==7&&gaikebiao[i].chixu>=4)
                    ||(gaikebiao[i].kaishi==9&&gaikebiao[i].chixu>=1)){
                for(it=jieci[4].begin();it!=jieci[4].end();it++){
                    if((gaikebiao[i].jiaoxuelou=="北校5号楼")&&(*it)[1]==count[0]&&(*it)[2]==count[2]&&(*it)[3]==count[3]&&(*it)[4]==count[4]){
                        jieci[4].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校12号楼")&&(*it)[3]==count[0]&&(*it)[4]==count[1]&&(*it)[5]==count[2]){
                        jieci[4].erase(it);
                    }
                    else if((gaikebiao[i].jiaoxuelou=="北校3号楼")&&(*it)[2]==count[0]&&(*it)[3]==count[1]&&(*it)[4]==count[2]){
                        jieci[4].erase(it);
                    }
                }
            }
    
        }
    
        //课表的最终结果输出:
        //可以实现,但是突然发现改课表是N-***的形式,而基础课表是5N***的形式,不是很匹配,另外查询方式可以使用set进一步优化
        cout<<"改课表教室信息:"<<endl;
        for(int i=0;i<5;i++){
            cout<<"第"<<i+1<<"大节共有"<<jieci[i].size()<<"个空课教室";
            cout<<"第"<<i+1<<"大节空课教室信息:"<<endl;
            for(int j=1;j<=jieci[i].size();j++){
                cout<<jieci[i][j-1]<<" ";
                if(j%7==0)  //下面%7处理更加直观的显示数据(由于%7,因此使用j=1而不是j=0)
                    cout<<endl;
            }
            if(jieci[i].size()%7!=0)
                cout<<endl<<endl;
            else
                cout<<endl;
        }
        /*
        cout<<endl;
        for(int i=0;i<gaikebiaoin;i++){
            cout<<gaikebiao[i].jiaoxuelou<<" "<<gaikebiao[i].classname<<" "<<gaikebiao[i].kaishi<<" "<<gaikebiao[i].chixu<<endl;
        }
        */
        system("pause");
        return 0;
    }
    

    课表增添系统(周末)

    源代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<string>
    #include<vector>
    #include<set>
    using namespace std;
    
    struct Gai{  //改课表(周六周末待增添)
        string jiaoxuelou;
        string classname;
        int kaishi;
        int chixu;
    }gaikebiao[201];
    
    int main()
    {
        set<string>jieci[10];
        set<string>::iterator it;
    
        int jieciin[10];  //一般来说一共五个大节,每个大节输入所要统计的基础课表的教室数量
        for(int i=0;i<5;i++){
            cout<<"输入基础课表上筛选后第"<<i+1<<"大节有课教室的数量:"<<endl;
            cin>>jieciin[i];
            string count;
            cout<<"输入基础课表上筛选后第"<<i+1<<"大节有课教室的教室名称:"<<endl;
            jieci[i].clear();
            for(int j=0;j<jieciin[i];j++){
                cin>>count;
                jieci[i].insert(count);
            }
        }
    
        //基础课表的输出:
        cout<<"基础课表教室信息:"<<endl;
        for(int i=0;i<5;i++){
            cout<<"第"<<i+1<<"大节共有"<<jieci[i].size()<<"个有课教室";
            cout<<"第"<<i+1<<"大节有课教室信息:"<<endl;
            int count=1;
            for(it=jieci[i].begin();it!=jieci[i].end();it++){
                cout<<(*it)<<" ";
                if(count%7==0)  //下面%7处理更加直观的显示数据(由于%7,因此使用j=1而不是j=0)
                    cout<<endl;
                count++;
            }
            if(jieci[i].size()%7!=0)
                cout<<endl<<endl;
            else
                cout<<endl;
        }
    
        int gaikebiaoin;
        cout<<"输入筛选后所有改课表的教室数量:"<<endl;
        cin>>gaikebiaoin;  //输入改课表基础信息
        cout<<"输入筛选后所有改课表上的教室信息:教学楼 教室名 开始节次 持续节次"<<endl;
        for(int i=0;i<gaikebiaoin;i++){
            cin>>gaikebiao[i].jiaoxuelou;
        }
        for(int i=0;i<gaikebiaoin;i++){
            cin>>gaikebiao[i].classname;
        }
        for(int i=0;i<gaikebiaoin;i++){
            cin>>gaikebiao[i].kaishi;
        }
        for(int i=0;i<gaikebiaoin;i++){
            cin>>gaikebiao[i].chixu;
        }
    
         for(int i=0;i<gaikebiaoin;i++){
            string count=gaikebiao[i].classname;
            if(gaikebiao[i].kaishi==1&&(gaikebiao[i].chixu>=1)){
                if(gaikebiao[i].jiaoxuelou=="北校5号楼"){
                    count[1]=count[0];
                    count[0]='5';
                    jieci[0].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校12号楼"){
                    /*
                    //该方法行不通,不能实现字符串超出指定范围的情况,下面以加号对字符串连接进行替代
                    count[3]=count[0];  //顺序不用强制转换,因为0,1,2没有在赋值之前被替换
                    count[4]=count[1];
                    count[5]=count[2];
                    count[0]='1';
                    count[1]='2';
                    count[2]='#';
                    */
                    count="12#"+count;
                    jieci[0].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校3号楼"){
                    count[4]=count[2];  //顺序较12号楼需作调整,因为count[2]可能会在赋值之前被替换(这里全都逆序)
                    count[3]=count[1];
                    count[2]=count[0];
                    count[1]='#';
                    count[0]='3';
                    jieci[0].insert(count);
    
                }
            }
    
            //第二大节:
            count=gaikebiao[i].classname;  //为防止第一大节操作更改,重新赋值
            if((gaikebiao[i].kaishi==1&&(gaikebiao[i].chixu>=3))
                    ||(gaikebiao[i].kaishi==3&&(gaikebiao[i].chixu>=1))){
               if(gaikebiao[i].jiaoxuelou=="北校5号楼"){
                    count[1]=count[0];
                    count[0]='5';
                    jieci[1].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校12号楼"){
                    count="12#"+count;
                    jieci[1].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校3号楼"){
                    count[4]=count[2];  //顺序较12号楼需作调整,因为count[2]可能会在赋值之前被替换(这里全都逆序)
                    count[3]=count[1];
                    count[2]=count[0];
                    count[1]='#';
                    count[0]='3';
                    jieci[1].insert(count);
    
                }
            }
    
            //第三大节:
            count=gaikebiao[i].classname;
            if((gaikebiao[i].kaishi==1&&(gaikebiao[i].chixu>=5))
                    ||(gaikebiao[i].kaishi==3&&(gaikebiao[i].chixu>=3))
                    ||(gaikebiao[i].kaishi==5&&(gaikebiao[i].chixu>=1))){
                if(gaikebiao[i].jiaoxuelou=="北校5号楼"){
                    count[1]=count[0];
                    count[0]='5';
                    jieci[2].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校12号楼"){
                    count="12#"+count;
                    jieci[2].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校3号楼"){
                    count[4]=count[2];  //顺序较12号楼需作调整,因为count[2]可能会在赋值之前被替换(这里全都逆序)
                    count[3]=count[1];
                    count[2]=count[0];
                    count[1]='#';
                    count[0]='3';
                    jieci[2].insert(count);
    
                }
            }
    
            //第四大节:
            count=gaikebiao[i].classname;
             if((gaikebiao[i].kaishi==1&&(gaikebiao[i].chixu>=7))
                    ||(gaikebiao[i].kaishi==3&&(gaikebiao[i].chixu>=5))
                    ||(gaikebiao[i].kaishi==5&&(gaikebiao[i].chixu>=3))
                    ||(gaikebiao[i].kaishi==7&&(gaikebiao[i].chixu>=1))){
                if(gaikebiao[i].jiaoxuelou=="北校5号楼"){
                    count[1]=count[0];
                    count[0]='5';
                    jieci[3].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校12号楼"){
                    count="12#"+count;
                    jieci[3].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校3号楼"){
                    count[4]=count[2];  //顺序较12号楼需作调整,因为count[2]可能会在赋值之前被替换(这里全都逆序)
                    count[3]=count[1];
                    count[2]=count[0];
                    count[1]='#';
                    count[0]='3';
                    jieci[3].insert(count);
    
                }
            }
    
            //第五大节:
            count=gaikebiao[i].classname;
            if((gaikebiao[i].kaishi==1&&gaikebiao[i].chixu>=9)
                    ||(gaikebiao[i].kaishi==3&&gaikebiao[i].chixu>=7)
                    ||(gaikebiao[i].kaishi==5&&gaikebiao[i].chixu>=5)
                    ||(gaikebiao[i].kaishi==7&&gaikebiao[i].chixu>=3)
                    ||(gaikebiao[i].kaishi==9&&gaikebiao[i].chixu>=1)){
               if(gaikebiao[i].jiaoxuelou=="北校5号楼"){
                    count[1]=count[0];
                    count[0]='5';
                    jieci[4].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校12号楼"){
                    count="12#"+count;
                    jieci[4].insert(count);
                }
                else if(gaikebiao[i].jiaoxuelou=="北校3号楼"){
                    count[4]=count[2];  //顺序较12号楼需作调整,因为count[2]可能会在赋值之前被替换(这里全都逆序)
                    count[3]=count[1];
                    count[2]=count[0];
                    count[1]='#';
                    count[0]='3';
                    jieci[4].insert(count);
    
                }
            }
        }
    
        cout<<"改课表教室信息:"<<endl;
        for(int i=0;i<5;i++){
            cout<<"第"<<i+1<<"大节共有"<<jieci[i].size()<<"个有课教室";
            cout<<"第"<<i+1<<"大节有课教室信息:"<<endl;
            int count=1;
            for(it=jieci[i].begin();it!=jieci[i].end();it++){
                cout<<(*it)<<" ";
                if(count%7==0)  //下面%7处理更加直观的显示数据(由于%7,因此使用j=1而不是j=0)
                    cout<<endl;
                count++;
            }
            if(jieci[i].size()%7!=0)
                cout<<endl<<endl;
            else
                cout<<endl;
        }
        system("pause");
        return 0;
    }
    

    视频展示:

    空课表检查

    空课表结果.avi

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    替换空格-请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
    cocoapod卡在了analyzing dependencies
    前台技术--div的隐藏与显示
    POJ 3252 Round Numbers(组合数学)
    6. oracle学习入门系列之六 模式
    Python基础教程之第3章 使用字符串
    PHP+FastCGI+Nginx动态请求处理配置
    cocos2d-x cocoStudioUI编辑器导出文件的使用
    分布式系统生成唯一主键
    Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
  • 原文地址:https://www.cnblogs.com/study-hard-forever/p/14387285.html
Copyright © 2011-2022 走看看