C学生成绩统计管理系统总汇最新最全.docx
《C学生成绩统计管理系统总汇最新最全.docx》由会员分享,可在线阅读,更多相关《C学生成绩统计管理系统总汇最新最全.docx(111页珍藏版)》请在冰豆网上搜索。
C学生成绩统计管理系统总汇最新最全
南昌大学
C++选修课
课程设计报告
题目:
学院:
专业:
姓名:
学号:
电话:
2016年6月17日
目录
1.需求分析…………………………………………3
2.概要设计…………………………………………3
3.程序实现思路……………………………………4
4.设计总结…………………………………………4
5.参考文献…………………………………………5
6.源代码……………………………………………6
一、需求分析
经过研一下学期C++选修课的学习,对C++基于对象的程序设计有了一定的认识,根据所学的知识,设计学生成绩管理系统。
学生成绩统计管理系统是为某班级成绩统计管理的一个系统。
为方便班级的管理人员对学生的信息进行管理,该系统中包括学号、姓名、大学物理、高数、C++语言,各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例,学生的总成绩、平均成绩及成绩排名。
通过仔细研究借鉴众多相关毕业设计研究等文献资料(见参考文献一),学习书籍谭浩强《面向对象的C++程序设计》编写了该成绩管理系统。
主要的功能有学生数据的增加、删除、修改、查询,另外实现一些统计的功能,例如:
成绩的输入、成绩统计、总成绩统计、成绩的统计结果显示。
二、概要设计
1、本程序所用到的所有抽象数据类型的定义如下:
序号
成员名
数据类型
含义
1
num
long
学号
2
name
string
姓名
3
sum
double
总分
4
range
int
排名
5
ave
double
平均分
6
score[]
double
记录数组
2、各程序模块的功能
voidinput();//输入
voidcount();//计算
voidsort();//按学号升序排列
voidselectsort();//按总成绩降序排列
voidinsert();//增加
intdel();//删除
voidstudent:
:
Exit();//修改
voidsearch();//查询
voiddisplay();//显示
以下为统计模块:
voidcount();//计算成员函数
voidaverage();//计算平均值成员函数
voiddisplay();//显示成员函数
三、程序实现思路
1.设计菜单实现功能
①成绩的输入(学号、姓名、大学物理、高数、C++语言)。
②成绩统计(各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例)。
③总成绩统计(学生的总成绩、平均成绩及成绩排名)。
④成绩的统计结果显示。
⑤学生数据的增加、修改、与删除。
⑥学生数据的读取与存储。
2.设计类与对象
classstudent//建立学生student类,目的是存储学生个人信息
{
public:
longnum;//学号
stringname;//姓名
doublescore[n];//学生科目成绩
doublesum;//总成绩
doubleave;//平均成绩
intrange;//排名
voidinsert();//增加
intdel();//删除
voidsearch();//查询
voidstudent:
:
Exit();//修改
voiddisplay();//显示
voidinput();//输入
voidcount();//计算
voidsort();//按学号升序排列
voidselectsort();//按总成绩降序排列
}stu[N];
classall//建立整体all类,目的是存放学生整体信息
{
public:
doubleave;//每学科的平均成绩
intpeople[5];//每学科的各等级人数
doublepercent[5];//每学科的各等级人数比例
voidcount();//计算成员函数
voidaverage();//计算平均值成员函数
voiddisplay();//显示成员函数
}al[n];
3.通过类的调用实现功能设计
case0:
cout<<"*******************"<cout<<"高数科统计结果为"<cout<<"*******************"<cout<break;
case1:
cout<<"*******************"<cout<<"大学物理科统计结果为"<cout<<"*******************"<cout<break;
case2:
cout<<"*******************"<cout<<"C++统计结果为"<cout<<"*******************"<cout<break;
case3:
if(total==0)
cout<<"数组为空,请在主菜单中选择1增加数据"<else
{
cout<<"学生信息为:
"<stu[total].count();
stu[total].display();//显示
cout<}
break;
case4:
if(total==0)
cout<<"数组为空,请在主菜单中选择1增加数据"<else
{
cout<<"各科学生成绩为:
"<al[n].average();
al[n].count();
al[n].display();
cout<}
break;
case5:
if(total==0)
cout<<"数组为空,请在主菜单中选择1增加数据"<else
do
{
stu[total].search();
cout<<"查询成功,继续查询请输入Y/y:
"<cout<<"退出请按其他键"<fflush(stdin);
ch=getchar();
}
while(ch=='Y'||ch=='y');
break;
case6:
if(total==0)
cout<<"数组为空,请在主菜单中选择1增加数据"<else
do
{
stu[total].Exit();//修改
cout<<"修改成功,继续修改请输入Y/y:
"<cout<<"退出请按其他键"<fflush(stdin);
ch=getchar();
}
while(ch=='Y'||ch=='y');
break;
case7:
if(total==0)
cout<<"数组为空,请在主菜单中选择1增加数据"<else
do
{
system("cls");
stu[total].insert();//增加
total++;
cout<<"增加成功,继续增加请输入Y/y:
"<cout<<"退出请按其他键"<fflush(stdin);
ch=getchar();
cout<}
while(ch=='Y'||ch=='y');
break;
case8:
if(total==0)
cout<<"数组为空,请在主菜单中选择1增加数据"<else
do
{
system("cls");
if(stu[total].del())//删除
{
total--;//人数-1
system("cls");
}
else
{
cout<<"该学号不存在"<system("pause");
system("cls");
}
cout<<"删除成功,继续删除请输入Y/y:
"<cout<<"退出该选择请按其他键"<fflush(stdin);
ch=getchar();
cout<}
while(ch=='Y'||ch=='y');
break;
case9:
cout<<"此操作将删除所有记录"<cout<<"继续该操作请输入Y/y:
"<cout<<"退出请按其他键"<fflush(stdin);
ch=getchar();
if(ch=='Y'||ch=='y')
{
total=0;
}
break;
default:
cout<<"确定要退出吗?
"<cout<<"退出请输入Y/y:
"<fflush(stdin);
ch=getchar();
cout<if(ch=='y'||ch=='Y')
{
exit(0);
}
break;
}
system("pause");
}while
(1);
}
四、设计总结
通过为期两周的努力,挑战程序设计的难度,终于将程序正确地运行。
虽说只是一个简单的程序,但它却见证了我从编写、调试、修改、运行、再修改等一系列的过程,收录了我努力后的小小成果。
从不断调试中遇到的错误中,我发现了自己的不足,同时也学会让自己如何面对挑战。
运用结构体、类等新学的内容让我再次感受到了学习的重要性。
都说“万变不离其宗”,书本是我们课后学习的参照。
因为没有重视书本,让我在编译时不断翻看,这也坚定了我努力学好这门课程的决心。
五、参考文献
1.谭浩强《C++程序设计》清华出版社2007,5
六、源代码
学生成绩统计管理程序
#include//引用库函数
#include//引用控制符处理
#include//字符串
usingnamespacestd;
#defineN100//宏定义
#definen3
classstudent//建立学生类,用于存储学生个人信息
{
public:
longnum;//学号
stringname;//姓名
doublescore[n];//学生科目成绩
doublesum;//总成绩
doubleave;//平均成绩
intrange;//排名
voidinput();//输入
voidcount();//计算
voidsort();//按学号升序排列
voidselectsort();//按总成绩降序排列
voidsearch();//查询
voidinsert();//增加
intdel();//删除
voidstudent:
:
Exit();//修改数据
voiddisplay();//显示
}stu[N];
classall//建立整体类,用来存放学生整体信息
{
public:
doubleave;//每学科的平均成绩
intpeople[5];//每学科的各等级人数
doublepercent[5];//每学科的各等级人数比例
voidcount();//计算成员函数
voidaverage();//计算平均值成员函数
voiddisplay();//显示成员函数
}al[n];
inttotal=0;//定义全局变量
voidstudent:
:
input()//输入学生个人信息
{
cout<<"请输入学生信息:
"<cout<<"学号"<<<"高数成绩"<<cin>>setw(10)>>stu[total].num;
cin>>setw(10)>>stu[total].name;
for(intj=0;jcin>>setw(10)>>stu[total].score[j];
}
voidstudent:
:
selectsort()//按总成绩降序排列
{
studentaa;
inti,j;
for(i=0;ifor(j=i+1;j{
if(stu[i].sum{aa=stu[j];
stu[j]=stu[i];
stu[i]=aa;
}
}
}
voidstudent:
:
count()//计算总成绩、平均成绩
{
stu[total].selectsort();
for(inti=0;i{
stu[i].sum=0;
for(intj=0;jstu[i].sum+=stu[i].score[j];
stu[i].ave=stu[i].sum/n;
}
}
voidstudent:
:
sort()//按学号升序排列
{
studentabc;
inti,j;
for(i=0;ifor(j=i+1;jif(stu[i].num>stu[j].num)
{
abc=stu[j];
stu[j]=stu[i];
stu[i]=abc;
}
}
voidstudent:
:
display()//显示学生个人信息
{
selectsort();//调用按总成绩降序排列函数
cout<<"学号"<<<"高数成绩"<<<for(inti=0;i{
stu[i].range=i+1;
cout<for(intj=0;jcout<cout<<}
}
voidall:
:
average()//计算各科的平均成绩
{
for(intj=0;j{
longdoublea=0;
for(inti=0;i{a+=stu[i].score[j];
al[j].ave=a/double(total);
}
}
}
voidall:
:
count()//计算各科的各等级人数及其比例
{
for(intj=0;j{
inta=0,b=0,c=0,d=0,e=0;
for(inti=0;i{
if(stu[i].score[j]<60)
a++;
elseif(stu[i].score[j]<70)
b++;
elseif(stu[i].score[j]<80)
c++;
elseif(stu[i].score[j]<90)
d++;
else
e++;
al[j].people[0]=a;//高数科不及格人数
al[j].people[1]=b;//高数科及格人数
al[j].people[2]=c;//高数科中等人数
al[j].people[3]=d;//高数科良好人数
al[j].people[4]=e;//高数科优秀人数
al[j].percent[0]=a/double(total);//高数科不及格人数所占的比例
al[j].percent[1]=b/double(total);//高数科及格人数所占的比例
al[j].percent[2]=c/double(total);//高数科中等人数所占的比例
al[j].percent[3]=d/double(total);//高数科良好人数所占的比例
al[j].percent[4]=e/double(total);//高数科优秀人数所占的比例
}
}
}
voidall:
:
display()//输出整体信息
{
for(intj=0;j{
switch(j)
{
case0:
cout<<"*******************"<cout<<"高数科统计结果为"<cout<<"*******************"<cout<break;
case1:
cout<<"*******************"<cout<<"大学物理科统计结果为"<cout<<"*******************"<cout<break;
case2:
cout<<"*******************"<cout<<"C++统计结果为"<cout<<"*******************"<cout<break;
}
cout<<"平均成绩为:
"<cout<cout<<"不及格人数为:
"<cout<<"及格人数为:
"<cout<<"中等人数为:
"<cout<<"良好人数为:
"<cout<<"优秀人数为:
"<cout<<"不及格人数为:
"<cout<<"及格人数比为:
"<cout<<"中等人数为:
"<cout<<"良好人数比为:
"<cout<<"优秀人数比为:
"<cout<}
}
voidstudent:
:
search()//查询
{
intfind_num;
boolflag=false;
cout<<"请输入要查找的学生的学号"<cin>>find_num;
for(inti=0;iif(stu[i].num==find_num)//如果要找的学号与其中某一个学生的学号相同
{
cout<cout<<"已经找到该学生信息,他的有关信息是:
"<cout<for(intj=0;jcout<cout<flag=true;
break;
}
if(flag==false)
cout<<"找不到该学生的学号"<voidstudent:
:
Exit()//修改
{
intID;
boolflag=false;
stringname1;
cout<<"请输入要修改的学生的信息"<cout<"<cout<<"姓名:
"<cout<<"高数成绩:
"<cout<<"大学物理成绩:
"<cout<<"C++成绩:
"<cin>>ID;
cin>>name1;
for(inti=0;iif(stu[i].num==ID)
{
stu[i].num=ID;
stu[i].name=name1;
flag=true;
break;
}
if(flag==false)
cout<<"找不到该学生的学号"<}
voidstudent:
:
insert()//增加
{
inta;
stringaa;
doublex,y,z;
stu[total].sort();//调用按学号升序排列函数
cout<<"请输入要增加的学生的信息"<cout<cin>>a>>aa>>x>>y>>z;
stu[total].num=a;
stu[total].name=aa;
stu[total].score[0]=x;
stu[total].score[1]=y;
stu[total].score[2]=z;
}
intstudent:
:
del()//删除
{
inti,j,abc;
cout<<"请输入要删除的学号:
"<cin>>abc;
stu[total].sort();//调用按学号升序排列函数
for(i=0;i{
if(abc==stu[i].num)//如果某一个学生的学号与要删除的学生的学号相同
break;
}
if(i{
for(j=i;jstu[j]=stu[j+1];
return1;