#include<vector>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include "Student_info.h"
using namespace std;
Student_info s_check;
/***第一模块*****学生信息录入*******/
/*录入学生的缺课记录:从键盘输入数据输入格式为:缺课日期 第几节课 课程名称 学生姓名 缺课类型*/
void read_absence_record(vector<Student_info>& students)
{
Student_info record;
bool f=true;
while(read(cin,record,f)&& true==f)
{
students.push_back(record);
}
cout<<"所有的学生记录为:"<<endl;
for(vector<Student_info>::size_type i=0;i<students.size();++i)
{
cout<< students[i].date<< "\t" << students[i].num << "\t"<< students[i].course
<< "\t"<< students[i].name << "\t"<< students[i].type<<endl;
}//for
}//read_absence读入学生记录函数
/****第二模块****修改学生信息*******/
/*修改某个学生的缺课记录:可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录*/
//这个部分我觉得思路有问题,因为我输入的是需要修改记录的学生的名字,在vector中找的话
//一个学生可能有多条记录,这样不好确定要修改的是那一条记录了。
//所以还是先确定要修改的是那一条记录再进行修改,这个问题真大
/*
bool compare(const Student_info& x)
{
return (x.date==s_check.date && x.num==s_check.num && x.course==s_check.course && x.name==s_check.name && x.type==s_check.type);
}*/
void revise_absence_record(vector<Student_info>& students)
{
cout<<"先输入你需要修改的一条完整信息(包括时间、课程节数、课程名称、姓名及类型)"<<endl;
bool f=true;
read(cin,s_check,f);
// read(cin,s,f);
vector<Student_info>::iterator it;
//我想改变这里是不是不能 vector<Student_info>::const_iterator it;
it=find_if(students.begin(),students.end(),compare);
if(it==students.end())
{
cout<<"未找到此信息!"<<endl;
}
else
{
cout<<"输入你要修改何种信息:"<<endl;
cout << "1.缺课日期 2.缺课节数 3.课程名称 4.学生姓名 5.缺课类型 #.返回上一层"<<endl;
char c;
while(cin>>c )
{
if('#'==c)
break;
switch(c)
{
case '1':
{
cout<<"现在输入请你输入新的缺课日期:"<<endl;
string new_date;
cin>>new_date;
(*it).date=new_date;
break;
}
case '2':
{
cout<<"现在输入请你输入新的缺课节数:"<<endl;
string new_num;
cin>>new_num;
(*it).num=new_num;
break;
}
case '3':
{
cout<<"现在输入请你输入新的课程名称:"<<endl;
string new_course;
cin>>new_course;
(*it).course=new_course;
break;
}
case '4':
{
cout<<"现在输入请你输入新的姓名:"<<endl;
string new_name;
cin>>new_name;
(*it).name=new_name;
break;
}
case '5':
{
cout<<"现在输入请你输入新的缺课类型:"<<endl;
string new_type;
cin>>new_type;
(*it).type=new_type;
break;
}
default:
{
cout<<"输入不合法"<<endl;
break;
}
}//switch
cout<<"学生记录已经完成修改,新的学生记录为:"<<endl;
cout<<(*it).date<<"\t"<<(*it).num<<"\t"<<(*it).course
<<"\t"<<(*it).name<<"\t"<<(*it).type<<endl;
cout<<"输入你要修改何种信息:"<<endl;
cout << "1.缺课日期 2.缺课节数 3.课程名称 4.学生姓名 5.缺课类型 #.返回上一层"<<endl;
}//while
}//else
}//revise_absence_record函数
/***第三模块*****查询某个学生的缺课情况*******/
/*查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序*/
/*
bool compare1(const Student_info&x, const Student_info&y )
{
if(x.date==y.date)
return x.num<y.num;
else return x.date<y.date;
}//bool,设定查询结果的排序方式*/
void search_absent_record(vector<Student_info>& students)
{
/*************************below new*********************************/
cout << "please enter a student's name:" << endl;
string inname;
cin >> inname ;
vector<Student_info>::const_iterator it;
map<string,vector<Student_info> > search_name;
//以学生名字为关键字,每一个学生对应的所有记录(存放在vector里)作为value建立map,可以方便查找
for(it=students.begin();it!=students.end();++it)
{
search_name[(*it).name].push_back(*it);
} //将同一个人的记录归类
bool have_name=false;
for(map<string,vector<Student_info> >::iterator i=search_name.begin();
i!=search_name.end();++i)
{//在所有的名字中查找,如果发现有输入的名字,就将这个学生的所有记录输出
if(i->first==inname)
{
have_name=true;
sort((i->second).begin(),(i->second).end(),compare1);
cout<<"该学生记录为:"<<endl;
for(vector<Student_info>::size_type j=0;j<(i->second).size();++j)
{
cout<< (i->second)[j].date<< "\t" << (i->second)[j].num << "\t"<< (i->second)[j].course
<< "\t"<< (i->second)[j].name << "\t"<< (i->second)[j].type<<endl;
}//for
}//if
}
if(have_name==false)
cout<<"没有这个同学的信息"<<endl; //没有对应的学生记录的话,反馈给用户
}//search_absent_record函数
/***第四模块*****统计某段时间内旷课学生姓名及旷课节数*******/
/*查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序;*/
struct Search_info{
string name,course;
int times;
};//一个新的结构体,用于对第四、第五个模块的对旷课次数、名字等排序
bool compare2(const Search_info& x,const Search_info& y)//按照次数排序,次数相等的则按照名字排序
{
if(x.times==y.times)
return x.name<y.name;
else
return x.times>y.times;
}
void statistics_absent_record(vector<Student_info>& students)
{
cout << "please enter two days:" << endl; //输入要求的两天作为时间段
string start,end;
cin>>start>>end;
map<string,int> counters;
vector<Search_info> statistic; //存放符合那个时间段的学生的记录的容器
for(vector<Student_info>::iterator it=students.begin();it!=students.end();++it)
{
if((*it).date >= start && (*it).date<=end )
counters[(*it).name]+=2; //扫描所有学生记录,如果旷课时间符合,存放到名字存放到counters里,且对应的旷课节数加 2
}
for(map<string,int>::iterator iter=counters.begin();iter!=counters.end();++iter)
{ //将map中的名字赋值到结构体的一个成员name里,他的旷课次数也放入对应的成员times里去
Search_info stu;
stu.name=iter->first;
stu.times=iter->second;
statistic.push_back(stu); //然后存放入statistic容器里,这样我们就可以就这两个成员排序
}
if(statistic.empty())//
cout<<"对不起,没有该记录!"<<endl;
else
{
sort(statistic.begin(),statistic.end(),compare2); //按compare2预先的排序方式排序
cout<<"输出这个时间段的所有缺课记录(按(旷课节数降序排序,姓名升序排序)"<<endl;
for(vector<Search_info>::iterator j=statistic.begin();j!=statistic.end();j++)
{
cout<<(*j).name<<"\t"<< (*j).times<<endl;
}
}//else
}//statistics_absent_record
/******第五模块********统计某段时间内,有学生旷课的课程及旷课人次********/
/*按旷课人次降序排序,旷课人次相同的课程按课程名称升序排序; */
bool compare3(const Search_info& x,const Search_info& y)//按照次数排序,次数相等的则按照名字排序
{ //以上的const是一定需要的啊,
if(x.times==y.times)
return x.course<y.course;
else
return x.times>y.times;
}
void statistics_course_record(vector<Student_info>& students)
{
cout << "please enter two days:" << endl;
string start;
string end;
cin >> start>> end; //cin >> start>> end>>endl 这是我原先写的,输入居然还带endl
map<string,int> counters;
vector<Search_info> statistic; //同第四模块一样,这个是存放符合那个时间段的学生的记录的容器
for(vector<Student_info>::iterator it=students.begin();it!=students.end();++it)
{
if((*it).date >= start && (*it).date<=end )
++counters[(*it).course]; //扫描所有学生记录,如果旷课时间符合,存放到名字存放到counters里,同时对应的旷课次数加 1
}
for(map<string,int>::iterator iter=counters.begin();iter!=counters.end();++iter)
{ //将map中的名字赋值到结构体的一个成员里,他的旷课次数也放入对应的成员里去
Search_info stu;
stu.course=iter->first;
stu.times=iter->second;
statistic.push_back(stu); //将一个学生记录放入到vector中去,这样我们可以进行排序
}
if(statistic.empty())//其实这个这样写不知道对不对哦
cout<<"
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
students也是考勤.rar (55个子文件)
students也是考勤
UpgradeLog.htm 36KB
.vs
students
v16
ipch
AutoPCH
ec8a6bd333f8ad09
MAIN.ipch 45.56MB
18af3bfbdb2a53f2
STUDENT_INFO.ipch 34.94MB
6112d4bc9994bb8
MODULE.ipch 45.56MB
.suo 48KB
Browse.VC.db 6.56MB
students.sln 1KB
Backup
students.sln 894B
students
students
main.cpp 3KB
Student_info.cpp 1KB
students.vcxproj.filters 1KB
students.vcproj.F77E87B01B5C41F.Administrator.user 1KB
students.vcxproj 5KB
module.h 801B
students.vcxproj.user 168B
module.cpp 9KB
students.vcproj.20081110-1602.Administrator.user 1KB
Debug
vc80.pdb 292KB
students.exe.embed.manifest 403B
BuildLog.htm 7KB
students.log 9KB
vc142.pdb 668KB
vc142.idb 483KB
students.exe.intermediate.manifest 385B
mt.dep 69B
students.exe.embed.manifest.res 468B
Student_info.obj 152KB
students.tlog
link.read.1.tlog 2B
link-cvtres.read.1.tlog 2B
link.command.1.tlog 2B
CL.command.1.tlog 2KB
link.2628-rc.write.1.tlog 2B
CL.write.1.tlog 2KB
link.delete.1.tlog 2KB
link.2628-cvtres.write.1.tlog 2B
link-cvtres.write.1.tlog 2B
link-rc.write.1.tlog 2B
link.2628.read.1.tlog 2B
link.2628-cvtres.read.1.tlog 2B
link.2628.write.1.tlog 2B
unsuccessfulbuild 0B
link.2628-rc.read.1.tlog 2B
link.2628.delete.1.tlog 922B
CL.read.1.tlog 61KB
link.write.1.tlog 2B
link-rc.read.1.tlog 2B
students.lastbuildstate 201B
main.obj 129KB
vc80.idb 419KB
students.vcproj 4KB
students.vcproj.PC2009092217UFS.Administrator.user 1KB
Student_info.h 660B
students.suo 14KB
debug
students.pdb 66KB
students.ncb 1.22MB
共 55 条
- 1
资源评论
Aaronilliu
- 粉丝: 1
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功