欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

题目1:学生成绩档案管理系统(实验准备)

程序员文章站 2022-04-02 10:20:02
题目1:学生成绩档案管理系统(实验准备)实验内容项目分析编程语言的选择项目思路基本类构建1.学生类2.基本功能类3.排序类(1)双向冒泡排序(2)希尔排序(3)快速排序(4)堆排序4.文件交互类(1)读取文件(2)保存文件5.主类实验内容学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;系统可对学生信息浏览、增加、删除和修改;按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序。要求可对学生信息查询,根据学号或姓名进行查找;信息修改仅可修改四门课成绩;文件存取...

实验内容

  • 学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;
  • 系统可对学生信息浏览、增加、删除和修改;
  • 按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序。
  • 要求可对学生信息查询,根据学号或姓名进行查找;
  • 信息修改仅可修改四门课成绩;
  • 文件存取学生信息。

项目分析

  • 新增学生信息(包括学号、姓名、专业、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