1、二、实验内容现有学生成绩信息,内容如下姓名学号语文数学英语政治张明明01 67 78 82 90李成友02 78 91 88 80张辉灿03 68 82 56 87王露04 56 45 77 67陈东明05 67 38 47 70.请用C编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:(一)功能要求:(1)信息维护:要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息(2)信息查询:查询时可实现按姓名查询、按学号查询(3)成绩统计:A输入任意的一个课程名(如数学)和一个分数段(如60-70),统计出在此分数
2、段的学生情况。(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)(二)其它要求:(1)使用C或C+语言,源程序要有适当的注释,使程序容易阅读(2)采用文本菜单界面(3)学生可增加新功能模块三、设计的原理用数组或链表数据结构完成一个学生成绩管理系统,此系统的具体功能要求如下:(1)信息维护功能1、增加学生信息:输入学生学号、姓名、性别、语文、数学、英语、政治四门课成绩,可插入一个或多个学生信息到当前编辑的班级数据中。2、删除学生信息:可按学号或者姓名删除一个或多个学生信息。3、修改学生信息:可按学号或
3、者姓名修改学生语文、数学、英语、政治四门课任一门及多门科目成绩。4、学生信息每一班存为一个数据文件,数据文件可在程序中编辑和重新保存。5、用户输入学生信息可随时保存数据文件。(2)信息查询功能1、按某一学科分数段查询2、按学号查询学生信息;3、按姓名查询学生信息;(3)排序功能1、按学号输出一个班学生信息:学号、姓名、语文、数学、英语、政治成绩和总成绩到屏幕和文件。2、成绩排名按总成绩或各科成绩排序输出学生信息四、系统组成系统以如下几个模块组成:(一)学生信息增加及修改、删除模块增加学生的信息:学号、姓名、语文、数学、英语、政治四门成绩。当然也可以进行修改和删除。(二)文件保存功能模块可以将学
4、生信息存为一个数据文件。用户输入的学生信息可随时保存数据文件。(三)查询功能模块在此模块里,用户可实现以下操作:1、按某科目分数段查询学生信息;(四)文件读取功能模块在此模块中,用户可以装入文件中所有学生的信息。(程序中为data.txt文件)(5)排序模块在此模块中,可以通过学号或者各类科目成绩或总分进行排序。程序开头与结尾需要定义两个类和一主函数,使得程序具备完整性。五、概要设计系统功能可分为三大类:信息维护、信息查询已经信息排序。如下三个系统层次结构图如图所示:1.信息维护图1.1信息维护功能概要图2.信息查询图1.2信息维护功能概要图3.信息排序:图1.3信息排序功能概要图了解大概功能
5、,可以根据这些来确定系统具体分支,可用17分别代表添加、删除、修改、查询、排序、保存、读取。4、大概程序程序流程图6、详细设计1、准备工作:首先,导入std命名空间中所有名称,设max为100再准备头文件:#include,#includestringstdlib.hiomanip然后,定义两个类student和cla,分别定义了程序中主要使用的成员;建立构造函数和解析函数及声明各类函数。2、构造sadd()添加函数先定义所需的q,name,num,x,y,z,m。用DOS下的清屏命令,再输出给用户的提示语句,用“q=new student(name1,num1,x1,y1,z1,m1);”建
6、立新的student。利用链表判断输入的学号是否与头结点或后面的结点数据相同,若不同则用“stu=q;”增加学生信息。3、构造sremove()删除函数准备工作如上(2)一样,用while()函数找出要删除的学生信息对应结点,若找到则删除,在删除之前要确定是否删除:“cout确定删除吗?Y/Nendl;”这里用if语句判断用户回答是“Y”还是“N”。删除时也要分是删除第一个结点还是后续结点。补缺后用delete删除p1。4、构造samend()修改函数大体和3一样,修改前的准备,确定要修改的结点,最后用cin直接修改。5、构造ssearch()查询函数查询函数有多个分支,这里都用选择语句cas
7、e来对不同的情况进行编程。在这里只需逻辑清晰,语法没有错误就能完成,但也要注意括号的搭配和break的使用。在用for语句时要注意循环次数不能过大,应对应学生的人数。6、构造staxis()排序函数用case语句使输入的17数字分别对应函数pxh()(学号排序)、psx()(数学)、pyw()(语文)、pyy()(英语)、pAA()(总分)、返回、pzz()(政治)。这些排序函数定义内容几乎一样。首先用for语句判断n(信息条数)为多少,如果头结点大于第二个的头结点则交换,再判断中间的结点大小则交换,最后依次重复。7、构造ssave()函数sload()函数(保存与读取)在这里注意链表要求即可
8、。8、定义主函数产生操作界面也用case语句使18代表不同功能。(详见附录)七、调试结果与分析1、调试方法与技巧代码完成后,保存代码并尝试运行程序,启动调试。往往会出现以下几种常见错误。1case语句中内容重复,没有用一函数替代,使程序过为繁琐。2括号没有匹配;3循环体的逻辑错误;4 case语句中缺少了break,没有跳出循环。5错误使用了for语句,造成已经出现结果后(链表为空)依旧继续运行,造成问题,无法继续使用该系统。2、调试结果1、学生信息的添加、删除、修改。 图2.1.1删除图2.1.2添加学生信息图2.1.3修改学生信息图2.1.4此时文件的内容2、按姓名查询。图2.2.13.按
9、学号查询。图2.3.14、按成绩查询。图2.4.15、成绩排序。图2.5.1学号排序图2.5.2单科(数学)成绩排序图2.5.3总分排序6、保存:图2.6.17、读取:图2.7.18、退出:图2.8.1结论虽然过程有些磕磕绊绊,但最后成绩管理系统终于成功了。该系统能够为大家带来极大的便利,便于以后成绩的有效管理。以后大家像成绩排序,找出某个科目及格的学生也容易很多。该系统虽具有基本的功能,但还是存在一些不足。例如增加删除学生信息时不能在界面上自动呈现增加或者删除的结果,需要操作者手动打开文件或者通过排序来间接查看结果。这次课设让大家学到了很多书本外的知识,锻炼了实践操作的能力。不仅熟悉了VC6
10、软件,也让大家知道,纸上谈兵远远没有自己动手体验来的深刻。参考文献1.黄维通,贾续涵、Visual C+面对对象与可视化程序设计(第三版)、清华大学出版社、2011年06月版2.谭浩强、C语言程序设计(第四版)、清华大学出版社、2010年06月版附录/用于程序的暂停属于c的运用方法using namespace std;/导入std命名空间中所有名称。#define max 100;/设max为100class student/定义类student定义了程序中主要使用的成员 public:student*next;/定义next指针string name;/姓名 long num;/学号 in
11、t x,y,z,m;int low,high;/数学,语文,英语,政治 int AA;/总分 void play() coutname学生的学号是num,数学:x,语文:y,英语:z,政治:m,总分:AAnext; delete stu; stu=p; stu=0; /这一部分是对函数的声明 void sadd();/添加 void sremove();/删除 void samend();/修改 void ssearch();/查询 void staxis();/排序 void ssave();/保存 void sload();/读取 /排序函数的声明 void pxh(); void psx(); void pyw(); void pyy(); void pzz(); void pAA();/共有5个排序函数 private:student*stu;/头接点void cla:sadd()/此处构造了添加学生函数 student*q; string name1; long num1; int x1,y1,z1,m1; system(cls);/调用DOS下的的清屏命令“cls” coutn*增加的学生*n请输入学生的(中间用空格间隔) co
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1