版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计(论文)任务书软件学院学院专业班一、课程设计(论文)学生成绩管理系统的设计与实现二、课程设计(论文)工作自2014年12月22日起至2012年12月27日止三、课程设计(论文)地点:创新大楼机房四、课程设计(论文)容要求:1.本课程设计的目的⑴训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题;⑵初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;⑶提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学生的理论知识,提升编程水平。2.课程设计的任务及要求1)基本要求:⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告;⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率;⑶程序设计语言推荐使用C/C++,程序书写规,源程序需必要的注释;⑷每位同学需提交可独立运行的程序和规的课程设计报告。2)课程设计论文编写要求⑴理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订;⑵课程设计报告(论文)包括中文目录、设计任务、需求分析、概要设计、详细设计、编码实现、调试分析、总结、谢辞、参考文献、附录等;⑶设计部分应包含系统功能模块图,调试分析应包括运行截图等。3)课程设计评分标准:⑴学习态度:10分;⑵系统设计:20分;⑶编程调试:20分;⑷回答问题:20分;⑸论文撰写:30分。4)参考文献:⑴严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社.2010.3⑵严蔚敏,吴伟民.数据结构题集(C语言版)[M].清华大学出版社.1999.2⑶何钦铭,冯燕等.数据结构课程设计[M].大学出版社.2007.85)课程设计进度安排⑴准备阶段(4学时):选择设计题目、了解目的要求、查阅相关资料;⑵程序模块设计分析阶段(4学时):程序概要设计、详细设计;⑶代码编写调试阶段(8学时):程序模块代码编写、调试、测试;⑷撰写论文阶段(4学时):总结设计任务和设计容,撰写设计论文。学生签名:年月日6)课程设计题目具体要求:能够实现对学生成绩的常用管理功能。⑴采用一定的存储结构对学生成绩进行管理;⑵可以进行成绩的录入、查询、修改、删除等操作;⑶可以查询某门课程的平均分,学生的排名,不同分数段的学生人数及学生信息等;⑷可以查询某学生的各课程分数,总分及学生的班级排名等;⑸可以按学号排序输出全部学生的成绩信息、总分及班级排名等。课程设计(论文)评审意见(1)学习态度(10分):优()、良()、中()、一般()、差();(2)系统设计(20分):优()、良()、中()、一般()、差();(3)编程调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)论文撰写(30分):优()、良()、中()、一般()、差();(6)格式规性及考勤是否降等级:是()、否()评阅人:周娟职称:讲师2014年12月28日目录第1章设计任务分析 2第2章功能实现详细设计 2第3章功能测试 2第4章调试与改进 2第5章小结 2第6章源代码 2第1章设计任务分析需求与功能分析需求分析学生成绩管理系统是一个教育单位不可缺少的部分它的容对于学校的决策者和管理者来说都至关重要所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。以前各个学校的学生成绩管理基本上都是靠手工进行,但随着各个学校的规模增大,有关学生成绩管理工作所涉及的数据量也越来越大,有的学校不得不靠增加人力、物力来进行学生成绩管理。这种管理方式存在着许多缺点,如:效率低、保密性差等,另外其所用时间长,产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。如今学校的学生越来越多,成绩管理的工作量越来越大,手工管理成绩的弊端也越来越明显。作为计算机应用的一部分,使用计算机对学生档案信息进行管理具有手工管理所无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,能够极大地提高学生档案管理的效率。所以我想借本次课程设计之际,设计一个简易的学生成绩管理系统。功能分析输入输出的形式和输入值的围首先输入学生个数按回车键,然后按照提示选择输入学生信息并将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成后或者在相应的命令后再将学生信息保存到文本文档中。输入数据类型主要是char、int、float等数据类型,输入容包括学号、姓名、基础会计成绩、大学英语成绩、数据结构成绩、总分、平均分等数据。输出的形式为学号、姓名、基础会计成绩、大学英语成绩、数据结构成绩、总分、平均分等数据。程序所达到的功能数据输入功能,输入的数据能最终保存在文件中;数据删除功能,能最终从文件中删除;多种排序功能,根据自己设计的数据结构,设计排序算法;多种查询功能(如按学号查询、按姓名查询等)及输出功能;学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩等);其他功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程的所有学生的平均分等等)
第2章功能实现详细设计库函数先编入系统所需的库函数,使程序可运行。#include<stdio.h>#include<iostream>#include<stdlib.h>#include<iomanip>//主要是对cin,cout之类的一些操纵运算,是I/O流控制头文件#include<conio.h>//文件和标准控制台的输入输出菜单界面的设计主菜单的设计在主界面中包括“<1>输入学生信息并保存到文件<2>读取文件并输出学生信息<3>按学号查询<4>按姓名查询<5>按学号修改信息<6>插入学生信息<7>按学号删除信息<8>各科成绩排序<9>按总分降序排序<10>各科成绩统计<11>分数段查找<12>按学号排序<13>退出”等功能。每个函数体如下:voidinput(Stu*r);//输入voidoutput(Stu*r);//输出voidsearchnum(Stu*r);//按学号查找voidsearchname(Stu*r);//按姓名查找voidmodify(Stu*r);//修改学生信息Stu*insert(Stu*r);//插入信息voiderase(Stu*r);//按学号删除信息voidsortmenu();//排序菜单voidsortsum(Stu*r);//按总分降序排序voidstat(Stu*r);//统计各科总分和平均分信息voidintmenu();//分数段查找菜单图2.2.1主菜单界面图2.2.1主菜单界面在此界面中用户可以选择要操作的选项,回车之后即进行相关操作或进入相关二级菜单排序菜单的设计在排序菜单中包括“<1>按基础会计成绩排序<2>按大学英语成绩排序<3>按数据结构成绩排序<4>返回上级菜单”等功能。每个函数体如下:voidsort_BA(Stu*r);//基础会计成绩排序voidsort_UE(Stu*r);//大学英语成绩排序图2.2.2排序菜单界面图2.2.2排序菜单界面分数段查找菜单的设计在分数段查找菜单中包括“<1>基础会计分数段查找<2>大学英语分数段查找<3>数据结构分数段查找<4>返回上级菜单”等功能。每个函数体如下:voidint_BA(Stu*r);//基础会计分数段查找voidint_UE(Stu*r);//大学英语分数段查找图2.2.3分数段查找菜单界面图2.2.3分数段查找菜单界面详细设计系统流程图输入学生人数输入学生人数主菜单界面输入学生成绩输出学生成绩按学号查询成绩按姓名查询成绩修改学生信息各科成绩排序按学号删除信息插入学生信息按总分降序排序各科成绩统计分数段查找按学号排序退出退出各功能模块的设计主函数模块用函数intmain()来实现,主要功能是显示菜单,让用户根据提示选择操作,首先定义一个指针数组(全局使用)Stu*p=(Stu*)newStu[num];此处num指学生个数,并不是学号,这里应用了do-while和switch-case语句来进行循环选择,最后若用户选择“13”则保存记录并退出循环。学生记录输入模块用函数voidinput(Stu*r)来实现,在主菜单选择“1”进入输入模块之后用户需要输入所需学生个数的学生信息,包括学号、姓名、各科成绩等,输入完成之后会返回主菜单。本函数根据设计的条件判断循环来判断是否有重复学号输入。本函数还将算出学生的总分与平均分并按学号的默认顺序将其与输入的原始学生记录保存的文件中去。学生记录输入模块用函数voidoutput(Stu*r)来实现,在系统已经录入了学生资料的前提下,调用本函数可以输出学生资料。其中setw()控制域宽,括号里整型数据的数值代表域宽的字符数。按学号查找学生记录模块用函数voidsearchnum(Stu*r)来实现,首先提示用户输入要查找的学生学号,再用for循环语句和if判断语句进行循环判断来进行查找,if(r[m].num==n)表示找到学生记录,然后显示学生记录并跳出循环,if(r[m].num!=n)表示未找到学生记录并输出提示“该学号不存在!”。按姓名查找学生记录模块用函数voidsearchname(Stu*r)来实现,首先提示用户输入要查找的学生姓名,再用for循环语句和if判断语句进行循环判断来进行查找,if(r[m].name[0]==n[0])表示找到学生记录,然后显示学生记录并跳出循环,if(r[m].name[0]!=n[0])表示未找到学生记录并输出提示“该姓名不存在!”。按学号修改学生信息模块用函数voidmodify(Stu*r)来实现,首先提示用户输入要修改信息的学生序号,再通过if条件语句进行判断输入的学号是否存在,if(r[m].num!=n)表示输入的学生学号不存在,输出提示“该学号不存在”,再利用begin标记和goto语句重新开始循环并提示用户重新输入要修改的学生学号。if(r[m].num==n)若输入的学生学号存在,则先输出修改前的学生信息,此处有一个while循环语句和switch-case选择语句,用来选择修改学生的某一科成绩,并让用户选择是否继续进行修改。最后将修改过后的记录写入文件中,并输出提示“文件已修改并写入”。插入学生信息模块用函数Stu*insert(Stu*r)来实现,主要功能是添加学生资料。在此模块中定义了另一个指针数组:Stu*y=(Stu*)newStu(num+1);用来存放新添加的学生记录。再利用for循环语句进行输入新学生记录,最后输出一个提示语句让用户判断是否继续输入,若用户输入“Y”或“y”则继续输入,否则将返回主菜单。删除学生记录模块用函数voiderase(Stu*r)来实现,首先对文件进行读取,之后的if判断语句根据用户输入的学号来显示删除前的信息记录,然后用for循环语句循环把后一位的信息提前一位,整体数量建议,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。各科成绩降序与学号(冒泡)排序模块用函数voidsort_BA(Stu*r),voidsort_UE(Stu*r),voidsort_DS(Stu*r)三个函数来实现,主要功能是利用用户保存在文件的学生记录按单科成绩进行降序排序。首先对文件进行读取,然后进行冒泡排序。冒泡排序有两个优点,一是代码比较容易,二是具有稳定性。这里的稳定性是指原序列中相同两元素的相对顺序仍然保持到排序后的序列。冒泡排序时进过n-1趟子排序完成的,第i趟子排序从第1个数至第n+1个数,若第i个数比后一个数大则交换两数。排序之后,将排序之后的结果写入文件,再读取文件的时候,输出的就是按单科成绩排序后的结果。总分降序排序模块用函数voidsortsum(Stu*r)来实现,主要功能是利用保存在文件的学生总分进行排序。首先对文件进行读取,然后进行选择排序。其基本思想是:n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:①初始状态:无序区为R[1..n],有序区为空。②第1趟排序:在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。……③第i趟排序第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。各科成绩统计模块用函数voidstat(Stu*r)来实现,主要功能是计算各科总分和各科平均分。各科分数段查找模块用函数voidint_BA(Stu*r),voidint_UE(Stu*r),voidint_DS(Stu*r),voidintsum(Stu*r);四个函数实现,首先提示用户输入要查找的单科成绩或总分的上限与下限,然后通过for循环语句遍历学生记录找到符合条件的学生并输入相应学生记录。
第3章功能测试图3-1在主菜单选择1图3-1在主菜单选择1开始输入学生信息图3-2图3-2输入学生信息完成后的界面Student.txt:1JBJ91.092.093.0276.092.02RS87.088.089.0264.088.03TT93.094.095.0282.094.04DB84.085.086.0255.085.05AJS92.093.094.0279.093.0图3-3输出文件内的学生信息返回主菜单后选择图3-3输出文件内的学生信息图3-4按学号查找学生信息返回主菜单后选择图3-4按学号查找学生信息
图3-5按学生姓名查找返回主菜单后选择图3-5按学生姓名查找图3-6按学号修改学生信息返回主菜单后选择图3-6按学号修改学生信息
图3-7图3-7修改完成后的界面Student.txt:1JBJ91.092.093.0276.092.02RS87.088.089.0264.088.03TT93.094.095.0282.094.04DB84.085.086.0255.085.05AJS92.093.094.0279.093.0图3-8插入学生信息返回主菜单后选择图3-8插入学生信息Student.txt:1JBJ91.092.093.0276.092.02RS87.088.089.0264.088.03TT93.094.095.0282.094.04DB84.085.086.0255.085.05AJS92.093.094.0279.093.06HM99.098.097.0294.098.0图3-9按学号删除学生记录返回主菜单后选择图3-9按学号删除学生记录student.txt:1JBJ91.092.093.0276.092.02RS87.088.089.0264.088.03TT93.094.095.0282.094.04DB84.085.086.0255.085.05AJS92.093.094.0279.093.0图3-10排序菜单返回主菜单后选择8进入排序菜单,通过选择图3-10排序菜单图3-11排序完成的提示以选择图3-11排序完成的提示图3-12图3-12按基础会计学成绩降序对学生记录进行排序的排序结果Student.txt:3TT93.094.095.0282.094.05AJS92.093.094.0279.093.01JBJ91.092.093.0276.092.02RS87.088.089.0264.088.04DB84.085.086.0255.085.0图3-13按总分降序排序返回菜单后选择9按总分降序对学生记录进行排序。图3-13按总分降序排序图3-14图3-14按总分降序排序对学生记录排序的结果Student.txt3TT93.094.095.0282.094.05AJS92.093.094.0279.093.01JBJ91.092.093.0276.092.02RS87.088.089.0264.088.04DB84.085.086.0255.085.0图3-15各科总分和平均分的统计返回主菜单后选择图3-15各科总分和平均分的统计图3-16分数段查找菜单返回主菜单后选择图3-16分数段查找菜单图3-17图3-17数据结构分数段查找结果图3-18提示用户对学生记录已完成按学号排序返回主菜单之后选择图3-18提示用户对学生记录已完成按学号排序图3-19图3-19按学生学号对学生记录进行排序的排序结果student.txt:1JBJ91.092.093.0276.092.02RS87.088.089.0264.088.03TT93.094.095.0282.094.04DB84.085.086.0255.085.05AJS92.093.094.0279.093.0
第4章调试与改进程序编译连接通过后在调试过程中以及本报告的编写过程中遇到了不少的问题,经过几天的调试与修改大部分问题已经成功解决。遇到并以解决的部分问题如下:在多处需要用户输入数字时没有设置数字围或者没有限定用户只能输入数字,导致用户在输入错误时出现越界问题或者程序崩溃。以用户在主菜单输入数字选择操作时为例,解决方法为利用while循环语句进行循环判断,在用户输入越界的数字或者输入非数字时输出错误语句并利用cin.clear();与cin.sync();语句清除错误状态与输入流再提示用户重新输入。插入学生记录时没有进行新插入的学生学号是否重复的检查,利用for循环语句与if判断语句进行循环判断,在用户输入重复的学生学号时输出提示该学号已存在并利用cin.clear();与cin.sync();语句清除错误状态与输入流再提示用户重新输入。修改学生记录函数voidmodify(Stu*r)没有判断用户输入的学号是否存在,初次采用修改方式是增加一个if判断语句if(r[m].serial!=n)并将此这个判断过程放在了for(m=0;m<num;m++)的大循环,思考后发现在m遍历了一次num之后再进行此判断必定输出错误提示,并跳到定义的begin标记处,陷入了死循环。思考过后定义一个新变量l,在每次满足if(r[m].serial!=n)时自增1,在循环结束以后若l的值等于num则输出错误提示并提示用户重新输入。修改过后发现在执行完了修改成绩之后仍会输出错误提示。最后定义了end标记,在用户输入了一个存在的学号之后执行修改成绩完毕后直接利用goto语句跳到end标记处。
第5章小结通过本次课程设计,我巩固了部分本学期以及上学期所学的理论知识,有了一些新的理解与体会。对于一些平时似懂非懂的知识,在这次课程设计中也解决了一些困惑,虽然还是不能够全面的理解,但是已经有了进步。在课程设计中遇到不少困难,包括上一章提及的几个问题与已经解决的一些小问题,通过查阅资料、与同学讨论,在应用课本的前提下。拓展课外知识,基本完成了本次课程设计,虽然其中还有许多不足之处,但是从中我学到了许多东西,懂得了不能拘泥于课本上的知识形式,应该对其灵活运用。本次课程设计使我认识到自己对知识的掌握不够全面,而且感觉到我们在学习专业知识的同时还需要加强对自己逻辑性思维的培养以及对其他方面知识的学习,逻辑性思维对于能不能写出一个好的算法以及排除代码错误方面至关重要。在编程的过程中我又重新复习了本学期的数据结构以及上学期的C++程序设计的课本,对一些以前学过的知识有了更深的理解,对一些以前没学过的知识有了初步的认识,当自己把程序一点点完善时让我对学好数据结构这门课程更有信心了,以前一直感觉枯燥难学的数据结构,在编程的过程中好像显得不那么高深了。在以后的学习过程中,我一定会认真负责地对待课本中的知识点,进一步充实、提高自己。争取在不断的练习中提高自己的层次。
第6章源代码#include<stdio.h>#include<iostream>#include<iomanip>#include<stdlib.h>#include<conio.h>usingnamespacestd;structStu{ intserial; charname[50]; floatBA_score;//基础会计成绩 floatUE_score;//大学英语成绩 floatDS_score;//数据结构成绩 floatsum;//总分 floataverage;};//平均分intnum=0;intch,choice;voidinput(Stu*r);//输入voidoutput(Stu*r);//输出voidmenu();//菜单界面voidsortmenu();//排序菜单voidintmenu();//分数段查找菜单voidsearchnum(Stu*r);//按学号查找voidsearchname(Stu*r);//按姓名查找voidmodify(Stu*r);//修改学生信息voiderase(Stu*r);//按学号删除信息voidsort_BA(Stu*r);//基础会计成绩排序voidsort_UE(Stu*r);//大学英语成绩排序voidsort_DS(Stu*r);//数据结构成绩排序voidsortnum(Stu*r);//按学号排序voidsortsum(Stu*r);//按总分降序排序voidstat(Stu*r);//统计各科总分和平均分信息Stu*insert(Stu*r);//插入信息voidint_BA(Stu*r);//基础会计分数段查找voidint_UE(Stu*r);//大学英语分数段查找voidint_DS(Stu*r);//数据结构分数段查找voidintsum(Stu*r);//总分分数段查找intmain(){ cout<<"输入学生的人数:"; cin>>num;while(!cin) {cout<<"输入错误!";cin.clear(); cin.sync(); cout<<"请重新输入学生的人数:"; cin>>num;} Stu*p=(Stu*)newStu[num]; intm; menu(); do{cin>>m;while(!cin||m<1||m>13) {cout<<"输入错误!";cin.clear(); cin.sync(); cout<<"请重新输入:"; cin>>m;}begin: switch(m) {case1: input(p); menu(); break; case2: output(p); menu(); break; case3: searchnum(p); menu(); break; case4: searchname(p); menu(); break; case5: modify(p); menu(); break; case6: p=insert(p); menu(); break; case7: erase(p); menu(); break; case8: sortmenu(); do{ cin>>ch; while(!cin||ch<1||ch>4) {cout<<"输入错误!";cin.clear(); cin.sync(); cout<<"请重新输入:"; cin>>ch;} switch(ch) {case1: system("cls"); sortmenu(); sort_BA(p); output(p); sortmenu(); break; case2: system("cls"); sortmenu(); sort_UE(p); output(p); sortmenu(); break; case3: system("cls"); sortmenu(); sort_DS(p); output(p); sortmenu(); break;}}while(ch!=4); system("cls"); menu(); break; case9: sortsum(p); output(p); menu(); break; case10: stat(p); menu(); break; case11: intmenu(); do{ cin>>choice; while(!cin||choice<1||choice>6) {cout<<"输入错误!";cin.clear(); cin.sync(); cout<<"请重新输入:"; cin>>choice;} switch(choice) {case1: system("cls"); intmenu(); int_BA(p); intmenu(); break; case2: system("cls"); intmenu(); int_UE(p); intmenu(); break; case3: system("cls"); intmenu(); int_DS(p); intmenu(); break; case4: system("cls"); intmenu(); intsum(p); intmenu(); break;}}while(choice!=5); system("cls"); menu(); break; case12: system("cls"); sortnum(p); output(p); menu(); break; case13: exit(0); default: while(m<0||m>12||!cin) {cout<<"输入有误!请重新输入"<<endl; cin.clear(); cin.sync(); cin>>m; gotobegin;}}}while(1);}voidmenu(){ cout<<endl;cout<<endl;cout<<"*>菜单栏<*\n"<<endl;cout<<"*<1>输入学生信息并保存到文件<2>读取文件并输出学生信息*"<<endl;cout<<"*<3>按学号查询<4>按姓名查询*"<<endl;cout<<"*<5>修改学生信息<6>插入学生信息*"<<endl;cout<<"*<7>按学号删除信息<8>各科成绩排序*"<<endl;cout<<"*<9>按总分降序排序<10>各科成绩统计*"<<endl;cout<<"*<11>分数段查找<12>按学号排序*"<<endl;cout<<"*<13>退出*"<<endl;cout<<"**\n"<<endl;cout<<"请选择:"<<endl;}voidsortmenu(){ cout<<endl;cout<<endl;cout<<"*>排序菜单<*\n"<<endl;cout<<"*各科成绩排序*"<<endl;cout<<"*<1>基础会计<2>大学英语*"<<endl;cout<<"*<3>数据结构<4>返回上级*"<<endl;cout<<"**\n"<<endl;cout<<"请选择:"<<endl;}voidintmenu(){ cout<<endl;cout<<endl;cout<<"*>分数段查找菜单<*\n"<<endl;cout<<"*各科及总分分数段查找*"<<endl;cout<<"*<1>基础会计<2>大学英语*"<<endl;cout<<"*<3>数据结构<4>总分查找*"<<endl; cout<<"*<5>返回上级*"<<endl;cout<<"**\n"<<endl;cout<<"请选择:"<<endl;}voidinput(Stu*r){ FILE*fp; intn=0; inti; intt=0; cout<<endl<<">请输入学生信息<"<<endl; for(i=0;i<num;i++) { cout<<"请输入第"<<i+1<<"个人的学号:"; cin>>r[i].serial; while(!cin||r[i].serial<0) {cout<<"输入错误或序号不合理!";cin.clear(); cin.sync(); cout<<"请重新输入第"<<i+1<<"个人的学号:"; cin>>r[i].serial;} if(i>=1) {for(n=0;n<i;n++) { if(r[n].serial==r[i].serial) { cout<<"该学号已存在!"<<endl; t=1;}}} if(t==1) { i--; t=0; continue;} cout<<"请输入姓名:"; cin>>r[i].name; cout<<"请输入基础会计成绩:"; cin>>r[i].BA_score; while(!cin||r[i].BA_score>100||r[i].BA_score<0) {cout<<"输入错误或成绩不合理!";cin.clear(); cin.sync(); cout<<"请重新输入基础会计成绩:"; cin>>r[i].BA_score;} cout<<"请输入大学英语成绩:"; cin>>r[i].UE_score; while(!cin||r[i].UE_score>100||r[i].UE_score<0) {cout<<"输入错误或成绩不合理!";cin.clear(); cin.sync(); cout<<"请重新输入大学英语成绩:"; cin>>r[i].UE_score;} cout<<"请输入数据结构成绩:"; cin>>r[i].DS_score; while(!cin||r[i].DS_score>100||r[i].DS_score<0) {cout<<"输入错误或成绩不合理!";cin.clear(); cin.sync(); cout<<"请重新输入数据结构成绩:"; cin>>r[i].DS_score;} r[i].sum=r[i].BA_score+r[i].UE_score+r[i].DS_score; r[i].average=(r[i].BA_score+r[i].UE_score+r[i].DS_score)/3;}fp=fopen("student.txt","w+");if(!fp){cout<<"文件不能打开"<<endl; exit(0);}for(n=0;n<i;n++){ fprintf(fp,"%d%s%.1f%.1f%.1f%.1f%.1f",r[n].serial,r[n].name,r[n].BA_score,r[n].UE_score,r[n].DS_score,r[n].sum,r[n].average);fprintf(fp,"\n");}fclose(fp);cout<<"文件已经写入!"<<endl;cout<<"按任意键以返回主菜单"<<endl; getch(); system("cls");}voidoutput(Stu*r){ intm; system("cls"); if(num>0) { FILE*fp; if((fp=fopen("student.txt","r"))==NULL) {cout<<"文件不能打开"<<endl; exit(0);} for(intn=0;n<num;n++) { fscanf(fp,"%d%s%f%f%f%f%f",&r[n].serial,&r[n].name,&r[n].BA_score,&r[n].UE_score,&r[n].DS_score,&r[n].sum,&r[n].average);} fclose(fp); cout<<"文件已经读入"<<endl; cout<<">学生信息如下<"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"基础会计"<<setw(10)<<"大学英语"<<setw(10)<<"数据结构"<<setw(6)<<"总分"<<setw(10)<<"平均分"<<endl;cout<<""<<endl;for(m=0;m<num;m++){ cout<<r[m].serial<<setw(8)<<r[m].name<<setw(10)<<r[m].BA_score<<setw(10)<<r[m].UE_score<<setw(10)<<r[m].DS_score<<setw(7)<<r[m].sum<<setw(9)<<r[m].average<<endl;}cout<<"\0\0"<<endl;}elsecout<<"未输入任何信息!"<<endl; cout<<"按任意键以返回"<<endl; getch(); system("cls");}voidsearchnum(Stu*r){ intn; system("cls"); if(num>0) { FILE*fp; if((fp=fopen("student.txt","r"))==NULL) {cout<<"文件不能打开"<<endl; exit(0);} cout<<"请输入要查找学生的学号:"; cin>>n; intm; for(m=0;m<num;m++) { if(r[m].serial==n) { cout<<endl; cout<<">要查找的信息如下<"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"基础会计"<<setw(10)<<"大学英语"<<setw(10)<<"数据结构"<<setw(6)<<"总分"<<setw(10)<<"平均分"<<endl;cout<<r[m].serial<<setw(8)<<r[m].name<<setw(10)<<r[m].BA_score<<setw(10)<<r[m].UE_score<<setw(10)<<r[m].DS_score<<setw(7)<<r[m].sum<<setw(9)<<r[m].average<<endl;break;}} if(r[m].serial!=n) cout<<"该学号不存在!"<<endl;} else cout<<"未输入任何信息!"<<endl; cout<<"按任意键以返回主菜单"<<endl; getch(); system("cls");}voidsearchname(Stu*r){ charn[50]; system("cls"); if(num>0) { intm; FILE*fp; if((fp=fopen("student.txt","r"))==NULL) { cout<<"文件不能打开"<<endl; exit(0);} cout<<"请输入要查找学生的姓名:"; cin>>n; for(m=0;m<num;m++) { if(r[m].name[0]==n[0]) {cout<<endl; cout<<">要查找的信息如下<"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"基础会计"<<setw(10)<<"大学英语"<<setw(10)<<"数据结构"<<setw(6)<<"总分"<<setw(10)<<"平均分"<<endl;cout<<r[m].serial<<setw(8)<<r[m].name<<setw(10)<<r[m].BA_score<<setw(10)<<r[m].UE_score<<setw(10)<<r[m].DS_score<<setw(7)<<r[m].sum<<setw(9)<<r[m].average<<endl;break;}} if(r[m].name[0]!=n[0]) cout<<"该姓名不存在!"<<endl;} else cout<<"未输入任何信息!"<<endl; cout<<"按任意键以返回主菜单"<<endl; getch(); system("cls");}voidmodify(Stu*r){ FILE*fp; intm=0,n=0; charchoice='Y'; begin: if(num>0) { intn; system("cls"); cout<<"输入要修改成绩的学生学号:"; cin>>n; for(m=0;m<num;m++) { if(n==r[m].serial) { intj; cout<<endl; cout<<">修改前的信息如下<"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"基础会计"<<setw(10)<<"大学英语"<<setw(10)<<"数据结构"<<setw(6)<<"总分"<<setw(10)<<"平均分"<<endl;cout<<r[m].serial<<setw(8)<<r[m].name<<setw(10)<<r[m].BA_score<<setw(10)<<r[m].UE_score<<setw(10)<<r[m].DS_score<<setw(7)<<r[m].sum<<setw(9)<<r[m].average<<endl;cout<<endl;while(choice=='Y'||choice=='y'){ cout<<"\t\t\t>可以修改的项目如下<\n"<<endl; cout<<"\t\t\t1.修改学生的基础会计成绩记录\n"<<endl; cout<<"\t\t\t2.修改学生的大学英语成绩记录\n"<<endl; cout<<"\t\t\t3.修改学生的数据结构成绩记录\n"<<endl; cout<<"请选择:"; cin>>j; while(!cin||j<1||j>3) {cout<<"输入错误!";cin.clear(); cin.sync(); cout<<"请重新输入:"; cin>>j;} switch(j) {case1: cout<<"输入新的基础会计成绩:"; cin>>r[m].BA_score; break; case2: cout<<"输入新的大学英语成绩:"; cin>>r[m].UE_score; break; case3: cout<<"输入新的数据结构成绩:"; cin>>r[m].DS_score; break;} cout<<"是否要继续修改此学生的其他成绩记录?(Y/N)"; fflush(stdin); cin>>choice;}r[m].sum=r[m].BA_score+r[m].UE_score+r[m].DS_score; r[m].average=(r[m].BA_score+r[m].UE_score+r[m].DS_score)/3; gotoend;}} if(r[m].serial!=n) { cout<<"该学号不存在!"<<endl; cin.clear(); cin.sync(); cout<<"按任意键开始重新输入"; getch(); gotobegin;}} else cout<<"未输入任何信息!"<<endl; if((fp=fopen("student.txt","w"))==NULL) { cout<<"文件不能打开"<<endl; exit(0);} end: for(n=0;n<num;n++) {fprintf(fp,"%d%s%.1f%.1f%.1f%.1f%.1f",r[n].serial,r[n].name,r[n].BA_score,r[n].UE_score,r[n].DS_score,r[n].sum,r[n].average);fprintf(fp,"\n");}fclose(fp);cout<<"文件已修改并写入!"<<endl; cout<<"按任意键以返回主菜单"<<endl; getch(); system("cls");}Stu*insert(Stu*r){ FILE*fp; intm; charn; do{ if((fp=fopen("student.txt","r"))==NULL) { cout<<"文件不能打开"<<endl; exit(0);} for(into=0;o<num;o++) { fscanf(fp,"%d%s%f%f%f%f%f",&r[o].serial,&r[o].name,&r[o].BA_score,&r[o].UE_score,&r[o].DS_score,&r[o].sum,&r[o].average);} Stu*y=(Stu*)newStu[num+1]; for(m=0;m<num;m++) { y[m]=r[m];} r=y; cout<<"请输入学号:"; cin>>r[num].serial; for(intk=0;k<num;k++) {if(r[k].serial==r[m].serial) {cout<<"该学号已存在!"<<endl; cin.clear(); cin.sync(); cout<<"请重新输入:"<<endl; cin>>r[num].serial;}} cout<<"请输入姓名:"; cin>>r[num].name; cout<<"请输入基础会计成绩:"; cin>>r[num].BA_score; cout<<"请输入大学英语成绩:"; cin>>r[num].UE_score; cout<<"请输入数据结构成绩:"; cin>>r[num].DS_score; r[num].sum=r[num].BA_score+r[num].UE_score+r[num].DS_score; r[num].average=(r[num].BA_score+r[num].UE_score+r[num].DS_score)/3; num++; cout<<"是否继续输入?(Y/N)"<<endl; fflush(stdin); cin>>n;}while(n=='Y'||n=='y'); if((fp=fopen("student.txt","w+"))==NULL) { cout<<"文件不能打开"<<endl; exit(0);} for(n=0;n<num;n++) { fprintf(fp,"%d%s%.1f%.1f%.1f%.1f%.1f",r[n].serial,r[n].name,r[n].BA_score,r[n].UE_score,r[n].DS_score,r[n].sum,r[n].average);fprintf(fp,"\n");} fclose(fp); cout<<"文件已经写入"<<endl; cout<<"按任意键以返回主菜单"<<endl; getch(); system("cls"); returnr;}voiderase(Stu*r){ FILE*fp; if(num>0) { if((fp=fopen("student.txt","r"))==NULL) {cout<<"文件不能打开"<<endl; exit(0);} for(into=0;o<num;o++) { fscanf(fp,"%d%s%f%f%f%f%f",&r[o].serial,&r[o].name,&r[o].BA_score,&r[o].UE_score,&r[o].DS_score,&r[o].sum,&r[o].average);} intn,t=0; cout<<"请输入要删除学生的学号:"; cin>>n; for(intm=0;m<num;m++) if(r[m].serial==n) { charj; cout<<endl; cout<<">要删除学生的信息如下<"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"基础会计"<<setw(10)<<"大学英语"<<setw(10)<<"数据结构"<<setw(6)<<"总分"<<setw(8)<<"平均分"<<endl;cout<<r[m].serial<<setw(6)<<r[m].name<<setw(7)<<r[m].BA_score<<setw(10)<<r[m].UE_score<<setw(10)<<r[m].DS_score<<setw(8)<<r[m].sum<<setw(6)<<r[m].average<<endl;cout<<endl;cout<<"确定删除?(Y/N)"<<endl;cin>>j; if(j=='Y'||j=='y') { for(intl=m;l<num;l++) { r[l]=r[l+1];} num--; t=1;} else { cout<<"学生记录未删除!"<<endl; gotoend;}} if((fp=fopen("student.txt","w+"))==NULL) { cout<<"文件不能打开!"<<endl; exit(0);} for(n=0;n<num;n++) { fprintf(fp,"%d%s%.1f%.1f%.1f%.1f%.1f",r[n].serial,r[n].name,r[n].BA_score,r[n].UE_score,r[n].DS_score,r[n].sum,r[n].average);fprintf(fp,"\n");} fclose(fp); cout<<"文件已经写入"<<endl; if(t==0) cout<<"该学号不存在!"<<endl;} else cout<<"未输入任何信息!"<<endl; end: cout<<"按任意键以返回主菜单"<<endl; getch(); system("cls");}voidsort_BA(Stu*r){ FILE*fp; if(num>0) {if((fp=fopen("student.txt","r"))==NULL) { cout<<"文件不能打开!"<<endl; exit(0);} for(intn=0;n<num;n++) { fscanf(fp,"%d%s%f%f%f%f%f",&r[n].serial,&r[n].name,&r[n].BA_score,&r[n].UE_score,&r[n].DS_score,&r[n].sum,&r[n].average);} for(intk=0;k<num-1;k++) { for(intm=0;m<num-k;m++) {Stumax; if(r[m].BA_score<r[m+1].BA_score) { max=r[m+1]; r[m+1]=r[m]; r[m]=max;}}} cout<<"排序完毕"<<endl; if((fp=fopen("student.txt","w"))==NULL) {cout<<"文件不能打开!"<<endl; exit(0);} for(intl=0;l<num;l++) { fprintf(fp,"%d%s%.1f%.1f%.1f%.1f%.1f",r[l].serial,r[l].name,r[l].BA_score,r[l].UE_score,r[l].DS_score,r[l].sum,r[l].average);fprintf(fp,"\n");} fclose(fp); cout<<"文件已经写入"<<endl;} else cout<<"未输入任何信息!"<<endl; cout<<"按任意键以显示排序结果"<<endl; getch(); system("cls");}voidsort_UE(Stu*r){ FILE*fp; if(num>0) { if((fp=fopen("student.txt","r"))==NULL) { cout<<"文件不能打开!"<<endl; exit(0);} for(intn=0;n<num;n++) { fscanf(fp,"%d%s%f%f%f%f%f",&r[n].serial,&r[n].name,&r[n].BA_score,&r[n].UE_score,&r[n].DS_score,&r[n].sum,&r[n].average);} for(intk=0;k<num-1;k++) { for(intm=0;m<num-k;m++) { Stumax; if(r[m].UE_score<r[m+1].UE_score) { max=r[m+1]; r[m+1]=r[m]; r[m]=max;}}} cout<<"排序完毕"<<endl; if((fp=fopen("student.txt","w"))==NULL) { cout<<"文件不能打开!"<<endl; exit(0);} for(intl=0;l<num;l++) { fprintf(fp,"%d%s%.1f%.1f%.1f%.1f%.1f",r[l].serial,r[l].name,r[l].BA_score,r[l].UE_score,r[l].DS_score,r[l].sum,r[l].average);fprintf(fp,"\n");} fclose(fp); cout<<"文件已经写入"<<endl;} else cout<<"未输入任何信息!"<<endl; cout<<"按任意键以显示排序结果"<<endl; getch(); system("cls");}voidsort_DS(Stu*r){ FILE*fp; if(num>0) { if((fp=fopen("student.txt","r"))==NULL) { cout<<"文件不能打开!"<<endl; exit(0);} for(intn=0;n<num;n++) { fscanf(fp,"%d%s%f%f%f%f%f",&r[n].serial,&r[n].name,&r[n].BA_score,&r[n].UE_score,&r[n].DS_score,&r[n].sum,&r[n].average);} for(intk=0;k<num-1;k++) { for(intm=0;m<num-k;m++) { Stumax; if(r[m].DS_score<r[m+1].DS_score) { max=r[m+1]; r[m+1]=r[m]; r[m]=max;}}} cout<<"排序完毕"<<endl; if((fp=fopen("student.txt","w"))==NULL) { cout<<"文件不能打开!"<<endl; exit(0);} for(intl=0;l<num;l++) { fprintf(fp,"%d%s%.1f%.1f%.1f%.1f%.1f",r[l].serial,r[l].name,r[l].BA_score,r[l].UE_score,r[l].DS_score,r[l].sum,r[l].average);fprintf(fp,"\n");} fclose(fp); cout<<"文件已经写入"<<endl;} else cout<<"未输入任何信息!"<<endl; cout<<"按任意键以显示排序结果"<<endl; getch(); system("cls");}voidsortnum(Stu*r){FILE*fp; if(num>0) { if((fp=fopen("student.txt","r"))==NULL) { cout<<"文件不能打开!"<<endl; exit(0);} for(intn=0;n<num;n++) { fscanf(fp,"%d%s%f%f%f%f%f",&r[n].serial,&r[n].name,&r[n].BA_score,&r[n].UE_score,&r[n].DS_score,&r[n].sum,&r[n].average);} for(intk=0;k<num-1;k++) { for(intm=0;m<num-k;m++) { Stumax; if(r[m].serial>r[m+1].serial) { max=r[m+1]; r[m+1]=r[m]; r[m]=max;}}} cout<<"排序完毕"<<endl; if((fp=fopen("student.txt","w"))==NULL) {cout<<"文件不能打开!"<<endl; exit(0);} for(intl=0;l<num;l++) { fprintf(fp,"%d%s%.1f%.1f%.1f%.1f%.1f",r[l].serial,r[l].name,r[l].BA_score,r[l].UE_score,r[l].DS_score,r[l].sum,r[l].average);fprintf(fp,"\n");} fclose(fp); cout<<"文件已经写入"<<endl;} else cout<<"未输入任何信息!"<<endl; cout<<"按任意键以显示排序结果"<<endl; getch(); system("cls");}voidsortsum(Stu*r){FILE*fp; if(num>0) {if((fp=fopen("student.txt","r"))==NULL) { cout<<"文件不能打开"<<endl; exit(0);} for(intn=0;n<num;n++) { fscanf(fp,"%d%s%f%f%f%f%f",&r[n].serial,&r[n].name,&r[n].BA_score,&r[n].UE_score,&r[n].DS_score,&r[n].sum,&r[n].average);} for(inti=0;i<num;i++) { intmax=i; for(intj=i+1;j<num;j++) { if(r[max].sum<r[
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防电话通话测试记录
- 2026年房地产经纪协理综合检测提分附答案详解【培优B卷】
- 2025安徽固镇县国有资本投资运营(集团)有限公司招聘23人笔试历年参考题库附带答案详解
- 2025四川雅投发展投资集团有限公司总部财务融资部副部长招聘笔试排名及人员笔试历年参考题库附带答案详解
- 2025四川九洲教育投资管理有限公司招聘项目管理专员测试笔试历年参考题库附带答案详解
- 2025四川九州电子科技股份有限公司招聘硬件开发岗测试笔试历年参考题库附带答案详解
- 2025内蒙古新城宾馆旅游业集团有限责任公司呼和浩特市分公司市场化选聘营销部副经理1人笔试历年参考题库附带答案详解
- 2025云南琞源商业运营管理有限公司招聘3人笔试历年参考题库附带答案详解
- 2025中远海运财产保险自保有限公司招聘1人笔试历年参考题库附带答案详解
- 儿科外科护理
- 部编初中语文文言文实词虚词归类复习及巩固练习集锦
- T-SMA 0050-2024 学生户外活动智能感知可穿戴设备的技术规范
- 国土变更技能竞赛理论考试题库(515题)
- 2023年高考各地试卷新高考I卷数学-解析
- 湖北省仙桃天门潜江2024-2025学年高一数学下学期期末考试试题
- DB50T 231-2024 城市桥梁养护技术规程
- AQ 1064-2008 煤矿用防爆柴油机无轨胶轮车安全使用规范(正式版)
- 风险管控和应急处置培训
- 会计基础及实训教案
- 广告项目服务方案(技术方案)
- 2017年福建省中考英语试题及答案
评论
0/150
提交评论