c++学生考勤信息管理系统教学总结
/*题目学生考勤管理系统 考勤信息记录了学生的缺课情况, 它包括 缺课日期、 第几节课连续多节课用 begin-end 的 形式表示、课程名称(课程名称中不会出现空格) 、学生姓名、缺课类型(迟到、早退、请 假及旷课) 。试设计一考勤管理系统,使之能提供以下功能 1. 录入学生的缺课记录从键盘输入数据(提示为避免重复从键盘输入数据,测试时可 将数据存储在文件中,利用输入重定向功能读入) ,输入格式为 缺课日期 第几节课 课程名称 学生姓名 缺课类型 每行一条纪录。 例如 2008-04-29 3-4 C程序设计实验 张三 迟到 2008-04-28 3-4 C程序设计 李四 旷课 2.修改某个学生的缺课记录可以对缺课纪录的任意部分进行修改。 3.查询某个学生的缺课情况查询结果按照日期升序排序,同一天内按照所缺课程的时间 升序排序。 4.统计某段时间内(以天为单位) ,旷课学生姓名及旷课节数,查询结果先按旷课节数降序 排序,旷课节数相同的学生按姓名升序排序; 5.统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次 相同的课程按课程名称升序排序; 6.系统以菜单方式工作。 通过几天的奋斗终于将这个设计做出来了,如下是该程序的详细过程*/ include include include include include include include include using namespace std; struct Student_info{ int year,month,day,lesson1,lesson2; stdstring course,name,type; stdistream }; istream return in; } istream s.clear;//调用 s.clear来清空 s 的记录 whilerecord.readin { s.push_backrecord; } in.clear;//将记录的错误状态恢复正确,以继续读取记录 return in; } bool is_emptyvector } bool compareStudent_info } else ifx.yeary.year } else ifx.yeary.year } else { return x.year stud.year || y2 s_name; mapiterator ix2; vectoriterator ix,iter,itera; string name;//-------------------定义这些参数和迭代器必须在SWITHC外,不然它可能被 忽略跳过 whiletrue { coutn; ifn1 { s_name.clear;//------------------------------清空 MAP 容器 forixs.begin;ixs.end;ix { s_name[*ix.name].push_back*ix; } s.clear; coutj; fork0;kj-1;k { itera; } coutm; switchm { case 1 cout*itera.month*itera.day; break; case 2 cout*itera.lesson2; break; case 3 cout*itera.name; break; case 5 coutsecond.end;iter { s.push_back*iter; } } } else { } coutiterator it1; map s_name; mapiterator itera; vectoriterator it; string name; whiletrue { couti; ifi1{ s_name.clear; forits.begin;its.end;it { s_name[*it.name].push_back*it; } foriteras_name.begin;iteras_name.end; itera { sortitera-second.begin,itera-second.end,compare; } couty1m1d1y2m2d2; foritstd.begin;itstd.end;it { iftime*it,y1,m1,d1,y2,m2,d2 { ret[it-name]it-lesson2-it-lesson11; } } foriterret.begin;iterret.end;iter { Search_struct tmp; tmp.nameiter-first; tmp.timesiter-second; vec.push_backtmp; } sortvec.begin,vec.end,compare2; foriteravec.begin;iteravec.end;itera { couty1m1d1y2m2d2; foritstd.begin;itstd.end;it//建立 map 容器 { iftime*it,y1,m1,d1,y2,m2,d2 { ret[it-course]1; } } foriterret.begin;iterret.end;iter { Search_struct tmp; tmp.courseiter-first; tmp.timesiter-second; vec.push_backtmp; } sortvec.begin,vec.end,compare2; foriteravec.begin;iteravec.end;itera { coutchoice; ifchoice1{ cout“请输入数据 “endl“年 月 日 节次 姓名 课程名称缺课类型 “endl; read_recordcin,stu; coutendl; } else ifchoice2{ rewritestu; coutendl; } else ifchoice3{ Search_recordstu; coutendl; } else ifchoice4{ Search_s_tstu; coutendl; } else ifchoice5{ Search_c_tstu; coutendl; } else ifchoice6{ return 0; } else cout“对不起,没有这个菜单项“endl; } return 0; }