c学生考勤信息管理系统Word下载.docx
《c学生考勤信息管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《c学生考勤信息管理系统Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
![c学生考勤信息管理系统Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/23/361985f9-77c1-4740-8c5c-0e30bfea6f34/361985f9-77c1-4740-8c5c-0e30bfea6f341.gif)
std:
:
stringcourse,name,type;
istream&
read(std:
);
};
Student_info:
read(istream&
in)
{
in>
>
year>
month>
day>
lesson1>
lesson2>
course>
name>
type;
returnin;
}
read_record(istream&
in,vector<
Student_info>
&
s)//第一个模块--------------输入学生的缺课记录
Student_inforecord;
s.clear();
//调用s.clear()来清空s的记录
while(record.read(in))
{
s.push_back(record);
}
in.clear();
//将记录的错误状态恢复正确,以继续读取记录
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<
y.lesson1;
elseif(x.year==y.year&
x.day!
=y.day){
returnx.day<
y.day;
x.month!
=y.month){
returnx.month<
y.month;
else{
returnx.year<
y.year;
booltime(constStudent_info&
stud,inty1,intm1,intd1,inty2,intm2,intd2)//筛选符合输入时间段的数据
if((y1==stud.year&
stud.month==m1&
stud.day<
d1)||(y2==stud.year&
stud.month==m2&
stud.day>
d2))
return0;
elseif((y1==stud.year&
stud.month<
m1)||(y2==stud.year&
stud.month>
m2))
elseif(y1>
stud.year||y2<
stud.year)
else
return1;
voidrewrite(vector<
s)//第二个模块--------------修改某个学生的缺课情况
if(!
is_empty(s))
intn,m,j,k;
map<
string,vector<
>
s_name;
iteratorix2;
vector<
iteratorix,iter,itera;
stringname;
//-------------------定义这些参数和迭代器必须在SWITHC外,不然它可能被忽略跳过
while(true)
{
cout<
<
"
*********************************************************"
endl;
*1.请输入你要修改缺课记录的学生姓名*"
**"
*2.返回上一级菜单*"
请选择菜单选项:
"
;
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;
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"
(*iter).lesson1<
(*iter).lesson2;
(*iter).course<
(*iter).name<
(*iter).type<
}
itera=(*ix2).second.begin();
cout<
请输入要更改记录的序号:
cin>
j;
for(k=0;
k!
=j-1;
++k)
++itera;
**************************************************************************"
*需要更改的项目*"
*1日期2节次3课程名称4姓名5缺课类型6返回上一级*"
请选择要更改的项目号:
m;
switch(m)
case1:
请输入更改的日期(年月日):
cin>
(*itera).year>
(*itera).month>
(*itera).day;
break;
case2:
请输入更改的节次(L1、L2):
(*itera).lesson1>
(*itera).lesson2;
case3:
请输入要更改的课程名称:
(*itera).course;
case4:
请输入要更改的学生姓名:
(*itera).name;
case5:
请输入缺课类型:
(*itera).type;
case6:
default:
你的选择错了,请看清楚!
for(ix2=s_name.begin();
ix2!
=s_name.end();
ix2++)//将改写后的数据放入vector容器中
for(iter=ix2->
second.begin();
=ix2->
second.end();
iter++)
{
s.push_back(*iter);
}
else
没有这个学生的缺课记录"
break;
}
elseif(n==2)
return;
else
}
cout<
记录为空,没有学生的缺课记录!
voidSearch_record(vector<
s)//第三个模块-------------查找某学生的缺课情况
inti;
iteratoriter;
iteratorit1;
string,vector<
iteratoritera;
iteratorit;
**********************************************************"
*1输入你要查询的学生姓名2返回上一级*"
请选择菜单:
i;
if(i==1){
for(it=s.begin();
it!
++it)
s_name[(*it).name].push_back(*it);
for(itera=s_name.begin();
itera!
++itera)
sort(itera->
second.begin(),itera->
second.end(),compare);
请输入名字:
it1=s_name.find(name);
for(iter=(*it1).second.begin();
=(*it1).second.end();
没有这个学生."
elseif(i==2)
对不起,没有这个选项!
structSearch_struct{
stringname,course;
inttimes;
//定义另一个结构模块
boolcompare2(Search_struct&
x,Search_struct&
y)//按照次数排序,次数相等的则按照名字排序
if(x.times==y.times)
returnx.name<
y.name;
returnx.times>
y.times;
voidSearch_s_t(vector<
std)//第四个模块----------------查找某段时间内旷课学生姓名及旷课节数
is_empty(std))
Search_struct>
string,int>
vec;
inty1,m1,d1,y2,m2,d2;
ret;
请输入你要查找的一个时间段(y1m1d1y2m2d2):
cin>
y1>
m1>
d1>
y2>
m2>
d2;
for(it=std.begin();
=std.end();
if(time(*it,y1,m1,d1,y2,m2,d2))
ret[it->
name]+=(it->
lesson2-it->
lesson1+1);
for(iter=ret.begin();
=ret.end();
Search_structtmp;
tmp.name=iter->
first;
tmp.times=iter->
second;
vec.push_back(tmp);
sort(vec.begin(),vec.end(),compare2);
for(itera=vec.begin();
=vec.end();
itera++)
itera->
name<
times<
对不起,没有你要查找的记录!
voidSearch_c_t(vector<
std)//第五个模块---------------查找某段时间内旷课的课程及旷课人次
请输入你想要查找的时间段(y1m1d1y2m2d2):
++it)//建立map容器
course]+=1;
tmp.course=iter->
course<
这段时间内没有学生的缺课纪录!
intmain()
vector<
stu;
intchoice;
while(true)
*************************************************************"
*学生考勤管理系统*"
************************************************************"
*1.录入学生的缺课记录*"
*2.修改某个学生的缺课记录*"
*3.查找某学生的缺课情况*"
*4.查找某段时间内旷课学生姓名及旷课节数*"
*5.查找某段时间内旷课的课程及旷课人次*"
*6.退出系统*"
choice;
if(choice==1){
请输入数据:
endl<
年月日节次姓名课程名称缺课类型"
read_record(cin,stu);
elseif(choice==2){
rewrite(stu);
elseif(choice==3){
Search_record(stu);
elseif(choice==4){
Search_s_t(stu);
elseif(choice==5){