学生考勤管理系统设计与实现1、问题描述学生信息包括:学号、姓名、性别、年龄、班级等信息。考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。2、功能要求(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。(3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
1条回答 默认 最新
- CSDN专家-sinJack 2021-07-04 22:39关注
可以参考一下:
#include
#include
#include
#include
#include
#include<map>
#include
using namespace std;
#define N 999
int n;
class STU
{
public:
STU() {}
void input(char d[],int X,string n,string sn,int sd,int cl)
{
strcpy(date,d);
ClassX=X;
ClassN=n;
stuN=sn;
stuID=sd;
ClassL=cl;
}
void print()
{
cout<<"缺课日期 课节 课程名称 学生姓名 学生学号 缺课类型\t"<<endl;
cout<<date<<"\t"<<ClassX<<"\t"<<ClassN<<"\t"<<stuN<<"\t"<<stuID<<"\t"<<ClassL<<endl;
}
friend void Change(STU stu[]);
friend void Find(STU stu[]);
friend void chaxun1(STU stu[]);
friend void chaxun2(STU stu[]);
private:
string stuN;
int stuID;
char date[15];
int ClassX;
string ClassN;
int ClassL;
};</map>//主菜单
void meau()
{
cout<<endl;
cout<<endl;
cout<<"学生后勤管理系统"<<endl;
cout<<"1-录入学生的缺课记录"<<endl;
cout<<"2-修改某个学生的缺课记录"<<endl;
cout<<"3-查询某个学生的缺课情况"<<endl;
cout<<"4-统计旷课信息"<<endl;
cout<<"5-退出系统"<<endl;
cout<<endl;
cout<<endl;}
//输入学生的缺课记录
void Input(STU stu[])
{
char date[15];
string stuN, ClassN;
int stuID,ClassX,ClassL;
while(1)
{
cout<<"请输入记录情况个数"<<endl;
cin>>n;
for(int i=0; i<n; i++)
{
cout<<"请输入第"<<i+1<<"种情况"<<endl;
cout<<"请输入缺课日期\n";
cin>>date;
cout<<"请输入第几节课\n";
cin>>ClassX;
cout<<"请输入课程名称\n";
cin>>ClassN;
cout<<"请输入学生姓名\n";
cin>>stuN;
cout<<"请输入学生学号\n";
cin>>stuID;
cout<<"请输入缺课类型,1代表请假,2代表旷课, 3代表迟到\n";
cin>>ClassL;
stu[i].input(date,ClassX,ClassN,stuN,stuID,ClassL);
}
cout<<"输入信息完毕!是否继续输入?y是继续,n是停止:"<<endl;
char cc;
getchar();
cin>>cc;
if(cc=='n')
return ;
}
}
//修改某个学生的缺课记录
void Change(STU stu[])
{
cout<<"请输入将要修改的学生姓名或者学号,1代表姓名,2代表学号:"<<endl;
int x;
cin>>x;
if(x==1)
{
cout<<"请输入将要修改的学生姓名:"<<endl;
string name;
cin>>name;
for(int i=0; i<n; i++)
{
if(stu[i].stuN==name)
{
stu[i].print();
cout<<"是否对该学生信息进行修改,y代表进行,n代表不进行:"<<endl;
getchar();
char cc;
cin>>cc;
if(cc=='n')
continue;
else if(cc='y')
{
cout<<"请选择修改内容:"<<endl;
cout<<"修改日期请按1:\n修改课节请按2:\n修改课程名称请按3:\n修改缺课类型请按4:\n";
cin>>x;
switch(x)
{
case 1:
{
char date[20];
cout<<"请输入正确日期"<<endl;
cin>>date;
strcpy(stu[i].date,date);
}
break;
case 2:
{
cout<<"请输入正确课节"<<endl;
cin>>x;
stu[i].ClassX=x;
}
break;
case 3:
{
cout<<"请输入正确课程名称"<<endl;
cin>>name;
stu[i].ClassN=name;
}
break;
case 4:
{
cout<<"请输入正确缺课类型"<<endl;
cin>>x;
stu[i].ClassL=x;
}
break;
default :
cout<<"抱歉,没有该选项。"<<endl;
}
break;
cout<<"输出修改后的学生信息:"<<endl;
stu[i].print();
}
else cout<<"抱歉,没有该选项。"<<endl;
}
}
}
else if(x==2)
{
cout<<"请输入要修改的学号:"<<endl;
cin>>x;
for(int i=0; i<n; i++)
{
if(stu[i].stuID==x)
{
cout<<"是否对该学生信息进行修改,y代表进行,n代表不进行:"<<endl;
stu[i].print();
getchar();
char cc;
cin>>cc;
if(cc=='n')
continue;
else if(cc='y')
{
cout<<"请选择修改内容:"<<endl;
cout<<"修改日期请按1:\n修改课节请按2:\n修改课程名称请按3:\n修改缺课类型请按4:\n";
cin>>x;
switch(x)
{
case 1:
{
cout<<"请输入正确日期"<<endl;
char name[20];
cin>>name;
strcpy(stu[i].date,name);
}
break;
case 2:
{
cout<<"请输入正确课节"<<endl;
cin>>x;
stu[i].ClassX=x;
}
break;
case 3:
{
cout<<"请输入正确课程名称"<<endl;
string name;
cin>>name;
stu[i].ClassN=name;
}
break;
case 4:
{
cout<<"请输入正确缺课类型"<<endl;
cin>>x;
stu[i].ClassL=x;
}
break;
default :
cout<<"抱歉,没有该选项。"<<endl;
}
break;
cout<<"输出修改后的学生信息:"<<endl;
stu[i].print();
}
else
cout<<"抱歉,没有该选项。"<<endl;
}
}
}
else
cout<<"抱歉,没有该选项。"<<endl;
}
//查询某个学生的缺课情况
void Find(STU stu[])
{
cout<<"请输入将要查询的学生姓名(1)或者学号(2)"<<endl;
int x;
cin>>x;
if(x==1)
{
cout<<"请输入将要查询的学生姓名"<<endl;
string name;
cin>>name;
for(int i=0; i<n; i++)
{
if(stu[i].stuN==name)
stu[i].print();
}
}
else if(x==2)
{
cout<<"请输入将要查询的学生学号"<<endl;
cin>>x;
for(int i=0; i<n; i++)
{
if(stu[i].stuID==x)
stu[i].print();
}
}
else cout<<"抱歉,没有该选项。"<<endl;
}//统计旷课学生信息
void chaxun1(STU stu[])
{
map<string,int> A;
A.clear();
for(int s=0; s<n; s++)
{
if(stu[s].ClassL==2)
{
A[stu[s].stuN]++;
}
}
map<string,int>::iterator it;
int k=0,ant[N];
string sn[N];
for(it=A.begin(); it!=A.end(); it++)
{
sn[k]=(*it).first;
ant[k]=(*it).second;k++; } for(int i=0; i<k-1; i++) for(int j=i+1; j<k; j++) { if(ant[i]<ant[j]) { int temp; string ss; temp=ant[i]; ant[i]=ant[j]; ant[j]=temp; ss=sn[i]; sn[i]=sn[j]; sn[j]=ss; } } for(int m=0; m<k; m++) { cout<<"学生姓名 旷课次数"<<endl; cout<<sn[m]<<"\t"<<ant[m]<<endl; }
}
//统计旷课课程信息
void chaxun2(STU stu[])
{
map<string,int> A;
A.clear();
for(int i=0; i<n; i++)
{
if(stu[i].ClassL==2)
{
A[stu[i].ClassN]++;
}
}
map<string,int>::iterator it;
for(it=A.begin(); it!=A.end(); it++)
{
cout<<"课程名称 旷课总人次"<<endl;
cout<<(*it).first<<"\t"<<(*it).second<<endl;
}
}
int main()
{STU stu[N]; while(1) { meau(); cout<<"请输入对应功能序号"<<endl; int x; cin>>x; switch(x) { case 1: Input(stu); break; case 2: { if(n==0) cout<<"错误,无信息!\n"; else Change(stu); } break; case 3: { if(n==0) cout<<"错误,无信息!\n"; else Find(stu); } break; case 4: { if(n==0) cout<<"错误,无信息!\n"; else { cout<<"\n查看学生旷课信息请按1:\n"; cout<<"\n查看课程旷课信息请按2:\n"; cin>>x; if(x==1) chaxun1(stu); else if(x==2) chaxun2(stu); else cout<<"抱歉,没有该选项。"<<endl; } } break; case 5: { cout<<"退出该系统。"<<endl; return 0; break; } default: cout<<"对不起,该项功能不存在."<<endl; } } return 0;
}
解决 无用评论 打赏 举报