版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*题目:学生考勤管理系统
考勤信息记录了学生的缺课状况,它包括:缺课日期、第几节课【连续多节课用begin-end的
形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请
假及旷课)。试设计一考勤管理系统,使之能供应以下功能:
1.录入学生的缺课记录:从健盘输入数据(提示:为避开重复从键盘输入数据,测试时可
将数据存储在文件中,利用输入重定向功能读入),输入格式为:
缺课日期第几节课课程名称学生姓名缺课类型
每行一条纪录。
例如:
2008-04-293-4C++程序设计试验张三迟到
2008-04-283-4C++程序设计李四旷课
2.修改某个学生的缺课记录:可以对缺课纪录的随意部分进行修改。
3.查询某个学生的缺课状况:查询结果根据日期升序排序,同一天内根据所缺课程的时间
升序排序。
4.统计某段时间内(以天为单位),旷课学生姓名及旷课节数,杳询结果先按旷课节数降序
排序,旷课节数相同的学生按姓名升序排序:
5.统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次
相同的课程按课程名称升序排序;
6.系统以菜单方式工作。
通过几天的奋斗最终将这个设计做出来了,如下是该程序的具体过程*/
#include<algorithm>
#include<iomanip>
/include<iostream>
#indude<vector>
#include<stdexcept>
/include<string>
#indude<iterator>
#include<map>
usingnamespacestd;
structStudent_info{
intyear,month,day,lessonl,Iesson2;
std::stringcourse,name,type;
std::istream&read(std::istream&);
);
istream&Student_info::read(istream&in)
(
in»year»month»day»lessonl»lesson2»course»name»type;
returnin;
)
istream&read_record(istream&in,vector<Student_info>&s)〃第一个模块--------输入学生
的缺课记录
(
Studentjnforecord;
s.clear();〃调用s.clear。来清空s的记录
while(record.read(in))
(
s.push_back(record);
}
in.clear();〃将记录的错误状态复原正确,以接着读取记录
returnin;
)
boolis_empty(vector<Student_nfo>&s)〃推断输入学生的记录是否为空,为空则返回真
(
returns.emptyO;
)
boolcompare(Student_info&x,Student_info&y)〃根据时间排序,若日期相等则看课程时间
(
if(x.year==y.year&&x.month==y.month&&x.day==y.day){
returnx.lessonl<y.lessonl;
)
elseif(x.year==y.year&&x.month==y.month&&x.day!=y.day){
returnx.day<y.day;
)
elseif(x.year==y.year&&x.month!=y.month){
returnx.month<y.month;
)
else{
returnx.year<y.year;
)
}
〃筛选符合输入时间
booltime(constStudent_info&studjntyl,intmljntdl,inty2,intm2zintd2)
段的数据
(
if({yl==stud.year&&stud.month==ml&&stud.day<dl)11(y2==stud.year&&
stud.month==m2&&stud.day>d2))
return0;
elseif((yl==stud.year&&stud.month<ml)11(y2==stud.year&&stud.month>m2))
return0;
elseif(yl>stud.year11y2<stud.year)
return0;
else
return1;
)
voidrewrite(vector<Student_info>&s)〃其次个模块--------修改某个学生的缺课状况
(
if(!is_empty(s))
(
intn,m,j,k;
map<string/vector<Student_info>>s_name;
map<string,vector<Student_info>>::iteratorix2;
vector<Student_info>::iteratorixjteoitera;
stringname;//--------------------定义这些参数和迭代器必需在SWITHC夕卜,不然它可能被
忽视跳过
while(true)
(
cout«"
*********************************************************”<<end卜
cout«"*1.请输入你要修改缺课记录的学生姓名*"«endl;
cout«"*
*"«endl;
cout«"*2.返回上一级菜单
*"«endl;
cout«"
**************尊**********,***毒******尊********************”<<end卜
cout<<“请选择菜单选项:
cin»n;
if(n==l)
(
s_name.clear();//--------------------------------清空MAP容器
for(ix=s.begin();ix!=s.end();++ix)
(
s_name[(*ix).name].push_back(*ix);
)
s.clear{);
cout<<"请输入该学生的姓名:
cin»name;
cout«endl;
if(s_name.fiid(name)!=s_name.end())
ix2=s_name.find(name);//----------找到符合名字要求的数据,并显示出
for(iter=(*ix2).second.begin();iter!=(*ix2).second.end();++iter)
cout«(*iter).year«"-"«(*iter).month«"-"«(*iter).day«"\t";
cout«(*iter).lessonl«"-"«(*iter).Iesson2;
cout«"\t"«(*iter).course«"\t"«(*iter).name«"\t"«(*iter;.type«endl;
)
itera=(xix2).second.begin();
cout<<,请输入要更改记录的序号:
cin»j;
for(k=0;k!=j-l;++k)
(
++itera;
}
cout«'
**************************************************************************”<<en
dl;
cout«'*须要更改的项目
*"«endl;
cout«'*
*"«endl;
cout«'*1日期2节次3课程名称4姓名5缺课类型6返回
上一级*"«endl;
cout«'*
*"«endl;
cout«'
*************—**********,****,*****,*****,*****,*************************”<<e口
dl;
cout<<,请选择要更改的项目号:“;
cin»m;
switch(m)
(
case1:
cout<<”请输入更改的日期(年月日):”;
cin»(*itera).year»(*itera).month»(*itera).day;
break;
case2:
cout«"请输入更改的节次(LI、L2):";
cin»(*itera).lessonl»(*itera).lesson2;
break;
case3:
cout<<”请输入要更改的课程名称:",
cin»(*itera).course;
break;
case4:
cout<<"请输入要更改的学生姓名:",
cin»(*itera).name;
break;
case5:
cout<<”请输入缺课类型:”;
cin»(*itera).type;
break;
case6:
break;
default:
cout<<"你的选择错了,请看清晰!"<<endl;
break;
}
for(ix2=s_name.begin();ix2!=s_name.end();ix2++)//^f改写后的数据放
入vector容器中
(
fo'(iter=ix2->second.begin();iter!-ix2->second.end();iter++)
(
s.push_back(*iter);
}
}
)
else
(
cout<<,没有这个学生的缺课记录"<<end;
cout«endl;
)
break;
)
elseif(n==2)
(
return;
)
else
cout<<"你的选择错了,请看清晰!"<<endl;
)
)
else
cout<<"记录为空,没有学生的缺课记录!"<<endl;
)
voidSearch_record(vector<Student_info>&s)〃第三个模块--------查找某学生的缺课状况
(
if(!is_empty(s))
(
inti;
vector<Student_info>::iteratoriter;
map<string,vector<Student_info>>::iteratoritl;
map<string,vector<Student_info>>s_name;
map<string,vector<Student_info>>::iteratoritera;
vector<Student_info>::iteratorit;
stringname;
while(true)
(
cout«"
**********************************************************“<<end卜
cout«"
*"«endl;
cout«"*1输入你要查询的学生姓名2返回上一级*"«endl;
cout«"
*"«endl;
cout«"
*****************************************************,*****<<end卜
cout<<"请选择菜单:
cin»i;
if(i==l){
s_name.clear();
for(it=s.begin();it!=s.end();++it)
(
s_name[(*it).name].push_back(*it);
)
for(itera=s_name.begin();itera!=s_name.end();<-+itera)
(
sortfitera^second.beginOJtera^second.endO,compare);
)
cout<<”请输入名字:";
cin»name;
cout«endl;
if(s_name.find(name)!=s_name.end())
(
itl=s_name.find(name);
for(iter=(*itl).second.begin();iter!=(*itl).second.end();++iter)
cout«(*iter).year«"-"«(*iter).month«"-"«(*iter).day«"\t";
cout«(*iter).lessonl«"-"«(*iter).lesson2;
cout«"\t"«(*iter).course«"\t"«(*iter).name«"\t"«(*iter;.type«endl;
}
)
else
(
coutcc'没有这个学生."<<endl;
cout«endl;
)
}
elseif(i==2)
(
return;
)
else
cout<<"对不起,没有这个选项l"«endl;
)
)
else
cout<<"没有这个学生的缺课记录"<<endl;
)
structSearch_struct{
stringname,course;
inttimes;
};〃定义另一个结构模块
boolcompare2(Search_struct&x,Search_struct&y)〃根据次数排序,次数相等的则根据名字排
序
(
if(x.times==y.times)
return<;
else
returnx.times>y.times;
)
voidSearch_s_t(vector<Student_info>&std)〃第四个模块----------查找某段时间内旷课学
生姓名及旷课节数
(
if(!is_empty(std))
(
vector<Student_info>::iteratorit;
vector<Search_struct>::iteratoritera;
map<string,int>::iteratoriter;
vector<Search_struct>vec;
intyl,ml,dl,y2,m2,d2;
map<string,int>ret;
cout<〈"请输入你要查找的一个时间段(ylmldly2m2d2):"«endl;
cin»yl»ml»dl»y2»m2»d2;
for(it=std.begin();it!=std.end();++it)
(
if(time(*it,yl,ml.dl,y2,m2,d2))
(
ret[it->name]+=(it->lesson2-it->lessonl+l);
)
)
for(iter=ret.begin();iter!=ret.end();iter++)
(
Search_structtmp;
=iter->first;
tmp.times=iter->second;
vec.push_back(tmp);
)
sort(vec.begin(),vec.end(),compare2);
for(itera=vec.begin();i:era!=vec.end();itera++)
(
cout«itera->name«"\t"«itera->times«endl;
}
}
else
cout<<"对不起,没有你要查找的记录!"<<endl;
)
voidSearch_c_t(vector<Student_info>&std)〃第五个模块---------查找某段时间内旷课的课
程及旷课人次
(
if(!is_empty(std))
(
vector<Student_info>::iteratorit;
vector<Search_struct>::iteratoritera;
map<string,int>::iteratoriter;
vector<Search_struct>vec;
intyl,ml/dl,y2,m2,d2;
map<string,int>ret;
cout<<"请输入你想要查找的时间段(ylmldly2m2d2):"«endl;
cin»yl»ml»dl»y2»m2»d2;
for(it=std.begin();it!=std.end();++it)〃建立map容器
(
if(time(*it,yl,ml.dl,y2,m2,d2))
(
ret[it->course]+=l;
)
)
for(iter=ret.begin();iter!=ret.end();iter++)
(
Search_structtmp;
tmp.course=iter->first;
tmp.times=iter->second;
vec.push_back(tmp);
)
sort(vec.begin(),vec.end(),compare2);
for(itera=vec.begin();i:era!=vec.end();itera++)
(
cout«itera->course«"\t"«itera->times«endl;
)
)
else
cout<<"这段时间内没有学生的缺课纪录!“<<endl;
)
intmain()
{
vector<Student_info>stu;
intchoice;
while(true)
(
cout«"
*******本****************************尊****************,****京**“v<end卜
cout«"*学生考勤管理系统
*"«endl;
cout«H******掌*****************,***********************************
"«endl;
cout«"*1.录入学生的缺课记录
*"«endl;
cout«"*
*"«endl;
cout«H*2.修改某个学生的缺课记录
*"«endl;
cout«"*
*"«endl;
cout«"*3.查找某学生的缺课状况
*"«endl;
cout«"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 小学六年级语文下册 综合性学习 活动设计课件
- 【项目方案】233KWh 定制户外一体柜储能系统项目技术方案
- 注册会计师就业前景分析
- 跨境电商2025年海运整箱保险协议
- 2025 小学六年级语文上册综合性学习轻叩诗歌大门课件
- 科技研发终止协议2025年成果转化条款
- 2025 小学六年级语文上册借代修辞手法课件
- 浙江省丽水市2025年九年级上学期期末考试数学试卷附答案
- 股权架构方案(后附模板)
- 赣州医院面试题及答案
- 2025年中国纳秒紫外激光器行业市场运行现状及投资规划建议报告
- 房屋租赁合同(附房屋交割清单)
- 奥特曼涂色画简笔画直接打印版A4
- 成品保护图册
- 《中国特色社会主义》教学计划(含教学进度表)
- 部编版 八年级上册语文 字词练习
- 汽车维修专业实训总结报告
- 医疗陪护创业书
- 2021-2022学年北京市西城区五年级(上)期末数学试卷及参考答案
- 剪纸艺术文化中国民间传统民族文化教学介绍知识演示课件两篇
- 2023年浙江省宁波市人才服务中心招聘5人笔试历年难、易点深度预测(共500题含答案解析)模拟试卷
评论
0/150
提交评论