一. 实践内容
学生成绩档案管理系统
(1)实践任务
- 学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;
- 系统可对学生信息浏览、增加、删除和修改;
- 按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序。
- 要求可对学生信息查询,根据学号或姓名进行查找;
- 信息修改仅可修改四门课成绩;
- 文件存取学生信息。
(2)项目需求
- 新增学生信息(包括学号、姓名、专业、4门课成绩……)
- 浏览学生信息(对学生排序后信息进行浏览)
- 删除学生信息(删除指定学生的信息,可给用户选择检索指定项)
- 查找学生信息(查找符合条件的某条记录)
- 保存学生信息(保存学生成绩档案信息到文本文件)
- 加载学生信息(登录系统后将磁盘文件中保存的学生成绩信息读取到内存中)
二. 开发环境
实现语言:Java
开发平台:IntelliJ IDEA
三. 项目设计
(1)类定义
- 学生信息类
stuNum //学号
stuName //姓名
stuMajor //专业
stuScore1 //课程1成绩
stuScore2 //课程2成绩
stuScore3 //课程3成绩
stuScore4 //课程4成绩
stuTotalScore //总成绩
stuRank //排名
- 系统用户类
accountNum //用户账号
accountPassword //账户密码
- 数据库类
accountList //用户列表
stuList //学生列表
- 文本交互类
学生信息写入导出
- 系统用户方法类
系统用户信息增删改查
- 学生信息方法类
学生信息增删改查
- 账户登录系统类
系统登录界面及具体方法
- 学生信息管理类
学生信息管理界面及具体方法
- 主系统类
系统入口界面及具体方法
(2)排序算法
- 双向冒泡排序
比较相邻两个元素的大小。如果前一个元素比后一个元素大,则两元素位置交换;
对数组中所有元素的组合进行第1步的比较;
奇数趟时从左向右进行比较和交换;
偶数趟时从右向左进行比较和交换;
当从左端开始遍历的指针与从右端开始遍历的指针相遇时,排序结束。
- 希尔排序
先取一个小于n的步长d1,把表中全部元素怒分成d1个组,所有距离为d1的倍数的记录放在同一个组中,在各组中进行直接插入排序;
取第二个步长d2<d1,重复上述过程,直到所取到的d=1,即所有元素已放在同一组中,再进行直接插入排序。
- 快速排序
先从数列中取出一个数作为基准数;
将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边;
再对左右区间重复上述二步,直到各区间只有一个数。
- 堆排序
首先将待排序的数组构造成一个大根堆,此时,整个数组的最大值就是堆结构的顶端;
将顶端的数与末尾的数交换,此时,末尾的数为最大值,剩余待排序数组个数为n-1;
将剩余的n-1个数再构造成大根堆,再将顶端数与n-1位置的数交换,如此反复执行,便能得到有序数组。