数据结构课程设计 学生成绩管理系统_第1页
数据结构课程设计 学生成绩管理系统_第2页
数据结构课程设计 学生成绩管理系统_第3页
数据结构课程设计 学生成绩管理系统_第4页
数据结构课程设计 学生成绩管理系统_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务书

题目:学生成绩管理系统

设计内容及要求:

1.课程设计任务内容

设计一个简易的学生成绩管理系统,能够完成学生成绩的增加、删除、查找、

修改、统计等操作,数据信息保存文件保存。要求系统具有菜单和提示,界面友好.

20课程设计要求

实现学生成绩的管理和保存.

开辟环境:vc++6。0

实现目标:

(1)熟悉的运用c语言程序编写代码。

(2)能够理清整个程序的运行过程并绘画流程图

(3)了解如何定义局部变量和整体变量;

(4)学会上机调试程序,发现问题,并解决

(5)学习使用C++程序来了解程序原理。

(6)学习用文档书写程序说明

管理信息系统正在向着网络化、智能化和集成化等趋势发展.学

生成绩管理系统是为了更好的管理学生考试成绩而开辟的数据管理

软件。它对于一个学校是不可缺少的重要部份,它的内容对于学校的

决策者和管理者来说都至关重要.学生成绩管理管理系统为用户提供

充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删

除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的

迫切要求。

本系统开辟的总体任务是实现学生成绩管理的系统化、规范化、

自动化。达到提高学生成绩管理效率的目的。与传统管理方法相比有

明显的优点:查找方便,可靠性高,保密性好,成本低。彻底改变了以

前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管

理.

计算机被用到信息管理系统的环境正是适应了当今时代飞速发

展的信息时代。人们深刻的认识到了计算机功能的强大,对于复杂的

信息管理,计算机充分发挥着它的优越性.检索迅速、查找方便、可

靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减

轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率

和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成

绩。同时,学生管理系统的应用也为今天的教育在未来市场的竞争力

有所提高.

目录

1.引言............................................................3

2.课题分析........................................................6

3.具体设计过程................................错误!未定义书签。

3.1设计思路....................................................6

3.2程序设计流程图.............................................7

3.3.函数实现说明...............................................7

4.程序运行结果..................................................13

50软件使用说明...................................................14

6。结论...........................................................14

参考文献.......................................................16

附录源代码.......................................................16

1o引言

数据结构在计算机科学界至今没有标准的定义。个人根据各自的理解的不

同而有不同的表述方法:

SartajSahni在他的《数据结构、算法与应用》一书中称:数据结构是数据

对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些

联系可以通过定义相关的函数来给出。”他将数据对象(dataobject)定义为“一

个数据对象是实例或者值的集合“CliffordA.Shaffer在《数据结构与算法分析》

一书中的定义是:“数据结构是ADT(抽象数据类型AbstractDataType)的物

理实现。”

LobertL。Kruse在《数据结构与程序设计》一书中,将一个数据结构的

设计过程分成抽象层、数据结构层和实现层.其中,抽象层是指抽象数据类型层,

它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表

示和在计算机内的存储细节以及运算的实现.数据结构具体指同一类数据元素中,

各元素之间的相互关系,包括三个组成成份,数据的逻辑结构,数据的存储结构

和数据运算结构.

1.1O重要意义

普通认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的.对数据

元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的

存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据

结构必须同时讨论在该类数据上执行的运算才故意义。

在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因

素。许多大型系统的构造经验表明,系统实现的艰难程度和系统构造的质量都严

重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就

容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之

适应.不论哪种情况,选择合适的数据结构都是非常重要的。

选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因

素。这种洞见导致了许多种软件设计方法和程序设计语言的浮现,面向对象的

程序设计语言就是其中之一.

1o2.研究内容

在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的

操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些

运算后所得到的新结构仍然是原来的结构类型。

“数据结构”作为一门独立的课程在国外是从1968年才开始设立的。1968

年美国唐•欧•克努特教授开创了数据结构的最初体系,他所著的《计算机程序

设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储

结构及其操作的著作。“数据结构”在计算机科学中是一门综合性的专业基础课.

数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数

据结构这一门课的内容不仅是普通程序设计(特殊是非数值性程序设计)的基础,

而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基

础.

计算机是一门研究用计算机进行信息表示和处理的科学.这里面涉及到两

个问题:信息的表示,信息的处理.而信息的表示和组织又直接关系到处理信

