成绩管理系统课程设计.docx
《成绩管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《成绩管理系统课程设计.docx(46页珍藏版)》请在冰豆网上搜索。
成绩管理系统课程设计
课程设计说明书
题目:
成绩统计系统
姓名:
学号:
班级:
兰州交通大学
电信学院软件工程系
2015年7月10日
课程设计任务书
课程名称
程序设计课程设计(VB\C++)
题目
学生成绩统计系统
姓名
学号
班级
设
计
任
务
成绩统计系统
程序功能:
(1)要求能够对学生数据进行录入、添加、修改与删除;
(2)已知N个学生的M门课程的成绩,求:
①课程平均分和方差;
②学生总分、平均分和平均分方差;
③学生名次;④最高分及得最高分的学生和课程。
要求:
(1)输入数据存放于文件中,输出数据除了输出到屏幕上,也输出到一个文本文件中;
(2)数据结构采用数组,整体框架采用模块化处理;
(3)输出数据采用表格形式(不必画表格线)。
设
计
要
求
程序质量:
1.符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理。
2.要求界面友好美观(版权页、登录页…),功能明确,操作方便。
(登录页的用户名:
abcd,密码:
1234)
3.代码应适当缩进,并给出必要的注释,以增强程序的可读性。
4.程序调试完后需生成可执行文件。
课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容及格式参见课程设计要求。
指导教师
签字
课程设计评分表
课程设计题目:
学生成绩统计系统
姓名
学号
学院
专业
评价指标
指标内涵
分值
评分
选题与设计完成情况
选题难度
选题难度分为两个等级,A类选题为一级,B类选题为二级
30
工作量
工作量饱满,工作认真、严谨,遵守纪律,与同学团结协作、协调能力强,能按时完成设计任务。
综合运用
知识
综合运用知识能力强,能较系统地运用有关理论与知识解决实际问题。
能够独立查阅文献资料,从事调查研究;具有收集、整理、加工各种信息及获取新知识的能力。
设计水平与实际能力
能独立开展设计工作,能熟练掌握和运用所学基本理论、基本知识和基本技能分析解决相关理论和实际问题,设计方案合理可行,界面友好,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;操作方便易行。
说明书撰写
写作水平
语言表达清晰,报告内容详实,能对本人所做工作进行详细论述。
30
文档质量
能够按照给定格式排版,页面美观。
答辩
思路清晰,语言流畅,回答问题准确。
(无此环节则删除此行)
30
考勤
按时出勤,不迟到早退,以每次点名为准
10
成绩
评阅时间:
2015年7月10日
1.系统概述
为方便对学生成绩进行高效的管理,编写该程序以提高学生成绩管理效率。
使用该程序之后,学校管理者可以通过本系统对学生的成绩,名次,课程平均分等进行查询。
也可对学生的成绩进行添加,删改等。
通过本系统可以很好的掌握学生成绩的分布,减轻管理人员的负担,也使学生的成绩和信息长时期的保留。
二.系统分析
2.1程序流程图框架
英语成绩排名
三.系统详细设计
3.1数据结构设计
(1)类的设计
表3-1Stu类成员列表
Stu类
charname[20];
doublemath;
doublechinese;
doubleenglish;
doubleaverage;
doublesum;
doublegetsum();
doublegetaver();
(2)系统包含的类库
#include输入输出流
#includeString类
#include文件输入/输出操作
(3)各个变量的定义和作用
charname[20];学生姓名
doublemath;数学成绩
doublechinese;语文成绩
doubleenglish;英语成绩
doubleaverage;平均分
doublesum;总分
Stu*s[50];对象数组记录学生成绩
3.2系统函数的组成、功能、参数说明、相互调用关系
主函数main()
调用菜单操作函数handle_menu()实现菜单的输出和操作,调用index()打印首页。
以及删除动态对象。
菜单操作函数voidhandle_menu()
这是一个无参的函数,通过调用菜单函数menu()实现菜单的输出,利用do-while()语句和switch()语句实现各函数的调用,系统根据输入的字符选项来调用相应的函数,进行相应的操作。
菜单函数voidmenu()
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的十一大功能,根据每个功能前面的序号进行选择。
打印首页函数voidindex()
这是一个无参函数,主要功能是打印本系统的相关信息。
默认构造函数Stu:
:
Stu()
这是Stu类中的一个默认构造函数,实现对象的初始化。
有参构造函数Stu:
:
Stu(charn[20],doublema,doublechin,doubleeng)
这个函数的功能主要是对对象的数据成员赋值。
求总分函数doubleStu:
:
getsum()
这是一个无参函数,主要功能是将每个对象的语文、数学、英语三科成绩求和,返回总分sum。
求平均分函数doubleStu:
:
getaver()
这是一个无参函数,调用doubleStu:
:
getsum()平均分,返回平均分average
操作0数据录入函数voidoperate0()
这是一个无参函数,是Stu类的一个友元函数,该函数可将用户输入的学生的信息保存到文件"d:
\\document",输入完成后会提示用户是否要继续录入。
操作1增加人员函数voidoperate1()
这是一个无参函数,是Stu类的一个友元函数,该函数可以增加学生人数,提示用户输入的学生的信息,并保存到文件"d:
\\document",输入完成后会提示用户是否要继续录入。
操作2删除人员函数voidoperate2()
这是一个无参函数,是Stu类的一个友元函数,进入后系统会提示用户输入需要删除学生的姓名,然后查找该学生,删除该学生数据,并将其后指针往前移动一位,最后提示用户是否继续删除。
操作3修改数据函数voidoperate3()
这是一个无参函数,是Stu类的一个友元函数,进入后系统会提示用户输入需要修改学生的姓名,该函数的功能是修改学生的成绩,防止了录入数据时的错误,保证了系统的完备性。
操作4按总分排名函数voidoperate4()
这是一个无参函数,是Stu类的一个友元函数,进入后系统会提示用户输入需要查询的总分,然后输出所有该分数的学生的成绩,并提示用户是否需要继续查询。
操作5按语文成绩排名函数voidoperate8()
这是一个无参函数,是Stu类的一个友元函数,进入后系统将按照语文成绩从高到低自动输出该系统下所有学生的成绩,输出之后提示用户是否需要进行其它操作。
操作6按数学成绩排名函数voidoperate9()
这是一个无参函数,是Stu类的一个友元函数,进入后系统将按照数学成绩从高到低自动输出该系统下所有学生的成绩,输出之后提示用户是否需要进行其它操作。
操作7按英语成绩排名函数voidoperatey()
这是一个无参函数,是Stu类的一个友元函数,进入后系统将按照英语成绩从高到低自动输出该系统下所有学生的成绩,输出之后提示用户是否需要进行其它操作。
操作8输出所有学生的数据函数voidoperate6()
这是一个无参函数,是Stu类的一个友元函数,进入后系统将自动输出该系统下所有学生的成绩,但并不排序,而是按照录入是的顺序输出,输出之后提示用户是否需要进行其它操作。
3.3程序流程图
(1)输出学生所有信息的流程图
开始
输出”语文分数,数学成绩,英语成绩,以及平均分”
否
i=0
否
输出"管理系统中没有录入数据
或者数据已经被删除!
结束
开始
(2)按总分排名函数定义
输入i,j,t,stub,
Fiag2=0,x=0,k=0
x是
t=i,y=x+1
y
是
t!
=x
是
b=*s[x],s[x]=s[t,s[t]=b
y=y+1
x=x+1
k
结束
k=k+1
是
按照排名输出学生信息
3.4运行流程
(1)开始界面,进入系统,显示本系统相关信息
(2)输入学生所有信息后,按操作8,输出学生所有信息。
3.4小组中负责的代码编写
head.h
#if!
defined(HEAD_H)
#defineHEAD_H
#include
#include
#include
usingnamespacestd;
/***********************
*声明Stu类
***********************/
classStu
{
private:
charname[20];//姓名
doublemath,chinese,english,average,sum;
public:
Stu()//默认构造函数
{
}
Stu(charn[20],doublema,doublechin,doubleeng);//声明有参构造函数
doublegetsum();//声明求总分函数
doublegetaver();//声明求平均分函数
friendvoidoperate0();//声明有友元函数操作0数据录入
friendvoidoperate1();//声明有友元函数操作1增加人员
friendvoidoperate2();//声明有友元函数操作2删除人员
friendvoidoperate3();//声明有友元函数操作3修改数据
friendvoidoperate4();//声明有友元函数操作4按总成绩查询
friendvoidoperate5();//声明有友元函数操作5按语文成绩排名
friendvoidoperate6();//声明有友元函数操作6按数学成绩排名
friendvoidoperate7();//声明有友元函数操作7按英语成绩排名
friendvoidoperate8();//声明有友元函数操作8输出所有学生数据
};
/***********************
*声明函数原型
***********************/
voidmenu();//声明菜单函数
voidhandle_menu();//声明菜单操作函数
#endif
//stu.cpp
//#include"head.h"
/********************
*定义Stu类
********************/
Stu:
:
Stu(charn[20],doublema,doublechin,doubleeng)//定义有参构造函数
{
strcpy(name,n);
math=ma;
chinese=chin;
english=eng;
}
doubleStu:
:
getsum()//定义求总分函数
{
sum=chinese+english+math;
returnsum;
}
doubleStu:
:
getaver()//定义求平均分函数
{
average=getsum()/3;
returnaverage;
}
//operate8.cpp
//include"head.h"
/*******************************
*操作8输出所有学生的数据函数定义
*******************************/
externi;//引用外部变量
externj;//引用外部变量
externStu*s[50];//引用外部变量
voidoperate8()
{
charname[20];
charc;
intflag2=0;
cout<<"本系统所有学生数据如下:
"<if(i==0)
{
cout<<"管理系统中没有录入数据或者数据已经被删除!
"<}
for(intk=0;k
{
cout<"<name<<"语文:
"<chinese<<"数学:
"<math<<"外语:
"<english<<"总分:
"<<(*s[k]).getsum()<<"平均分:
"<<(*s[k]).getaver()<}
}
//学生成绩管理系统.cpp
//#include"head.h"
externi;//引用外部变量
externStu*s[50];//引用外部变量
intmain()
{
//index();
cout<cout<cout<<"********欢迎进入学生成绩管理系统********"<handle_menu();
for(intx=0;x
{
deletes[x];
cout<<"deleteallmembers!
"<}
return0;
}
/************************
*菜单处理函数
************************/
voidhandle_menu()//定义菜单操作函数
{
menu();
charp,w;
intflag2=0;
do
{
cin>>p;
if((p>='0'&&p<='8'))
{
flag2=1;
}
else
{
cout<<"指令错误!
请重新输入:
"<}
}
while(flag2==0);
switch(p)
{
case'0':
operate0();//操作0数据录入
break;
case'1':
operate1();//操作1增加人员
break;
case'2':
operate2();//操作2删除人员
break;
case'3':
operate3();//操作3修改数据
break;
case'4':
operate4();//操作4按总分排名
break;
case'5':
operate5();//操作5按语文成绩排名
break;
case'6':
operate6();//操作6按数学成绩排名
break;
case'7':
operate7();//操作7按英语成绩排名
break;
case'8':
operate8();
break;
}
cout<<"您想继续进行其他操作吗?
(y/n)"<intflag4=0;
do
{
cin>>w;
if(w!
='y'&&w!
='n')
{
cout<<"指令错误!
请重新输入!
"<}
else
{
flag4=1;
}
}while(flag4==0);
if(w=='y')
{
handle_menu();
}
}
voidmenu()//定义菜单函数
{
cout<cout<cout<<"请选择您需要的操作!
"<cout<cout<<"(0)数据录入"<cout<<"
(1)增加人员"<cout<<"
(2)删除人员"<cout<<"(3)修改数据"<cout<<"(4)按总分排名"<cout<<"(5)按语文成绩排名"<cout<<"(6)按数学成绩排名"<cout<<"(7)按英语成绩排名"<cout<<"(8)输出学生所有信息"<cout<<"选择相关操作请输入相对的括号里的字符!
"<}
3.5附录
(1)进入系统,显示本系统相关信息进入菜单界面
(2)输入0,回车,按提示输入数据。
((3)输入1,回车,增加人员,按提示输入数据。
(4)输入2,回车,删除人员,按提示输入数据。
(5)输入3,回车,修改学生信息,按提示输入数据。
(6)输入4,按照总分进行排名。
(7)输入5,按照语文成绩进行排名
(8)输入6,按照数学成绩进行排名
(9)输入7,按照英语成绩进行排名
(10)输入8,输出学生所有信息
附录所有程序代码
//head.h
#if!
defined(HEAD_H)
#defineHEAD_H
#include
#include
#include
usingnamespacestd;
/***********************
*声明Stu类
***********************/
classStu
{
private:
charname[20];//姓名
doublemath,chinese,english,average,sum;
public:
Stu()//默认构造函数
{
}
Stu(charn[20],doublema,doublechin,doubleeng);//声明有参构造函数
doublegetsum();//声明求总分函数
doublegetaver();//声明求平均分函数
friendvoidoperate0();//声明有友元函数操作0数据录入
friendvoidoperate1();//声明有友元函数操作1增加人员
friendvoidoperate2();//声明有友元函数操作2删除人员
friendvoidoperate3();//声明有友元函数操作3修改数据
friendvoidoperate4();//声明有友元函数操作4按总成绩查询
friendvoidoperate5();//声明有友元函数操作5按语文成绩排名
friendvoidoperate6();//声明有友元函数操作6按数学成绩排名
friendvoidoperate7();//声明有友元函数操作7按英语成绩排名
friendvoidoperate8();//声明有友元函数操作8输出所有学生数据
};
/***********************
*声明函数原型
***********************/
voidmenu();//声明菜单函数
voidhandle_menu();//声明菜单操作函数
#endif
//stu.cpp
//#include"head.h"
/********************
*定义Stu类
********************/
Stu:
:
Stu(charn[20],doublema,doublechin,doubleeng)//定义有参构造函数
{
strcpy(name,n);
math=ma;
chinese=chin;
english=eng;
}
doubleStu:
:
getsum()//定义求总分函数
{
sum=chinese+english+math;
returnsum;
}
doubleStu:
:
getaver()//定义求平均分函数
{
average=getsum()/3;
returnaverage;
}
//operate0.cpp
//#include"head.h"
/***********************
*操作0数据录入函数定义
***********************/
inti=0;//定义全局变量
intj=0;//定义全局变量
Stu*s[50];//定义对象数组
voidoperate0()
{
charname[20];
charc;
ofstream*file[50];
boolflag2=0;
doublemath,chinese,english;
do
{
cout<<"请输入姓名:
"<cin>>name;
cout<<"请输入数学成绩:
"<cin>>math;
cout<<"请输入语文成绩:
"<cin>>chinese;
cout<<"请输入外语成绩:
"<cin>>english;
file[j]=newofstream("d:
\\document",ios:
:
ate);//通过文件保存学生成绩到"d:
\\document"
*file[j]<<"姓名"<j++;
s[i]=newStu(name,math,chinese,english);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<cin>>c;
flag2=0;
do
{
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
else
flag2=1;
}while(flag2==0);
}while(c=='y');
}
//operate1.cpp
//#include"head.h"
/******