学生成绩管理系统程序设计报告doc.docx
《学生成绩管理系统程序设计报告doc.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统程序设计报告doc.docx(10页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统程序设计报告doc
程序设计报告
(201/201学年第学期)
题目:
学生成绩管理系统
专业软件工程(NIIT)
学生姓名
班级学号
指导教师成小惠
指导单位计算机软件学院
日期2013.3.26
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
学生成绩管理系统
一、课题内容和要求
设计一个简化的学生成绩管理系统,并用C或C#语言实现。
对该系统的要求如下:
1.该系统应实现以下功能
(1)按班级按课程从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩。
(2)三个成绩对总评成绩的百分比被定义为常数,各占总成绩的30%、30%和40%。
(3)计算每位学生的总评成绩。
(4)算该班级本课程的总平均成绩。
(5)算处于优、良、中、及格、不及格的学生人数以及占总人数的百分比。
其中100-90为优,89-80为良,79-70为中,69-60为及格,60分以下为不及格。
(6)按要求输出成绩在优、良、中、及格、不及格各区间的学生学号。
2.系统应有以下菜单:
0.退出
1.计算每位学生的总评成绩
2.计算班级本课程总评成绩
3.统计优、良、中、及格、不及格的学生人数以及所占比例
4.查询成绩在优、良、中、及格、不及格各区间的学生学号
允许用户不断从这个菜单选择任一功能执行,直到选择退出,才退出整个系统。
二、需求分析
1.系统要从文件中读入相应的平时成绩、期中成绩和期末考试成绩。
这里就用到了C++中的输入输出文件的操作。
在C++语言中进行文件操作的一般步骤为:
(1)为要进行操作的文件定义一个流。
(2)建立(或打开)文件。
(3)进行读/写操作。
(4)关闭文件
另外从文件中读入的数据要在后面进行计算,所以应该把文件中的数据对应到类或者结构体数组上去。
(在这个程序中用的是结构体数组)
2.系统还要有计算的功能,这里的计算包括总评成绩的计算和平均值的计算。
因为要计算多个学生的成绩,所以利用循环语句来进行逐个学生成绩的计算并输出。
(在这个程序中都是用的for循环)
3.统计功能。
需要运用到条件语句,既满足条件就加1,以此来完成计数统计。
4.查询功能。
同样是运用条件语句,判断符合条件就对屏幕输出,达到用户查询的目的。
5.菜单功能。
用简单的菜单函数完成整体的框架,用到switch语句来完成菜单函数的循环。
三、概要设计
1.首先用structstudent定义一个结构数组,里面应该包含学号Id、平时成绩ps、期中成绩qz、期末成绩qm、总评成绩all、等级grade。
2.定义函数
(1)读入文件(fs.open),对应到结构体数组中,利用for循环计算总评成绩并用判断语句来判断等级。
(2)调用file函数,把计算的结果输出屏幕,并且按照要求保存到out文件中(ofstreamfout(“out.dat”);)。
(3)调用file函数,计算平均成绩来得到课程的总评成绩。
(4)调用file函数,if判断语句来统计人数并计算比例,然后输出屏幕。
(5)if判断语句,把符合用户输入等级的学生的学号输出到屏幕。
四、详细设计
#include/*输入输出的头文件*/
#include/*对文件的操作*/
#include/*定义字符串变量*/
#include
structstudent/*定义一个结构数组*/
{
public:
charId[10];
floatps;
floatqz;
floatqm;
floatall;
chargrade;
}stu[20];
fstreamfs;
intnum;
charstr5[100]="学生学号";
charstr6[100]="总评成绩";
charstr7[100]="成绩等级";
voidfile()/*定义一个函数,方便后面的调用*/
{
fs.open("note.dat",ios:
:
in|ios:
:
out);/*对文件读入的操作,文件以输入输出方式打开*/
fs>>num;
for(inti=0;i{
fs>>stu[i].Id>>stu[i].ps>>stu[i].qz>>stu[i].qm;/*把文件中得数值对应到结构数组中*/
}
for(i=0;i{
stu[i].all=stu[i].ps*0.3+stu[i].qz*0.3+stu[i].qm*0.4;
if((stu[i].all<=100)&&(stu[i].all>=90))
stu[i].grade='A';
if((stu[i].all<90)&&(stu[i].all>=80))
stu[i].grade='B';
if((stu[i].all<80)&&(stu[i].all>=70))
stu[i].grade='C';
if((stu[i].all<70)&&(stu[i].all>=60))
stu[i].grade='D';
if((stu[i].all<60)&&(stu[i].all>=0))
stu[i].grade='E';
}
}
voidreadall()/*对选项1的实现,后面调用*/
{file();
inti;
ofstreamfout("out.dat");/*输出保存到out文件中*/
if(!
fout)/*如果文件打开失败*/
{
cout<<"Cannotopenthefile!
"<}
fout<cout<for(i=0;i{
fout<cout<}
}
voidreadaverage()/*对选项2的实现,后面调用*/
{
cout<<"本课程的总评成绩:
";
file();
inti;
floata[20],p;
for(i=0;i{
a[i]=stu[i].all;
}
for(i=1;i{
a[i]=a[i]+a[i-1];
}
p=a[num-1]/num;
cout<
}
voidreadgrade()/*对选项3的实现,后面调用*/
{inti;
intj=0;
intk=0;
intx=0;
inty=0;
intz=0;
file();
for(i=0;i{
if(stu[i].grade==65)
j++;
if(stu[i].grade==66)
k++;
if(stu[i].grade==67)
x++;
if(stu[i].grade==68)
y++;
if(stu[i].grade==69)
z++;
}
cout<<"成绩为优的学生人数:
";
cout<cout<<"成绩为良的学生人数:
";
cout<cout<<"成绩为中等的学生人数:
";
cout<cout<<"成绩为及格的学生人数:
";
cout<cout<<"成绩为不及格的学生人数:
";
cout<floatn;
cout<<"成绩为优的学生百分比:
";
n=float(j)/num;
cout<cout<<"成绩为良的学生百分比:
";
n=float(k)/num;
cout<cout<<"成绩为中等的学生百分比:
";
n=float(x)/num;
cout<cout<<"成绩为及格的学生百分比:
";
n=float(y)/num;
cout<cout<<"成绩为不及格的学生百分比:
";
n=float(z)/num;
cout<}
voidreadABCDE()/*对选项4的实现,后面调用*/
{charm[10];
cout<<"请输入你需要查询学生的成绩等级:
";
cin>>m;
if((m[0]!
=65)&&(m[0]!
=66)&&(m[0]!
=67)&&(m[0]!
=68)&&(m[0]!
=69))
cout<<"Inputerror"<if(m[0]==65)
{cout<for(inti=0;i{if(stu[i].grade=='A')
cout<}
}
if(m[0]==66)
{cout<for(inti=0;i{if(stu[i].grade=='B')
cout<}
}
if(m[0]==67)
{cout<for(inti=0;i{if(stu[i].grade=='C')
cout<}
}
if(m[0]==68)
{cout<for(inti=0;i{if(stu[i].grade=='D')
cout<}
}
if(m[0]==69)
{cout<for(inti=0;i{if(stu[i].grade=='E')
cout<}
}
cout<}
voidmain()/*菜单函数,整体框架*/