息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多

系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写出一个“好”

的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结

构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理.在

大多数情况下,这些信息并非没有组织,信息(数据)之间往往具有重要的结

构关系,这就是数据结构的内容。数据的结构,直接影响算法的选择和效率。

计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问

题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法

(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学

模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的

关系,然后用数学的语言加以描述.计算机算法与数据的结构密切相关,算法无

不依附于具体的数据结构,数据结构直接关系到算法的选择和效率.运算是由计

算机来完成,这就要设计相应的插入、删除和修改的算法。也就是说,数据结构

还需要给出每种结构类型所定义的各种运算的算法。

数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机

中并由计算机程序处理的符号的总称。数据元素是数据的基本单位,在计算机程

序中通常作为一个整体考虑。一个数据元素由若干个数据项组成。数据项是数

据的不可分割的最小单位.有两类数据元素:一类是不可分割的原子型数据元素,

如:整数"5",字符“N”等;另一类是由多个款项构成的数据元素,其中每一个

款项被称为一个数据项。例如描述一个学生的信息的数据元素可由下列6个数

据项组成.其中的出生日期又可以由三个数据项:“年”、”月“和"日"组成,则称"

出生日期''为组合项,而其它不可分割的数据项为原子项。关键字指的是能识别

一个或者多个数据元素的数据项。若能起惟一识别作用,则称之为"主"关键字,

否则称之为“次'关键字。数据对象是性质相同的数据元素的集合,是数据的

一个子集.数据对象可以是有限的,也可以是无限的。

数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单

计算等的操作过程。在早期,计算机主要用于科学和工程计算,进入八十年代

以后,计算机主要用于数据处理。据有关统计资料表明,现在计算机用于数据处

理的时间比例达到80%以上,随着时间的推移和计算机应用的进一步普及,计

算机用于数据处理的时间比例势必进一步增大.

2.课题分析

学生成绩管理系统主要提供成绩查询,方便管理的网上的信息查阅平台,学

生可以通过该系统查阅与自己相关信息,查看留言、提交留言。教师可以通过

成绩管理系统查阅学生成绩信息,教师信息,查看教师留言、学生留言、提交留

言、留言的管理等相关操作。系统管理员可以实现以上的所有功能,还有对学

生的添加、删除、修改、教师的添加、删除、修改,数据库的备份、数据库的还

原等相关操作。根据开辟要求,学生成绩管理系统主要应用于教育系统,完成对

日常的教学、教务、教师以及学生的计算机化的管理。开辟学生成绩管理系统

可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信

息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家

各部门关于信息化的步伐,使各项管理更加规范化。目前,学校工作繁杂、资料

重多。目前,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来

说,目前还没有一套完整的、统一的系统。因此,开辟一套适和大众的、兼容性

好的系统是很有必要的。

3.具体设计过程

3.1设计思路

要完成学生成绩信息的增删改查及统计,首先设计一下内存中存放数据信息

的格式.在本设计中采用动态内存空间分配的链表方法,该方法为一个结构分配

内存空间.每一次分配一块空间可用来存放一个学生成绩的数据,可称之为一个

结点.有多少个学生就应该有多少结点.

总控模块管理有三种不同的信息的处理模块,即管理员模块、教师模块、学

生模块,各模块的主要功能有:

(1)系统管理员进入学生成绩管理的主要功能:实现管理员用户的添加、修改

和删除,以及对教师添加、教师修改、教师删除、教师查询、学生添加、学生修

改、学生删除、学生查询等基本功能,并且参预开设课程、选择课程的管理,安

排教师的任课和学生的选课工作。

(2)教师进入学生成绩管理系统的主要功能:各科教师登录系统后查询和修

改个人信息,修改自己的账号密码,查询自己的授课课程,实现对选修了自己课

程的学生的成绩进行查询、录入和修改,各科老师可以对自己学生选修课程结束

后赋予分数,同时可以对自己所带课程的成绩优秀人数、及格人数、不及格人数

的分布信息进行查询。

(3)学生进入学生成绩管理系统的主要功能:每一个学生登录后可以查询和

修改个人信息、修改自己的账号密码,以及自己所选任课老师的个人信息,同

时在课程结束后可以查询在校期间各个时间段选修课程的成绩与学分,以及对

单科成绩和总分的排名查询。

3o2程序设计结构图

学生成绩系统中学生的成绩信息按照学号的顺序进行存放。根据任

务要求,下面将系统功能进行详细设计划分,功能结构图1如下:

图1

3o3.函数实现说明

在本实验中,使用链表存放学生成绩数据,设计一个功能类record

来完成系统的各项功能.具体设计如下:

classrecord

(

public:

structSCORE*InsertRecord(structSCORE*h);〃增加学生成绩信

structSCORE*DeleteRecord(structSCORE*h);〃删除学生成绩

信息

structSCORE*UpdateRecord(structSCORE*h);〃修改学生成

绩信息

voidFindRecord(structSCORE*h,intx,floats1,floats2);〃根据某门

课程的分数段查询学生成绩信息

voidFindRecord(structSCORE*h,stringx);〃根据学生姓

名查询成绩信息

voidFindRecord(structSCORE*h,intx);//根据学生学号查询

成绩信息

voidStatisticRecord(structSCORE*h,intx);〃统计某门课程的及

格学生人数、及格率,并显示不及格学生信息

voidStacRecordFine(structSCORE*h);//统计三门课程

成绩全为优秀的学生人数,并显示全为优秀的学生信息

voidStacRecordDisq(structSCORE*h);〃统计三门课程成

绩全部不及格的学生人数,并显示全部不及格的学生信息

voidPrintRecord(structSCORE*h);〃输出所有学生成

绩信息

voidSaveRecordFile(structSCORE*h);〃保存学生成绩信

息到文件

structSCORE*LoadRecordFile(structSCORE*h);〃从文件中加

载学生成绩信息

),4o程序运行结果

图1为初始界面,当我们选择运行程序时,便会浮现如下图的界面。根据上面文字

的内容,我们可以了解系统的功能.并开始根据提示操作。如下图所示:

图2为具体添加学生信息的操作:

图3为修改学生成绩信息:

图4为删除学生成绩信息:

5o软件使用说明

学生成绩管理系统包括九个模块:输入学生资料,输出学生资料,学生姓名按

顺序罗列,添加学生资料,按姓名查找,删除该学生资料,查找并显示学生资料,

按姓名查找,修改该学生资料,从文件中读入数据,储存学生资料并退出系统。

这九个模块既相互联系又相互独立。本系统根据学生成绩管理的需要,而建立

一个学生成绩管理系统,以方便对成绩的各项管理操作.本系统能对成绩进行输

入和输出;能按姓名对学生进行排序,并显示学生资料、成绩等,无非得以系统

输入学生资料、成绩为前提;能添加学生成绩资料;能根据学生的姓名来查询该

学生的成绩资料,并修改或者是删除该学生信息;能够从文件中读取学生信息,

且添加到系统中;能把对系统所进行的操作进行保存,以及时更新系统中的数据.

6o结论

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,

锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程。随

着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因

此作为二十一世纪的大学来说掌握程序开辟技术是十分重要的,而C语言又是最

常见,功能最强大的一种高级语言,因此做好c语言课程设计是十分必要的.回

顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,

从理论到实践,在整整半个月的日子里,可以学到不少不少的东西,同时不仅可

以巩固了以前所学过的知识,而且学到了不少在书本上所没有学到过的知识。

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,惟独理论知

识是远远不够的,惟独把所学的理论知识与实践相结合起来,从理论中得出结论,

才干真正为社会服务,从而提高自己的实际动手能力和独立思量的能力.在设计

的过程中遇到问题,可以说得是艰难重重,这毕竟第一次做的,难免会遇到过各

种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的

知识理解得不够深刻,掌握得不够坚固,比如说结构体,指针,链表……通过这

次课程设计之后,我们把前面所学过的知识又重新温故了一遍。

我做的是黑白棋的课程设计,虽然是很简单的一个小的程序,但对我一个初

学者来说却是一个很大的艰难.更加是第一次做课程设计,所以第一天下午在机

房做了一个下午却丝毫没有发展,最主要是不知从何开始,这个时候才知道上课

老师们不厌其烦的教导是多么的珍贵,这个时候才懊悔上课的时候没有认真的听

讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。

特殊是结构体,绘制棋盘的部份,几乎是一片空白,不知从何着手.无非经

过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,

所以一下一步就是开始正式的编程序了.无非毕竟是个新手,还是不知如何下手,

于是就在网上下了一篇类似的程序,经过子细的研究,终于读懂了c语言编程的

基本过程和方法。经过一波三折,终于开始正式编程。

编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还

必须强破自己坚持下去,按照老师所说的模块化思想,分部份的进行编写.而且编

程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的

小的错误而导致整个程序的无法运行。所以认真子细就是非常重要的了.

开始的时候真的感觉编程是一件很无聊的事情,无非当一个程序运行成功的

时候那种欢跃是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终

于把程序完成为了,尽管程序还是有不少错误和漏洞,无非还是很高兴的.无论如

何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一

次实践作业,自己进步的证明.

通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它

要重在实践,要通过不断的上机操作才干更好地学习它,我也发现我的好多不足

之处,首先是自己在指法上还不行,时常按错字母,通过学习也有所改进;再有

对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还

有对C语言中时常浮现的错误也不了解,通过实践的学习,我认识到学好计算机

要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方

面的知识都要重在实践,所以后在学习过程中,我会更加凝视实践操作,使自己

便好地学好计算机。

在课程设计过程中,收获知识,提高能力的同时,我也学到了不少人生的哲

理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么

样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课

程设计的精神带到生活中,不畏艰难,勇往直前!

参考文献

[1]谭浩强.《C程序设计(第三版)》,清华大学出版社,2005o

7

[2]梁凤兰郑步芹《C++程序设计实践指导》,东南大学出版社,

2022o12

附录:源代码

#include<iostream)

#include<string)

#include<fstream>

usingnamespacestd;

structSCORE〃定义存放学生成绩信息的结点

{

intnum;〃学号

stringname;〃姓名

floatmath;〃数学成绩

floatenglish;〃英语成绩

floatcomputer;〃就算计基础成绩

floatscoresum;〃总成绩

structSCORE*next;//next为指向下一结点的指针

structSCORE*head;〃指向链表头结点的指针

intstudentSum=O;//学生总人数

classrecord

i

public:

structSCORE*lnsertRecord(structSCORE*h);〃增加学生成绩

信息

structSCORE*DeleteRecord(structSCORE*h);〃删除学生

成绩信息

structSCORE*UpdateRecord(structSCORE*h);//修改学生成

绩信息

voidFindRecord(structSCORE*h,intx,floats1,floats2);//根据某门课

程的分数段查询学生成绩信息

voidFindRecord(structSCORE*h,stringx);//根据学生姓

名查询成绩信息

voidFindRecord(structSCORE*h,intx);〃根据学生

学号查询成绩信息

voidStatisticRecord(structSCORE*h,intx);//统计某门课程

的及格学生人数、及格率,并显示不及格学生信息

voidStacRecordFine(structSCORE*h);〃统计三门课

程成绩全为优秀的学生人数,并显示全为优秀的学生信息

voidStacRecordDisq(structSCORE*h);〃统计三门课程成

绩全部不及格的学生人数,并显示全部不及格的学生信息

voidPrintRecord(structSCORE*h);〃输出所有学生

成绩信息

voidSaveRecordFile(structSCORE*h);//保存学生成

绩信息到文件

structSCORE女LoadRecordFile(structSCORE*h);//从文件中

加载学生成绩信息

);

structSCORE*record::lnsertRecord(structSCORE*h)

structSCORE*p1,*p2,*p3;//定义指针变量p1、p2、p3

p3=newSCORE;〃创建新的学生成绩结

八占、、

cout(Cn请输入学生学号:”;

cin»p3—)num;//从键盘接收输入数赋

值给结点的学号

cout〈v,n请输入学生姓名:";

cin)>p3->name;//从键盘接收输入数赋

