学生成绩管理系统设计与实现设计说明书Word格式文档下载.docx
《学生成绩管理系统设计与实现设计说明书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统设计与实现设计说明书Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;
能按班级输出学生的成绩单。
–设置学生的成绩信息:
学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比
–计算学生总评成绩:
总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比)
–显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。
分单人显示和以班输出(班成绩单格式输出到文件)
–注意,至少一个班,30人三门;
1.2设计目的:
(1)基本掌握面向对象程序设计的基本思路和方法;
(2)达到熟练掌握C++语言的基本知识和技能,解决简单的程序设计问题
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题
1.3设计要求:
基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统的设计中,至少要用到面向对象的一种机制;
(4)根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能;
(5)设计主控模块程序.对给出的程序源代码要给出各部分的详细注释.自己根据能力及需要添加相应功能模块,增强模拟系统功能。
第2章系统实现思路
2.1系统分析
1.需求分析:
a.能对学生各科成绩进行录入:
。
b.能对学生的成绩进行增加。
c.能对学生的成绩进行删除。
d.能对学生的成绩进行修改。
e.能对学生的成绩按总成绩,姓名,进行查询。
f.能输出学生的所有数据。
g.能进行成绩统计
h.能进行总分查询排名。
2.系统功能描述:
(1)使用继承的方法构造函数的类
(2)用文本文档来显示所录入的数据
(3)用switch函数来选择执行的功能
3.系统的功能分析:
资料维护:
系统维护包括对学生信息录入操作及数据表中的信息进行浏览。
系统功能:
可以对数据表中的信息进行浏览。
系统查询:
可以对学生的信息进行查询。
2.2系统模块框架图:
1.通过分析画出程序结构图:
学生成绩管理系统
图0-0程序框架图
操作
查询学生信息
修改
增加
总成绩
查询
姓名查询
输出所有学生的成绩
录入
删除
每个学生的平均成绩
每个学生的总评成绩
按总成绩排名
各科不及格人数
第3章系统详细设计
3.1系统设计
1.界面设计
程序运行后会出现一个简捷的窗口,便于用户查询数据。
3.2系统的实现
通过主窗体调用其他窗体,具体实现可以参照系统分析相关内容。
应用系统主控界面包括记录编辑和记录查询等功能模块。
记录编辑功能完成学生成绩记录编辑和记录查询功能。
记录查询功能可以对数据各分类的记录进行查询
3.3详细设计
(1)定义一个基类student:
classStudent{//定义学生类
public:
Student(charn[20],intnum,floatxuen){
strcpy(name,n);
number=num;
xuenian=xuen;
}
charname[20];
intnumber;
intxuenian;
(2)再派生出成绩类:
classChengji:
publicStudent//设置成绩类学生成绩
{public:
Chengji(charn[20],intnum,floatxuen,floatma2,floatma,floatcy2,floatcy,floateng2,floateng):
Student(n,num,xuen){
cyuyan=cy;
english=eng;
math=ma;
cyuyan2=cy2;
english2=eng2;
math2=ma2;
在这个类中把一些需要用到的成员函数写上,来计算总分,总评成绩,平均成绩注意参数;
floatget_sum(){//计算总分
sum=english2+math2+cyuyan2;
returnsum;
}
friendvoidmain();
//将主函数定义为友元函数,方便访问类中的成员
floatget_aver(){//得到平均分的函数
average=get_sum()/3;
returnaverage;
(3)定义主函数:
voidmain()//主函数
{
cout<
<
"
**********欢迎来到学生成绩查询系统**********"
endl;
请选择需要的操作!
//菜单的输出
()数据录入"
()增加学生"
()删除学生"
()修改数据"
查询:
()按总成绩查询"
()按姓名查询"
()输出所有学生的数据"
成绩统计:
()每个学生的平均成绩"
()各个学科不及格人数"
排名"
()按总分查询排名"
()退出"
选择相关操作请输入相对的括号里的阿拉伯数字及字母!
(4)运用全局变量:
intp=0;
//全局变量,用于选择菜单时的输入
charw;
//全局变量,用于在大项中选择是否继续操作
Chengji*s[100];
//类定义的指针将所录入的数据按类中的形式分别存储
ofstream*file[100];
inti=0;
//全局变量,用于做每个录入数据的下标
intj=0;
(5)运用switch函数来实现用户所要求的功能,并用do……while来进行循环。
do//判断输入是否正确
{
cin>
>
p;
if(p>
=1&
&
p<
=11)chris1=1;
else
cout<
指令错误!
请重新输入:
}
while(chris1==0);
do{
switch(p)
case1用来进行数据的录入,并保存:
case1:
//数据录入
{floatzong;
//计算总评成绩
charc;
//用于在小项中选择是否继续操作
charname[20];
intnumber;
floatmath2,cyuyan2,english2,math,cyuyan,english,bf,xuenian;
do{cout<
请输入学年"
cin>
xuenian;
cout<
请输入姓名"
cin>
name;
请输入学号"
number;
请输入数学期末成绩"
math2;
请输入数学平时成绩"
math;
请输入c++期末成绩"
cin>
cyuyan2;
请输入c++平时成绩"
cyuyan;
请输入英语期末成绩"
english2;
请输入英语平时成绩"
english;
请输入成绩百分比"
bf;
zong=(english2+math2+cyuyan2)*(1-bf)+(english+math+cyuyan)*bf;
fstreamoutfile,infile;
//作一个文本文档在文件夹中用于显示所录入的数据
outfile.open("
f1.txt"
ios:
:
out|ios:
app);
if(!
file){
cout<
f1.txtcannotopen.\n"
;
return;
outfile<
姓名:
name<
"
学号:
number<
数学成绩:
math2<
数学平时成绩:
math<
c++成绩:
cyuyan2<
c++平时成绩:
cyuyan<
英语成绩:
english2<
英语平时成绩"
english<
总评成绩"
zong<
outfile.close();
infile.open("
in);
file)//判断文件是否打开
return;
case2用来添加学生的数据;
case2:
//增加学生数据
{
floatcyuyan,math,english,cyuyan2,math2,english2,bf,xuenian;
do
{cout<
//增加的信息
请输入您要增加的学生的名字:
请输入你要增加的学生的学号:
请输入数学成绩"
请输入c++成绩"
请输入英语成绩"
outfile.open("
if(!
cout<
return;
}
outfile<
outfile.close();
infile.open("
if(!
file)
{
cout<
charh;
while(infile.get(h))
h;
infile.close();
j++;
s[i]=newChengji(name,number,xuenian,math2,math,cyuyan2,cyuyan,english2,english);
i++;
case3用来删除学生的信息:
case3:
//删除学生信息
{charc;
stringxingming,line,str,name;
do{
ifstreamfin("
);
fstreamoutfile("
f2.txt"
trunc|ios:
out);
请输入您要删除的学生的姓名:
xingming;
while(!
fin.eof()){
getline(fin,line);
istringstreamstream(line);
name=line.substr(0,line.find("
0));
//找到名字,判断是否相等
if(name!
=xingming)
outfile<
line<
fin.close();
fstreamf("
ifstreamoutf("
f<
outf.rdbuf();
outf.close();
f.close();
case4用来修改数据:
case4:
//修改数据
{
stringsname,line,str,name;
intnu;
floaten,mat,cyu,mat2,cyu2,en2;
intflag;
charc;
if(i==0){
cout<
系统中没有输入数据,请先输入数据"
break;
do
flag=0;
cout<
请输入您要修改的学生的名字:
;
fstreamfin("
ofstreamoutfile("
f.txt"
while(!
fin.eof())//在文件中查找
sname=line.substr(0,line.find("
if(name!
=sname){
elseflag=1;
if(flag=1)
请输入修改学生姓名及其新学号,数学,c++、英语成绩以及平时成绩:
name>
nu>
mat2>
mat>
cyu2>
cyu>
en2>
en;
nu<
数学成绩:
mat2<
mat<
cyu2<
c++平时成绩:
cyu<
英语成绩:
en2<
英语平时成绩:
en<
outfile.close();
fstreamoutf("
fstreaminf("
outf<
inf.rdbuf()<
outf.close();
inf.close();
if(flag=0)cout<
对不起,你要修改的学生不存在!
请查证后输入!
case5用来实现总分的查询:
case5:
//按总分查询
intj=0;
floatSUM;
charc;
intflag;
if(i==0){cout<
系统中没有输入数据,请先输入数据!
flag=0;
请输入您要查询的学生的总成绩:
SUM;
for(intj=0;
j<
i;
j++)
if(s[j]->
get_sum()==SUM)
{
flag=1;
您要查询的学生是:
(*s[j]).name<
该生的信息为:
学号:
(*s[j]).number<
数学分数:
(*s[j]).math2<
c++分数:
(*s[j]).cyuyan2<
英语分数:
(*s[j]).english2<
}
}
if(flag==0)cout<
对不起!
您要查询的学生不存在!
case6用来实现用姓名查询:
case6:
//按姓名查询
charn[20];
if(i==0){cout<
请输入要查询的名字"
n;
if(strcmp(n,(*s[j]).name)==0)
学号:
总分:
(*s[j]).get_sum()<
}//输出该学生的信息
是否继续查?
(y/n);
c;
if(c!
='
y'
c!
n'
){cout<
请重新输入"
cin>
case7用来输出所有学生的数据:
case7:
//输出所有学生数据
{cout<
所有学生数据如下:
ifstreamfile;
file.open("
file.rdbuf();
file.close();
break;
case用来统计每个人的平均成绩:
case8:
for(intm=0;
m<
m++){cout<
(*s[m]).name<
(*s[m]).number<
总分:
(*
s[m]).get_sum()<
均分:
(*s[m]).get_aver()<
break;
case9用来统计每科的不合格人数:
case9:
if(i==0){cout<
intm,n,k,j;
m=0;
n=0;
k=0;
for(j=0;
j++)//计算不合格人数
60)m++;
60)n++;
60)k++;
数学不及格人数为:
c++不及格人数为:
n<