《毕业设计(论文)学生成绩管理系统3.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)学生成绩管理系统3.doc(35页珍藏版)》请在三一办公上搜索。
1、编号:079290141002本 科 毕 业 论 文题 目:学生成绩管理系统 学 院:机械工程学院 专 业:辅修 年级:2008级本科 姓 名: 指导教师: 完成日期:2011年3月20日 目 录中文摘要及关键字1英文摘要及关键词1引言21概述21.1 开发背景21.2 开发环境22需求分析32.1总体设计33功能模块的实现53.1成绩录入模块53.2成绩统计模块63.3成绩排名模块73.4成绩查询模块93.5插入学生成绩模块103.6修改学生成绩模块113.7删除学生成绩模块134 输出模块155系统集成156系统的实现 216.1输入学生记录的个数216.2 输入学生记录的详细信息的实现2
2、16.3打印学生记录的实现216.4查看学生平均成绩的实现226.5查看具体学生的详细信息的实现226.6增加一个或多个学生记录的实现236.7修改一个学生记录的实现246.8修改一个学生记录的实现246.9退出系统的实现25结束语26参考文献27致谢28摘 要程序要求学生以学生成绩管理业务为背景,设计、开发一套“学生成绩管理系统”软件。 学生成绩管理系统是一个比较综合,也比较实用的软件系统。它主要提供学生成绩管理系统主要提供学生资料的输入,学生资料的输出,学生资料的查询,学生资料删除,学生资料的统计,学生资料的添加以及学生成绩的排序等服务。该设计要求用面向对象相关知识来设计,涉及到类以及对象
3、等信息,还要有清晰的类层次,并且在各类中要有自己的属性及方法。关键词: Abstract -The program requires students to student achievement management business as the background, design, develop a student achievement management system software. Student achievement management system is a more comprehensive, and also more practical software
4、systems. It is mainly to provide students with performance management system is mainly to provide students with information input, the output of student data, student information, query, delete the student data, student information, statistics, student information, as well as student achievement to
5、add sorting and other services. The design of object-oriented knowledge required to design, involving information such as class and object, but also a clear class hierarchy, and in all types need to have their own attributes and methods.Key Words:引 言信息在社会和经济的发展中所起的作用越来越为人们所重视。信息资源的开发和利用,已成为衡量一个国家综合国
6、力的重要标志之一。在计算机的三大主要领域(科学计算、数据处理与过程控制)中,数据处理的比重约占70%左右。计算机作为处理的工具,为适应数据处理需求迅速提高,满足各类信息系统对数据管理的要求,在文件系统的基础上发展起了数据库系统。计算机数据库管理随着计算机硬件(尤其是外存储器)、软件技术和计算机应用范围的发展而不断发展。在计算机高速发展的今天,它已经应用到了各个行业,当然,学校也不例外。以前学校对学生的成绩是用人管理,而作为计算机应用的一部分,使用计算机对学生成绩进行信息管理,有着手工管理所无法比拟的优点,如:查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学校对
7、学生成绩管理的效率。因此,开发一套学生成绩管理系统是有必要的。针对以上要求,开发一个适合大多数学校管理学生成绩的高效、可靠、易于维护,同时又能满足学校业务需求的学生成绩管理系统软件。1 概述1.1 开发背景当今社会,是个高科技、高效率、高度竞争的全新社会。在我国,各大中小学校的各类信息管理系统并非一个新的课题,但也有的学校根本就没有信息任何管理系统,所有的工作几乎还是手工操作来完成。计算机技术在日新月异的发展,但是有的很多学校,特别是在西部贫困地区,学校的种类管理都依然由手工操作来完成,这十分落后,效率极低,成本很大,而且极异出错。随着社会的发展,信息化是社会进程的必然趋势,学校管理只有只有快
8、,准,精才能发挥其价值。所以机器代替人力是必然的历史发展趋势,只有领导的重视和支持才能从人工操作改为计算机的自动化系统。人工操作必将被计算机代替。有些学校虽使用了计算机,甚至管理系统,但是仍然存在很多问题,问题一日不解决,效率就一日提不上去。还有,有的系统很不完善到处是漏洞,可以说是千疮百孔,这样极不完善的系统对管理来说是没有任何保障的。1.2 开发环境为解决学生成绩管理系统中烦琐的成绩录入界面、学生查询、修改、删除等问题,本系统采用了Microsoft Visual C+ 6.0来开发,它有如下特点: 1). Microsoft Visual C+,(简称Visual C+、MSVC、VC+
9、或VC)微软公司的C+开发工具,具有集成开发环境,可提供编辑C语言,C+以及C+/CLI等编程语言。VC+整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架。 2).自带数据库操作更容易,与数据库的连接方便,简洁。 3).有功能强大的 vc+语言及丰富的c+函数,大大提高了系统的开发效率。 4).目前支持平台有:Windows 95/98/Me,Windows NT/2000,UNIX。 5).Visual C+以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。比如,它
10、允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。2 需求分析一般来说,对于一个学生成绩管理系统,主要包括成绩录入、计算总分和平均分、成绩排名、插入、删除,修改学生成绩模块和成绩查询等几个方面的内容。根据以上的的分析,给出学生成绩管理系统的主要实现功能:1、 提供成绩录入界面。2、 统计每个学生的总分和平均分。3、 按总分由大到小排出名次。4、 提供成绩查询功能,即任意输入一个学号,能够查找出该学生在班级
11、中的排名及考试成绩。5、 以上同学成绩录入完后可以增加其学生的信息。6、 确定一个学生的学号,可以进行修改其信息 。7、 提供成绩删除界面。确定一个学生的学号,可以进行删除该学生的信息 。2.1 总体设计总体设计需要完成对系统的分析与设计,以及设计系统需要的主要数据结构。根据需求分析的结果,本系统至少要完成以下几个模块:mian 函数模块、成绩录入模块、成绩统计模块、成绩排名模块、插入学生成绩模块、删除学生成绩模块、修改学生成绩模块和成绩查询模块。其模块的功能说明如下:1 、 mian 函数模块的主要功能为提供程序入口、前期环境设置、调用主要的执行函数和程序结束前的数据处理。2、 成绩录入模块
12、的主要功能为提供友好的成绩录入界面,将输入的成绩存储在对应的数据结构中。3、成绩统计模块的主要功能为统计每个学生的总分和平均分并输出。4、 成绩排名模块的主要功能为按总分由大到小排出名次并输出。5、 成绩查询模块主要功能为根据用户输入一个学号,能够查找出该学生在班级中的排名及考试成绩。6、插入学生成绩模块的主要功能是在已输入的学生记录中,需要添加一个记录时,提供一个插入的接口7、修改学生成绩模块的主要功能是在已输入的学生记录中,修改一给学生的所有信息。8、删除学生成绩模块的主要功能是在已输入的学生记录中,查找一个记录,将其所有的信息都删除。 根据上述描述,给出该系统的总体设计图,如下图1-1所
13、示。 图1-1此外,由于该系统涉及多个学生成绩的存储,因此定义一个数据结构。为体现c+的特性,采用类存储的数据类型,该声明如下: Class Student Public: Char numberMax; Char nameMax Double chinese; Double math; Double English; Double total; Double average; Int rank;3 功能模块的实现 下面将依次写出主函数mian模块、成绩录入模块、成绩统计模块、成绩排名模块和成绩查询模块的实现。3.1 成绩录入模块成绩录入模块是成绩管理系统首要执行的一个模块,只有当数据结构中有
14、成绩等数据后才能进行其他的诸如统计、排名、和查询等功能。 成绩录入就是对前面定义的类student 中的成员进行赋值。其中,用户需要输入的是学生的学号、姓名两个基本的信息和语文、数学和英语三门成绩,其余总成绩、平均成绩和排名由后续的计算函数来实现。实现成绩录入模块的函数代码如代码清单1-2所示 代码清单1-21 void setData(Student &s) 2 3 couts.numbers.names.chineses.maths.english; /接收并存储到成员变量中5 s.total; /初始化变量6 s.average; /初始化变量7 s.rank; /初始化变量8 上述代码
15、,第一行代码,函数setdata()为成绩录入的函数名称,其函数为类Student的一个对象。第34行接收用户从键盘输入的信息并存储在该对象的成员中,第57行对该对象的其他成员初始化。该函数运行时其结果如图1-3所示当需要输入n个学生成绩时,其代码如下:for (int i=0;i=n;i+) /循环输入 cout”下面输入第”i+1”位同学的数据:”endl; /提示 setData(si); /调用成绩录入函数 coutendl; /换行3.2 成绩统计模块 成绩统计模块需要建立在成绩录入模块的基础上,当系统中已经包含一些数据记录后才能对这些成绩进行求总分、平均分等操作。本模块包括对输入的
16、数据计算总分和计算平均分,其中,cout()函数用于计算一个同学的总分和平均分,而getAverage()函数则求出整个班级所有的三门课程的平均成绩,其函数代码如代码清单1-3所示 代码清单1-3void count(Student &s) /成绩统计函数 s.total=s.chinese+s.math+s.english;/求三门课程的总分s.average=total/3; /求三门课程的平均分double getAverage(Student s,int n); /求平均分函数double Average=0; /变量定义并初始化 for (int i=0;i=n;i+) /循环 Av
17、erage+=(si.chinese+si.math+sienglish);/求所有学生的所有成绩和 Average/=(n*3); /求所有学生的成绩平均值 return Average; /返回该平均值其中,计算整个班级所有的三门课程的成绩getAverage()函数的实现流程如图1-4所示: 图1-43.3成绩排名模块 在获得整个班级的总分和平均分之后,就可对该班级中的同学按照某个参数进行排名了。在该系统中,使用每位同学的平均成绩对其进行排名。排序的方法有很多种,如冒泡、选择排序等,本系统采用插入排序来实现。 插入排序的基本思想是,每次将一个待排序的记录,按其关键字的大小插入到前面已经排
18、好序的子序列中的适当位置,直到全部记录插入完成为止其算法流程如图1-5所示. 图1-5根据上述的算法流程图,结合C+的语法格式,成绩排名模块的实现代码清单1-6所示。代码清单1-61 void sort(student s,int n) /插入法排序1 2 int index; /定义变量3 Student inserter; /创建对象4 for(int i=1;i=0&inserter.averagesindex.average) /比较8 9 sindex+1= sindex; /元素后移10 index;11 12 sindex+1=inserter; /插入该元素13 14 for(
19、int j=0;jn;j+)15 sj.rank=j+1; /设置排名16 上述代码中,前15行代码是实现按照学生的平均成绩从大到小的排序,其他的代码行将排序的名次写入到对象的排名中。3.4 成绩查询模块该系统的成绩查询功能是根据用户输入的学生的学号作为关键字,在数据结构中进行查询,并将查询的结果返回,其模块的实现代码清单1-7所示。 代码清单1-71 int search(student s,int n,char *n)/成绩查询函数2 3 for(int i=0;in;i+) /在所有的记录中查询4 5 if(strcmp(si.number,n)=0) /找到6 return i; /返
20、回结果所在位置7 8 return -1; /没有找到上述代码中,第1行代码函数的申明中,参数字符串n即为用户输入的需要查询的学生学号。将该学生的学号与所有元素进行比较,找到则返回该元素的位置,否则返回-1.该函数执行的流程如图1-8所示。 图1-83.5 插入学生成绩模块 该系统的插入学生成绩模块功能是根据用户输入的学生的信息,在数组中进行插入,并将插入的结果打印出来,其模块的实现代码清单1-9所示。 代码清单1-91 cout请输入增加一个学生的信息endl; 2 setdata(s2);/输入学生信息3 count(s2); /coutendl;4 sort(s,3); /排名 5 in
21、t order=1;6 cout*学生信息录入完毕!*endl; 上述代码中,第2行代码进行调用setdata()函数,将其数据信息插入数组中,其次将所有的学生进行排序。将该学生的学号与所有元素进行比较,调用sort()函数.该函数执行的流程如图1-10所示。 图1-103.6 修改学生成绩模块 该系统的修改学生成绩模块功能是根据用户输入的学生的学号作为关键字,在数组中进行查找,找到后,返回该学生的信息,进行新的数据赋值,其后打印其修改后的学生成绩表。其模块的实现代码清单1-11所示。 代码清单1-11char codemax; cout请输入要修改的学生的学号:code; int resul
22、t=search(s,m,code); /调用查询函数 if(result=-1) /没有找到 cout你要找到学号不存在!endl; else /找到 cout你要修改学生的信息是endl; print(sresult); /输出该学生的信息及成绩 cout请输入要修改的学生的信息:endl; setdata(sresult);/输入学生信息 count(sresult); /coutendl; sort(s,3); /排名 int order=1; cout*学生信息录入完毕!*endl; 上述代码中,从界面输入一个学生的学号,在数组中以学号作为关键字,进行查询调用strcmp(),找到后
23、从界面输入一个新的数据。其流程图如1-12所示。 图1-123、7 删除学生成绩模块 该系统的删除学生成绩模块功能是根据管理员输入的学生的学号作为关键字,在数组中进行查找,找到后,返回该学生的信息,在数组中删除其数据信息,其后打印其删除后的学生成绩表。其模块的实现代码清单1-11所示。 代码清单1-131 char codemax;2 cout请输入要删除的学生的学号:code; 4 int result=search(s,m,code); /调用查询函数 5 if(result=-1) /没有找到 6 cout你要找到学号不存在!endl; 7 else /找到8 cout你要删除学生的信息
24、是endl; 9 print(sresult); /输出该学生的信息及成绩10 cout 删除完毕!endl; /输出全部学生的信息11 for(int j=0;jm;j+)12 while(j!=result)13print(sj);14sort(s,m-1);break;15sort(s,m-1); flag=2;16 int order=1; 在上述代码中1-10行进行删除操作,11-16行先不打印要删除的学生,打印出剩余的学生在进行排序,后进行打印出所有的学生记录其流程图如图1-14所示。图1-144、 输出模块对系统内的成绩作了排序、统计、修改、删除后和查询功能后,都需要将结果输出。
25、下面写出输出学生信息的函数print(),代码清单1-9所示。 代码清单1-9 1 void print(student &s) /输出函数2 3 cout”排名”t”学号”t”姓名” ”t”语文:” ”t”数学:”t”英语:” ”t”总分”t”平均分”endl; 4 couts.rank”t”s.number”t” s.name”t”s.chinese”t”s.math”t”s.english”t”s.total”t”s.averageendl; /输出成员的值 5 系统集成 在上述的过程中将学生成绩管理系统的各个功能模块都实现了,接下来做的是把这些模块集成起来,形成一个完整的系统。 在c+
26、编写的程序中,首先执行的是mian()主函数。因此,系统集成可以在mian()函数中实现。系统集成最好的方法是通过菜单的方式实现。下面通过C+实现模拟菜单的功能,实现代码清单如代码清单1-10所示。 代码清单1-101 int main() /主函数2 int m;3 coutm;4 student smax;5 for(int i=0;im;i+)6 7 cout下面输入第i+1位同学的数据:endl;8 setdata(si);9 count(si);10 coutendl; 11 system(cls);12 sort(s,m);13 int order=1;14 while(order
27、!=7) /进入循环 15 cout*命令菜单*endl; cout1.打印所有排名endl; cout2.打印出成绩在全班平均分以上的学生名单和数据信息endl; cout3.任意一个学号,找出该学生在班级中的排名及考试成绩endl;cout4.插入一个学生的信息!endl;cout5.修改一个学生的信息!endl;cout6.删除一学生的信息!endl; cout7.退出系统endl; cout*endl;/画出命令菜单coutorder; /接收键盘输入17 switch(order) /进入多分枝选择结构17 18 case 1 : /输入命令选择1 19 if(flag=1) 20
28、m=m+1;21 if(flag=2)22 m=m-1;23 if(flag=0)24 m=m;25 for(int j=0;jm;j+) 26 print(sj); 27 /输出全部学生的信息 28 break; / 跳出分支结构29 case 2 : /输入命令选择230 31 m=m+1;32 if(flag=2)/sub33 m=m-1;34 if(flag=0)35 m=m;36 double compare=getaverage(s,m); /求平均值37 for(int k=0;kcompare) /输出成绩在全班平均分以上的同学39 print(sk);40 flag=0;41
29、 /打印输出42 break; / 跳出分支结构43 case 3 : /输入命令选择344 45 if(flag=1) /add46 m=m+1;47 if(flag=2)/su48 m=m-1;49 if(flag=0)50 m=m;51 char codemax; /定义字符数组52 coutcode; /获取输入的学号54 int result=search(s,m,code); /调用查询函数55 if(result=-1) /没有找到56 cout你要找到学号不存在!end;57 else /找到58 print(sresult); /输出该学生的信息及成绩59 flag=0;60
30、 61 Break;62 case 4:63 64 cout请输入增加一个学生的信息endl;65 flag=1;66 setdata(sm); /输入学生信息67 count(sm); /coutendl;68 sort(s,m+1); /排名69 int order=1;70 flag=1;71 cout*学生信息录入完毕!*endl;72 73 break;74 case 5:75 76 char codemax;77 cout请输入要修改的学生的学号:code;79 if(flag=1) /add80 m=m+181 if(flag=2)/sub82 m=m-1;83 if(flag=
31、0)84 m=m;85 int result=search(s,m,code); /调用查询函数86 if(result=-1) /没有找到87 cout你要找到学号不存在!endl;88 else /找到89 cout你要修改学生的信息是endl;90 print(sresult); /输出该学生的信息及成91 cout请输入要修改的学生的信息:endl92 setdata(sresult);/输入学生信息93 count(sresult); 94 /coutendl;95 sort(s,m); /排名96 int order=1;97 flag=098 cout*学生信息录入完毕!*end
32、l;99 100101 break; / 跳出分支结构102 case 6:103 104 char codemax;105 cout请输入要删除的学生的学号:code;107 if(flag=1) /add108 m=m+1;109 if(flag=2)/sub110 m=m-1;111 if(flag=0)112 m=m;113 int result=search(s,m,code); /调用查询函数114 if(result=-1) /没有找到115 cout你要找到学号不存在!endl;116 else /找到117 cout 你要删除学生的信息是endl;118 print(sres
33、ult); /输出该学生的信息及119 cout 删除完毕!endl; /输出全部学生的信120 for(int j=0;jm;j+)121 while(j!=result)122 123 print(sj);124 sort(s,m-1);125 126 sort(s,m-1);127 flag=2;128 int order=1;129 /输出全部学生的信息 130 break; / 跳出分支结构131 case 7: /输入命令选择4*/132 133 cout*欢迎使用*endl;134 cout*再见*endl;135 break; /退出系统136 137 default : /输
34、入其他选择命令138 cout你输入的学号不存在!endl; /返回错信息139 140 141142 return 0;143 在上述代码中,17-49行使用了一个多分枝选择语句switchcase语句,该语句用于根据用户输入不同选择执行不同的程序模块,用于实现不同的功能。举一个例子,在case 1 语句中,print()函数打印所以排名,在case 2 中调用getAverage()函数统计出平均成绩等。此成绩管理系统中设置了三个标志位flag、flag1、result三个,起着开关的作用,便于删除后给学生成绩打印出来。为了更好的理解代码,下面给出其执行流程,如图1-11所示。 图1-11
35、6 系统的实现 6.1 输入学生记录的个数 启动此管理系统后,进入统计学生个数界面,如下图所示 6.2 输入学生记录的详细信息的实现输入学生个数后,这里举例为3个学生,依次输入第一个学生的详细记录,如下图所示依次输入 02 李四 68 75 82,05 王五 65 86 54 ,后出现如下界面6.3 打印学生记录的实现输入命令 1 后,6.4 查看学生平均成绩的实现选择命令 2 后的结果如下图所示, 6.5 查看具体学生的详细信息的实现选择命令 3 后的结果如下图所示,输入要查找的学生学号 02 ,如下图所示6.6 增加一个或多个学生记录的实现输入命令4,增加一个学的记录,在这里可以增加多个学生的记录,下面就增加一个记录演示,如下图所示 选择命令1,打印出增加的学生记录以及排名,如下图所示6.7 修改一个学生记录的实现增加的学生记录已经录入系统中,现在想修改一个学生的记录,输入命令5,假如修改李四的信息,02 李四 88 75 89,记录增进系统后,输入命令1,查看其排名及其信息,如下图所示6.8 修改一个学生记录的实现 在所有记录中想删掉任何一个学生的记录