/
缺点:当输入多个人的缺课信息时,统计功能有问题
classtime
classxinxi:publictime
classqkechen:publicxinxi
classqstu:publicxinxi
/
#include
#include
usingnamespacestd;
/---1--时间------/
classtime
{
public:
time(inty=0,intm=0,intd=0)
{
year=y;month=m;day=d;
}
~time(){}
protected:
intyear,month,day;
};
/----1--时间------/
/---2--信息------/
classxinxi:publictime
{
public:
xinxi(){tiaoshu++;}
~xinxi(){tiaoshu--;}
voidsetname(charn)
{
strcpy(name,n);
}
voidsettime(inty,intm,intd)
{
year=y;
month=m;
day=d;
}
voidsetqklx(charqk)
{
strcpy(queke,qk);
}
voidsetjieci(charjc)
{
strcpy(jieci,jc);
}
voidsetkechen(charkc)
{
strcpy(kechen,kc);
}
chargetname()
{
charn;
n=name;
returnn;
}
chargetqklx()
{
charqk=queke;
returnqk;
}
chargetjieci()
{
charjc;
jc=jieci;
returnjc;
}
chargetkechen()
{
chargk;
gk=kechen;
returngk;
}
intgettime();//获得时间
private:
charname[20];//姓名
charjieci[3];//节次
charkechen[10];//课程名
charqueke[10];//缺课类型
inttm[3];//时间
staticinttiaoshu;/////////////////////////////////////////////////////
};
intxinxi::tiaoshu=0;
intxinxi::gettime()
{
intt;
t=tm;
tm[0]=year;
tm[1]=month;
tm[2]=day;
returnt;
}
/---2--信息------/
/----3-缺课课程--------/
classqkechen:publicxinxi
{
public:
qkechen(){kcshu++;}
~qkechen(){kcshu--;}
intgetrc(xinxist1[],intn,intj);
charqkn[20];
private:
intrenci;
staticintkcshu;
};
intqkechen::kcshu=0;
intqkechen::getrc(xinxist1[],intn,intj)
{
renci=0;
renci++;
for(inti=0;i if((st1[i+1].gettime()+1)==(st1[j].gettime()+1)&&(st1[i+1].gettime()+2)==(st1[j].gettime()+2))
if(strcmp(qkn,st1[i].getkechen())==0)
renci++;
returnrenci;
}
/----3--缺课课程-----/
/----4-缺课学生------/
classqstu:publicxinxi
{
public:
qstu(){qst++;}
~qstu(){qst--;}
voidprint(xinxi&st1);
intgetjs(xinxist1[],intn,intj);
intsetjs(intjs=0){jieshu=js;}
charqstn[20];
private:
intjieshu;
staticintqst;
};
intqstu::qst=0;
voidqstu::print(xinxi&st1)
{
cout<<"|缺课日期|"<<"第几节课|"<<"课程名称|"<<"缺课类型|"< cout<<"|"< < }
intqstu::getjs(xinxist1[],intn,intj)
{inti=0,js=0;
xinximin;
if((st1[j].getjieci()+2)!=''\0'')
js=+2;
else
js++;
for(i=0;i if((st1[i+1].gettime()+1)==(st1[j].gettime()+1)&&(st1[i+1].gettime()+2)==(st1[j].gettime()+2))
if(strcmp(st1[i+1].getname(),qstn)==0)
{
if((st1[i].getjieci()+2)!=''\0'')
js=+2;
else
js++;
}
jieshu=js;
returnjieshu;
}
/----4--缺课学生----/
//函数声明
intshuru(xinxist1[]);
voidxiugai(xinxist1[],intn);
voidxiansi(xinxi&st1);//显示
voidsetqkn(xinxist1[],qkechenqk[],intn);
voidsetqstn(xinxist1[],qstuqt1[],intn);
voidchaxun(xinxist1[],qstuqt[]);
voidcaidan();
voidtongji1(xinxist1[],qstuqt1[]);
voidtongji2(xinxist1[],qkechenqk1[]);
intg,k=1,b=1;
intq=-1;
charname[20],kechen[10],queke[10],jieci[3];
inty,m,d;
intmain()
{
xinxitl[15];
qstuqt[10];
qkechenqk[6];
intch;
while(1)
{
cout<<""< cout<<"欢迎进入考勤管理系统!"< caidan();//
cout<<"请选择菜单项:"< cin>>ch;
switch(ch)
{
case1:g=shuru(tl);break;
case2:xiugai(tl,g);break;
case3:chaxun(tl,qt);break;
case4:tongji1(tl,qt);break;
case5:tongji2(tl,qk);break;
case6:exit(0);
}
}
return0;
}
intshuru(xinxist1[])//输入xinxist1[]定义了一个xinxi类的数组对象
{
system("cls");
chara;
cout<<"输入开始:"< do{
q++;
cout<<"请输入学生姓名"< cin>>name;
st1[q].setname(name);
cout<<"请输入课程名称"< cin>>kechen;
st1[q].setkechen(kechen);
cout<<"请输入缺课日期"< cin>>y>>m>>d;
st1[q].settime(y,m,d);
cout<<"请输入缺课类型"< cin>>queke;
st1[q].setqklx(queke);
cout<<"请输入缺课节次"< cin>>jieci;
st1[q].setjieci(jieci);
cout<<"是否还要继续输入:(y/n)"< cin>>a;
}while(a==''y''||a==''Y'');
returnq+1;
}
voidxiugai(xinxist1[],intn)//修改
{
intk=1,j=0,a[10];
intflgh;
inth;
while(k==1)//判断是否继续修改当
{
cout<<"请输入你要修改缺课记录的学生姓名"< cin>>name;
flgh=0;
for(inti=0;i if(strcmp(name,st1[i].getname())==0)//strcmp为比较函数
do{
a[j]=i;
cout<<"1.修改课程名称\n2.修改缺课日期\n3.修改缺课类型\n4.修改缺课节次\n";
cout<<"请输入你要修改的序号:"< intb;
cin>>b;
if(b==1)
{
cout<<"请输入新的课程名称:"< cin>>kechen;
st1[i].setkechen(kechen);
}
elseif(b==2)
{
cout<<"请输入新的缺课日期:"< cin>>y>>m>>d;
st1[i].settime(y,m,d);
}
elseif(b==3)
{
cout<<"请输入新的缺课类型:"< cin>>queke;
st1[i].setqklx(queke);
}
elseif(b==4)
{
cout<<"请输入新的缺课节次:"< cin>>jieci;
st1[i].setjieci(jieci);
}
flgh=1;//注意此处确定是否找到已经存在学生姓名
j++;
}while(b<1||b>4);
if(flgh==0)
{
cout<<"没有你要找的学生姓名,请重试要退出请按0"< cin>>k;
}
else//继续修改
{
cout<<"还要继续吗(1\0)退出请按0"< cin>>k;
}
}
for(inti=0;i {
h=a[i];
xiansi(st1[h]);
}
}
voidchaxun(xinxist1[],qstuqt[])//查询
{
charn=''y'';
intu[10];
while(n==''y'')
{
intj=0;
cout<<"输入你要查询的学生姓名:"< cin>>name;
inti=0;
for(;i if(strcmp(name,st1[i].getname())==0)//strcmp为比较函数用于判断是否是已存在的名字
{
u[j]=i;
j++;
}
if(j==0)
{
cout<<"没有你所要的学生名字!";
cout<<"是否退出退出请按n\n";
cin>>n;
}
for(inta=0;a {
if(j<2)
{
i=u[a];
cout<<"|缺课日期|"<<"缺课节次|"<<"课程名称|"<<"缺课类型|"< cout<<"|"< "|"< }
//排序(根据时间)
else
{
i=u[a];
if((st1[i].gettime()+1)<(st1[i+1].gettime()+1))
qt[i].print(st1[i]);//输出较早时间的信息
else
if((st1[i].gettime()+1)==(st1[i+1].gettime()+1)&&(st1[i].gettime()+2)<(st1[i+1].gettime()+2))
qt[i].print(st1[i]);
else
if((st1[i].gettime()+1)==(st1[i+1].gettime()+1)&&(st1[i].gettime()+2)==(st1[i+1].gettime()+2))
if(strcmp(st1[i].getjieci(),st1[i+1].getjieci())==-1)
qt[i].print(st1[i]);
}
cout<<"是否继续查询(y/n)继续请按y退出按n"< cin>>n;
}
}
}
voidtongji1(xinxist1[],qstuqt1[])//统计1某段时间内旷课学生姓名及旷课节数
{
intd1=0,js=0;
xinximin;
if(g==0)
cout<<"没有你要统计的学生信息请返回菜单录入学生缺课信息"< elseif(g==1)
{
cout<<"姓名:"< if((st1[0].getjieci()+2)!=''\0'')
js=+2;
else
js++;
cout<<"节数:"< }
else
//信息按时间排序
{
inti=0;
for(;i<(g-1);i++)
{
if((st1[i].gettime()+1)<(st1[i+1].gettime()+1))
{min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}
else
if((st1[i].gettime()+1)==(st1[i+1].gettime()+1)&&(st1[i].gettime()+2)<(st1[i+1].gettime()+2))
{
min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];
}
else
if((st1[i].gettime()+1)==(st1[i+1].gettime()+1)&&(st1[i].gettime()+2)==(st1[i+1].gettime()+2))
d1++;
}
for(intj=0;j<(g-d1);j++)
{
cout< for(i=0;i {
setqstn(st1,qt1,g);
cout<<"姓名:"< cout<<"节数:"< }
}
}
}
voidtongji2(xinxist1[],qkechenqk1[])//统计2某段时间内旷课的课程及旷课人次
{
intd1=0,rc=0;
xinximin;
if(g==0)
cout<<"没有你要统计的学生信息请返回菜单录入学生缺课信息"< elseif(g==1)
{cout<<"课程名:"< rc++;
cout<<"人数:"< }
else
{
inti=0;
for(;i {
if((st1[i].gettime()+1)<(st1[i+1].gettime()+1))
{
min=st1[i];
st1[i]=st1[i+1];
st1[i+1]=st1[i];
}
else
if((st1[i].gettime()+1)==(st1[i+1].gettime()+1)&&(st1[i].gettime()+2)<(st1[i+1].gettime()+2))
{
min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];
}
else
if((st1[i].gettime()+1)==(st1[i+1].gettime()+1)&&(st1[i].gettime()+2)==(st1[i+1].gettime()+2))
d1++;
}
for(intj=0;j<(g-d1);j++)
{
cout< for(i=0;i {
setqkn(st1,qk1,g);
cout<<"课程名:"< cout<<"人数:"< }
}
}
}
voidxiansi(xinxi&st1)//显示
{
cout<<"|缺课日期|"<<"第几节课|"<<"课程名称|"<<"学生姓名|"<<"缺课类型|"< cout<<"|"<<(st1.gettime())<<"|"<<(st1.gettime()+1)<<(st1.gettime()+2)
<<"|"< }
voidsetqstn(xinxist1[],qstuqt1[],intn)//设置缺课学生名
{
inti=0;
for(;i {
if(i==0)
strcpy(qt1[0].qstn,st1[i].getname());
elseif(strcmp(st1[i].getname(),st1[i+1].getname())!=0)
{
strcpy(qt1[i].qstn,st1[i].getname());
k++;
}
}
}
voidsetqkn(xinxist1[],qkechenqk[],intn)//设置有缺课学生的课程名
{
inti=0;
for(;i {
if(i==0)
strcpy(qk[0].qkn,st1[i].getkechen());
elseif(strcmp(st1[i].getkechen(),st1[i+1].getkechen())!=0)
{
strcpy(qk[i].qkn,st1[i+1].getkechen());
b++;
}
}
}
voidcaidan()//菜单
{
system("colorA");
cout<<""< cout<<"考勤管理系统"< cout<<""< cout<<"1.录入学生的缺课记录"< cout<<"2.修改学生的缺课记录"< cout<<"3.查询学生的缺课情况"< cout<<"4.统计某段时间内旷课学生姓名及旷课节数"< cout<<"5.统计某段时间内旷课的课程及旷课人次"< cout<<"6.退出系统"< cout<<""< }
|
|