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

下载本文档

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

文档简介

任务书题目:学生成绩管理系统设计内容及要求:1.课程设计任务内容设计一个简易的学生成绩管理系统,能够完成学生成绩的增加、删除、查找、修改、统计等操作,数据信息保存文件保存。要求系统具有菜单和提示,界面友好。2.课程设计要求实现学生成绩的管理和保存。开发环境:vc++6.0实现目标:熟悉的运用c语言程序编写代码。能够理清整个程序的运行过程并绘画流程图了解如何定义局部变量和整体变量;学会上机调试程序,发现问题,并解决学习使用C++程序来了解程序原理。学习用文档书写程序说明摘要管理信息系统正在向着网络化、智能化和集成化等趋势发展。学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。它对于一个学校是不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要。学生成绩管理管理系统为用户提供充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的迫切要求。本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化。达到提高学生成绩管理效率的目的。与传统管理方法相比有明显的优点:查找方便,可靠性高,保密性好,成本低。彻底改变了以前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管理。计算机被用到信息管理系统的环境正是适应了当今时代飞速发展的信息时代。人们深刻的认识到了计算机功能的强大,对于复杂的信息管理,计算机充分发挥着它的优越性。检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成绩。同时,学生管理系统的应用也为今天的教育在未来市场的竞争力有所提高。目录TOC\o"1-3"\h\u1.引言 52.课题分析 73.具体设计过程 83.1设计思路 83.2程序设计流程图 83.3.函数实现说明 104.程序运行结果 135.软件使用说明 146.结论 14参考文献 16附录:源代码 161.引言数据结构在计算机科学界至今没有标准的定义。个人根据各自的理解的不同而有不同的表述方法:SartajSahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象(dataobject)定义为“一个数据对象是实例或值的集合”。CliffordA.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是ADT(抽象数据类型AbstractDataType)的物理实现。”LobertL.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。数据结构具体指同一类数据元素中,各元素之间的相互关系,包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。1.1.重要意义一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。1.2.研究内容在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。“数据结构”作为一门独立的课程在国外是从1968年才开始设立的。1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:信息的表示,信息的处理。而信息的表示和组织又直接关系到处理信息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。数据的结构,直接影响算法的选择和效率。计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。数据元素是数据的基本单位,在计算机程序中通常作为一个整体考虑。一个数据元素由若干个数据项组成。数据项是数据的不可分割的最小单位。有两类数据元素:一类是不可分割的原子型数据元素,如:整数"5",字符"N"等;另一类是由多个款项构成的数据元素,其中每个款项被称为一个数据项。例如描述一个学生的信息的数据元素可由下列6个数据项组成。其中的出生日期又可以由三个数据项:"年"、"月"和"日"组成,则称"出生日期"为组合项,而其它不可分割的数据项为原子项。关键字指的是能识别一个或多个数据元素的数据项。若能起唯一识别作用,则称之为"主"关键字,否则称之为"次"关键字。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。在早期,计算机主要用于科学和工程计算,进入八十年代以后,计算机主要用于数据处理。据有关统计资料表明,现在计算机用于数据处理的时间比例达到80%以上,随着时间的推移和计算机应用的进一步普及,计算机用于数据处理的时间比例必将进一步增大。课题分析学生成绩管理系统主要提供成绩查询,方便管理的网上的信息查阅平台,学生可以通过该系统查阅与自己相关信息,查看留言、提交留言。教师可以通过成绩管理系统查阅学生成绩信息,教师信息,查看教师留言、学生留言、提交留言、留言的管理等相关操作。系统管理员可以实现以上的所有功能,还有对学生的添加、删除、修改、教师的添加、删除、修改,数据库的备份、数据库的还原等相关操作。根据开发要求,学生成绩管理系统主要应用于教育系统,完成对日常的教学、教务、教师以及学生的计算机化的管理。开发学生成绩管理系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。目前,学校工作繁杂、资料重多。目前,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的系统是很有必要的。具体设计过程3.1设计思路要完成学生成绩信息的增删改查及统计,首先设计一下内存中存放数据信息的格式。在本设计中采用动态内存空间分配的链表方法,该方法为一个结构分配内存空间。每一次分配一块空间可用来存放一个学生成绩的数据,可称之为一个结点。有多少个学生就应该有多少结点。总控模块管理有三种不同的信息的处理模块,即管理员模块、教师模块、学生模块,各模块的主要功能有:(1)系统管理员进入学生成绩管理的主要功能:实现管理员用户的添加、修改和删除,以及对教师添加、教师修改、教师删除、教师查询、学生添加、学生修改、学生删除、学生查询等基本功能,并且参与开设课程、选择课程的管理,安排教师的任课和学生的选课工作。(2)教师进入学生成绩管理系统的主要功能:各科教师登录系统后查询和修改个人信息,修改自己的账号密码,查询自己的授课课程,实现对选修了自己课程的学生的成绩进行查询、录入和修改,各科老师可以对自己学生选修课程结束后给予分数,同时可以对自己所带课程的成绩优秀人数、及格人数、不及格人数的分布信息进行查询。(3)学生进入学生成绩管理系统的主要功能:每个学生登录后可以查询和修改个人信息、修改自己的账号密码,以及自己所选任课老师的个人信息,同时在课程结束后可以查询在校期间各个时间段选修课程的成绩与学分,以及对单科成绩和总分的排名查询。3.2程序设计结构图学生成绩系统中学生的成绩信息按照学号的顺序进行存放。根据任务要求,下面将系统功能进行详细设计划分,功能结构图1如下:图13.3.函数实现说明在本实验中,使用链表存放学生成绩数据,设计一个功能类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);//从文件中加载学生成绩信息};4.程序运行结果图1为初始界面,当我们选择运行程序时,便会出现如下图的界面。根据上面文字的内容,我们可以了解系统的功能。并开始根据提示操作。如下图所示:图2为具体添加学生信息的操作:图3为修改学生成绩信息:图4为删除学生成绩信息:5.软件使用说明学生成绩管理系统包括九个模块:输入学生资料,输出学生资料,学生姓名按顺序排列,添加学生资料,按姓名查找,删除该学生资料,查找并显示学生资料,按姓名查找,修改该学生资料,从文件中读入数据,储存学生资料并退出系统。这九个模块既相互联系又相互独立。本系统根据学生成绩管理的需要,而建立一个学生成绩管理系统,以方便对成绩的各项管理操作。本系统能对成绩进行输入和输出;能按姓名对学生进行排序,并显示学生资料、成绩等,不过得以系统输入学生资料、成绩为前提;能添加学生成绩资料;能根据学生的姓名来查询该学生的成绩资料,并修改或是删除该学生信息;能够从文件中读取学生信息,并且添加到系统中;能把对系统所进行的操作进行保存,以及时更新系统中的数据。6.结论课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。我做的是黑白棋的课程设计,虽然是很简单的一个小的程序,但对我一个初学者来说却是一个很大的困难。更加是第一次做课程设计,所以第一天下午在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。特别是结构体,绘制棋盘的部分,几乎是一片空白,不知从何着手。不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了。不过毕竟是个新手,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。经过一波三折,终于开始正式编程。编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!参考文献[1]谭浩强.《C程序设计(第三版)》,清华大学出版社,2021.7[2]梁凤兰郑步芹《C++程序设计实践指导》,东南大学出版社,2021.12附录:源代码#include<iostream>#include<string>#include<fstream>usingnamespacestd;structSCORE//定义存放学生成绩信息的结点{intnum;//学号 stringname;//姓名 floatmath;//数学成绩 floatenglish;//英语成绩 floatcomputer;//就算计基础成绩 floatscoresum;//总成绩 structSCORE*next;//next为指向下一结点的指针};structSCORE*head;//指向链表头结点的指针intstudentSum=0;//学生总人数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);//从文件中加载学生成绩信息};structSCORE*record::InsertRecord(structSCORE*h){structSCORE*p1,*p2,*p3;//定义指针变量p1、p2、p3 p3=newSCORE;//创建新的学生成绩结点 cout<<"\n请输入学生学号:"; cin>>p3->num;//从键盘接收输入数赋值给结点的学号 cout<<"\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) { cout<<"\n抱歉,没有任何记录!\n"; return; } cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; while(h)//输出链表中每个结点的学生成绩信息 { cout<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h->english<<"\t"<<h->computer<<"\t"<<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)//没有找到符合要求的结点 { cout<<"\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<<"\n抱歉,没有任何记录!"; returnh; } p1=h;//将链表的头结点指针h赋值给指针p1 cout<<"\n请输入要修改记录的学生学号!"; cin>>num; while(p1!=NULL&&p1->num!=num)//查找结点的学号等于要修改学生学号的指针结点 { p1=p1->next;//将p1指针移到下一个结点 } if(p1==NULL)//没有找到符合要求的结点 { cout<<"\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*h,intx,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<<"\t"<<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<<"\t"<<h->computer<<"\t"<<h->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<<"\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)//找到并显示信息 { cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->math<<"\t"<<p1-> english<<"\t"<<p1->computer<<"\t"<<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) { cout<<"\n抱歉,表中没有该记录哦!"; return; } if(p1->name==name) { cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->math<<"\t"<<p1-> english<<"\t"<<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<<"没有数学成绩不及格学生"<<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计算机"<<endl; 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<<"\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<<"\n学号\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<<"\t"<<p->name<<"\t"<<p->math<<"\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<<"\t"<<p->math<<"\t"<<p-> english<<"\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,若该文件不存在,则创建score.dat文件 if(!ofile)//文件打开错误 { cout<<"\n数据文件打开错误没有将数据写入文件!\n"; return; } ofile<<"学号\t姓名\t数学\t英语\t计算机\t总分"; while(h) { ofile<<endl<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h-> english<<"\t"<<h->computer<<"\t"<<h->scoresum;//将当前结点的数据信息写入到文件中 p=h;h=h->next; deletep; } ofile.close();//关闭文件对象}structSCORE*record::LoadRecordFile(structSCORE*h){ ifstreamifile;//定义输入文件对象 ifile.open("score.dat",ios::in);//以读的方式打开文件score.dat structSCORE*p,*q; if(!ifile)//文件打开错误 { cout<<"\n数据文件不存在,加载不成功!\n"; returnNULL; } chars[50]; ifile.getline(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.close();//关闭文件对象 returnh;}voidSystemMenu(recordr)//系统菜单,及处理用户的选择{ intchoice; while(1) { cout<<"\n\t\t欢迎进入学生成绩管理系统!";//显示系统主菜单 cout<<"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"; cout<<"\n\t1、添加学生成绩信息"; cout<<"\n\t2、删除学生成绩信息"; cout<<"\n\t3、修改学生成绩信息"; cout<<"\n\t4、查询学生成绩信息"; cout<<"\n\t5、显示所有学生成绩信息"; cout<<"\n\t6、统计学生成绩信息"; cout<<"\n\t0、退出系统"; cout<<"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"; cout<<"\n请根据提示选择操作:"; cin>>choice; switch(choice) { case1://增加学生成绩信息 head=r.InsertRecord(head); break; case2://删除学生成绩信息 head=r.DeleteRecord(head); case3://修改学生成绩信息 head=r.UpdateRecord(head); case4://查询学生成绩信息 while(1) { intc; cout<<"\n************************************************"; cout<<"\n\t1.根据学号查询学生成绩信息"; cout<<"\n\t2.根据姓名查询学生成绩信息"; cout<<"\n\t3.根据数学分数查询学生成绩信息"; cout<<"\n\t4.根据英语成绩查询学生成绩信息"; cout<<"\n\t5.根据计算机基础成绩查询学生成绩信息"; cout<<"\n\t6.返回上级目录"; cout<<"\n************************************************"; //显示查询子菜单 cout<<"\n请根据提示选择操作:"; cin>>c; if(c==1)//根据学号查询学生成绩信息 { intx; cout<<"\n请输入需要查询的学生学号:"; cin>>x; r.FindRecord(head,x); } if(c==1)//根据学生学号查询学生成绩信息 { intx; cout<<"\n请输入需要查询的学生学号:"; cin>>x; r.FindRecord(head,x); } if(c==2)//根据学生姓名查询学生成绩信息 { stringname; cout<<"\n请输入需要查询的学生姓名:"; cin>>name; r.FindRecord(head,name); }if(c==3)//根据数学分数查询学生成绩信息 { floats1,s2; cout<<"\n请输入查询的数学最低分和最高分:"; cin>>s1>>s2; r.FindRecord(head,1,s1,s2); } if(c==4)//根据英语分数段查询学生成绩信息 { floats1,s2; cout<<"\n请输入查询的英语最低分和最高分:"; cin>>s1>>s2; r.FindRecord(head,2,s1,s2); } if(c==5)//根据学号查询学生成绩信息 { floats1,s2; cout<<"\n请输入查询的计算机基础最低分和最高分:"; cin>>s1>>s2; r.FindRecord(head,3,s1,s2); } if(c==6)//退出查询子菜单 break; } break; case5://输出所有学生成绩信息 r.PrintRecord(head); break; case6://统计学生成绩信息 while(1) { intc; cout<<"\n************************************************"; cout<<"\n\t1.统计数学成绩及格学生人数,并显示不及格学生信息"; cout<<"\n\t2.统计英语成绩及格学生人数,并显示不及格学生信息"; cout<<"\n\t3.统计计算机成绩及格学生人数,并显示不及格学生信息"; cout<<"\n\t4.统计三门功课都不及格的学生人数,并显示学生信息"; cout<<"\n\t5.统计三门功课都优秀的学生人数,并显示学生信息(>=90)"; cout<<"\n\t6.返回上级目录"; cout<<"\n************************************************"; //显示统计子菜单 cout<<"\n请根据提示选择操作:"; cin>>c; if(c==1)//统计数学成绩及学生格人数,并显示不及格学生信息 { r.StatisticRecord(head,1); } if(c==2)//统计英语成绩及学生格人数,并显示不及格学生信息 { r.StatisticRecord(head,2); } if(c==3)//统计计算机成绩及学生格人数,并显示不及格学生信息 { r.StatisticRecord(head,3); } if(c==4)//统计三门功课都不及格的学生人数,并显示学生信息 { r.StacRecordFine(head); } if(c==5)//统计三门功课都优秀的学生人数,并显示学生信息 { r.StacRecordDisq(head); } if(c==6)//退出统计子菜单 break; } break;}if(choice==0)//退出系统break;}}intmain(){ head=NULL; recordr;//定义record类的对象r head=r.LoadRecordFile(head);//将文件中的数据读取到链表中 SystemMenu(r);//显示系统菜单,并处理用户的选择 r.SaveRecordFile(head);//将链表中的数据写到文件中 return0;}姓名高峰班级15软件2学号20210305204课设题目学生成绩管理系统教师评语:教师签名:2021年1月13日

