输入学生成绩 输出学生成绩 查询学生成绩 修改学生成绩 主 界 面 插入学生成绩 删除学生信息 按总分排序 按单科排序 统计分数 退出 退 出 输 入 学 生 个 数
2、界面设计
在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:选择1,即可进入输入学生信息页面)
6
3、各功能模块的设计
主函数模块:
用函数void main()来实现
主要是来显示主菜单,使用户选择操作。首先定义一个指针数组(全局使用)Student *p=(Student *)new Student[num];在此处num是指学生个数,并不是学号,在这里应用了do-while和switch-case语句来进行选择。最后若选择“11”则是保存记录并退出循环。
输入学生记录模块:
用函数void input(Student *r);来实现
主要功能用来对学生的成绩进行输入。首先会有个提示“输入学生的个数”,之后跳出主菜单,选择\,进入输入模块输入所需学生个数的学生信息,比如学期,学号,姓名,成绩等。输完之后会自动跳出主菜单。期间会有一些提示语,按照提示操作。根据if和for语句来判定是否有重复学号输入,在本操作中,允许有重复学生姓名出现。t=1表示找到了与之重复的学号,t=0表示未出现重复学号。在此期间会根据语句算出总分和平均分,并默认按学号排序保存到文件中去。之后返回主菜单。 输出学生记录模块:
用函数void output(Student *r);来实现 主要功能是用来输出学生的信息。在系统已经录入了学生资料的前提下,用该功能可以显示学生的信息资料。同时也会自动跳出主菜单进行后续操作。其中stew()指的是两字节之间的间隔,在括号中填入数字就会有相应的间隔。 按学号及学期来查找学生记录模块:
用函数void searchnum(Student *r);来实现 主要功能时用来查找学生记录。首先会有提示输入学号及学期,再用for循环语句和if判断语句来进行查找,if(r[m].num==n&&r[m].term==k)若找到则显示学生记录并跳出循环;if(r[m].num!=n&&r[m].term!=k)若没有则提示“该学号不存在,或没有这个学期的成绩!”。
按姓名及学期来查找学生记录模块:
用函数void searchname(Student *r)来实现 主要功能也是用来查找学生记录的。首先会有提示输入姓名及学期,再用for循环语句和if判断语句来进行查找,if((r[m].name[0] == n[0]) && (r[m].term == k))若找到则显示学生记录并跳出循环;if(r[m].name[0]!=n[0]&&r[m].term!=k)若没有则提示\该姓名不存在,或没有这个学期的成绩!\按学号及学期修改信息:
用函数void change(Student *r)来实现
主要功能是用来修改学生记录。首先也要有个判断语句,判断学生是否存在,这个是通过学号及学期来判断的,这里会有提示输入学号及学期,之后是for和if语句,if(r[m].num==n && r[m].term==k)若存在则先输出修改之前的信息,查看是否正确。若正确,则修改此学生记录,这里有个while循环语句,和switch-case选择语句,用来选择修改哪科成绩,和是否进行再修改记录(通过选择Y或y来实现)。最后将修改过后的记录保存到文件中去,并输出提示\文件已修改并写入\。 插入学生资料模块:
用函数Student *insert(Student *r);实现
主要功能是用来添加学生资料,成绩。若显示没有此学生的信息,就可以使用本模块来进行添加。在此模块代码中定义了另一个指针数组:Student *y = (Student *)new
7
Student[num+1];用来存放新添加的学生记录。再利用for循环进行输入新学生记录,for(m=0;m 用函数void shanchu(Student *r)来实现 主要功能是用来删除学生记录。首先有个读文件的操作,之后会有判断语句,根据所输入的学号及学期,来显示删除前的信息记录,添加for循环语句,循环把后一位的信息提前一位,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。 按数据结构成绩(冒泡)降序排序模块 用函数void maopao(Student *r) 来实现 主要功能时是用来对学生的记录来按单科成绩(这里以数据结构成绩为例)进行排序。这样方便对某科成绩有个大致的了解。首先会有一个读文件操作,为排序做基础。本排序使用冒泡排序。它有两个优点:一是很容易写出代码;二是具有稳定性,这里的稳定性是指原序列中相同两元素的相对顺序仍然保持到排序后的序列。冒泡排序时进过n-1趟子排序完成的,第i趟子排序从第1个数至第n+1个数,若第i个数比后一个数大(则升序,小则降序。本程序一律采用降序)则交换两数。排序之后,将排序之后的结果写入文件,再打开文件的时候,里面显示的就是按单科成绩排序后的结果。 按总分(选择)降序排序: 用函数void xuanze(Student *r)来实现 主要功能时是用来对学生的记录来按总分成绩进行排序。这样方便对学生总体有个大致的了解。首先会有一个读文件操作,为排序做基础。本排序使用选择排序。其基本思想是:n个记录的文件的直接选择排序可进过n-1趟直接选择排序得到有序结果:①初始状态,无序区为R[1..n],有序区为空。②第一趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第一个记录R[1]交换,使R[1..n]和R[2..n]分别变为记录个数增加1个的新有序区记录和记录数减少1个的新无序区。 ..... ③第i趟排序 第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第一个记录与R交换,使R[1..i]和R分别变成为记录个数增加1个的新有序区和记录个数减少1个的新无序区。这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。 统计各科总分及平均分模块: 用函数void tongji(Student *r)来实现 主要功能是计算总分和各科平均分,计算完之后将总分保存到文件中。 8 4、 测试与分析 进入主界面选择<1>输入学生信息 输入结束后的界面: Student.txt: 23 赵月 89.0 92.0 88.0 3 269.0 89.7 12 李丽 92.0 85.0 88.0 3 265.0 88.3 31 王虎 87.0 79.0 45.0 3 211.0 70.3 9 选择<2>,输出了学生信息: 选择<3>,按学号及学期查询学生信息: 10