c++课设实验报告学生信息管理系统.docx
《c++课设实验报告学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《c++课设实验报告学生信息管理系统.docx(39页珍藏版)》请在冰豆网上搜索。
c++课设实验报告学生信息管理系统
一、需求分析………………………………………………02
二、概要设计………………………………………………02
三、详细设计………………………………………………03
四、调试分析………………………………………………14
五、用户手册………………………………………………14
六、测试数据………………………………………………14
七、附录……………………………………………………15
一、需求分析
1、用数组存储学生信息,包括姓名学号,各科目成绩。
2、在用户输入成绩时,需要分别输入平时成绩和期末成绩,在程序的aver函数中计算平时成绩和期末成绩所占百分比,算出最终成绩,并且在退出程序时保存。
3、查询学生成绩支持用学号查询或者用姓名查询。
4、修改成绩界面可以选择各科目,修改时要求分别输入平时成绩和期末成绩。
5、菜单选项可以查询并且显示各科优秀(大于90分)的学生和不及格(小于60分)的学生。
6、排名,把所有学生的最终成绩求和,按总分从大到小排序并且显示学生姓名学号总分。
7、各个科目平均分,每门科目的最终成绩相加除去学生人数。
8、退出并且保存用户输入,修改的数据,生成stu.dat,可以以记事本的方式打开查看学生成绩信息。
二、概要设计
1、程序结构较为简单,因此声名两个类:
学生成绩类classscore,学生信息类classstu,前者处理学生成绩计算(求总分,排序,求平均分),后者完成学生信息输入查询和修改。
2、建立六个数组,分别存储姓名学号,四门科目,每门科目先通过平时成绩期末成绩,平时成绩百分比计算后放入各科目数组中。
3、查询学生信息时通过
intt=0;
for(;tif(strcmp(name,stusco[t].getname())==0)
{u[j]=t;
j++;
}
验证学生姓名,和
intt=0;
for(;t{
if(number==stusco[t].getnumber())
验证学生学号,然后验证通过后显示学生信息和成绩。
4、输入学生成绩时通过
if(stusco[lo].getnumber()==stusco[i].getnumber())
{
flag=0;
}
验证是否已经储存相同学号的学生,如果有,则显示信息添加失败。
三、详细设计
1、主函数
#include"class.h"
#include"head.h"
#include"run.h"
voidmain()
{
runrd;
intn;
rd.load();
while
(1)
{
system("cls");
rd.menu();
cout<<"请输入1~8的数字"<cout<<"请输入菜单选项:
";
cin>>n;
cin.sync();
cin.clear();
switch(n)
{
case1:
rd.func1();break;
case2:
rd.func2();break;
case3:
rd.func3();break;
case4:
rd.func4();break;
case5:
rd.func5();break;
case6:
rd.func6();break;
case7:
rd.func7();break;
case8:
rd.save();
exit(0);
}
}
}
2、录入函数
//录入成绩函数
voidrun:
:
func1()
{
intm=f;
intflag,lo;
charp;
i=f;
do{
stusco[i].setstuscore();
flag=1;
for(lo=0;lo
{
if(stusco[lo].getnumber()==stusco[i].getnumber())
{
flag=0;
}
}
if(flag)
{
cout<<"输入成功!
"<i++;
}else{
cout<<"重复输入相同学号的学生,学生增加失败!
"<}
cout<<"继续输入请按Y,退出请按n"<cin>>p;
}while(p=='y'||p=='Y');
f=i;
}
3、查询函数
//成绩查询函数
voidrun:
:
func2()
{
intm=f;
intk;
cout<<"===========[1]按姓名查询==========="<cout<<"===========[2]按学号查询==========="<cout<<"请输入查询方式(1或者2)";
cin>>k;
if(k==1)
{
charn='y';
intu[10];
while(n=='y')
{intj=0;
cout<<"请输入要查询的学生姓名:
";
cin>>name;
intt=0;
for(;tif(strcmp(name,stusco[t].getname())==0)
{u[j]=t;
j++;
}
if(j==0)
{cout<<"没有你要查询的学生的名字!
";//没有找到
cout<<"退出请按n"<cin>>n;
if(n!
='y')break;
}
for(intb=0;b{
if(j<2)
{t=u[b];
cout<<"学号"<<"姓名"<<"英语"<<"数学"<<"语文"<<"c++"<cout<<""<<(int)stusco[t].getnumber()<<""<<<""<<(int)stusco[t].getenglish()<<""<<(int)stusco[t].getmath()
<<""<<(int)stusco[t].getchinese()<<""<<(int)stusco[t].getcpp()<cout<<"是否继续查询(继续按y,退出按n)"<cin>>n;
}
else
{
t=u[b];
}
}
}
}
if(k==2)
{
charn='y';
while(n=='y')
{
intj=0;
cout<<"请输入要查询的学生的学号:
";
cin>>number;
intt=0;
for(;t{
if(number==stusco[t].getnumber())
{
cout<<"学号"<<"姓名"<<"英语"<<"数学"<<"语文"<<"c++"<cout<<""<<<""<<<""<cout<<"是否继续查询(继续按y,退出按n)"<cin>>n;
break;
}
}
if(number!
=stusco[t].getnumber())
{cout<<"没有你要查询的学生!
";
cout<<"退出请按n"<cin>>n;
}
if(n!
='y')break;
}
}
f=m;
}
4、修改函数
voidrun:
:
func3()
{
intm=f;
intj=0,b[20];
intflag;
charn='y';
while(n=='y')
{
cout<<"请输入要修改成绩的学生学号:
";
cin>>number;
flag=0;
intd;
for(intt=0;tif(number==stusco[t].getnumber())
do{
b[j]=t;
cout<<"请选择要修改的信息:
"<cout<<"1.修改英语成绩"<cout<<"2.修改数学成绩"<cout<<"3.修改语文成绩"<cout<<"4.修改c++成绩"<cout<<"请选择1~4之间的数字:
";
cin>>d;
if(d==1)
{
cout<<"请输入新的英语平时成绩:
";
cin>>english1;
stusco[t].setenglish1(english1);
cout<<"请输入新的英语期末成绩:
";
cin>>english2;
stusco[t].setenglish2(english2);
}
elseif(d==2)
{
cout<<"请输入新的数学平时成绩:
";
cin>>math1;
stusco[t].setmath1(math1);
cout<<"请输入新的数学期末成绩:
";
cin>>math2;
stusco[t].setmath2(math2);
}
elseif(d==3)
{
cout<<"请输入新的语文平时成绩:
";
cin>>chinese1;
stusco[t].setchinese1(chinese1);
cout<<"请输入新的语文期末成绩:
";
cin>>chinese2;
stusco[t].setchinese2(chinese2);
}
elseif(d==4)
{
cout<<"请输入新的c++平时成绩:
";
cin>>cpp1;
stusco[t].setcpp1(cpp1);
cout<<"请输入新的c++期末成绩:
";
cin>>cpp2;
stusco[t].setcpp2(cpp2);
}
stusco[t].aver();
flag=1;
j++;
}while(d<1||d>5);
if(flag==0)
{
cout<<"没有您要找的学生!
"<cout<<"请重新输入(退出按n)";
cin>>n;
}
else
{
cout<<"是否继续修改(继续请按y,退出请按n)";
cin>>n;
}
}
f=m;
}
5、成绩管理函数
voidrun:
:
func7()
{
intm=f;
intsum1=0;
intsum2=0;
intsum3=0;
intsum4=0;
inti;
if(m==0)
{
f=m;
return;
}
for(i=0;i{
sum1+=stusco[i].english;
sum2+=stusco[i].math;
sum3+=stusco[i].chinese;
sum4+=stusco[i].cpp;
}
sum1/=m;
sum2/=m;
sum3/=m;
sum4/=m;
cout<<"英语的平均分是"<cout<<"数学的平均分是"<cout<<"语文的平均分是"<cout<<"c++的平均分是"<system("pause");
f=m;
}
voidrun:
:
func4()
{
intm=f;
cout<<"显示各门分数大于90分的优秀学生信息:
"<cout<<"学号"<<"姓名"<<"英语"<<"数学"<<"语文"<<"c++"<for(inti=0;i{
if(stusco[i].getchinese()<90||stusco[i].getmath()<90||stusco[i].getenglish()<90||stusco[i].getcpp()<90)continue;
cout<}
system("pause");
f=m;
}
voidrun:
:
func5()
{
intm=f;
cout<<"显示各门分数小于60分的不及格学生的信息:
"<cout<<"学号"<<"姓名"<<"英语"<<"数学"<<"语文"<<"c++"<for(inti=0;i{
if(stusco[i].getchinese()>60||stusco[i].getmath()>60||stusco[i].getenglish()>60||stusco[i].getcpp()>60)continue;
cout<}
system("pause");
f=m;
}
voidrun:
:
func6()
{
intm=f;
inta,b;
if(m==0)
{
f=m;
return;
}
floatzcj[20],ttz;
charxsm[20][20],ttx[20];
intnum[20],ttn;
for(inti=0;i{
num[i]=stusco[i].getnumber();
strcpy(xsm[i],stusco[i].getname());
zcj[i]=0;
zcj[i]+=stusco[i].getchinese();
zcj[i]+=stusco[i].getmath();
zcj[i]+=stusco[i].getenglish();
zcj[i]+=stusco[i].getcpp();
for(a=0;a{
for(b=a+1;b{
if(zcj[a]{
ttz=zcj[a];
zcj[a]=zcj[b];
zcj[b]=ttz;
ttn=num[a];
num[a]=num[b];
num[b]=ttn;
strcpy(ttx,xsm[a]);
strcpy(xsm[a],xsm[b]);
strcpy(xsm[b],ttx);
}
}
}
}
cout<<"按总分成绩排名:
"<cout<<"姓名学号成绩"<for(i=0;i{
cout<<""<}
system("pause");
f=m;
}
四、调试分析
1、在排序的时候姓名学号等信息要和成绩信息一起排序,不然会导致信息错误。
2、在exit的函数中加入save函数,退出前保存输入信息和修改的信息。
五、用户手册
1、本程序为控制台程序,具有简单的界面。
2、初次进入本程序可以输入学生相关信息(输入相同学号无效),正常退出以正常保存所输入的信息。
3、各项功能可自行选择菜单完成。
4、保存的学生信息会保存在程序目录下,可以用记事本打开查看。
六、测试数据
七、附录
完整程序
#include
#include
#include
#include
#include
classrun;
classPerson;
classScore;
classstuscore;
usingnamespacestd;
#include"head.h"
//声明抽象类Person
classPerson
{
public:
Person(){}
~Person(){}
voidsetnumber(intnum){number=num;}
voidsetname(char*n){strcpy(name,n);}
intgetnumber(){returnnumber;}
char*getname(){returnname;}
voidsetstudent()//输入函数
{
cout<<"请输入学生学号:
";
cin>>number;
cout<<"请输入学生姓名;";
cin>>name;
}
protected:
charname[20];//学生姓名
intnumber;//学生学号
friendclassrun;
};
//声明成绩类
classScore
{
friendclassrun;
public:
Score(){};
~Score(){};
voidsetenglish(floatE){english=E;}
voidsetenglish1(floatE1){english1=E1;}
voidsetenglish2(floatE2){english2=E2;}
voidsetmath(floatM){math=M;}
voidsetmath1(floatM1){math1=M1;}
voidsetmath2(floatM2){math2=M2;}
voidsetchinese(floatC){chinese=C;}//E=E1*s+E2*(1-s)s=0.3
voidsetchinese1(floatC1){chinese1=C1;}
voidsetchinese2(floatC2){chinese2=C2;}
voidsetcpp(floatcpp);
floatgetenglish(){returnenglish;}
floatgetenglish1(){returnenglish1;}
floatgetenglish2(){returnenglish2;}
floatgetmath(){returnmath;}
floatgetmath1(){returnmath1;}
floatgetmath2(){returnmath2;}
floatgetchinese(){returnchinese;}
floatgetchinese1(){returnchinese1;}
floatgetchinese2(){returnchinese2;}
floatgetcpp(){returncpp;}
floatgetcpp1(){returncpp1;}
floatgetcpp2(){returncpp2;}
voidsetscore()//输入函数
{
cout<<"请输入英语平时成绩:
";
cin>>english1;
cout<<"请输入英语期末成绩:
";
cin>>english2;
cout<<"请输入数学平时成绩:
";
cin>>math1;
cout<<"请输入数学期末成绩:
";
cin>>math2;
cout<<"请输入语文平时成绩:
";
cin>>chinese1;
cout<<"请输入语文期末成绩:
";
cin>>chinese2;
cout<<"请输入c++平时成绩:
";
cin>>cpp1;
cout<<"请输入c++期末成绩:
";
cin>>cpp2;
aver();
}
voidaver(){
english=english1*0.3+english2*0.7;
chinese=chinese1*0.3+chinese2*0.7;
math=math1*0.3+math2*0.7;
cpp=cpp1*0.3+cpp2*0.7;
}
voidsetcpp1(floatcpp1){}
voidsetcpp2(floatcpp2){}
protected:
floatenglish;
floatenglish1;
floatenglish2;
floatmath;
floatmath1;
floatmath2;
floatchinese;
floatchinese1;
floatch