值给结点的姓名

cout<<”\n请输入学生数学成绩:";

cin)>p3->math;〃从键盘接收输入数赋

值给结点的数学成绩

cout〈〈”\n请输入学生英语成绩:";

cin»p3—)english;〃从键盘接收输入数赋值

给结点的英语成绩

cout«”\n请输入学生的计算机基础成绩:";

cin)>p3—>computer;//从键盘接收输入数

赋值给结点的计算机成绩

p3—>scoresum=p3—)math+p3->english+p3—)computer;〃计算

结点的总成绩

p3—)next=NULL;〃将要插入结点的指针

域设置为空

if(h==NULL)〃当链表中没有结点时,

将要加入的结点作为头结点

(

h=p3;

returnh;

p1=p2=h;

while(p1!=NULL&&p3—)num>p1->num)〃查找结点的学号

大于要插入结点学号的第一个结点

//指针p1表示符合条件的结

点的指针,指针p2是指针p1的前一个结点指针

(

p2=p1;

p1=p1—>next;

)

if(p1==h)〃插入位置为头结点前

(

p3->next=p3;

h=p3;

returnh;

else〃插入位置为链表中间和

链表尾部

(

p2->next=p3;

p3->next=p1;

studentSum+=1;〃学生人数加1

returnh;〃返回链表的头结点

)

voidrecord:PrintRecord(SCORE*h)

(

if(h==NULL)

(

coutvc'W抱歉,没有任何记录!\n";

return;

)

cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"《endl;

while(h)〃输出链表中每一个结点

的学生成绩信息

cout«h—)num<\tM«h->name«'T<<h->mathvv'Y"<<h")

