c++学生考勤信息管理系统教学总结.docx

上传人:b****2 文档编号:24603543 上传时间:2023-05-29 格式:DOCX 页数:16 大小:18.66KB
下载 相关 举报
c++学生考勤信息管理系统教学总结.docx_第1页
第1页 / 共16页
c++学生考勤信息管理系统教学总结.docx_第2页
第2页 / 共16页
c++学生考勤信息管理系统教学总结.docx_第3页
第3页 / 共16页
c++学生考勤信息管理系统教学总结.docx_第4页
第4页 / 共16页
c++学生考勤信息管理系统教学总结.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

c++学生考勤信息管理系统教学总结.docx

《c++学生考勤信息管理系统教学总结.docx》由会员分享,可在线阅读,更多相关《c++学生考勤信息管理系统教学总结.docx(16页珍藏版)》请在冰豆网上搜索。

c++学生考勤信息管理系统教学总结.docx

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&s)//第一个模块--------------输入学生的缺课记录

{

Student_inforecord;

s.clear();//调用s.clear()来清空s的记录

while(record.read(in))

{

s.push_back(record);

}

in.clear();//将记录的错误状态恢复正确,以继续读取记录

returnin;

}

boolis_empty(vector&s)//判断输入学生的记录是否为空,为空则返回真

{

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.dayd2))

return0;

elseif((y1==stud.year&&stud.monthm2))

return0;

elseif(y1>stud.year||y2

return0;

else

return1;

}

voidrewrite(vector&s)//第二个模块--------------修改某个学生的缺课情况

{

if(!

is_empty(s))

{

intn,m,j,k;

map>s_name;

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&s)//第三个模块-------------查找某学生的缺课情况

{

if(!

is_empty(s))

{

inti;

vector:

:

iteratoriter;

map>:

:

iteratorit1;

map>s_name;

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&std)//第四个模块----------------查找某段时间内旷课学生姓名及旷课节数

{

if(!

is_empty(std))

{

vector:

:

iteratorit;

vector:

:

iteratoritera;

map:

:

iteratoriter;

vectorvec;

inty1,m1,d1,y2,m2,d2;

mapret;

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<name<<"\t"<times<

}

}

else

cout<<"对不起,没有你要查找的记录!

"<

}

voidSearch_c_t(vector&std)//第五个模块---------------查找某段时间内旷课的课程及旷课人次

{

if(!

is_empty(std))

{

vector:

:

iteratorit;

vector:

:

iteratoritera;

map:

:

iteratoriter;

vectorvec;

inty1,m1,d1,y2,m2,d2;

mapret;

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<course<<"\t"<times<

}

}

else

cout<<"这段时间内没有学生的缺课纪录!

"<

}

intmain()

{

vectorstu;

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1