学生综合测评系统C++设计报告.docx
《学生综合测评系统C++设计报告.docx》由会员分享,可在线阅读,更多相关《学生综合测评系统C++设计报告.docx(42页珍藏版)》请在冰豆网上搜索。
学生综合测评系统C++设计报告
上海电力学院
《高级程序设计C++〉
课程设计
题目:
学生综合测评系统
院系:
计算机科学与技术学院
专业年级:
计算机科学与技术
学生姓名:
学号:
_20111695
指导教师:
2013年1月
目录•,
2
1.
需求分析
3
2.
概要设计
4
3.
详细设计
6
4.
用户使用手册
9
4.1
环境设置
9
4.2
操作步骤
10
5.
程序创新点
错误!
未定义书签。
6.
使用的主要技术•…•…
错误!
未定义书签。
7.
总结
错误!
未定义书签。
附录.‘
错误!
未定义书签。
1・需求分析
本系统旨在便于学校管理和查阅学生信息并计算学生的考试成绩
和名次以及综合测评成绩和名次。
每个学生的信息为:
学号、姓名、性别、家庭住址、联系电话、高等数学、物理、英语三门单科成绩、、同学互评分、品德成绩、任课教师评分。
考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%10%10%20%程序的基本功能:
1.学生信息处理:
(1)输入学生信息、学号、姓名、性别、家庭住址、联系电话,
按学号以小到大的顺序存入文件中。
(2)插入(修改)同学信息。
(3)删除同学信息。
(4)浏览学生信息。
2.学生数据处理:
(1)按考试科目录入学生成绩并且按公式:
考试成绩=(语文+
数学+外语)/3计算考试成绩,并计算考试名次。
(2)学生测评数据输入并计算综合测评总分及名次。
(3)学生数据管理。
(4)学生数据查询。
3.学生综合信息输出
2.概要设计
根据需求分析中的描述,知道需要一个帐户类型,由于基本数据类型无法实现将一个用户的信息绑定在一起,所以需要定义一个抽象数据类型帐户,命名为Student,其定义如下:
classStudent
{
public:
intnum;//学号
stringname;〃
姓名
stringsex;//性另U
stringaddress;//
家庭住址
stringphone;//
联系电话
doubleenglish;//
英语成绩
doublemath;//
数学成绩
doublephysics;//
物理分数
doubleaverage;//考试成绩
doublegrade1;//
同学互评分
doublegrade2;//
品德成绩
doublegrade3;//
任课教室评分
doublegradesum;//综合测评成绩
intranking1;//
考试名次
intranking2;//
综合测评名次
};
为了方便外部函数进行操作,以上全为共有变量。
定义一个对象数组Studentstud[100];方便对Student类中数据
进行输入和输出以及排序等等功能。
外部操作函数有:
voidread()〃
从文件中读取学生信息函数
voidshow()〃
显示学生信息函数
voidsave()〃
保存学生信息函数
voidSR()〃
输入学生信息函数
voidSC()〃
删除学生信息函数
voidTJ()〃
添加学生信息函数
voidXG()〃
修改学生信息函数
voidPM1()〃
计算考试成绩以及排名函数
voidPM2()〃
计算综合测评成绩以及排名函数
voidsn()〃
按学生学号查找学生信息
voidsm()〃
按学生姓名查找学生信息
voidFire()〃
学生信息管理界面
voidstatistics。
//学生成绩统计管理界面
voidinquiry()//学牛杳询管理界面
voidabout。
//
/关于系统界面
voidthanks()〃退出程序界面
主函数为学生测评系统主界面
3、详细设计
voidread()
{
charfilename[20];
cout<<"从文件中读取信息!
"<cout<<"请输入文件名:
"<cin>>filename;
cout<<"请问要读取几名学生信息:
"<cin»n;
ifstreaminfile;
infile.open(filename,ios:
:
in|ios:
:
out);
if(!
infile)
{
cerr<<"openerror!
"<exit
(1);
}
inti=0;
do
{
infile>>stud[i].num>>stud[i].name»stud[i].sex»stud[i].address
>>stud[i].phone»stud[i].english»stud[i].math
>>stud[i].physics»stud[i].grade1
>>stud[i].grade2»stud[i].grade3;
i++;
}
while(!
infile.eof());
infile.close();
cout<<"读取成功!
"<}
以上为读取文件中学生信息的函数,当信息成功读取后才可进行修改或添加或删除,所以在许多外部函数里面都必须要有读取函数的功能为前提。
voidsave()
{
inti;
charfilename[20];
cout<<"将记录保存在文件夹!
"<cout<<"请输入文件名:
";
cin>>filename;
ofstreamoutfile(filename);
if(!
outfile)
{cerr<<"openerror!
"<}
//保存时按学号排序,采用冒泡排序法实现数组内的排序for(i=0;i{
outfile<"<"<"<<"<"<"<<"<"<}
outfile.close();
cout<<"保存成功!
"<}
在每次保存时都先按学号排序,保证信息是按学号从小到大的顺序存入文件。
在输入、修改、添加和删除函数的末端都有保存函数以实现信息的保存。
voidXG()
{
read();
begin:
stringfind_name;
inti;
cout<<"请输入你要修改的学生名字:
"<cin»find_name;
for(i=0;iif(stud[i].name==find_name)
{……}//输出修改前学生信息
if(stud[i].name!
=find_name)
{
cout<<"can'tfindthisname"<cout<<"请重新查找!
"<gotobegin;
}
cout<<"请输入新的信息:
"<cout<<"学号:
"<<'';cin>>stud[i].num;
cout<<"修改成功,是否保存?
(y/n)"<cin>>press;
switch(press)
{
case'y':
save();break;
default:
cout<<"不保存!
";break;
}
}
基于数组形式对数据进行修改。
基本上所有函数都是基于数组进
行操作,像删除函数是用循环先匹配类中的一个数据,找到之后再以
此开始用对象数组后面的替换掉前一个,以实现删除功能。
stringSC_name;
cout<<"请输入你要删除的学生名字:
"<inti=0;
cin>>SC_name;
while(stud[i].name!
=SC_name&&ii++;//查找判断
if(stud[i].name==SC_name)
{
for(intj=i;j{
stud[i].num=stud[i+1].num;
stud[i].name=stud[i+1].name;
}
}
考试成绩排名和综合测评成绩排名都是采用冒泡排序法实现:
doubletemp[100];
for(inta=0;a{
stud[a].average=(stud[a].english+stud[a].math+stud[a].physics)/3;temp[a]=stud[a].average;
}
doublet;
for(intj=0;j{for(intk=0;k{f(temp[k]{t=temp[k];temp[k]=temp[k+1];temp[k+1]=t;}}}
for(intq=O;q{for(intp=O;p{if(stud[p].average==temp[q])
stud[p].ranking1=q+1;}}
最后各种界面函数通过switch语句进行调用,以实现各种功能来完成此系统:
voidFire()〃学生信息管理系统界面
{while(choose!
=0)
{//输出界面样式略。
cout«"\t\t请输入0-5之间的任意一数字:
"<<'';
cin>>choose;
switch(choose)
{case1:
system("cls");SR();break;
case2:
system("cls");SC();break;
case3:
system("cls");TJ();break;
case4:
system("cls");XG();break;
case5:
system("cls");show();break;
default:
cout<<"\t\t输入错误或返回主界面"<<'\n';break;}}}
4、用户使用手册
4.1环境设置
将已创建扩展名为cpp在VC6.0中运行即可,如图所示
4.2操作步骤
编译每个扩展名为.cpp的文件,如果有编译错误,则根据提示修改,否则编译成功。
最后编译、连接和运行测试程序文件,输入数据并测试程序的各种操作。
如图所示。
||»||||
B血,J»]J•仓:
・1**“EKtwid)
ft1111>J
l*w
fU
RilwP
1rwhw|^!
KlrFJ|»-!
liwLfrirHIjTirrA**
別*阿|!
it//———
*Fi™Q41*1^1*B«FkO
*BT1
+
•猊>W|
•lit忧
3Irtiffljr-*TSNft*-』日站H
;耗頑qui吕*土屯匕■•
3
S帥
Z片;it-£即材1
ptab!
it:
ink*4llrlRfl*1*(stru^i的兀iMblf
Vntlr«H||lU
■LMhlVtWfeiH
tM»l<
”-」Ei-nFipirriLsnr
il.44l4|iMI
1WIWFW(»h-*
EKi
*盟2料的i.
■!
w」9・・!
>帀1;I:
LS13=E-I二E.=・=E.¥****•
1.t.a.4b氐■.
在当前的Dos窗口中,输入要执行的功能号码,如输入
击回车,贝S显示如图所示
BJ;点谨比书自Debug\l.exe、
§1息息息产一曰1.S-曰吕生生生生生学魯辜
129450
M
*按Entei#^
XJCJHKJItMJHJCJKJOCJtKJtKKJC«:
■!
■■KM!
XXKKKHMM.JCKKKM
JCJCJHJCJCMJHJCJCJCJKXJCJCXKJCHJCXM:
M!
H亲THfTtJ请输Ae-s±间的任意一数字=■
此为学生信息管理界面,输入要执行的功能号码,如输入1,然
后单击回车,则显示如图所示。
诒郴憔你的需驶输入学牛的吓敢-
1.txt
请间要渎取几名学生信息K
3
製蟄性别家庭地址联系方或集语高数物理冋学互评品德成绩救师评分
attlllb^S张三男上廳市12JS467U7«站Kb酗HbM
26411735聿匹五彌南省90765192499的站詰站90
201丄丄时£王小强男西川省6#7354355S9S89858585
KJCJHJCJtMJHJCKJCXKKWJCMJC:
HaCXXJKXW!
J4J!
MJt9*C~MS4M'SCJC'BCW
学生信息菅理
按提示输入3个学生信息并保存至文件1.txt中,完成后返回学生信息管理界面,输入要执行的功能号码,如输入5,然后单击回车,然后输入文件名1.txt和要读取几名学生信息,如输入3,则显示如图所示。
貝自LL1自首息信信」ls-^-H.包匚一二生穌Sb最删醫显逼«■■-
■-V
12345B
*按Fntei*^^*
KatiMKJtaociM箕怔豪耳北光址耳a如上所示,按照提示内容输入功能号并回车确认就能正确使用本系统。
5、使用的主要技术
文本文件的读写、数组。
6、总结
经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程设计和进一步学习打下了坚实的基础。
在为期一周的的C++课程设计中,我体会颇多,学到了很多东西。
我加强了对C++程序设计这门课程的认识,并且复习了自己以前学过的知识。
这些都使得我对计算机语言的学习有了更深入的认识。
像学
生测评系统这样的程序设计,经历了平时在课堂和考试中不会出现的问题和考验。
而这些问题,并不是只靠课本就可以轻易解决的。
所以,锻炼了我们独立思考和解决问题的能力。
特别是向老师提问时,老师
教会了我调试程序的方法,让我更容易发现自己所犯的错误。
在老师和同学的帮助下,通过自己的努力,终于完成了这次学生测评系统的课程设计,虽然还有缺陷,但过程中所摸索到的经验是一笔宝贵的财富。
总而言之,这次课程设计让我收获很大。
附录
#include
#include
#include
#include
usingnamespacestd;
charpress;intchoose=1;intn;classStudentpublic:
intnum;〃学号姓名
性别
家庭住址
stringname;//stringsex;//stringaddress;//stringphone;//doubleenglish;//doublemath;//doublephysics;//doubleaverage;//doublegrade1;//doublegrade2;//doublegrade3;//
doublegradesum;//
联系电话
英语成绩
数学成绩
物理分数
考试成绩同学互评分品德成绩任课教室评分综合测评成绩
intranking1;//考试名次
intranking2;//综合测评名次
};
Studentstud[1OO];
//
读取学生信息
voidread()
{
charfilename[20];
cout<<"从文件中读取信息!
"<cout<<"请输入文件名:
"<cin>>filename;
cout<<"请问要读取几名学生信息:
"<cin»n;
ifstreaminfile;
infile.open(filename,ios:
:
in|ios:
:
out);
if(!
infile)
{
cerr<<"openerror!
"<exit
(1);
}
inti=0;
do
{
infile»stud[i].num>>stud[i].name»stud[i].sex»stud[i].address
>>stud[i].phone>>stud[i].english»stud[i].math
>>stud[i].physics»stud[i].grade1>>stud[i].grade2»stud[i].grade3;
i++;
}
while(!
infile.eof());
infile.close();
cout<<"读取成功!
"<}
//显示学生信息
voidshow()
{
read();
II
教师评分
cout<<"学号"<<"姓名"<<"性别"<<"家庭地址"<<"联系方式
<<"英语"<<"高数"<<"物理"<<"同学互评"<<"品德成绩"<<""<for(inti=0;i{
cout<cout.width(5);
cout<cout.width(5);
cout<cout.width(8);
cout<cout.width(8);
cout<cout.width(6);
cout<cout.width(6);
cout<cout.width(6);
cout<cout.width(6);
cout<cout.width(8);
cout<cout.width(8);
cout<}
}
//保存学生信息voidsave()
{
inti;
charfilename[20];
cout<<"将记录保存在文件夹!
"<cout<<"请输入文件名:
";
cin>>filename;
ofstreamoutfile(filename);
if(!
outfile)
{cerr<<"openerror!
"<}
//保存时按学号排序
inttemp[100];
for(inta=0;a{
temp[a]=stud[a].num;
}
intt;
for(intj=O;j{
for(intk=O;k{
if(temp[k]>temp[k+1])
{
t=temp[k];temp[k]=temp[k+1];
temp[k+1]=t;
}
}
}
inttempnum;
stringtempname;
stringtempsex;
stringtempaddress;
stringtempphone;
doubletempenglish;
doubletempmath;
doubletempphysics;
doubletempgrade1;
doubletempgrade2;
doubletempgrade3;
for(intq=0;qfor(intp=O;pif(stud[p].num==temp[q]){
tempnum=stud[p].num;tempname=stud[p].name;tempsex=stud[p].sex;tempaddress=stud[p].address;tempphone=stud[p].phone;tempenglish=stud[p].english;tempmath=stud[p].math;tempphysics=stud[p].physics;tempgrade仁stud[p].grade1;tempgrade2=stud[p].grade2;tempgrade3=stud[p].grade3;stud[p].num=stud[q].num;stud[p].name=stud[q].name;stud[p].sex=stud[q].sex;stud[p].address=stud[q].address;stud[p].phone=stud[q].phone;stud[p].english=stud[q].english;stud[p].math=stud[q].math;stud[p].physics=stud[q].physics;stud[p].grade1=stud[q].grade2;stud[p].grade2=stud[q].grade2;stud[p].grade3=stud[q].grade3;stud[q].num=tempnum;stud[q].name=tempname;stud[q].sex=tempsex;stud[q].address=tempaddress;stud[q].phone=tempphone;stud[q].english=tempenglish;stud[q].math=tempmath;stud[q].physics=tempphysics;stud[q].grade1=tempgrade1;stud[q].grade2=tempgrade2;stud[q].grade3=tempgrade3;
{
outfi