1、任 务 书题目:学生成绩管理系统设计内容及要求:1.课程设计任务内容 设计一个简易学生成绩管理系统,能够完成学生成绩增加、删除、查找、修改、统计等操作,数据信息保留文件保留。要求系统含有菜单和提醒,界面友好。2.课程设计要求实现学生成绩管理和保留。开发环境:vc+6.0实现目标:(1) 熟悉利用c语言程序编写代码。(2) 能够理清整个程序运行过程并绘画步骤图(3) 了解怎样定义局部变量和整体变量;(4) 学会上机调试程序,发觉问题,并处理(5) 学习使用C+程序来了解程序原理。(6) 学习用文档书写程序说明摘 要管理信息系统正在向着网络化、智能化和集成化等趋势发展。学生成绩管理系统是为了愈加好
2、管理学生考试成绩而开发数据管理软件。它对于一个学校是不可缺乏关键部分,它内容对于学校决议者和管理者来说全部至关关键。学生成绩管理管理系统为用户提供充足信息和快捷查询手段,实现学生基础信息、成绩录入,删除,查询,维护和成绩统计分析等几方面功效,是现实问题迫切要求。本系统开发总体任务是实现学生成绩管理系统化、规范化、自动化。达成提升学生成绩管理效率目标。和传统管理方法相比有显著优点:查找方便,可靠性高,保密性好,成本低。根本改变了以前繁杂管理模式,实现全方面、相对集中、职能化信息综合管理。计算机被用到信息管理系统环境正是适应了当今时代飞速发展信息时代。大家深刻认识到了计算机功效强大,对于复杂信息管
3、理,计算机充足发挥着它优越性。检索快速、查找方便、可靠性高、存放量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员工作量,缩小开支,提升了学生档案管理效率和正确性,能够合理安排时间,学生能够立即知道自己考试成绩。同时,学生管理系统应用也为今天教育在未来市场竞争力有所提升。 目 录1.引 言52.课题分析73.具体设计过程83.1设计思绪83.2程序设计步骤图83.3.函数实现说明104.程序运行结果135.软件使用说明146.结论14参 考 文 献16附录:源代码161.引 言数据结构在计算机科学界至今没有标准定义。个人依据各自了解不一样而有不一样表述方法:Sartaj Sahn
4、i在她数据结构、算法和应用一书中称:“数据结构是数据对象,和存在于该对象实例和组成实 例数据元素之间多种联络。这些联络能够经过定义相关函数来给出。”她将数据对象(data object)定义为“一个数据对象是实例或值集合”。Clifford A.Shaffer在数据结构和算法分析一书中定义是:“数据结构是 ADT(抽象数据类型Abstract Data Type) 物理实现。” Lobert L.Kruse在数据结构和程序设计一书中,将一个数据结构设计过程分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据逻辑结构及其运算,数据结构层和实现层讨论一个数据结构表示和在计算机
5、内存放细节和运算实现。数据结构具体指同一类数据元素中,各元素之间相互关系,包含三个组成成份,数据逻辑结构,数据存放结构和数据运算结构。 1.1. 关键意义通常认为,一个数据结构是由数据元素依据某种逻辑联络组织起来。对数据元素间逻辑关系描述称为数据逻辑结构;数据必需在计算机内存放,数据存放结构是数据结构实现形式,是其在计算机内表示;另外讨论一个数据结构必需同时讨论在该类数据上实施运算才有意义。 在很多类型程序设计中,数据结构选择是一个基础设计考虑原因。很多大型系统结构经验表明,系统实现困难程度和系统结构质量全部严重依靠于是否选择了最优数据结构。很多时候,确定了数据结构后,算法就轻易得到了。有些时
6、候事情也会反过来,我们依据特定算法来选择数据结构和之适应。不管哪种情况,选择适宜数据结构全部是很关键。 选择了数据结构,算法也随之确定,是数据而不是算法是系统结构关键原因。这种洞见造成了很多个软件设计方法和程序设计语言出现,面向对象程序设计语言就是其中之一。 1.2. 研究内容在计算机科学中,数据结构是一门研究非数值计算程序设计问题中计算机操作对象(数据元素)和它们之间关系和运算等学科,而且确保经过这些运算后所得到新结构仍然是原来结构类型。 “数据结构”作为一门独立课程在国外是从1968年才开始设置。 1968年美国唐欧克努特教授开创了数据结构最初体系,她所著计算机程序设计技巧第一卷基础算法是
7、第一本较系统地叙述数据逻辑结构和存放结构及其操作著作。“数据结构”在计算机科学中是一门综合性专业基础课。数据结构是介于数学、计算机硬件和计算机软件三者之间一门关键课程。数据结构这一门课内容不仅是通常程序设计(尤其是非数值性程序设计)基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序关键基础。 计算机是一门研究用计算机进行信息表示和处理科学。这里面包含到两个问题:信息表示,信息处理 。 而信息表示和组织又直接关系四处理信息程序效率。伴随计算机普及,信息量增加,信息范围拓宽,使很多系统程序和应用程序规模很大,结构又相当复杂。所以,为了编写出一个“好”程序,必需分析待处理对象特征及各
8、对象之间存在关系,这就是数据结构这门课所要研究问题。众所周知,计算机程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往含相关键结构关系,这就是数据结构内容。数据结构,直接影响算法选择和效率。 计算机处理一个具体问题时,大致需要经过下列多个步骤:首先要从具体问题中抽象出一个合适数学模型,然后设计一个解此数学模型算法(Algorithm),最终编出程序、进行测试、调整直至得到最终解答。寻求数学模型实质是分析问题,从中提取操作对象,并找出这些操作对象之间含相关系,然后用数学语言加以描述。计算机算法和数据结构亲密相关,算法无不依附于具体数据结构,数据结构直接关系到算
9、法选择和效率。运算是由计算机来完成,这就要设计对应插入、删除和修改算法 。也就是说,数据结构还需要给出每种结构类型所定义多种运算算法。 数据是对客观事物符号表示,在计算机科学中是指全部能输入到计算机中并由计算机程序处理符号总称。 数据元素是数据基础单位,在计算机程序中通常作为一个整体考虑。一个数据元素由若干个数据项组成。数据项是数据不可分割最小单位。有两类数据元素:一类是不可分割原子型数据元素,如:整数5,字符 N 等;另一类是由多个款项组成数据元素,其中每个款项被称为一个数据项。比如描述一个学生信息数据元素可由下列6个数据项组成。其中出生日期又能够由三个数据项:年、月和日组成,则称出生日期为
10、组合项,而其它不可分割数据项为原子项。关键字指是能识别一个或多个数据元素数据项。若能起唯一识别作用,则称之为 主 关键字,不然称之为 次 关键字。数据对象是性质相同数据元素集合,是数据一个子集。数据对象能够是有限,也能够是无限。 数据处理是指对数据进行查找、插入、删除、合并、排序、统计和简单计算等操作过程。在早期,计算机关键用于科学和工程计算,进入八十年代以后,计算机关键用于数据处理。据相关统计资料表明,现在计算机用于数据处理时间百分比达成80%以上,伴随时间推移和计算机应用深入普及,计算机用于数据处理时间百分比必将深入增大。2. 课题分析 学生成绩管理系统关键提供成绩查询,方便管理网上信息查
11、阅平台,学生能够经过该系统 查阅和自己相关信息,查看留言、提交留言。老师能够经过成绩管理系统查阅学生成绩信息,老师信 息,查看老师留言、学生留言、提交留言、留言管理等相关操作。系统管理员能够实现以上全部 功效,还有对学生添加、删除、修改、老师添加、删除、修改,数据库备份、数据库还原等 相关操作。 依据开发要求,学生成绩管理系统关键应用于教育系统,完成对日常教学、教务、老师和学 生计算机化管理。开发学生成绩管理系统可使学院教职职员减轻工作压力,比较系统地对教务、 教学上各项服务和信息进行管理,同时,能够降低劳动力使用,加紧查询速度、加强管理,和 国家各部门相关信息化步伐,使各项管理愈加规范化。现
12、在,学校工作繁杂、资料重多。现在,管 理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,现在还没有一套完整、统一系统。所以,开发一套适和大众、兼容性好系统是很有必需。3. 具体设计过程3.1设计思绪 要完成学生成绩信息增删改查及统计,首先设计一下内存中存放数据信息格式。在本设计中采取动态内存空间分配链表方法,该方法为一个结构分配内存空间。每一次分配一块空间可用来存放一个学生成绩数据,可称之为一个结点。有多少个学生就应该有多少结点。总控模块管理有三种不一样信息处理模块,即管理员模块、老师模块、学生模块,各模块关键功效有:(1)系统管理员进入学生成绩管理关键功效:实现管理员用户添加、修改和
13、删除,和对老师添加、老师修改、老师删除、老师查询、学生添加、学生修改、学生删除、学生查询等基础功效,而且参与开设课程、选择课程管理,安排老师任课和学生选课工作。(2)老师进入学生成绩管理系统关键功效:各科老师登录系统后查询和修改个人信息,修改自己账号密码,查询自己讲课课程,实现对选修了自己课程学生成绩进行查询、录入和修改,各科老师能够对自己学生选修课程结束后给分数,同时能够对自己所带课程成绩优异人数、及格人数、不及格人数分布信息进行查询。(3)学生进入学生成绩管理系统关键功效:每个学生登录后能够查询和修改个人信息、修改自己账号密码,和自己所选任课老师个人信息,同时在课程结束后能够查询在校期间各
14、个时间段选修课程成绩和学分,和对单科成绩和总分排名查询。3.2程序设计结构图 学生成绩系统中学生成绩信息根据学号次序进行存放。依据任务要求,下面将系统功效进行具体设计划分,功效结构图1以下: 图13.3.函数实现说明 在本试验中,使用链表存放学生成绩数据,设计一个功效类record来完成系统各项功效。具体设计以下:class recordpublic: struct SCORE * InsertRecord(struct SCORE * h); /增加学生成绩信息struct SCORE * DeleteRecord(struct SCORE * h); /删除学生成绩信息struct SCO
15、RE * UpdateRecord(struct SCORE * h); /修改学生成绩信息 void FindRecord(struct SCORE * h,int x,float s1,float s2); /依据某门课程分数段查询学生成绩信息void FindRecord(struct SCORE * h,string x); /依据学生姓名查询成绩信息void FindRecord(struct SCORE * h,int x); /依据学生学号查询成绩信息void StatisticRecord(struct SCORE * h,int x); /统计某门课程及格学生人数、及格率,并
16、显示不及格学生信息void StacRecordFine(struct SCORE * h); /统计三门课程成绩全为优异学生人数,并显示全为优异学生信息 void StacRecordDisq(struct SCORE * h); /统计三门课程成绩全部不及格学生人数,并显示全部不及格学生信息void PrintRecord(struct SCORE * h); /输出全部学生成绩信息void SaveRecordFile(struct SCORE * h); /保留学生成绩信息到文件struct SCORE * LoadRecordFile(struct SCORE * h); /从文件中
17、加载学生成绩信息;4.程序运行结果图1为初始界面,当我们选择运行程序时,便会出现以下图界面。依据上面文字内容,我们能够了解系统功效。并开始依据提醒操作。以下图所表示:图2为具体添加学生信息操作:图3为修改学生成绩信息:图4为删除学生成绩信息:5.软件使用说明学生成绩管理系统包含九个模块:输入学生资料,输出学生资料,学生姓名按顺 序排列,添加学生资料,按姓名查找,删除该学生资料,查找并显示学生资料,按姓名 查找,修改该学生资料,从文件中读入数据,储存学生资料并退出系统。这九个模块既 相互联络又相互独立。 本系统依据学生成绩管理需要,而建立一个学生成绩管理系统,以方便对成绩 各项管理操作。本系统能
18、对成绩进行输入和输出;能按姓名对学生进行排序,并显示学生资料、成绩等,不过得以系统输入学生资料、成绩为前提;能添加学生成绩资料;能依据学生姓名来查询该学生成绩资料,并修改或是删除该学生信息;能够从文件中读取学生信息,而且添加到系统中;能把对系统所进行操作进行保留,以立即更新系统中数据。6.结论课程设计是培养学生综合利用所学知识 ,发觉,提出,分析和处理实际问题,锻炼实践能力关键步骤,是对我们实际工作能力具体训练和考察过程.伴随科学技术发展日新月异,当今计算机应用在生活中能够说得是无处不在。所以作为二十一世纪大学来说掌握程序开发技术是十分关键,而C语言又是最常见,功效最强大一个高级语言,所以做好
19、C语言课程设计是十分必需。回顾起此次课程设计,至今我们仍感慨颇多,确实,自从拿到题目到完成整个编程,从理论到实践,在整整半个月日子里,能够学到很多很多东西,同时不仅能够巩固了以前所学过知识,而且学到了很多在书本上所没有学到过知识。经过这次课程设计使我们知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。在设计过程中碰到问题,能够说得是困难重重,这毕竟第一次做,难免会碰到过多种多样问题,同时在设计过程中发觉了自己不足之处,对部分前面学过知识了解得不够深刻,掌握得不够牢靠,比如说结
20、构体,指针,链表经过这次课程设计以后,我们把前面所学过知识又重新温故了一遍。我做是黑白棋课程设计,即使是很简单一个小程序,但对我一个初学者来说却是一个很大困难。愈加是第一次做课程设计,所以第一天下午在机房做了一个下午却丝毫没有进展,最关键是不知从何开始,这个时候才知道上课老师们不厌其烦教导是多么宝贵,这个时候才后悔上课时候没有认真听讲。可是现在一切全部晚了,还好时间还算是充裕,只好拿出书本重新复习一下。尤其是结构体,绘制棋盘部分,几乎是一片空白,不知从何着手。不过经过几天努力,大致上把书本上知识点看了一遍,知识点也全部基础是撑握了,所以一下一步就是开始正式编程序了。不过毕竟是个新手,还是不知怎
21、样下手,于是就在网上下了一篇类似程序,经过仔细研究,最终读懂了C语言编程基础过程和方法。经过一波三折,最终开始正式编程。编程是一件很枯燥很无聊事情,不过出于完成作业,得到学分压力,还必需强破自己坚持下去,根据老师所说模块化思想,分部分进行编写。而且编程是一件高精度、模范化事情,稍有疏乎全部会影响全局,也可能因为某一处小错误而造成整个程序无法运行。所以认真仔细就是很关键了。开始时候真感觉编程是一件很无聊事情,不过当一个程序运行成功时候那种喜悦是无法言语,那种成就感是无法比拟。又经过几天努力,最终把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很快乐。不管怎样是自己劳动结果,是自己经过努力得到
22、成绩,同时也是学习C语言一次实践作业,自己进步证实。经过这次课程设计,使我对C语言有了更深入认识和了解,要想学好它要重在实践,要经过不停上机操作才能愈加好地学习它,我也发觉我好多不足之处,首先是自己在指法上还不行,常常按错字母,经过学习也有所改善;再有对C语言部分标准库函数不太了解,还有对函数调用正确使用不够熟悉,还有对C语言中常常出现错误也不了解,经过实践学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它语言,和其它计算机方面知识全部要重在实践,因以后在学习过程中,我会愈加注视实践操作,使自己便好地学好计算机。 在课程设计过程中,收获知识,提升能力同时,我也学到了大家生哲理
23、,知道怎么样去制订计划,怎么样去实现这个计划,并掌握了在实施过程中怎么样去克服心理上不良情绪。所以在以后生活和学习过程中,我一定会把课程设计精神带到生活中,不畏艰苦,勇往直前!参 考 文 献1 谭浩强.C程序设计(第三版),清华大学出版社,.72 梁凤兰 郑步芹 C+程序设计实践指导,东南大学出版社,.12附录:源代码# include # include # include using namespace std;struct SCORE /定义存放学生成绩信息结点 int num; /学号string name; /姓名float math; /数学成绩float english; /英语
24、成绩float computer; /就算计基础成绩float scoresum; /总成绩struct SCORE * next; /next为指向下一结点指针;struct SCORE * head; /指向链表头结点指针int studentSum=0; /学生总人数class recordpublic: struct SCORE * InsertRecord(struct SCORE * h); /增加学生成绩信息struct SCORE * DeleteRecord(struct SCORE * h); /删除学生成绩信息struct SCORE * UpdateRecord(str
25、uct SCORE * h); /修改学生成绩信息 void FindRecord(struct SCORE * h,int x,float s1,float s2); /依据某门课程分数段查询学生成绩信息void FindRecord(struct SCORE * h,string x); /依据学生姓名查询成绩信息void FindRecord(struct SCORE * h,int x); /依据学生学号查询成绩信息void StatisticRecord(struct SCORE * h,int x); /统计某门课程及格学生人数、及格率,并显示不及格学生信息void StacRec
26、ordFine(struct SCORE * h); /统计三门课程成绩全为优异学生人数,并显示全为优异学生信息 void StacRecordDisq(struct SCORE * h); /统计三门课程成绩全部不及格学生人数,并显示全部不及格学生信息void PrintRecord(struct SCORE * h); /输出全部学生成绩信息void SaveRecordFile(struct SCORE * h); /保留学生成绩信息到文件struct SCORE * LoadRecordFile(struct SCORE * h); /从文件中加载学生成绩信息;struct SCORE
27、 * record:InsertRecord(struct SCORE * h) struct SCORE * p1,*p2,*p3; /定义指针变量p1、p2、p3p3=new SCORE; /创建新学生成绩结点coutp3-num; /从键盘接收输入数赋值给结点学号coutp3-name; /从键盘接收输入数赋值给结点姓名coutp3-math; /从键盘接收输入数赋值给结点数学成绩coutp3-english; /从键盘接收输入数赋值给结点英语成绩coutp3-computer; /从键盘接收输入数赋值给结点计算机成绩p3-scoresum=p3-math+p3-english+p3-c
28、omputer; /计算结点总成绩p3-next=NULL; /将要插入结点指针域设置为空if(h=NULL) /当链表中没有结点时,将要加入结点作为头结点 h=p3;return h;p1=p2=h;while(p1!=NULL&p3-nump1-num) /查找结点学号大于要插入结点学号第一个结点 /指针p1表示符合条件结点指针,指针p2是指针p1前一个结点指针p2=p1;p1=p1-next; if(p1=h) /插入位置为头结点前p3-next=p3;h=p3;return h;else /插入位置为链表中间和链表尾部p2-next=p3;p3-next=p1;studentSum+=
29、1; /学生人数加1return h; /返回链表头结点void record:PrintRecord(SCORE * h) if(h=NULL)coutn抱歉,没有任何统计!n;return;coutn学号t姓名t数学t英语t计算机t总分endl;while(h) /输出链表中每个结点学生成绩信息coutnumtnametmathtenglishtcomputertscoresumnext;struct SCORE * record:DeleteRecord(struct SCORE * h) struct SCORE * p1,* p2;int num;if(h=NULL) /链表为空co
30、utn抱歉,没有任何统计!;return h;p1=p2=h; /将链表头结点指针h赋值给指针p1和指针p2coutnum;while(p1!=NULL&p1-num!=num) /查找结点学号等于要删除学生学号第一个结点 /指针p1表示符合条件结点指针,指针p2是指针p1前一个结点指针p2=p1;p1=p1-next;if(p1=NULL) /没有找到符合要求结点coutnum=num)studentSum-=1; /学生人数减1 if(p1=h) /删除是头结点h=h-next ;else /删除是非头结点p2-next=p1-next;delete p1; /释放p1 所指向储存单元re
31、turn h; struct SCORE * record:UpdateRecord(struct SCORE *h ) struct SCORE * p1;int num;if(h=NULL) /链表为空 coutn抱歉,没有任何统计!;return h;p1=h; /将链表头结点指针h赋值给指针p1coutnum;while(p1!=NULL&p1-num!=num) /查找结点学号等于要修改学生学号指针结点p1=p1-next; /将p1指针移到下一个结点if(p1=NULL) /没有找到符合要求结点coutnum=num) /找到符合要求结点,并修改学生相关成绩coutp1-math
32、;coutp1-english ;coutp1-computer;p1-scoresum=p1-math+p1-english+p1-computer;return h;void record:FindRecord(struct SCORE * h,int x,float s1,float s2) if(h=NULL) /链表为空coutn抱歉,没有任何统计!;return;cout n学号t姓名t数学t英语t计算机t总分math=s1&h-math=s2)coutnumtnametmathtenglishtcomputertscoresumenglish=s1&h-english=s2)co
33、utnumtnametmathtenglishtcomputertscoresum computer=s1&h-english=s2)coutnumtnametmathtenglishtcomputertscoresum next;void record:FindRecord(struct SCORE * h,int num) /依据学生学号查找学生成绩信息 struct SCORE * p1;if(h=NULL) /链表为空coutnum!=num) /查找节点学号等于要查找学生学号指针结点 p1=p1-next;if(p1=NULL) /没有找到coutnum=num) /找到并显示信息c
34、outn学号t姓名t数学t英语t计算机t总分endl;coutnumtnametmathtenglishtcomputertscoresumendl;void record:FindRecord(struct SCORE * h,string name) /依据学生姓名查找学生成绩信息 struct SCORE * p1;if(h=NULL) /链表为空coutname!=name)p1=p1-next;if(p1=NULL)coutname=name)coutn学号t姓名t数学t英语t计算机t总分endl;coutnumtnametmathtenglishtcomputertscoresumendl;void record:StatisticRecord(struct SCORE*h,int x)struct SCORE*p=h; /将链表头结点指针h复制给指针pint count=0; /定义统计人数count变量并赋初始值为0if(p=NULL) /链表为空coutmath=60)count+=1;if(x=2) /统计英语成绩及格学生人数if(p-english=60)count+=1;if(x=3)