C++实现学生成绩统计管理系统Word文档下载推荐.docx
《C++实现学生成绩统计管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++实现学生成绩统计管理系统Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
本课程设计是《高级语言程序设计(C++)》课程的组成之一,也是它的继续和延伸。
采用研究型学习方法,完成一个管理类型的小型软件。
开设本课程的目的是使学生通过小型软件的开发过程,进一步掌握面向对象的程序设计方法,培养学生的创新能力和创新意识。
二、课程设计的要求
1.了解并掌握面向对象程序设计方法,具备初步的独立分析和设计能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
5.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。
6.编写出课程设计说明书。
7.学生必须仔细阅读《C++语言程序设计》课程设计方案,认真主动完成课设的要求。
有问题及时主动通过各种方式与教师联系沟通。
学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课程设过程中不断检测自己的计划完成情况。
8.课程设计前期安排学习C++编程和面向对象的软件工程的有关知识,以自学和上机实验为主。
三.课程设计报告内容
1题目内容
学生成绩统计管理系统
2功能要求:
①成绩的输入(学号、姓名、英语、数学、C++语言…)。
②成绩统计(各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例)。
③总成绩统计(学生的总成绩、平均成绩及成绩排名)。
④成绩的统计结果显示。
⑤学生数据的添加、修改、与删除。
⑥学生数据的读取与存储。
3程序实现思路(技术线路):
先创建一个学生元素类,用于存放学生的各种数据。
然后创建另一个类,把数据存储,可便进行各种操作。
本程序中比较核心的技术就是用到了堆排序,将学生按优先级(高的排前面,低的排后面)的大小进行有序排列。
堆排序的时间复杂度较一般排序(如:
冒泡,选择等)来得低,可使程序显示数据时效率更高。
3程序模块分析:
1)添加数据:
把用户输入的数据添加到学生类对象数组中,然后再将其入堆,使其有序。
2)删除数据:
由用户输入要删除的学生的学号,然后将其从学生类对象数组中删除,使数组中的数据仍然有序。
3)查找数据:
由用户输入要查找的学生的学号,然后调用leo类中关于查找的函数,将查找结果显示在屏幕上。
4)显示数据:
调用leo类中关于显示数据的函数,把所有的学生数据都显示在屏幕上。
5)清除数据:
调用leo类中关于清除数据的函数,把所有的学生数据都清空。
6)退出程序:
若用户输入了数字0,则主函数结束循环,同时程序也就结束了。
5程序清单:
(见附录)
四、总结
通过做这个课程设计让我逐步学会了使用《面向对象程序设计》设计方法及思想来解决实际问题,更深刻的理解了C++这种面向对象程序的设计语言。
同时,通过查阅各类技术文献、资料、手册解决了许多设计时遇到的难题,也使我提高了编写技术文献的能力。
附录:
#include<
iostream>
iomanip>
string>
fstream>
#defineSmax200
usingnamespacestd;
classstudent
{
Public:
stringnum;
stringname;
floateng;
floatmath;
floatclang;
//定义c++
floatgete(){returneng;
}
floatgetm(){returnmath;
floatgetcl(){returnclang;
stringgetn(){returnnum;
stringgetna(){returnname;
intrank[3];
introw;
//排名
intsinto(string,string,float,float,float);
//输入数据
voidsshow();
//输出数据
floatsall();
//求和
floatsave();
//求平均
voidobjrank();
//成绩分类
};
voidshows()//普通函数
{
cout<
<
setw(6)<
"
排名"
学号"
setw(10)<
姓名"
<
英语"
数学"
c++"
总分"
平均分"
endl;
}
intstudent:
:
sinto(stringa1,stringa2,floatb1,floatb2,floatb3)
{
num=a1;
name=a2;
eng=b1;
math=b2;
clang=b3;
return0;
voidstudent:
sshow()//输出
row<
num<
name<
setw(6)
eng<
math<
clang<
sall()
setiosflags(ios:
fixed)<
setprecision
(1)<
save()<
setprecision(0);
floatstudent:
sall()//求总分
{returneng+math+clang;
save()//求平均分
{returnsall()/3;
objrank()
{intn;
rank[0]=(int)eng;
rank[1]=(int)math;
rank[2]=(int)clang;
for(inti=0;
i<
3;
i++)
{n=rank[i]/10;
switch(n)
{
case9:
n=1;
break;
case8:
n=2;
case7:
n=3;
case6:
n=4;
default:
n=5;
rank[i]=n;
//类student结束
//类leo开始
classleo
{private:
studentitem[Smax];
intsize;
public:
leo();
voidlsize(int);
//设置数组大小
voidlinit();
//清空
voidlinsert();
//添加
voidldelet(string);
//删除
voidlsearch(string);
//查找
voidlchan(string);
//修改
voidlpcent();
voidlrow();
//排序
voidobave();
voidlview();
//显示全部数据
voidlcin();
//从磁盘输出
voidlcout();
//储存到磁盘
leo:
leo()
{studentitem[Smax];
lsize(0);
voidleo:
lsize(inti)
{size=i;
linit()
{lsize(0);
学生数据清除成功"
当前无学生数据。
请添加...."
ldelet(stringa)
intk=0;
stringc;
for(inti=0;
size;
if(item[i].getn()==a)
{
cout<
你将要删除的数据如下:
shows();
item[i].sshow();
cout<
确定删除吗?
请输入(y/n):
;
cin>
>
c;
if(c=="
y"
||c=="
Y"
){item[i]=item[--size];
k=1;
}
if(k!
=1)cout<
\n删除失败!
elsecout<
\n删除成功!
linsert()//添加
stringa="
while(a=="
)
{intmn=0;
if(size>
Smax)cout<
超出范围,不能再添加!
else
\n请输入学号,姓名,英语,数学,c++成绩:
stringa1,a2;
floatb1,b2,b3;
cin>
a1>
a2>
b1>
b2>
b3;
for(inti=0;
if(item[i].getn()==a1)
{mn++;
输入学号与下面的数据重复!
//输出重复的学号,姓名,英语,数学,c++成绩
item[i].sshow();
if(!
mn)
{item[size++].sinto(a1,a2,b1,b2,b3);
\n添加成功!
}
是否继续输入?
(y/n)"
cin>
a;
lsearch(stringa)//查找
{intN=0;
if(item[i].getn()==a)
N++;
shows();
//输出学号,姓名,英语,数学,c++
N)cout<
输入有误或该学生数据不存在"
lchan(stringa)//修改
{if(size==0){cout<
当前学生数据为空,请添加...."
else{
intN=0;
{N++;
你将要修改的数据如下:
item[i].sshow();
请输入要修改学生的学号,姓名,英语,数学,c++成绩"
stringa1,a2;
floatb1,b2,b3;
item[i].sinto(a1,a2,b1,b2,b3);
修改成功!
输入的学号有误!
lrow()//排序
{studenttemb;
if(size>
1)
size-1;
{temb=item[i];
for(intj=i+1;
j<
j++)
if(item[i].sall()<
item[j].sall())
{item[i]=item[j];
item[j]=temb;
item[0].row=1;
if(item[i].sall()>
item[i+1].sall())
item[i+1].row=i+2;
elseitem[i+1].row=i+1;
//并列排名
}}
elseif(size==1)item[0].row=1;
lview()//显示
if(size==0){cout<
{cout<
共有学生数据"
size<
条"
endl<
shows();
{
item[i].sshow();
obave()//统计科目
{if(size!
=0)
floatsum[3]={0};
sum[0]+=item[i].gete();
sum[1]+=item[i].getm();
sum[2]+=item[i].getcl();
英语平均的成绩为:
sum[0]/size<
'
\n'
数学平均的成绩为:
sum[1]/size<
c++的平均成绩是:
sum[2]/size<
setprecision(0)<
elsecout<
当前无学生数据,请添加......"
lpcent()//成绩分类
{intp[3][200];
floattem=100.0/size;
stringa[3]={"
"
if(size!
{item[i].objrank();
p[0][i]=item[i].rank[0];
p[1][i]=item[i].rank[1];
p[2][i]=item[i].rank[2];
for(intk=0;
k<
k++)
{intb[5]={0};
switch(p[k][i])
case1:
b[0]++;
case2:
b[1]++;
case3:
b[2]++;
case4:
b[3]++;
case5:
b[4]++;
a[k]<
成绩分类人数:
优"
b[0]<
人良"
b[1]
人中"
b[2]<
人及"
b[3]<
人不及"
b[4]<
人"
setprecision
(1)
成绩分类比例:
(float)b[0]*tem<
%良"
<
(float)b[1]*tem<
%中"
(float)b[2]*tem<
%及"
(float)b[3]*tem<
%不及"
(float)b[4]*tem<
%"
lcin()
{stringa[200],b[200];
floatc[200],d[200],e[200];
intf[200];
ifstreaminfile("
ok.txt"
ios:
in);
if(!
infile)cerr<
文件打开失败。
200;
infile>
a[i]>
b[i]>
c[i]>
d[i]>
e[i]>
f[i];
item[size].sinto(a[i],b[i],c[i],d[i],e[i]);
size++;
if(f[i]==1)break;
}
infile.close();
lcout()
{ofstreamoutfile("
out);
outfile)cerr<
outfile<
item[i].num<
"
item[i].name<
item[i].eng<
item[i].math<
item[i].clang<
size-i<
outfile.close();
voidshowmenu()
|----------------------------------------------------------------|"
|----------学生成绩统计管理系统--------------------------|"
|1.显示:
显示所有学生数据(按总分排序)|"
|2.查看:
查看所有统计结果|"
|3.添加:
插入一个学生数据|"
|4.删除:
删除一个学生数据|"
|5.查找:
查找指定学生数据|"
|6.修改:
修改指定学生数据|"
|7.清空:
清除所有学生数据|"
|8.帮助:
查看系统注意事项|"
|0.退出:
将数据保存到磁盘|"
voidshowtip()
\n\t\t----------------操作完成!
-----------------"
\t\t----------------选择0-8继续------------------"
intmain()
leoleo1;
stringc="
s"
a;
system("
cls"
);
//清屛
showmenu();
正在打开文件,请稍后..."
leo1.lcin();
\t\t\t请选择菜单中的数字以便处理数据:
while(c!
="
0"
system("
showmenu();
if(c=="
1"
你选择了1,学生数据显示如下:
leo1.lrow();
//排序
leo1.lview();
if(c=="
2"
{cout<
你选择了2,统计结果如下:
leo1.obave();
//各科平均成绩,
leo1.lpcent();
//各科分类情况
3"
你选择了3,"
leo1.linsert();
4"
你选择了4,请输出要删除的学号:
leo1.ldelet(a);
5"
你选择了5,请输出要查找的学号:
leo1.lsearch(a);