课表管理系统(C++)
文章目录
- 课表管理系统(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;elsecout<<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-201if(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;elsecout<<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;elsecout<<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;elsecout<<endl;}system("pause");return 0;
}
视频展示:
空课表检查
空课表结果.avi
课表管理系统(C++)相关推荐
- 计算机毕业设计Javaweb实验室课表管理系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Javaweb实验室课表管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Javaweb实验室课表管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...
- java计算机毕业设计web实验室课表管理系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计web实验室课表管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计web实验室课表管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: ...
- JAVA毕业设计web实验室课表管理系统计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计web实验室课表管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计web实验室课表管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B ...
- java计算机毕业设计红色景点自驾游网站管理系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计红色景点自驾游网站管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计红色景点自驾游网站管理系统MyBatis+系统+LW文档+源码+调试部署 本源码技 ...
- java毕业设计大众点评管理系统Mybatis+系统+数据库+调试部署
java毕业设计大众点评管理系统Mybatis+系统+数据库+调试部署 java毕业设计大众点评管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...
- java毕业设计物资租赁管理系统mybatis+源码+调试部署+系统+数据库+lw
java毕业设计物资租赁管理系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计物资租赁管理系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...
- 基于Java毕业设计学校图书馆管理系统源码+系统+mysql+lw文档+部署软件
基于Java毕业设计学校图书馆管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计学校图书馆管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 ...
- java-php-python-ssm校园疫情防控管理系统计算机毕业设计
java-php-python-ssm校园疫情防控管理系统计算机毕业设计 java-php-python-ssm校园疫情防控管理系统计算机毕业设计 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...
- java计算机毕业设计疫情物质管理系统源码+数据库+lw文档+系统+部署
java计算机毕业设计疫情物质管理系统源码+数据库+lw文档+系统+部署 java计算机毕业设计疫情物质管理系统源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...
最新文章
- 为什么在把多维数组传递给函数时必须要指定除第一维之外的其他维
- 1.15 Python基础知识 - 函数
- 不用GAN、VAE,谷歌发明视频生成的扩散模型,实现新SOTA
- mysql三阶段提交实现_基于两阶段提交的分布式事务实现(UP-2PC)
- python 伪原创 中文近义词工具包【转】
- BDA,CDA,CPDA哪个证相对可靠?哪个含金量高?具体考试内容?
- 计算机辅助设计和工程图学,工程制图与计算机辅助设计
- 金融衍生品已成为金融革命新力量
- C#ObjectArx Cad添加图层
- 高通骁龙410系列-MSM8916(M9+) ( Cortex-A53架构)
- 大数据Topic推荐-AMiner
- 万物皆可秒—— 淘宝秒杀Python脚本,扫货618,备战双11!
- Error unpacking rpm package initscripts解决方案
- TOOM网上舆情应急处置预案,怎么加强网上舆情监控?
- Flink写RocketMQ支持动态UserProperty
- 基于Android的文本笔记类APP设计
- 懂AI的医生一定会替代不懂AI的医生
- Web渗透测试对靶机注入shell(phpMyAdmin)
- NOI题库刷题日志 (贪心篇题解)
- 计算机病毒由安装部分传染部分和,计算机病毒的预防