题目1:学生成绩档案管理系统(实验准备)
程序员文章站
2022-07-08 15:39:49
题目1:学生成绩档案管理系统(实验准备)实验内容项目分析编程语言的选择项目思路基本类构建1.学生类2.基本功能类3.排序类(1)双向冒泡排序(2)希尔排序(3)快速排序(4)堆排序4.文件交互类(1)读取文件(2)保存文件5.主类实验内容学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;系统可对学生信息浏览、增加、删除和修改;按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序。要求可对学生信息查询,根据学号或姓名进行查找;信息修改仅可修改四门课成绩;文件存取...
题目1:学生成绩档案管理系统(实验准备)
实验内容
- 学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;
- 系统可对学生信息浏览、增加、删除和修改;
- 按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序。
- 要求可对学生信息查询,根据学号或姓名进行查找;
- 信息修改仅可修改四门课成绩;
- 文件存取学生信息。
项目分析
- 新增学生信息(包括学号、姓名、专业、4门课成绩……)
- 浏览学生信息(对学生排序后信息进行浏览)
- 删除学生信息(删除指定学生的信息,可给用户选择检索指定项)
- 查找学生信息(查找符合条件的某条记录)
- 保存学生信息(保存学生成绩档案信息到文本文件)
- 加载学生信息(登录系统后将磁盘文件中保存的学生成绩信息读取到内存中)
编程语言的选择
- 编程语言:Java
- 编译环境:JDK1.8
- 开发工具:IntelliJ IDEA
项目思路
基本类构建
1.学生类
属性 | 名称 | 数据类型 |
---|---|---|
学号 | id | int |
姓名 | name | String |
专业 | major | String |
数学成绩 | math_grade | double |
英语成绩 | english_grade | double |
Java成绩 | java_grade | double |
C++成绩 | cpp_grade | double |
总成绩 | all_grade | double |
排名 | sort | int |
代码实现如下:
package com.igeek.pojo;
import java.util.Objects;
/**
* @author 86183
* @ClassName: IntelliJ IDEA
* @Description:
* @date 2021/3/1 11:01
*/
public class Student_Node {
private int id;
private String name;
private String major;
private double math_grade;
private double english_grade;
private double java_grade;
private double cpp_grade;
private double all_grade;
private int sort;
public Student_Node() {
}
public Student_Node(int id, String name, String major, double math_grade,
double english_grade, double java_grade, double cpp_grade,
double all_grade, int sort) {
this.id = id;
this.name = name;
this.major = major;
this.math_grade = math_grade;
this.english_grade = english_grade;
this.java_grade = java_grade;
this.cpp_grade = cpp_grade;
this.all_grade = all_grade;
this.sort = sort;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public double getMath_grade() {
return math_grade;
}
public void setMath_grade(double math_grade) {
this.math_grade = math_grade;
}
public double getEnglish_grade() {
return english_grade;
}
public void setEnglish_grade(double english_grade) {
this.english_grade = english_grade;
}
public double getJava_grade() {
return java_grade;
}
public void setJava_grade(double java_grade) {
this.java_grade = java_grade;
}
public double getCpp_grade() {
return cpp_grade;
}
public void setCpp_grade(double cpp_grade) {
this.cpp_grade = cpp_grade;
}
public void setAll_grade() {
this.all_grade = this.math_grade + this.english_grade + this.java_grade + this.cpp_grade;
}
public double getAll_grade() {
return all_grade;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student_Node that = (Student_Node) o;
return id == that.id &&
Double.compare(that.math_grade, math_grade) == 0 &&
Double.compare(that.english_grade, english_grade) == 0 &&
Double.compare(that.java_grade, java_grade) == 0 &&
Double.compare(that.cpp_grade, cpp_grade) == 0 &&
Double.compare(that.all_grade, all_grade) == 0 &&
Double.compare(that.sort, sort) == 0 &&
Objects.equals(name, that.name) &&
Objects.equals(major, that.major);
}
@Override
public int hashCode() {
return Objects.hash(id, name, major, math_grade, english_grade,
java_grade, cpp_grade, all_grade, sort);
}
@Override
public String toString() {
return id + "\t" + name + "\t" + major + "\t" + math_grade + "\t" + english_grade + "\t" +
java_grade + "\t" + cpp_grade + "\t" + all_grade + "\t" + sort;
}
}
2.基本功能类
3.排序类
(1)双向冒泡排序
代码实现如下:
package com.igeek.sort;
import com.igeek.pojo.Student_Node;
import java.util.ArrayList;
/**
* @author 86183
* @ClassName: IntelliJ IDEA
* @Description:
* @date 2021/3/1 11:14
*/
public class Bidirectional_bubble_Sort {
/**
* 根据总成绩排序
*
* @param list
*/
public void sortByAll(ArrayList<Student_Node> list) {
boolean needNextPass = true;
for (int i = 0, j; i < list.size() / 2 && needNextPass; i++) {
needNextPass = false;
// 正向排序
for (j = i; j < list.size() - 1 - i; j++) {
if (list.get(j).getAll_grade() < list.get(j + 1).getAll_grade()) {
Student_Node student = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, student);
needNextPass = true;
}
}
// 反向排序
for (--j; j > i; j--) {
if (list.get(j).getAll_grade() > list.get(j - 1).getAll_grade()) {
Student_Node student = list.get(j);
list.set(j, list.get(j - 1));
list.set(j - 1, student);
needNextPass = true;
}
}
}
for (Student_Node s : list) {
s.setSort(list.indexOf(s) + 1);
}
}
}
(2)希尔排序
代码实现如下:
package com.igeek.sort;
import com.igeek.pojo.Student_Node;
import java.util.ArrayList;
/**
* @author 86183
* @ClassName: IntelliJ IDEA
* @Description:
* @date 2021/3/1 14:23
*/
public class Shell_Sort {
/**
* 根据总成绩排序
*
* @param list
*/
public void sortByAll(ArrayList<Student_Node> list) {
for (int gap = (int) Math.floor((list.size()) / 2); gap > 0; gap = (int) Math.floor(gap / 2)) {
for (int i = gap; i < list.size(); i++) {
int j = i;
double value = list.get(i).getAll_grade();
Student_Node student = list.get(i);
while (j - gap >= 0 && value > list.get(j - gap).getAll_grade()) {
list.set(j, (list.get(j - gap)));
j = j - gap;
}
list.set(j, student);
}
}
for (Student_Node s : list) {
s.setSort(list.indexOf(s) + 1);
}
}
}
(3)快速排序
代码实现如下:
package com.igeek.sort;
import com.igeek.pojo.Student_Node;
import java.util.ArrayList;
/**
* @author 86183
* @ClassName: IntelliJ IDEA
* @Description:
* @date 2021/3/1 14:36
*/
public class Quick_Sort {
/**
* 根据总成绩排序
*
* @param list
* @param low
* @param high
*/
public void sortByAll(ArrayList<Student_Node> list, int low, int high) {
int i, j;
Student_Node student;
double temp;
if (low > high) {
return;
}
i = low;
j = high;
//temp就是基准位
temp = list.get(low).getAll_grade();
while (i < j) {
//先看右边,依次往左递减
while (temp >= list.get(j).getAll_grade() && i < j) {
j--;
}
//再看左边,依次往右递增
while (temp <= list.get(i).getAll_grade() && i < j) {
i++;
}
//如果满足条件则交换
if (i < j) {
student = list.get(j);
list.set(j, list.get(i));
list.set(i, student);
}
}
//最后将基准为与i和j相等位置的数字交换
student = list.get(low);
list.set(low, list.get(i));
list.set(i, student);
//递归调用左半数组
sortByAll(list, low, j - 1);
//递归调用右半数组
sortByAll(list, j + 1, high);
for (Student_Node s : list) {
s.setSort(list.indexOf(s) + 1);
}
}
}
(4)堆排序
代码实现如下:
package com.igeek.sort;
import com.igeek.pojo.Student_Node;
import java.util.ArrayList;
/**
* @author 86183
* @ClassName: IntelliJ IDEA
* @Description:
* @date 2021/3/1 14:47
*/
public class Heap_Sort {
/**
* 堆排序
* 根据总成绩排序
*/
public void sortByAll(ArrayList<Student_Node> list) {
//一次调整,最大值到了根节点
for (int i = (list.size() - 1 - 1) / 2; i >= 0; i--) {//i相当于start
adjust(list, i, list.size() - 1);
}
//最后一个值与根节点交换
Student_Node student = new Student_Node();
for (int j = 0; j < list.size() - 1; j++) {
student = list.get(0);
list.set(0, list.get(list.size() - 1 - j));
list.set(list.size() - 1 - j, student);
adjust(list, 0, list.size() - 1 - 1 - j);//调整最大的树
}
for (Student_Node s : list) {
s.setSort(list.indexOf(s) + 1);
}
}
public static void adjust(ArrayList<Student_Node> list, int start, int end) {
Student_Node student = list.get(start);
//一次调整过程
for (int i = 2 * start + 1; i <= end; i = 2 * i + 1) {
//找到左右孩子的最大值
if (i < end && list.get(i).getAll_grade() > list.get(i + 1).getAll_grade()) {
i++; //最大值下标
}
if (list.get(i).getAll_grade() < student.getAll_grade()) {
list.set(start, list.get(i)); //设置第start个位置元素的值
start = i;
}
if (list.get(i).getAll_grade() > student.getAll_grade()) {
break;
}
}
list.set(start, student);
}
}
4.文件交互类
(1)读取文件
(2)保存文件
5.主类
本文地址:https://blog.csdn.net/KT_xiaobai/article/details/114265211
上一篇: 设计模式:创建型-单例模式
下一篇: 普歌-允异团队-java做小成果