《c学生考勤信息管理完整 .docx》由会员分享,可在线阅读,更多相关《c学生考勤信息管理完整 .docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结/* 题目:同学考勤治理系统考勤信息记录了同学的缺课情形,它包括:缺课日期、第几节课连续多节课用begin-end的形式表示 、课程名称(课程名称中不会显现空格)、同学姓名、缺课类型(迟到、早退、请假及旷课)。试设计一考勤治理系统,使之能供应以下功能:1. 录入同学的缺课记录:从键盘输入数据(提示:为防止重复从键盘输入数据,测试时可将数据储备在文件中,利用输入重定向功能读入),输入格式为:缺课日期 第几节课 课程名称 同学姓名 缺课类型每行一条纪录。例如:2021-04-29 3-4 C+程序设计试验 张三 迟到2021-04-28 3-4 C+程序设计 李四 旷课2. 修改某
2、个同学的缺课记录:可以对缺课纪录的任意部分进行修改。3. 查询某个同学的缺课情形:查询结果依据日期升序排序,同一天内依据所缺课程的时间升序排序。 4统计某段时间内(以天为单位),旷课同学姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的同学按姓名升序排序。5. 统计某段时间内,有同学旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序。6. 系统以菜单方式工作。通过几天的奋斗最终将这个设计做出来了,如下是该程序的详细过程*/ #include #include #include #include #include #include #include #i
3、nclude using namespace std。struct Student_infoint year,month,day,lesson1,lesson2 。std:string course,name,type 。std:istream& readstd:istream&。istream& Student_info:readistream& ininyearmonthdaylesson1lesson2coursenametype 。return in 。istream&read_recordistream&in,vector&s/ 第一个模块输入同学的缺课记录Student_info
4、record 。s.clear。/ 调用 s.clear来清空 s 的记录可编辑资料 - - - 欢迎下载精品名师归纳总结whilerecord.readins.push_backrecord 。in.clear 。/ 将记录的错误状态复原正确,以连续读取记录return in 。bool is_emptyvector& s/判定输入同学的记录是否为空,为空就返回真return s.empty 。bool compareStudent_info& x,Student_info& y/依据时间排序 ,如日期相等就看课程时间ifx.year=y.year&x.month=y.month&x.day
5、=y.day return x.lesson1y.lesson1。else ifx.year=y.year&x.month=y.month&x.day.=y.day return x.dayy.day 。else ifx.year=y.year&x.month.=y.month return x.monthy.month 。可编辑资料 - - - 欢迎下载精品名师归纳总结else return x.yeary.year。可编辑资料 - - - 欢迎下载精品名师归纳总结bool timeconst Student_info& stud,int y1,int m1,int d1,int y2,in
6、t m2,int d2/选择符合输入时间段的数据if y1 = stud.year & stud.month= m1 & stud.day d2return 0 。else if y1 = stud.year & stud.month m2 return 0 。else if y1 stud.year | y2 stud.yearreturn 0 。可编辑资料 - - - 欢迎下载精品名师归纳总结elsereturn 1 。可编辑资料 - - - 欢迎下载精品名师归纳总结void rewritevector& s/其次个模块修改某个同学的缺课情形if.is_emptysint n,m,j,k
7、。可编辑资料 - - - 欢迎下载精品名师归纳总结mapstring,vector s_name 。mapstring,vector :iterator ix2。vector:iterator ix,iter,itera。string name 。/- 定义这些参数和迭代器必需在SWITHC外,不然它可能被忽视跳过whiletruecout*endl。cout * 1. 请输入你要修改缺课记录的同学姓名*endl。cout *en。dlcout * 2. 返回上一级菜单*end。lcout*endl。coutn。ifn=1s_name.clear。/- 清空 MAP 容器forix=s.beg
8、in 。ix.=s.end 。+ixs_name*ix.name.push_back*ix。s.clear。coutname。coutendl 。ifs_name.findname.=s_name.end可编辑资料 - - - 欢迎下载精品名师归纳总结求的数据 ,并显示出iter.=*ix2.second.end 。+iter*iter.dayt。ix2=s_name.findname 。 /找到符合名字要foriter=*ix2.second.begin。cout*iter.year-*iter.month-cout*iter.lesson1-*iter.lesson2。可编辑资料 - -
9、- 欢迎下载精品名师归纳总结coutt*iter.courset*iter.namet*iter.typeendl。itera=*ix2.second.begin 。coutj。fork=0 。k.=j-1 。+k可编辑资料 - - - 欢迎下载精品名师归纳总结cout+itera。可编辑资料 - - - 欢迎下载精品名师归纳总结*en dl。可编辑资料 - - - 欢迎下载精品名师归纳总结*endl 。*endl 。型 6 返回上一级 *endl 。*endl 。cout*需要更改的工程cout*cout * 1日期 2 节次 3 课程名称 4 姓名 5 缺课类cout*cout可编辑资料
10、- - - 欢迎下载精品名师归纳总结*en dl。coutm。switchmcase 1:cout*itera.year*itera.month*itera.day。break 。可编辑资料 - - - 欢迎下载精品名师归纳总结case 2:case 3:case 4:case 5:case 6:cout*itera.lesson1*itera.lesson2 。break 。cout*itera.course 。break 。cout*itera.name 。break 。cout*itera.type 。break 。break 。可编辑资料 - - - 欢迎下载精品名师归纳总结defau
11、lt:cout 你的选择错了,请看清楚.second.end。iter+elsebreak 。forix2=s_name.begin 。ix2.=s_name.end 。 ix2+/foriter=ix2-second.begin。iter.=ix2-s.push_back*iter 。cout 没有这个同学的缺课记录endl 。coutendl 。可编辑资料 - - - 欢迎下载精品名师归纳总结else ifn=2可编辑资料 - - - 欢迎下载精品名师归纳总结elseelsereturn 。cout 你的选择错了,请看清楚.endl 。可编辑资料 - - - 欢迎下载精品名师归纳总结cou
12、t 记录为空,没有同学的缺课记录.endl 。void Search_recordvector& s/第三个模块查找某同学的缺课情形if.is_emptysint i 。vector:iterator iter。mapstring,vector :iterator it1。mapstring,vector s_name 。mapstring, vector :iterator itera。vector:iterator it。string name 。whiletrue可编辑资料 - - - 欢迎下载精品名师归纳总结cout*endl。cout *cout * 1 输入你要查询的同学姓名2 返
13、回上一级*en。dl*endl。cout *en。dlcout*endl。couti。ifi=1s_name.clear。forit=s.begin 。it.=s.end 。+its_name*it.name.push_back*it。foritera=s_name.begin 。itera.=s_name.end 。 +iterasortitera-second.begin,itera-second.end,compare 。coutname。 coutendl 。ifs_name.findname.=s_name.end可编辑资料 - - - 欢迎下载精品名师归纳总结iter.=*it1.
14、second.end。+iter*iter.dayt。it1=s_name.findname 。foriter=*it1.second.begin。cout*iter.year-*iter.month- cout*iter.lesson1-*iter.lesson2。可编辑资料 - - - 欢迎下载精品名师归纳总结coutt*iter.courset*iter.namet*iter.typeendl。可编辑资料 - - - 欢迎下载精品名师归纳总结elsecout 没有这个同学 .endl。coutendl 。可编辑资料 - - - 欢迎下载精品名师归纳总结else ifi=2可编辑资料 -
15、- - 欢迎下载精品名师归纳总结elseelsereturn 。cout 对不起,没有这个选项.endl 。可编辑资料 - - - 欢迎下载精品名师归纳总结cout 没有这个同学的缺课记录endl 。struct Search_structstring name,course 。int times 。/ 定义另一个结构模块boolcompare2Search_struct&x,Search_struct&y/ 依据次数排序 ,次数相等的就依据名字排序ifx.times=y.timesreturn x.namey.times 。可编辑资料 - - - 欢迎下载精品名师归纳总结voidSearch
16、_s_tvector&std/ 第四个模块查找某段时间内旷课学生姓名及旷课节数if.is_emptystdvector:iterator it。vector:iterator itera。map:iterator iter。vector vec。int y1,m1,d1,y2,m2,d2 。map ret 。cout 请输入你要查找的一个时间段y1 m1 d1 y2 m2 d2: y1m1d1y2m2d2。forit=std.begin 。it.=std.end 。+itiftime*it,y1,m1,d1,y2,m2,d2retit-name+=it-lesson2-it-lesson1+1
17、 。foriter=ret.begin 。iter.=ret.end 。iter+可编辑资料 - - - 欢迎下载精品名师归纳总结Search_struct tmp 。tmp.name=iter-first 。tmp.times=iter-second 。vec.push_backtmp 。sortvec.begin,vec.end,compare2 。foritera=vec.begin 。itera.=vec.end 。itera+coutnamettimesendl。elsecout 对不起,没有你要查找的记录.endl 。void Search_c_tvector& std/第五个模块
18、查找某段时间内旷课的课程及旷课人次if.is_emptystdvector:iterator it。vector:iterator itera。map:iterator iter。vector vec。int y1,m1,d1,y2,m2,d2 。map ret 。cout 请输入你想要查找的时间段y1 m1 d1 y2 m2 d2: y1m1d1y2m2d2。forit=std.begin 。it.=std.end 。+it/ 建立 map 容器iftime*it,y1,m1,d1,y2,m2,d2retit-course+=1 。foriter=ret.begin 。iter.=ret.e
19、nd 。iter+Search_struct tmp 。tmp.course=iter-first 。tmp.times=iter-second 。vec.push_backtmp 。sortvec.begin,vec.end,compare2 。foritera=vec.begin 。itera.=vec.end 。itera+可编辑资料 - - - 欢迎下载精品名师归纳总结elsecoutcoursettimesendl。可编辑资料 - - - 欢迎下载精品名师归纳总结int maincout 这段时间内没有同学的缺课纪录.endl 。可编辑资料 - - - 欢迎下载精品名师归纳总结vec
20、tor stu 。int choice 。whiletruecout*endl。cout *同学考勤治理系统*endl。cout* endl。cout * 1. 录入同学的缺课记录*end。l cout *end。lcout * 2. 修改某个同学的缺课记录*end。l cout *end。lcout * 3. 查找某同学的缺课情形*end。l cout *end。lcout * 4. 查找某段时间内旷课同学姓名及旷课节数*endl。cout *end。lcout * 5. 查找某段时间内旷课的课程及旷课人次*endl。cout *end。lcout * 6. 退出系统*en。dlcout*e
21、ndl。coutchoice。 ifchoice=1cout 请输入数据 : endl 年 月 日 节次 姓名 课程名称 缺课类可编辑资料 - - - 欢迎下载精品名师归纳总结型 endl 。read_recordcin,stu 。coutendl 。可编辑资料 - - - 欢迎下载精品名师归纳总结else ifchoice=2rewritestu 。coutendl 。else ifchoice=3Search_recordstu。可编辑资料 - - - 欢迎下载精品名师归纳总结coutendl 。else ifchoice=4Search_s_tstu。coutendl 。else ifchoice=5Search_c_tstu。coutendl 。else ifchoice=6return 0 。可编辑资料 - - - 欢迎下载精品名师归纳总结elsecout 对不起,没有这个菜单项.endl 。可编辑资料 - - - 欢迎下载精品名师归纳总结return 0 。可编辑资料 - - - 欢迎下载
限制150内