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; std::string course,name,type; std::istream }; istream return in; } istream s.clear();//调用 s.clear()来清空 s 的记录 while(record.read(in)) { s.push_back(record); } in.clear();//将记录的错误状态恢复正确,以继续读取记录 return in; } bool is_empty(vector } bool compare(Student_info } else if(x.year==y.year } else if(x.year==y.year } else { return x.year stud.year || y2 s_name; map::iterator ix2; vector::iterator ix,iter,itera; string name;//-------------------定义这些参数和迭代器必须在SWITHC外,不然它可能被 忽略跳过 while(true) { coutn; if(n==1) { s_name.clear();//------------------------------清空 MAP 容器 for(ix=s.begin();ix!=s.end();++ix) { s_name[(*ix).name].push_back(*ix); } s.clear(); coutj; for(k=0;k!=j-1;++k) { ++itera; } coutm; switch(m) { 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 { } cout::iterator it1; map s_name; map::iterator itera; vector::iterator it; string name; while(true) { couti; if(i==1){ 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) { sort(itera-second.begin(),itera-second.end(),compare); } couty1m1d1y2m2d2; for(it=std.begin();it!=std.end();++it) { if(time(*it,y1,m1,d1,y2,m2,d2)) { ret[it-name]+=(it-lesson2-it-lesson1+1); } } for(iter=ret.begin();iter!=ret.end();iter++) { Search_struct tmp; tmp.name=iter-first; tmp.times=iter-second; vec.push_back(tmp); } sort(vec.begin(),vec.end(),compare2); for(itera=vec.begin();itera!=vec.end();itera++) { couty1m1d1y2m2d2; for(it=std.begin();it!=std.end();++it)//建立 map 容器 { if(time(*it,y1,m1,d1,y2,m2,d2)) { ret[it-course]+=1; } } for(iter=ret.begin();iter!=ret.end();iter++) { Search_struct tmp; tmp.course=iter-first; tmp.times=iter-second; vec.push_back(tmp); } sort(vec.begin(),vec.end(),compare2); for(itera=vec.begin();itera!=vec.end();itera++) { coutchoice; if(choice==1){ cout“请输入数据 : “endl“年 月 日 节次 姓名 课程名称缺课类型 “endl; read_record(cin,stu); coutendl; } else if(choice==2){ rewrite(stu); coutendl; } else if(choice==3){ Search_record(stu); coutendl; } else if(choice==4){ Search_s_t(stu); coutendl; } else if(choice==5){ Search_c_t(stu); coutendl; } else if(choice==6){ return 0; } else cout“对不起,没有这个菜单项!“endl; } return 0; }