数据结构课程实践
实践准备
题目1:学生成绩档案管理系统
实验任务:
(1)学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;
(2)系统可对学生信息浏览、增加、删除和修改;
(3)按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序。
(4)要求可对学生信息查询,根据学号或姓名进行查找;
(5)信息修改仅可修改四门课成绩;
(6)文件存取学生信息。
任务目标:
(1)新增学生信息(包括学号、姓名、专业、4门课成绩……)
(2)浏览学生信息(对学生排序后信息进行浏览)
(3)删除学生信息(删除指定学生的信息,可给用户选择检索指定项)
(4)查找学生信息(查找符合条件的某条记录)
(5)保存学生信息(保存学生成绩档案信息到文本文件)
(6)加载学生信息(登录系统后将磁盘文件中保存的学生成绩信息读取到内存中)
编程语言:java
编程软件:IntelliJ IDEA
项目思路
基本类构建
1.学生类
属性 | 名称 | 数据类型 |
---|---|---|
学号 | id | Int |
姓名 | name | String |
专业 | major | String |
高数成绩 | High number of scores | Double |
Java成绩 | java-scores | Double |
C++成绩 | C++scores | Double |
英语成绩 | english-scores | Double |
总成绩 | sll_scores | Double |
排名 | ranking | Int |
2.基本功能类
对学生信息的增删改查。
3.排序类
使用双向冒泡排序、希尔排序、快速排序、堆排序按照学生总成绩排序。
(1)双向冒泡排序
1.比较相邻两个元素的大小。如果前一个元素比后一个元素大,则两元素位置交换
2.对数组中所有元素的组合进行第1步的比较
3.奇数趟时从左向右进行比较和交换
4.偶数趟时从右向左进行比较和交换
5.当从左端开始遍历的指针与从右端开始遍历的指针相遇时,排序结束
private void core(int[] array) {
int arrayLength = array.length;
int preIndex = 0;
int backIndex = arrayLength - 1;
while(preIndex < backIndex) {
preSort(array, arrayLength, preIndex);
preIndex++;
if (preIndex >= backIndex) {
break;
}
backSort(array, backIndex);
backIndex--;
}
}
// 从前向后排序
private void preSort(int[] array, int length, int preIndex) {
for (int i = preIndex + 1; i < length; i++) {
if (array[preIndex] > array[i]) {
ArrayUtils.swap(array, preIndex, i);
}
}
}
// 从后向前排序
private void backSort(int[] array, int backIndex) {
for (int i = backIndex - 1; i >= 0; i--) {
if (array[i] > array[backIndex]) {
ArrayUtils