高考语文试卷一、语言文字运用(15分)1.在下面一段话的空缺处依次填入词语,最恰当的一组是(3分)提到桃花源,许多人会联想到瓦尔登湖。真实的瓦尔登湖,早已成为▲的观光胜地,梭罗的小木屋前也经常聚集着▲的游客,不复有隐居之地的气息。然而虚构的桃花源一直就在我们的心中,哪怕▲在人潮汹涌的现代城市,也可以获得心灵的宁静。A.名闻遐迩闻风而至杂居 B.名噪一时闻风而至栖居C.名噪一时纷至沓来杂居 D.名闻遐迩纷至沓来栖居2.在下面一段文字横线处填入语句,衔接最恰当的一项是(3分)在南方,芭蕉栽植容易,几乎四季常青。▲至于月映蕉影、雪压残叶,那更是诗人画家所向往的了。①它覆盖面积大,吸收热量大,叶子湿度大。②古人在走廊或书房边种上芭蕉,称为蕉廊、蕉房,饶有诗意。③因此蕉阴之下,是最舒适的小坐闲谈之处。④在旁边配上几竿竹,点上一块石,真像一幅元人的小景。⑤在夏日是清凉世界,在秋天是分绿上窗。⑥小雨乍到,点滴醒人;斜阳初过,青翠照眼。A.①③②④⑥⑤ B.①④②③⑥⑤C.②①④③⑤⑥ D.②③④①⑤⑥3.下列诗句与“悯农馆”里展示的劳动场景,对应全部正确的一项是(3分)①笑歌声里轻雷动,一夜连枷响到明②种密移疏绿毯平,行间清浅縠纹生③分畴翠浪走云阵,刺水绿针抽稻芽④阴阴阡陌桑麻暗,轧轧房栊机杼鸣A.①织布②插秧③车水④打稻 B.①织布②车水③插秧④打稻C.①打稻②插秧③车水④织布D.①打稻②车水③插秧④织布4.阅读下图,对VR(即“虚拟现实”)技术的解说不正确的是一项是(3分)A.VR技术能提供三个维度的体验:知觉体验、行为体验和精神体验。 B.现有的VR技术在精神体验上发展较快,而在知觉体验上发展较慢。C.VR技术的未来方向是知觉体验、行为体验和精神体验的均衡发展。D.期许的VR体验将极大提高行为体验的自由度和精神体验的满意度。二、文言文阅读(20分)阅读下面的文言文,完成5—8题。临川汤先生传邹迪光先生名显祖,字义仍,别号若士。豫章之临川人。生而颖异不群。体玉立,眉目朗秀。见者啧啧曰:“汤氏宁馨儿。”五岁能属对。试之即应,又试之又应,立课数对无难色。十三岁,就督学公试,补邑弟子员。每试必雄其曹偶。庚午举于乡,年犹弱冠耳。见者益复啧啧曰:“此儿汗血,可致千里,非仅仅蹀躞康庄也者。”丁丑会试,江陵公①属其私人啖以巍甲而不应。曰:“吾不敢从处女子失身也。”公虽一老孝廉乎,而名益鹊起,海内之人益以得望见汤先生为幸。至癸未举进士,而江陵物故矣。诸所为附薰炙者,骎且澌没矣。公乃自叹曰:“假令予以依附起,不以依附败乎?”而时相蒲州、苏州两公,其子皆中进士,皆公同门友也。意欲要之入幕,酬以馆选,而公率不应,亦如其所以拒江陵时者。以乐留都山川,乞得南太常博士。至则闭门距跃,绝不怀半刺津上。掷书万卷,作蠹鱼其中。每至丙夜,声琅琅不辍。家人笑之:“老博士何以书为?”曰:“吾读吾书,不问博士与不博士也。”寻以博士转南祠部郎。部虽无所事事,而公奉职毖慎,谓两政府进私人而塞言者路,抗疏论之,谪粤之徐闻尉。居久之,转遂昌令。又以矿税事多所蹠戾②,计偕之日,便向吏部堂告归。虽主爵留之,典选留之,御史大夫留之,而公浩然长往,神武之冠竟不可挽矣。居家,中丞惠文,郡国守令以下,干旄往往充斥巷左,而多不延接。即有时事,非公愤不及齿颊。人劝之请托,曰:“吾不能以面皮口舌博钱刀,为所不知后人计。”指床上书示之:“有此不贫矣。”公于书无所不读,而尤攻《文选》一书,到掩卷而诵,不讹只字。于诗若文无所不比拟,而尤精西京六朝青莲少陵氏。公又以其绪余为传奇,若《紫箫》、《还魂》诸剧,实驾元人而上。每谱一曲,令小史当歌,而自为之和,声振寥廓。识者谓神仙中人云。公与予约游具区灵岩虎丘诸山川,而不能办三月粮,逡巡中辍。然不自言贫,人亦不尽知公贫。公非自信其心者耶?予虽为之执鞭,所忻慕焉。(选自《汤显祖诗文集》附录,有删节)[注]①江陵公:指时相张居正,其为江陵人。②蹠戾:乖舛,谬误。5.对下列加点词的解释,不正确的一项是(3分)A.每试必雄其曹偶 雄:称雄B.酬以馆选 酬:应酬C.以乐留都山川 乐:喜爱D.为所不知后人计 计:考虑6.下列对原文有关内容的概括和分析,不正确的一项是(3分)A.汤显祖持身端洁,拒绝了时相张居正的利诱,海内士人都以结识他为荣幸。B.因为上书批评当权者徇私情、塞言路,汤显祖被贬官至广东,做了徐闻尉。C.汤显祖辞官回家后,当地官员争相与他交往,而汤显祖不为私事开口求人。D.汤显祖与邹迪光相约三月份到江南一带游玩,但没准备好粮食,因而作罢。7.把文中画线的句子翻译成现代汉语。(10分)(1)见者益复啧啧曰:“此儿汗血,可致千里,非仅仅蹀躞康庄也者。”(2)然不自言贫,人亦不尽知公贫。公非自信其心者耶?予虽为之执鞭,所忻慕焉。8.请简要概括汤显祖读书为文的特点。(4分)三、古诗词鉴赏(11分)阅读下面这首唐诗,完成9—10题。学诸进士作精卫衔石填海韩愈鸟有偿冤者,终年抱寸诚。口衔山石细,心望海波平。渺渺功难见,区区命已轻。人皆讥造次,我独赏专精。岂计休无日,惟应尽此生。何惭刺客传,不著报雠名。9.本读前六句是怎样运用对比手法勾勒精卫形象的?请简要分析。(6

温馨提示

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

评论

0/150

提交评论