c学生考勤信息管理系统.docx
- 文档编号:7742645
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:14
- 大小:18.69KB
c学生考勤信息管理系统.docx
《c学生考勤信息管理系统.docx》由会员分享,可在线阅读,更多相关《c学生考勤信息管理系统.docx(14页珍藏版)》请在冰豆网上搜索。
c学生考勤信息管理系统
/*题目:
学生考勤管理系统
考勤信息记录了学生的缺课情况,它包括:
缺课日期、第几节课(连续多节课用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。
试设计一考勤管理系统,使之能提供以下功能:
1.录入学生的缺课记录:
从键盘输入数据(提示:
为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:
缺课日期第几节课课程名称学生姓名缺课类型
每行一条纪录。
例如:
2008-04-293-4C++程序设计实验张三迟到
2008-04-283-4C++程序设计李四旷课
2.修改某个学生的缺课记录:
可以对缺课纪录的任意部分进行修改。
3.查询某个学生的缺课情况:
查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。
4.统计某段时间内(以天为单位),旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序;
5.统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序;
6.系统以菜单方式工作。
通过几天的奋斗终于将这个设计做出来了,如下是该程序的详细过程*/
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
structStudent_info{
intyear,month,day,lesson1,lesson2;
std:
:
stringcourse,name,type;
std:
:
istream&read(std:
:
istream&);
};
istream&Student_info:
:
read(istream&in)
{
in>>year>>month>>day>>lesson1>>lesson2>>course>>name>>type;
returnin;
}
istream&read_record(istream&in,vector
{
Student_inforecord;
s.clear();//调用s.clear()来清空s的记录
while(record.read(in))
{
s.push_back(record);
}
in.clear();//将记录的错误状态恢复正确,以继续读取记录
returnin;
}
boolis_empty(vector
{
returns.empty();
}
boolcompare(Student_info&x,Student_info&y)//按照时间排序,若日期相等则看课程时间
{
if(x.year==y.year&&x.month==y.month&&x.day==y.day){
returnx.lesson1 } elseif(x.year==y.year&&x.month==y.month&&x.day! =y.day){ returnx.day } elseif(x.year==y.year&&x.month! =y.month){ returnx.month } else{ returnx.year } } booltime(constStudent_info&stud,inty1,intm1,intd1,inty2,intm2,intd2)//筛选符合输入时间段的数据 { if((y1==stud.year&&stud.month==m1&&stud.day return0; elseif((y1==stud.year&&stud.month return0; elseif(y1>stud.year||y2 return0; else return1; } voidrewrite(vector { if(! is_empty(s)) { intn,m,j,k; map map : iteratorix2; vector : iteratorix,iter,itera; stringname;//-------------------定义这些参数和迭代器必须在SWITHC外,不然它可能被忽略跳过 while(true) { cout<<"*********************************************************"< cout<<"*1.请输入你要修改缺课记录的学生姓名*"< cout<<"**"< cout<<"*2.返回上一级菜单*"< cout<<"*********************************************************"< cout<<"请选择菜单选项: "; cin>>n; if(n==1) { 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< if(s_name.find(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).lesson1<<"-"<<(*iter).lesson2; cout<<"\t"<<(*iter).course<<"\t"<<(*iter).name<<"\t"<<(*iter).type< } itera=(*ix2).second.begin(); cout<<"请输入要更改记录的序号: "; cin>>j; for(k=0;k! =j-1;++k) { ++itera; } cout<<"**************************************************************************"< cout<<"*需要更改的项目*"< cout<<"**"< cout<<"*1日期2节次3课程名称4姓名5缺课类型6返回上一级*"< cout<<"**"< cout<<"**************************************************************************"< cout<<"请选择要更改的项目号: "; cin>>m; switch(m) { case1: cout<<"请输入更改的日期(年月日): "; cin>>(*itera).year>>(*itera).month>>(*itera).day; break; case2: cout<<"请输入更改的节次(L1、L2): "; cin>>(*itera).lesson1>>(*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<<"你的选择错了,请看清楚! "< break; } for(ix2=s_name.begin();ix2! =s_name.end();ix2++)//将改写后的数据放入vector容器中 { for(iter=ix2->second.begin();iter! =ix2->second.end();iter++) { s.push_back(*iter); } } } else { cout<<"没有这个学生的缺课记录"< cout< } break; } elseif(n==2) { return; } else cout<<"你的选择错了,请看清楚! "< } } else cout<<"记录为空,没有学生的缺课记录! "< } voidSearch_record(vector { if(! is_empty(s)) { inti; vector : iteratoriter; map : iteratorit1; map map : iteratoritera; vector : iteratorit; stringname; while(true) { cout<<"**********************************************************"< cout<<"**"< cout<<"*1输入你要查询的学生姓名2返回上一级*"< cout<<"**"< cout<<"**********************************************************"< cout<<"请选择菜单: "; cin>>i; 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); } cout<<"请输入名字: "; cin>>name; cout< if(s_name.find(name)! =s_name.end()) { it1=s_name.find(name); for(iter=(*it1).second.begin();iter! =(*it1).second.end();++iter) { cout<<(*iter).year<<"-"<<(*iter).month<<"-"<<(*iter).day<<"\t"; cout<<(*iter).lesson1<<"-"<<(*iter).lesson2; cout<<"\t"<<(*iter).course<<"\t"<<(*iter).name<<"\t"<<(*iter).type< } } else { cout<<"没有这个学生."< cout< } } elseif(i==2) { return; } else cout<<"对不起,没有这个选项! "< } } else cout<<"没有这个学生的缺课记录"< } structSearch_struct{ stringname,course; inttimes; };//定义另一个结构模块 boolcompare2(Search_struct&x,Search_struct&y)//按照次数排序,次数相等的则按照名字排序 { if(x.times==y.times) returnx.name else returnx.times>y.times; } voidSearch_s_t(vector { if(! is_empty(std)) { vector : iteratorit; vector : iteratoritera; map : iteratoriter; vector inty1,m1,d1,y2,m2,d2; map cout<<"请输入你要查找的一个时间段(y1m1d1y2m2d2): "< cin>>y1>>m1>>d1>>y2>>m2>>d2; 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_structtmp; 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++) { cout< } } else cout<<"对不起,没有你要查找的记录! "< } voidSearch_c_t(vector { if(! is_empty(std)) { vector : iteratorit; vector : iteratoritera; map : iteratoriter; vector inty1,m1,d1,y2,m2,d2; map cout<<"请输入你想要查找的时间段(y1m1d1y2m2d2): "< cin>>y1>>m1>>d1>>y2>>m2>>d2; 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_structtmp; 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++) { cout< } } else cout<<"这段时间内没有学生的缺课纪录! "< } intmain() { vector intchoice; while(true) { cout<<"*************************************************************"< cout<<"*学生考勤管理系统*"< cout<<"************************************************************"< cout<<"*1.录入学生的缺课记录*"< cout<<"**"< cout<<"*2.修改某个学生的缺课记录*"< cout<<"**"< cout<<"*3.查找某学生的缺课情况*"< cout<<"**"< cout<<"*4.查找某段时间内旷课学生姓名及旷课节数*"< cout<<"**"< cout<<"*5.查找某段时间内旷课的课程及旷课人次*"< cout<<"**"< cout<<"*6.退出系统*"< cout<<"*************************************************************"< cout<<"请选择菜单选项: "; cin>>choice; if(choice==1){ cout<<"请输入数据: "< read_record(cin,stu); cout< } elseif(choice==2){ rewrite(stu); cout< } elseif(choice==3){ Search_record(stu); cout< } elseif(choice==4){ Search_s_t(stu); cout< } elseif(choice==5){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 考勤 信息管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)