C++实现学生成绩统计管理系统.docx
《C++实现学生成绩统计管理系统.docx》由会员分享,可在线阅读,更多相关《C++实现学生成绩统计管理系统.docx(20页珍藏版)》请在冰点文库上搜索。
C++实现学生成绩统计管理系统
课程设计任务书
题目:
C++实现学生成绩统计管理系统
学号
姓名
专业计算机科学与技术
课程C++
指导教师职称讲师
完成时间:
20年月----20年月
枣庄学院计算机科学系制
课程设计任务书及成绩评定
课程设计的任务和具体要求
1、开设本课程的目的是使学生通过小型软件的开发过程,进一步掌握面向对象的程序设计方法,培养学生的创新能力和创新意识。
2.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
3.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
指导教师签字:
日期:
指导教师评语
成绩:
指导教师签字:
日期:
课程设计所需软件、硬件等
1、微型计算机
2、Windowsxp
3、VC6.0
课程设计进度计划
起至日期
工作内容
备注
2010年12月1日-2010年12月20日
2010年12月20日-2010年12月26日
收集资料
编写程序
参考文献、资料索引
序号
文献、资料名称
编著者
出版单位
《C++程序设计》(第二版),谭浩强著,清华大学出版社
目录
1课程设计的目的………………………………………………………………1
2课程设计的要求………………………………………………………………1
3课程设计报告内容……………………………………………………………1
1程序设计题目………………………………………………………………1
2程序实现思路………………………………………………………………1
3程序模块分析………………………………………………………………1
4系统顶级用例图……………………………………………………………2
5程序清单……………………………………………………………………2
4总结……………………………………………………………………………3
参考文献…………………………………………………………………………3
附录………………………………………………………………………………3
一、课程设计教学目的
本课程设计是《高级语言程序设计(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
#include
#include
#include
#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<<<}
intstudent:
:
sinto(stringa1,stringa2,floatb1,floatb2,floatb3)
{
num=a1;name=a2;
eng=b1;math=b2;clang=b3;
return0;
}
voidstudent:
:
sshow()//输出
{
cout<<<:
fixed)<(1)<cout<:
fixed)<}
floatstudent:
:
sall()//求总分
{returneng+math+clang;
}
floatstudent:
:
save()//求平均分
{returnsall()/3;}
voidstudent:
:
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;break;
case7:
n=3;break;
case6:
n=4;break;
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;
}
voidleo:
:
linit()
{lsize(0);
cout<<"学生数据清除成功"<cout<<"当前无学生数据。
请添加...."<}
voidleo:
:
ldelet(stringa)
{
intk=0;stringc;
for(inti=0;iif(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删除成功!
"<}
voidleo:
:
linsert()//添加
{
stringa="y";
while(a=="y")
{intmn=0;
if(size>Smax)cout<<"超出范围,不能再添加!
"<else
{
cout<<"\n请输入学号,姓名,英语,数学,c++成绩:
"<stringa1,a2;floatb1,b2,b3;
cin>>a1>>a2>>b1>>b2>>b3;
for(inti=0;iif(item[i].getn()==a1)
{mn++;
cout<<"输入学号与下面的数据重复!
"<shows();//输出重复的学号,姓名,英语,数学,c++成绩
item[i].sshow();}
if(!
mn)
{item[size++].sinto(a1,a2,b1,b2,b3);
cout<<"\n添加成功!
";}
}
cout<<"是否继续输入?
(y/n)";
cin>>a;
}
}
voidleo:
:
lsearch(stringa)//查找
{intN=0;
for(inti=0;iif(item[i].getn()==a)
{
N++;
shows();//输出学号,姓名,英语,数学,c++
item[i].sshow();
}
if(!
N)cout<<"输入有误或该学生数据不存在"<}
voidleo:
:
lchan(stringa)//修改
{if(size==0){cout<<"当前学生数据为空,请添加...."<else{
intN=0;
for(inti=0;iif(item[i].getn()==a)
{N++;
cout<<"你将要修改的数据如下:
"<shows();item[i].sshow();
cout<<"请输入要修改学生的学号,姓名,英语,数学,c++成绩"<stringa1,a2;
floatb1,b2,b3;
cin>>a1>>a2>>b1>>b2>>b3;
item[i].sinto(a1,a2,b1,b2,b3);
cout<<"修改成功!
"<}
if(!
N)cout<<"输入的学号有误!
"<}
voidleo:
:
lrow()//排序
{studenttemb;
if(size>1)
{
for(inti=0;i{temb=item[i];
for(intj=i+1;jif(item[i].sall(){item[i]=item[j];
item[j]=temb;}
item[0].row=1;
for(inti=0;iif(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;
}
voidleo:
:
lview()//显示
{
if(size==0){cout<<"当前学生数据为空,请添加...."<else
{cout<<"共有学生数据"<shows();
for(inti=0;i{
item[i].sshow();
}
}
}
voidleo:
:
obave()//统计科目
{if(size!
=0)
{
floatsum[3]={0};
for(inti=0;i{
sum[0]+=item[i].gete();
sum[1]+=item[i].getm();
sum[2]+=item[i].getcl();}
cout<<"英语平均的成绩为:
"
<:
fixed)<(1)<cout<<"数学平均的成绩为:
"<cout<<"c++的平均成绩是:
"<cout<:
fixed)<}
elsecout<<"当前无学生数据,请添加......";
}
voidleo:
:
lpcent()//成绩分类
{intp[3][200];
floattem=100.0/size;
stringa[3]={"英语","数学","c++"};
if(size!
=0)
{
for(inti=0;i{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<3;k++)
{intb[5]={0};
for(inti=0;i{
switch(p[k][i])
{
case1:
b[0]++;break;
case2:
b[1]++;break;
case3:
b[2]++;break;
case4:
b[3]++;break;
case5:
b[4]++;break;
default:
break;}
}
cout<优"<
<<"人中"<
cout<:
fixed)<(1)
<优"<<(float)b[0]*tem<<"%良"
<<(float)b[1]*tem<<"%中"<<(float)b[2]*tem<<"%及"
<<(float)b[3]*tem<<"%不及"<<(float)b[4]*tem<<"%"<cout<:
fixed)<}
}
}
voidleo:
:
lcin()
{stringa[200],b[200];floatc[200],d[200],e[200];
intf[200];
ifstreaminfile("ok.txt",ios:
:
in);
if(!
infile)cerr<<"文件打开失败。
"<for(inti=0;i<200;i++)
{
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();
}
voidleo:
:
lcout()
{ofstreamoutfile("ok.txt",ios:
:
out);
if(!
outfile)cerr<<"文件打开失败。
"<for(inti=0;ioutfile<outfile.close();
}
voidshowmenu()
{
cout<<"";
cout<<"|----------------------------------------------------------------|"<cout<<"";
cout<<"|----------学生成绩统计管理系统--------------------------|"<cout<<"";
cout<<"|----------------------------------------------------------------|"<cout<<"";
cout<<"|1.显示:
显示所有学生数据(按总分排序)|"<cout<<"";
cout<<"|2.查看:
查看所有统计结果|"<cout<<"";
cout<<"|3.添加:
插入一个学生数据|"<cout<<"";
cout<<"|4.删除:
删除一个学生数据|"<cout<<"";
cout<<"|5.查找:
查找指定学生数据|"<cout<<"";
cout<<"|6.修改:
修改指定学生数据|"<cout<<"";
cout<<"|7.清空:
清除所有学生数据|"<cout<<"";
cout<<"|8.帮助:
查看系统注意事项|"<cout<<"";
cout<<"|0.退出:
将数据保存到磁盘|"<cout<<"";
cout<<"|----------------------------------------------------------------|"<}
voidshowtip()
{
cout<<"\n\t\t----------------操作完成!
-----------------"<cout<<"\t\t----------------选择0-8继续------------------"<}
intmain()
{
leoleo1;
stringc="s",a;
system("cls");//清屛
showmenu();
cout<<"正在打开文件,请稍后..."<leo1.lcin();
cout<<"\t\t\t请选择菜单中的数字以便处理数据:
";
cin>>c;
while(c!
="0")
{
system("cls");
showmenu();
if(c=="1")
{cout<<"你选择了1,学生数据显示如下:
"<leo1.lrow();//排序
leo1.lview();
}
if(c=="2")
{cout<<"你选择了2,统计结果如下:
"<leo1.obave();//各科平均成绩,
leo1.lpcent();//各科分类情况
}
if(c=="3")
{cout<<"你选择了3,";
leo1.linsert();
}
if(c=="4")
{cout<<"你选择了4,请输出要删除的学号:
"<cin>>a;
leo1.ldelet(a);
}
if(c=="5")
{
cout<<"你选择了5,请输出要查找的学号:
"<cin>>a;
leo1.lsearch(a);