english<<"\t"(<h—>computer<"\f,<<h—)scoresum«endl;

h=h->next;

structSCORE*record::DeleteRecord(structSCORE*h)

structSCORE*p1,*p2;

intnum;

if(h==NULL)〃链表为空

(

cout〈〈”\n抱歉,没有任何记录!”;

returnh;

)

p1=p2=h;〃将链表的头结点指

针h赋值给指针p1和指针p2

cout«"\n请输入要删除记录的学生学号”;

cin))num;

while(p1!=NULL&&p1->num!=num)〃查找结点的学

号等于要删除学生学号的第一个结点

//指针p1表示符合条件

的结点的指针,指针p2是指针p1的前一个结点指针

p2=p1;

p1=p1->next;

if(p1=NULL)〃没有找到符合要

求的结点

(

coutv<"\n抱歉啊,表中没有该记录哦!”;

returnh;

if(p1—〉num==num)

{

studentSum-1;〃学生人数减1

if(p1==h)〃删除的是头结点

h=h—>next;

else〃删除的是非头结点

p2->next=p1—>next;

deletep1;//释放p1所指向的储存单

)

returnh;

structSCORE*record::UpdateRecord(structSCORE*h)

{

structSCORE*p1;

intnum;

if(h==NULL)〃链表为空

{

cout〈v"\n抱歉,没有任何记录!”;

returnh;

)

p1=h;〃将链表的头结点指

针h赋值给指针p1

cout〈<"\n请输入要修改记录的学生学号!”;

cin>)num;

while(p1!=NULL&&p1—)num!=num)〃查找结点的

