c 学生考勤信息管理系统_第1页
c 学生考勤信息管理系统_第2页
c 学生考勤信息管理系统_第3页
c 学生考勤信息管理系统_第4页
c 学生考勤信息管理系统_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*题目:学生考勤管理系统

考勤信息记录了学生的缺课状况,它包括:缺课日期、第几节课【连续多节课用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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论