《学生成绩管理系统论文加源代码数据结构与算法课设C语言.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统论文加源代码数据结构与算法课设C语言.doc(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学生成绩管理系统(论文加源代码)数据结构与算法课设(C语言)目 录引言 1 系统概述 1.1 系统功能 1.2 系统作用和特点 2 需求分析2.1 功能要求2.2 性能要求2.3 数据需求 2.4 开发环境 3 详细设计3.1 登陆界面与主界面的实现3.2 详细设计思想3.3 系统结构体的设计 3.3 各种模块的实现 4 所遇到的问题和分析4.1系统存在的不足4.2 制作过程中遇到的问题 4.4 问题分析5系统特色与关键技术 6结论与心得体会参考文献附录摘 要 随着计算机的普与,人们的生活和学习都离不开电脑,计算机是提高生产效率的主要工具与途径,所以教育也不例外。现在基本每个大学都有自己的学生
2、管理系统。学生成绩管理系统不仅把广大教师从繁重的成绩管理工作中解脱出来、把学校从传统的成绩管理模式中解放出来,而且对学生成绩的判断和整理更合理、更公正,同时也给教师提供了一个准确、清晰、轻松的成绩管理环境。本系统依据开发要求主要应用于教育系统,学生成绩管理系统借助于计算机强大的处理能力,大大减轻了管理人员的工作量,并提高了处理的准确性。学生成绩管理系统的开发运用,实现了学生成绩管理的自动化。主要完成对学生成绩的管理,包括添加、修改、删除,查询,查看信息以与保存入档等六个方面。每一个表的修改都将联动的影响其它的表,当完成添加或删除操作时系统会自动地完成学生成绩的修改。查询功能也是系统的核心之一,
3、在系统中主要根据学生和学号进行查询,其目的都是为了方便用户使用。系统有完整的添加、删除和修改功能,并具备成绩表查询功能。论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。本文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点说明了系统的设计思路、总体设计、各个功能模块的设计与实现。关键词:学生成绩;成绩管理信息系统;C语言引言 几年前,许多学校对于学生成绩的管理还是停留在运用手工操作,随着计算机的飞快发展以与各个学校的规模不断壮大,学生人数逐年增加。关于学生成绩管理工作所涉与的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生成绩管理。但人工管理又有着许多缺陷,比如:
4、效率底、易出错、检索信息慢、对学校的管理提供决策信息较为困难等。学校不能完全掌握每一个学生的学习情况,这样对学校的教学工作与其不利,使学校的教学质量一直停滞不前,所以我想借本次课程设计之际,开发一个适用于各校的通用高校学生成绩管理系统,使学校能够充分掌握学生的学习情况,便于学校教学工作的进行和改革。开发的目标建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效率和现代化水平。使学校对学生的成绩能够快速并准确的录入、修改和查询,更好地掌握每个学生的各科成绩,便于教师的管理。使学生对个人的学习成绩进行快速的查询。让老师能够更好、更快的了解学生的学习情况,使学校的教学质量进一步的提高
5、。本系统改变以往靠手工管理学生成绩的状况,可以树立良好的办学先锋,提高工作效率,节省人力和物力,在些高校建立了校园网,实现了办公自动化。1 系统概述1.1 系统功能 学生成绩管理系统主要以管理学生成绩信息为目的,。主要功能包括登录用户、成绩录入管理、查询管理、修改管理、删除管理、统计管理、成绩排名等。登录用户:老师可以进行各种操作,学生只能进行查询操作。成绩录入管理:每次考试结束,都可录入学生成绩信息。查询管理:包括查询成绩和基本信息。可以显示单独一条记录,也可以显示所有信息。修改管理:包括修改成绩和基本信息。删除管理:包括删除成绩和基本信息。统计管理:统计学生人数,优生率,不与格人数和平均成
6、绩。成绩排名:按成绩的高低顺序排列。1.2 系统作用和特点系统可以更快的使学生的成绩相加并且排名以与各种统计,这对老师来说是很好可以减少很多工作量,在多人多课考试时很有用,只要成绩出来,输入电脑就可以在几秒是成绩相加,并知道了某学生在学校排名,对老师来说,考完试自由的时间就增加了许多。功能强大,实用性很强,并且有较好的交互界面,方便用户使用,具有易操作性,覆盖面广。2需求分析2.1功能要求使用中文菜单,界面设计和用户输入输出要人性化些;将学生信息保存在文本文档中, 具有数据删除功能,能最终从文件中删除;排序功能,根据自己设计的数据结构,设计排序算法具有多种查询(如按学号查询、按查询、按成绩查询
7、等)与输出功能;其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平均分等)学生信息的修改(修改学生,修改学生某门课程的成绩)2.2 性能需求系统的高速性、稳定性、安全性。系统的体系结构能够方便使用功能,适应业务、办公的发展。系统人机界面友好,易学易用。系统维护成本较低。2.3 数据需求基本数据维护功能添加学生的信息。修改学生的信息。删除学生的信息。查询学生的信息。统计学生的信息。存读的成绩信息。学生C语言算法数据库性别数据库学号算法XXC语言学生数据结构登录用户账号权限密码 用户结构用户登录 学生成绩管理系统 学生用户 老师用户查询记录删除记录来成绩统计修改记录查询记
8、录统计记录存读记录成绩统计统计记录退出添加记录主菜单2.4 开发环境开发环境是用Visual C+ 6.0,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。它是一种可视化的编程工具,它基于windows操作系统。它有两种方式来建立应用程序,一种是通过VC6.0的可视化编程工具,另一种是通过visual c+6.0的代码编辑器,手工编写代码。本系统所用的语言是C语言,C语言是目前世界上流行、使用最广泛的高级程序设计语言。C语言对操作系统和系统使用程序以与需要对硬件进行操作的场合,用C语言
9、明显优于其它高级语言,许多大型应用软件都是用C语言编写的。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言3 详细设计3.1登陆界面与主界面的实现系统登录界面用了C选择控制语言。用于对进入系统的用户进行安全检查,阻止非法用户的进入。验证账号与密码,通过判断账号与密码是否符合申请的账号和密码,如果符合则允许登录,否则提示用户账号或密码不正确。本系统的登录界面:主界面:在主界面中包括“班级成绩添加班级成绩显示 班级成绩统计 班级成绩查询 班级成绩修改 班级成绩表 班级成绩存档 班级成绩读入 退出”等全部的功能,之所以设计这麽
10、一个主界面,一是因为能使用户对程序操作的流程更加清晰简明,二是保证了用户同时只能对一个文件进行操作系统的要求,保证了系统的正确性和易用性。3.2 详细设计思想3.2.1确定程序主要功能模块这个就比较简单了,主要是根据系统设计的说明与要求来设计,从而设计了九大功能模块,有文件操作,有系统维护功能,排序和统计功能,有输入输出等基本功能,比较人性化,添加了较多的提示语。这个程序的主要功能时输入学生的学号,学期和三科成绩来对其进行存储,在存储后可以对学生的成绩按学号与学期或与学期来进行查询,同时输出此同学的平均分与总分,之后可以对某个同学的成绩进行各种操作,例如修改,删除等,同时还可以对学生们的成绩按
11、照总分或单科成绩排序,在整个过程中所做的操作都会保存到student.txt文件中并显示。3.2.2确定语言算法由于之前都没有做过类似的设计,所以一时间不能够确定到底使用何种语言来设计本系统,所以在网上看了一些其他人设计的程序,链表的、数组的,各种各样的,也不知如何选择,但是仔细地看了其中的设计思想,最终还是用C和数组的来做,一是觉得本人对链表掌握的不是很熟练,那么在设计过程中容易产生不能理解的错误,耽误时间,二是想运用C,可以巩固一下所学的数据结构的知识,之前做实验的时候都没怎么用所学的知识,这时候想练练。就这样确定了整体的结构算法3.3 系统结构体的设计Student总分平均分C语言XX学
12、号算法性别数据库struct Student /结构体int term;/学期int num;/学号char name12;/float mark1;/成绩float mark2;float mark3;float sum;/总分float average;/平均分3.3 各种模块的实现Main()函数的设计用Mvoid main()来实现,主要是来显示主菜单,使用户选择操作。在main()函数中主要运用do-while循环语句和switch()-case选择判断语句来调用相关,选择各种功能模块。系统的运行是在一个永真的循环里进行的,只有在主界面并选择“退出”时,才会跳出永真循环,并退出程序。
13、3.3.1录入学生记录模块用函数int add_text(struct Student stud, int n) 来实现 主要功能用来对学生的记录进行添加。选择8,进入模块录入所需学生个数的学生信息,比如学号,成绩等。然后进入主菜单,根据主菜单来在此基础上进行操作。期间会有一些提示语,按此操作即可。本函数用到了文件操作的指针FILE *fp。3.3.2显示学生记录模块用函数void output_stu(struct Student stud, int n, int i)来实现 主要功能是用来显示学生的信息进行输出。在系统已经录入了学生资料的前提下,只用该功能可以显示学生的信息资料等等。同时也
14、会自动跳出主菜单进行后续操作。主要的程序代码就是从文件的读操作和界面显示操作。3.3.3添加学生资料模块用函数void input_num(struct Student stud, int n, int i) 来实现。主要功能是用来添加学生资料,成绩。若有重号则提示重新输入,就可以使用本模块来进行添加利用for循环进行输入新学生记录,输入完后,最后会有一个提示语句:是否继续输入 (yn),y是继续输入,n是返回主菜单否则将返回主菜单,本模块功能到此结束。在此期间会根据语句算出总分和平均分,并默认按学号排序保存到文件中去3.3.4 查询,删除,修改模块分别用三个函数来实现,删除箅修改模块是基于查
15、询模块上的,要先查询你要进行操作的容,然后再进行其它操作。 查询是用用函数int find_stu(struct Student stud, int n)来实现,它有两种方式,主菜单先5进入查询,会出现提示:请选择您要查询的方式:(1:按学号2:按名字;),用for和if语句,if (strcmp(studi.name, you_choice) != 0) 如果第i项与查找信息不匹配则查询失败,否则查询成功,调用显示函数,输出该学生信息,之后会出现提示:是否进行1:修改2:删除3:退出选项。修改是用函数void updata_stu(struct Student stud, int n, in
16、t y) 来实现的,修改也可以进行任选一门课进行修改,会有提示:请输入您要对哪一门成绩进行修改?( 0:数据库; 1:算法; 2:C语言) 之后输入该课程的成绩就可以了。 删除是用void delete_stu(struct Student stud, int n, int y)来实现的,选择了以后,还会有判断提示:确认您要进行删除吗?(y/n),y是确定,之后就会回到主菜单,n是不删除。退出是如果不进行任何操作后,返回到主菜单。3.3.5 统计模块谇功能是用void TJ_stu(struct Student stud, int n, int o) 来实现的。选3进入统计界面,首先有提示要统
17、计的学科,有123供你选择,选择了以后,就可以显示出该课程的成绩表,按从高到低的顺序排列,算法是用冒泡排序方法。以与各种统计,包括:平均成绩、与格率、优生率、不与格人数、优生人数。排序代码如下:for (i = 0; i n-1; i+) for(j = i+1; j studi.scoreo) temp = studi; studi = studj; studj = temp; 3.3.6 班级成绩表模块该模块是用void chenji_stu(struct Student stud, int n, int o) /函数实现,用到的算法是直接选择排序,是按总成绩从高到低排序的,显示是调用了显
18、示模块的函数,使得函数的结构大的简化了。主要程序如下:for (i = 0; i n-1; i+) k=i;for(j = i+1; j studi.score3) k=j; / score3)表示总成绩if(k!=i) temp = studi; studi = studk; studk = temp; 4 所遇到的问题和分析解决4.1系统存在的不足本学生成绩管理系统由九大模块组成,每个模块相互联系又相互独立。这个学生成绩管理系统存在着很多不足之处,由于自己本身编程能力的问题,这个系统可以实现的功能非常有限。只能实现学生管理系统最基本的功能,可以进行简单的输入、输出学生资料,查询和修改学生信
19、息,能直接从文件中读入数据,能对系统所作的修改、操作进行保存等。而且在每个模块也有不足的地方,比如在输入学生资料时,对每个信息项没有严格的规定,可以输入任何的字符。感觉应用围还是不容乐观。这有待以后努力,更详尽的实现模块的功能。4.2 制作过程中遇到的问题4.2.1 do-while语句的位置问题在查询学生记录此模块中,只能查询一次,若要进行多次查询的话就不行了,只能先到主菜单,再先查询选项,很是麻烦。不能实现原有的功能。所以要想清楚到底是哪里循环出问题,按照逻辑思路找到相应的语句正确添加就行了。 4.2.2 system(cls)的使用问题刚开始时对菜单的切换不是很了解,编写的程序运行的时候
20、是一竖行向下的,很影响使用者的视觉围,通过查询一些资料得知了system(cls)的作用,能够把一些暂时不用或不相关的信息通过清屏来处理。4.2.3存的分配问题对于初学者的话对存的分配和释放问题是比较抽象的和模糊的问题,在排序是之前就出现了交换数据困难的问题,以与存分配空间繁琐释放空间不与时的问题,造成空间的浪费,使得程序运行时效率较低,因此最后采用了顺序存储记录的方式,这就能改变前面所出现的问题。4.4 问题分析在自己动手写的时候才会发现有太多的问题,这些都是只有自已亲自去实践才会有的收获,例如在有些细节方面还是要特别注意啊,像分号的添加,是或还是与的的方向问题,函数的返回值等问题,虽然容易
21、改掉,但是很容易养成不好的习惯,而且还会浪费时间,所以在一开始写的时候就要很仔细,这样才能保证程序编的精细,同时若出现很多这样的错误的话,在编写程序的时候也会心里烦的,所以在编程的时候要认真仔细。就你在刚开始时对文件的操作不是很明白,一直不能很好的操作文件,直到快验收的时候,仍旧出现问题,就是对已经存在的文件读取问题,将数据从文件中读取,但是不能够正常的读出,最后把读文件的操作语句进行仔细检查后,发现语句的顺序有点问题,重新把fscanf()语句进行再修改后就发现能够正常的读取文件了。其余的就没什么比较大的问题了,基本上只要细心一点的话就可以正确调试成功了。5 系统特色与关键技术其实在本程序的
22、设计过程当中,没有很吸引人的关键技术,因为我的C语言学的很好,所以当初设计的时候就只是想把功能都实现就好了,尽可能的把所要求的功能都编进程序,这样就觉得很满足了。所以都是设计的比较简单易懂的语言,这样自己能够更明白一些,所以就没有时间去细细地去设计自己的程序。本程序要说有什么值得说的,那就只有人性化这点了,在设计成学的时候,因为自己怕弄混了,所以添加了很详尽的提示,这样在编程的过程中或调试的时候都能够比较快的运行。还有就是尽可能的应用了do-while语句和switch-case语句,这两个语句在之前不是很常用,所以在这个程序中试炼了一下,虽然在编写的过程中总是出错,但还是成功的用好了,也是程
23、序有条理一些。我也知道这些东西别人可能比我弄得还要好,但是我在我所学的知识中成功的应用了这些,我觉得就是好事,就是进步。6 结论与心得体会学生成绩管理系统终于成功的验收了,从这最后的测试结果来看,基本上实现了成绩管理系统的几大功能:成绩信息录入、成绩信息的管理。并达到操作过程中的直观、方便、实用、安全等要求。系统采用模块化程序设计的方法,既便于系统功能的组合和修改。本系统经过测试,证明其运行是稳定、可靠的。但在系统设计中也也遇到很多的问题,并且本系统的功能还需要不断的完善和改进,在以后空闲时间里逐一进行完善,使系统功能更加完善, 一周多的数据结构与算法课程设计虽然有些疲惫,但还是有很多的收获的
24、,像数据库的课设一样,我又一次巩固了所学到的知识,之前的学习只是停留在理论基础上,现在自己动手操作试验后,才是真正的理解与体会。编程也学了一年多了,有很多知识都是似懂非懂,通过平时上机操作,自己也了解了一些,但让我有了更深的理解和更好的认识,则是在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进步就很高兴。在课程设计之前,因为有以前实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输进去之后,并编译让其运行,发现通过不了,再来检查出问题,是很费费力的事情,因此分析和规划代码是很重要的,最重要的是要把逻辑结构写好,这样就不会出现大问题,写代码就
25、要先找出核心的容,用多种方法来实现核心部分,这样可以尽可能的避免发现逻辑或编译不支持的错误。 通过本次论文设计,我学会了怎样去借鉴别人的方法和经验,知道了如何整合资料和处理这些资料的能力,这位以后做毕设的论文打下了基础,使我感觉比较好的是有一种成功的喜悦,虽然在编译的时候会经常因为一些小的错误而心烦意乱,但是也不失为一件好事,失败的越多积累的经验越丰富,对人的考验也比较多,那么在最后编译成功时的喜悦就越浓烈,也是自己的能力有了进一步的提高。 参考文献1 谭浩强.C程序设计M.:清华大学, 20052 雁.数据结构 M.:高等教育,2004.3 黄梯云.管理信息系统. :经济科学, 20074
26、甘仞初.信息系统开发. :经济科学, 20095 严蔚敏. 数据结构(C语言版) M. :清华大学, 20086乃孝.算法与数据结构(C语言描述).:高等教育,2005.运行前需在功程里新建个ni.txt.容如下7004 sun 98.0 89.0 97.0 94.7 284.0005 li 98.0 48.0 78.0 74.7 224.0002 zhao 98.0 78.0 59.0 78.3 235.0006 zhou 89.0 97.0 86.0 90.7 272.0003 qian 78.0 98.0 89.0 88.3 265.0001 chen 59.0 60.0 98.0 68
27、.3 205.0007 wu 57.0 76.0 87.0 73.3 220.0代码# include /使程序包含头文件 # include /使程序包含头文件 # include /使程序包含头文件 # define SIZE 50 /定义常量SIZE来控制数组的长度 void input_num(struct Student stud, int n, int i); /声明学号输入函数 void input_name(struct Student stud, int n, int i); /声明输入函数 void input_score(struct Student stud, int
28、n, int i); /声明成绩输入函数 void output_stu(struct Student stud, int n, int i); /声明输出函数 void stat_stu(struct Student stud, int n, int o); /声明统计函数 float class_avr(struct Student stud, int n, int o); /声明排序函数 void chenji_stu(struct Student stud, int n, int o);void desc_stu(struct Student stud, int n, int o);
29、/声明降序函数 int find_stu(struct Student stud, int n); /声明查找函数 void delete_stu(struct Student stud, int n, int y); /声明删除函数 void amend_stu(struct Student stud, int n, int y); /声明修改函数 void write_text(struct Student stud, int n); /声明保存文件函数 int add_text(struct Student stud, int n); /声明读取文件函数 struct Student /
30、*声明结构体*/ char num10; char name20; float score5; ; void main() /*主函数,是程序的入口*/ struct Student stuSIZE; /定义一个结构数组 int count = 0; /定义整型变量count用来存放学生信息的个数,初始化为0 int choice; /定义choice用于存放用户对主菜单的选择 int a; /用于接收主选单中scanf()函数的返回值 char judge; /用于帮助判断输入的选择是否正确 int flag_main; /用于判断主菜单用户输入的选择是否有误 int stat_choice
31、 = 0; /定义stat_choice用于用户对统计项目的选择,初始化为0 int flag_stat; /用于接收scanf()函数的返回值 int flag_find; /定义flag_find用于接收查寻函数的返回值 char man_choice; /定义man_choice用于接收用户对是否进行修改删除的选择 int con_choice; /定义con_choice用于接收用户对修改或删除的选择 char sign_main; /定义sign_main接收用户对是否离开程序的选择 char sign_input; /定义sign_main接收用户对是否继续输入的选择 int i;
32、 /定义i,j作为控制循环的变量 while (1) /形成一个死循环 system(color 71); /设置输出显示颜色 /*输出主选菜单*/ printf(n=欢迎使用班级成绩管理系统=nn);printf(=请选择您要使用的功能=nn); printf(tt-n); printf(tttt 1:班级成绩录入 nn); printf(tttt 2:班级成绩显示 nn); printf(tttt 3:班级成绩统计 nn); printf(tttt 4:班级成绩查询 nn); printf(tttt 5:班级成绩修改 nn); printf(tttt 6:班级成绩表 nn); printf
33、(tttt 7:班级成绩存档 nn); printf(tttt 8:班级成绩读入 nn); printf(tttt 0:退出 nn); printf(tt-); printf(=); /*输入对菜单的选择*/ do flag_main = 0; printf(nttt 请您选择需要的操作(0-6):); fflush(stdin); a = scanf(%d%c, &choice, &judge); if (a2 | judge != n) printf(nttt 您的选择有误,请重新输入!n); flag_main-; while (flag_main 0); printf(nttt );
34、system(pause); /令屏幕暂停待输入任意键后恢复运行 system(cls); /清屏 system(color 71); /设置输出显示颜色 switch (choice) /把用户对主菜单的选择作为switch结构的判断条件 case (1): printf(ntt请录入学生信息:n); i=0; /循环前对i清零 do if (count+i = 50) break; input_num(stu, count, i); /输入学号 input_name(stu, count, i); /输入 input_score(stu, count, i); /录入成绩与总成绩平均成绩
35、i+; /每录入一个学员信息i加1 printf(ntt还需要继续录入吗?(Y/N); /*产生是否继续录入的条件*/ fflush(stdin); sign_input = getchar(); while(sign_input = y | sign_input= Y ); /判断 count=count+i; /计算出本次录入后总的已录入成员个数 printf(tt); break; case (2): /* printf(n显示班级成绩信息:n); printf(-);printf(学号tttt数据库t算法tC语言t总成绩t平均成绩); /*格式化输出提示信息*/printf( 学生信息
36、表n);*/printf( =nn);printf(n);printf(学号 数据库 算法 C语言总成绩 平均成绩 n);printf(n);for (i = 0; i count; i+) /*循环输出学员信息*/ output_stu(stu, count, i); /输出单个学员信息 printf(n);break; case (3): while (stat_choice != 4) /*循环统计直到用户选择退出结束*/ printf(tt0:数据库n);printf(tt1:算法n);printf(tt2:C语言n);printf(tt3:平均成绩n);printf(tt4:结束统计n);