学号等于要修改学生学号的指针结点

(

p1=p1—)next;//将p1指针移到下一

个结点

)

if(p1==NULL)〃没有找到符合要求

的结点

cout〈V”\n抱歉啊,表中没有该记录哦!”;

returnh;

)

if(p1—>num==num)〃找到符合要求的

结点,并修改学生的相关成绩

(

cout(〈”\n请重新输入学生的数学成绩:";

cin)〉p1—)math;

cout<<"\n请重新输入学生英语成绩:”;

cin»p1->english;

cout〈〈,n请重新输入学生的计算机基础成绩:

cin»p1—)computer;

p1->scoresum=p1-)math+p1—>english+p1—)computer;

}

returnh;

)

voidrecord::FindRecord(structSCORE*hjntx,floats1.floats2)

(

if(h==NULL)〃链表为空

(

cout(〈”\n抱歉,没有任何记录!

return;

)

cout«"\n学号\t姓名\t数学\t英语\t计算机\t总分"〈(endl;

while(h)

(

if(x==1)

//查找数学成绩在某分数段的学生成绩信息

if(h->math>=s1&&h->math<=s2)

cout<<h—>num<<"\tw(<h->name<<"\t"(<h—)math«"\t,,

(〈h-〉

english<〈"\t"〈<h->computer<〈"\t"<<h-〉scoresum«endl;

if(x==2)

//查找英语成绩在某分数段的学生成绩信息

if(h-)english>=s1&&h—)english<=s2)

cout«h->num〈<”\t"<(h->name<〈"\t”<(h—〉math<

"t”(<h->

english<〈h->computer«”scoresum((endl;

if(x==3)

〃查找计算机成绩在某分数段的学生成绩信息

if(h—)computer>=s1&&h—)english<=s2)

cout<〈h->num<<”\t"〈<h->name〈〈"\t”<(h—)

math«"\t,,<(h—)

english«'\t"<<h—)computer<"\t"«h-)scoresum

<<endl;

h=h->next;

)

)

voidrecord::FindRecord(structSCORE*h,intnum)〃根据学

生学号查找学生成绩信息

{

structSCORE*p1;

if(h==NULL)

〃链表为空

{

cout〈v”\n抱歉,没有任何记录!”;

return;

)

p1=h;

//将链表的头结点指针h赋值给指针p1

while(p1!=NULL&&p1->num!=num)

//查找节点的学号等于要查找学生学号的指针结点

(

p1=p1-〉next;

)

if(p1==NULL)

〃没有找到

(

cout<〈”\n抱歉,表中没有该记录哦!”;

return;

)

if(p1->num==num)

〃找到并显示信息

I

cout<〈”\n学号\t姓名\t数学\t英语\t计算机\t总分"vvendl;

cout<<p1—)num«"\t"<<p1—)name<(V<<p1—)math«,"\t"«p1

一>

englishvc"\t"<(p1->computer<(p1-)scoresum〈<endl;

)

)

