}
voidCStudent:
:
CalcTotalScore() //计算总成绩
{ TotalScore=UsualScore*0.2+TestScore*0.8; }
3.定义成绩单类CStuDataBase
(1)新建一个“C/C++HeaderFile”,文件名为“StuDataBase.h”,代码如下:
//StuDataBase.h 定义成绩单类,用来管理所有学生的成绩信息
#include"student.h"
constintMaxStuNum=51; //班级学生人数最多50人
classCStuDatabase{
public:
CStuDatabase(); //构造函数,从文件中读入学生成绩信息
~CStuDatabase(); //析构函数,将学生成绩信息写入到文件中
voidListScore(); //显示成绩单,输出所有学生信息
voidSelectStuInfo(); //查询学生信息
voidAddStuInfo(); //添加学生成绩
voidDelStuInfo(); //删除学生信息
voidEditStuInfo(); //修改学生信息
voidAnalyScore(); //对成绩进行统计分析
voidStuDBM(int); //成绩库维护
intFunctionMenu(); //功能菜单
private:
intnum; //学生人数
CStudentstu[MaxStuNum]; //学生数组,stu[0]不用
intSearchStu(constchar*id); //查找指定学号的学生
voidSortStu(); //按学号从小到大对成绩单排序
};
(2)新建一个“C++SourceFile”,文件名为“StuDataBase.cpp”,代码如下:
//StuDataBase.cpp成绩单类的实现
#include
#include
#include
#include
#include
#include"StuDataBase.h"
intInputScore() //输入百分制成绩
{ intscore;
cin>>score;
while(score<0||score>100)
{ cout<<"成绩超出范围,请重新输入百分制成绩(0---100分):
";
cin>>score;
}
returnscore;
}
CStuDatabase:
:
CStuDatabase() //从文件中读入学生信息
{ CStudents; //学生对象
num=0;
fstreamStuFile; //该文件用来保存学生信息
StuFile.open("StuInfo.dat",ios:
:
in);
if(!
StuFile)
{ cout<<"文件StuInfo.dat不能打开!
\n";
return;
}
StuFile.read((char*)&s,sizeof(s));
while(!
StuFile.eof())
{ num++;
stu[num]=s;
StuFile.read((char*)&s,sizeof(s));
}
StuFile.close();
}
CStuDatabase:
:
~CStuDatabase() //将学生信息写入到文件中
{
fstreamStuFile; //该文件用来保存学生信息
StuFile.open("StuInfo.dat",ios:
:
out);
if(!
StuFile)
{ cout<<"文件StuInfo.dat不能创建!
\n";
return;
}
for(inti=1;i<=num;i++)
{ StuFile.write((char*)&stu[i],sizeof(stu[i])); }
StuFile.close();
}
intCStuDatabase:
:
SearchStu(constchar*id) //查找指定学号的学生
{
for(inti=1;i<=num;i++)
if(strcmp(stu[i].GetID(),id)==0)
returni;
return-1;
}
intCStuDatabase:
:
FunctionMenu() //功能菜单
{ intFuncNum; //保存操作编号
system("cls"); //清屏
cout<<"\n\n\n";
cout< cout<\n\n";
cout< < < < < < < cout< cin>>FuncNum;
while(FuncNum<0||FuncNum>6)
{
cout<<"请重新选择要进行的操作:
"< cin>>FuncNum;
}
returnFuncNum;
}
voidCStuDatabase:
:
StuDBM(intFuncNum)//成绩维护
{
switch(FuncNum) {
case1:
SelectStuInfo(); break; //查询学生成绩
case2:
ListScore();break; //显示成绩单
case3:
AddStuInfo(); break; //添加学生信息
case4:
DelStuInfo();break; //删除学生信息
case5:
EditStuInfo(); break; //修改学生信息
case6:
AnalyScore(); break; //对成绩进行统计分析
}
}
voidCStuDatabase:
:
SelectStuInfo() //查询学生信息
{
system("cls"); //清屏
charno[5]; //临时保存学号
cout<<"\n请输入要查询的学生学号:
"<cin>>no;
inti=SearchStu(no);
if(i==-1)
{ cout<<"\n你查找的学生不存在!
\n"; }
else
{ cout<<"\n你所查找的学生成绩如下:
\n\n";
CStudent:
:
TableHead(); //输出表头
stu[i].Display();
}
cout<<"\n按任意键返回...."< getch();
}
voidCStuDatabase:
:
ListScore()//显示成绩单
{
system("cls"); //清屏
if(num==0)
{ cout<<"当前还没有学生成绩!
\n"; }
else
{
SortStu();//按学号对成绩单排序
CStudent:
:
TableHead(); //输出表头
for(inti=1;i<=num;i++)
stu[i].Display();
cout<<"\n共有"< }
cout<<"\n显示成绩完毕!
\n\n按任意键返回...."< getch();
}
voidCStuDatabase:
:
AddStuInfo()//添加学生成绩
{ system("cls"); //清屏
charno[5]; //临时保存学号
cout<<"请输入要添加的学生的学号(输入-1结束):
";
cin>>no;
while(strcmp(no,"-1")!
=0)
{
inti=SearchStu(no);
while(i!
=-1)
{ cout<<"\n你添加的学生已存在!
\n请重新输入学号(-1结束):
"; cin>>no;
if(strcmp(no,"-1")==0)
{
cout<<"\n本次操作完成!
\n\n按任意键返回...."< getch();
return;
}
i=SearchStu(no);
}
num++;
charna[10];
cout<<"\n请输入要添加的学生的姓名:
";
cin>>na;
cout<<"\n请输入要添加的学生的平时成绩:
\n";
intus=InputScore();
cout<<"\n请输入要添加的学生的考试成绩:
\n";
intts=InputScore();
CStudents(no,na,us,ts);
stu[num]=s;
cout<<"\n\n请输入要添加的学生的学号(输入-1结束):
";
cin>>no;
}
cout<<"\n本次操作完成!
\n\n按任意键返回...."< getch();
}
voidCStuDatabase:
:
DelStuInfo()//删除学生信息模块
{ system("cls"); //清屏
charno[5]; //临时保存学号
cout<<"\n请输入要删除的学生学号:
"< cin>>no;
inti=SearchStu(no);
if(i==-1)
{ cout<<"\n你要删除的学生不存在!
\n"; }
else
{ cout<<"\n您所删除的学生信息如下:
\n\n";
CStudent:
:
TableHead(); //输出表头
stu[i].Display();
charanser;
cout<<"\n是否真的要删除该学生?
(Y/N):
";
cin>>anser;
if(anser=='y'||anser=='Y')
{
for(intj=i+1;j<=num;j++)
stu[j-1]=stu[j];
num--;
cout<<"\n删除信息成功!
"<}
}
cout<<"\n\n按任意键返回...."< getch();
}
voidCStuDatabase:
:
EditStuInfo()//修改学生信息模块
{ system("cls"); //清屏
charno[5]; //临时保存学号
cout<<"\n请输入要修改的学生学号:
"< cin>>no;
inti=SearchStu(no);
if(i==-1)
{ cout<<"\n你要修改的学生不存在!
\n"; }
else
{ cout<<"\n您所修改的学生成绩如下:
\n\n";
CStudent:
:
TableHead(); //输出表头
stu[i].Display();
cout<<"\n请输入学生的新信息:
";
cout<<"\n请输入学生的姓名:
";
charna[10];
cin>>na;
cout<<"\n请输入学生的平时成绩:
\n";
intus=InputScore();
cout<<"\n请输入学生的考试成绩:
\n";
intts=InputScore();
CStudents(no,na,us,ts);
stu[i]=s;
cout<<"\n修改信息成功!
"<}
cout<<"\n\n按任意键返回...."<getch();
}
voidCStuDatabase:
:
AnalyScore()//对成绩进行统计分析
{ system("cls"); //清屏
intc[5]={0}; //用来保存各个分数段的人数
doubleAveScore=0; //用来保存所有学生的平均成绩
doublets; //临时保存总评成绩
for(inti=1;i<=num;i++)
{
ts=stu[i].GetTotalScore();
AveScore+=ts;
switch(int(ts/10)){
case10:
case9:
c[0]++; break; //90(含90)分以上人数
case8:
c[1]++; break; //80(含80)---90(不含90)分人数
case7:
c[2]++; break; //70(含70)---80(不含80)分人数
case6:
c[3]++; break; //60(含60)---70(不含70)分人数
default:
c[4]++; break; //不及格人数
}
}
AveScore/=num;
cout<<"\n学生成绩分布情况如下:
\n\n";
cout<<"优秀(90分---100分)人数:
"<<cout<<"良好(80分---89分)人数:
"<< cout<<"中等(70分---79分)人数:
"<< cout<<"及格(60分---69分)人数:
"<<cout<<"不及格(60分以下)人数:
"
< cout<<"学生总人数为:
"< cout<<"\n班级平均成绩为:
"< cout<<"\n按任意键返回...."< getch();
}
voidCStuDatabase:
:
SortStu() //按学号从小到大对成绩单排序
{ inti,j,