java实现学生成绩档案管理系统

作者:為什麼不问问神奇海螺呢 时间:2023-06-29 22:48:43 

本文实例为大家分享了java实现学生成绩档案管理系统的具体代码,供大家参考,具体内容如下

实验要求

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

实验设计

• 新增学生信息(包括学号、姓名、专业、4门课成绩……)
• 浏览学生信息(对学生排序后信息进行浏览)
• 删除学生信息(删除指定学生的信息,可给用户选择检索指定项)
• 查找学生信息(查找符合条件的某条记录)
• 保存学生信息(保存学生成绩档案信息到文本文件)
• 加载学生信息(登录系统后将磁盘文件中保存的学生成绩信息读取到内存中)

实验分析

初步分析

本实验采用dao模式进行编写,由于暂时没有学习数据库,故新建一个类来模拟保存数据库,此外,本人想法是将数据保存于excel文件中,并从excel文件中读取数据。

算法设计

快速排序


/**
    * 快速排序
    * 递归
    */
   private void quickSort(List<StuInfo> stuInfosList, int left, int right) {
       if (left >= right) {
           return ;
       }
       int l = left;
       int r = right;
       //基准值,取中间
       int key = stuInfosList.get(left).getSum();

boolean flag=true;
       //交换容器
       StuInfo student;
       while (l != r) {

if(flag){
               if(key<stuInfosList.get(r).getSum()){
                   student = stuInfosList.get(r);
                   stuInfosList.set(r, stuInfosList.get(l));
                   stuInfosList.set(l, student);
                   flag=false;
               }else{
                   r--;
               }
           }else {
               if (key>stuInfosList.get(l).getSum()){
                   student = stuInfosList.get(r);
                   stuInfosList.set(r, stuInfosList.get(l));
                   stuInfosList.set(l, student);
                   flag=true;
               }else {
                   l++;
               }
           }
       }
       quickSort(stuInfosList,left, r - 1);
       quickSort(stuInfosList, l + 1, right);
}

双向冒泡排序


/**
    * 双向冒泡排序
    */
   private void doubleBubbleSort(List<StuInfo> stuInfosList) {
       //设置一个交换容器
       StuInfo student;
       //左右指针
       int left = 0, right = stuInfosList.size() - 1;
       while (left < right) {
           for (int i = left + 1; i <= right; i++) {
               if (stuInfosList.get(left).getSum() < stuInfosList.get(i).getSum()) {
                   student = stuInfosList.get(i);
                   stuInfosList.set(i, stuInfosList.get(left));
                   stuInfosList.set(left, student);
               }
           }
           left++;
           for (int i = right; i >= left; i--) {
               if (stuInfosList.get(right).getSum() > stuInfosList.get(i).getSum()) {
                   student = stuInfosList.get(i);
                   stuInfosList.set(i, stuInfosList.get(right));
                   stuInfosList.set(right, student);
               }
           }
           right--;
       }
   }

堆排序


/**
    * 堆排序
    */
   private void heapSort(List<StuInfo> stuInfosList) {
       //建堆
       buildHeap(stuInfosList);
       StuInfo student;
       for (int i = stuInfosList.size() - 1; i >= 1; i--) {
           //交换
           student = stuInfosList.get(i);
           stuInfosList.set(i, stuInfosList.get(0));
           stuInfosList.set(0, student);
           //堆调整
           heapfity(stuInfosList, 0, i - 1);
       }
   }

/**
    * 堆调整
    */
   private void heapfity(List<StuInfo> stuInfosList, int index, int len) {
       int lchild = index * 2 + 1;
       int rchild = index * 2 + 2;

StuInfo student;
       int temp = 0;

if (lchild <= len && rchild <= len) {
           temp = stuInfosList.get(lchild).getSum() < stuInfosList.get(rchild).getSum() ? lchild : rchild;
       } else if (lchild <= len) {
           temp = lchild;
       } else if (rchild <= len) {
           temp = rchild;
       }
       //
       if (stuInfosList.get(temp).getSum() < stuInfosList.get(index).getSum()) {
           student = stuInfosList.get(temp);
           stuInfosList.set(temp, stuInfosList.get(index));
           stuInfosList.set(index, student);
       }
   }

/**
    * 建立小根堆
    */
   private void buildHeap(List<StuInfo> stuInfosList) {
       for (int i = stuInfosList.size() / 2 - 1; i >= 0; i--) {
           heapfity(stuInfosList, i, stuInfosList.size() - 1);
       }
   }

希尔排序


/**
    * 希尔排序
    */
   private void shellSort(List<StuInfo> stuInfosList) {

int step = stuInfosList.size() / 2;
       while (step >= 1) {

for (int start = 0; start < step; start++) {
               insertSort(stuInfosList, step, start);
           }
           step /= 2;
       }
   }

/**
    * 希尔排序循环内使用的插入排序
    */
   private void insertSort(List<StuInfo> stuInfosList, int step, int start) {
       //交换容器
       StuInfo student;
       for (int i = start + step; i < stuInfosList.size(); i += step) {
           for (int j = i; j - step >= 0 && stuInfosList.get(j).getSum() > stuInfosList.get(j - step).getSum(); j -= step) {
               student = stuInfosList.get(j);
               stuInfosList.set(j, stuInfosList.get(j - step));
               stuInfosList.set(j - step, student);
           }
       }
}

来源:https://blog.csdn.net/weixin_45436831/article/details/114602373

标签:java,成绩,管理系统
0
投稿

猜你喜欢

  • javaweb实现app扫码登录功能

    2022-03-25 03:48:19
  • SpringBoot集成Swagger2的方法

    2023-11-26 13:15:42
  • init output stream初始化输出流源码分析

    2023-01-08 09:53:20
  • Android使用RecyclerView仿美团分类界面

    2022-10-03 09:52:23
  • Java 深入探究讲解简单工厂模式

    2022-12-25 12:02:06
  • SpringBoot security安全认证登录的实现方法

    2021-05-30 08:09:56
  • mybatis根据表逆向自动化生成代码的实现

    2023-03-12 15:39:02
  • ContentProvider启动流程示例解析

    2023-07-31 03:57:34
  • Android Studio 3.5版本JNI生成SO文件详解

    2022-06-11 19:34:11
  • Android 实现双击退出的功能

    2021-06-16 09:08:45
  • Android仿英语流利说取词放大控件的实现方法(附demo源码下载)

    2022-07-10 23:14:18
  • Android开发-之环境的搭建(图文详解)

    2022-01-12 00:54:26
  • Java枚举学习之定义和基本特性详解

    2022-07-23 20:29:44
  • Spring Security入门demo案例

    2023-07-01 18:57:30
  • 在winform下实现左右布局多窗口界面的方法

    2023-02-23 11:31:51
  • C++中智能指针如何设计和使用

    2023-03-02 01:43:53
  • Spring动态配置计时器触发时间的实例代码

    2023-01-20 07:30:01
  • Java中switch的三种用法方式小结

    2023-11-24 03:40:21
  • 详解Zookeeper基础知识

    2023-07-31 08:03:45
  • idea2019版与maven3.6.2版本不兼容的解决方法

    2021-07-13 16:48:10
  • asp之家 软件编程 m.aspxhome.com