voidrecord::FindRecord(structSCORE*h,stringname)//根据学

生姓名查找学生成绩信息

(

structSCORE*p1;

if(h==NULL)

〃链表为空

(

cout<("\n抱歉,没有任何记录";

return;

p1=h;

while(p1!=NULL&&p1->name!=name)

(

p1=p1-)next;

)

if(p1==NULL)

(

coutvc”\n抱歉,表中没有该记录哦!”;

return;

)

if(p1—)name==name)

(

cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分”<〈endl;

cout«p1—)num〈v"\t”〈vp1->namev<”\t"v<p1—)math(〈“\t"

(<p1->

english<('V«p1—>computer(〈“\t"«p1—)scoresum(<endl;

voidrecord::StatisticRecord(structSCORE*h,intx)

structSCORE*p=h;//将链表的头结

点指针h复制给指针p

intcount=0;〃定义统计人数

count变量并赋初始值为0

if(p==NULL)〃链表为空

cout(〈"\n抱歉,没有任何记录!

return;

while(p)

if(x==1)〃统计数学成绩及格

的学生人数

if(p-)math>=60)

count+=1;

if(x==2)//统计英语成绩及格

的学生人数

if(p-)english)=60)

count+=1;

if(x==3)〃统计计算机成绩及格

的学生人数

if(p—>computer)=60)

count+=1;

p=p—〉next;

)

if(x==1)//显示数学成绩

及格的学生人数及及格率

(

cout<〈”数学成绩及格学生人数为";

cout<(count;

cout<〈”,及格率为“;

cout(<count/(float)studentSum«endl;

if(count<studentSum)

cout<〈'n学号\t姓名\t数学"〈<endl;

else

cout<〈"没有数学成绩不及格学生"v(endl

)

else

if(x==2)〃显示英语成绩及格

的学生人数及及格率

(

cout<〈"英语绩及格学生人数为”;

cout((count;

cout<<",及格率为“;

cout«count/(float)studentSum«endl;

if(count<studentSum)

cout«"\n学号\t姓名\t英语”<〈endl;

else

cout〈<”没有英语成绩不及格的学生”<<endl;

)

else

if(x==3)〃显示计算机成绩及

格的学生人数及及格率

cout〈〈”计算机成绩及格的学生人数为";

cout«count;

cout<〈",及格率为“;

cout((count/(float)studentSum(<endl;

if(count<studentSum)

cout〈〈"\n学号\t姓名\t计算机“cvendl;

else

cout〈<”没有计算机成绩不及格的学生”〈〈endl;

)

P=h;

while(p)

if(x==1)

〃显示数学成绩不及格的学生信息

if(p->math<60)

cout<<p—)num(〈"\t"<<p—>name<〈"\t"(<p->

math«endl;

if(x==2)

//显示英语成绩不及格的学生信息

if(p—)english<60)

cout«p—>num(〈"\t"<(p->name<〈,t"

<<p->english«endl;

if(x==3)

〃显示计算机成绩不及格的学生信息

if(p—>computer(60)

cout(<p—)num〈C\t"(<p—>name(〈”\t"

«p—)computer<endl;

p=p->next;

voidrecord::StacRecordFine(structSCORE*h)

{

structSCORE*p=h;

//将链表的头结点指针h赋值给指针平p

intcount=0;

//定义统计人数count变量并赋初始值为0

if(p==NULL)

〃链表为空

(

cout〈<“\n抱歉,没有任何记录!

return;

)

while(p)

(

if(p—>math)=90&&p-〉english>=90&&p-)computer>=90)

〃统计三门成绩全部为优秀的学生人数

count+=1;

p=p—>next;//

将指针移到下一结点

)

cout〈〈"三门成绩全为优秀的学生人数为";

cout<(count<<endl;

cout<Cn学号\t姓名\t数学\t英语\t计算机\t总分”<(endl;

p=h;

//将链表的头结点指针h赋值给指针p

while(p)

if(p->math>=90&&p-)english)=90&&p—)computer)=90)//

显示三门成绩全部为优秀的学生信息

cout〈<p->num(<p—>name<\t"«p->math〈v"\t”<

<p->

english<〈"\t"〈<p->computer(\t"«p->scoresum<(endl;

p=p->next;

)

)

voidrecord::StacRecordDisq(structSCORE*h)

(

structSCORE*p=h;

//将链表的头结点指针h赋值给指针p

intcount=0;

//定义统计人数count变量并赋初值为0

if(p==NULL)

〃链表为空

{

cout(”n抱歉,没有任何记录!”;

return;

)

while(p)

(

if(p->math(60&&p->english〈60&&p—〉computer(60)

//统计三门成绩全部为不及格的学生人数

count+=1;

p=p->next;

)

cout(〈”三门成绩全部不及格的学生信息为";

cout«count«endl;

cout<〈"全为不及格的学生信息为:"«endl;

cout<〈”\n学号\t姓名\t数学\t英语\t计算机\t总分"〈(endl;

p=h;

while(p)

(

if(p—>math<60&&p->english<60&&p->computer<60)//

显示三门成绩全部为不及格的学生信息

cout〈〈p—〉num<〈”\t"«p—>name«>>\tv〈(p->math〈〈”

\t"(<p—>

english<(w\t"«p->computer〈<“\t"(<p—>scoresum<(endl;

p=p->next;

)

)

voidrecord::SaveRecordFile(structSCORE*h)

〃将链表中的数据写入文件

structSCORE*p;

ofstreamofile;

ofile。open("score。dat",ios::out);//

以写的方式打开文件score.dat,若该文件不存在,则创建score0dat文件

if(!ofile)//

文件打开错误

(

cout<〈”\n数据文件打开错误没有将数据写入文件!\n”;

return;

)

ofile〈<”学号\t姓名\t数学\t英语\t计算机\t总分";

while(h)

(

ofile<<endl(<h—)num«'\t"«h—>name(C\t"«h->math<<'\t"<<h

—>

english<〈"\t"<<h->computer〈〈“\t"«h")scoresum;//

将当前结点的数据信息写入到文件中

p=h;h=h—>next;

deletep;

)

ofileoclose();//

关闭文件对象

)

structSCORE*record::LoadRecordFile(structSCORE*h)

(

ifstreamifile;//

定义输入文件对象

ifile.open("score.datJos::in);〃以

读的方式打开文Ascore.dat

structSCORE*p,*q;

if(!ifile)//

文件打开错误

(

cout(〈'V数据文件不存在,加载不成功!\n";

returnNULL;

)

chars[50];

ifileogetline(s,50);//

读取文件指针当前行数据

while(!ifile.eof())

(

studentSum=studentSum+1;//

学生人数加1

p=newSCORE;

//创建新的score变量

ifile)〉p->num>>p—)name)>p->math)〉p-)

english>>p-〉computer»p->scoresum;//

将数据从文件中读取到新的结点中

p->next=NULL;//

新结点的指针域为空

if(h==NULL)//

将新结点插入到链表中

q=h=p;

else

(

q—>next=p;

q=p;

)

)

ifile.close0;//

关闭文件对象

returnh;

)

voidSystemMenu(recordr)//

系统菜单,及处理用户的选择

(

intchoice;

while(1)

{

cout〈〈”\n\t\t欢迎进入学生成绩管理系统!//

显示系统主菜单

coutv<"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@";

cout<("\n\t1,添加学生成绩信息";

cout<<"\n\t2,删除学生成绩信息";

cout(〈'、n\t3、修改学生成绩信息";

cout<〈”\n\t4、查询学生成绩信息”;

cout(〈”\n\t5、显示所有学生成绩信息”;

cout(〈'Vi\t6、统计学生成绩信息”;

cout«”\n\tO、退出系统";

cout〈〈”\n@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@";

cout<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论