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

学生成绩档案管理系统

一、实验要求

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

二、编程语言及开发环境

java
IDE使用的是idea,jdk版本为1.8

三、项目设计思路

1.双向冒泡排序

public List<Student> doubleBubbleSort(List<Student> studentList){
        List<Student> list=studentList;
        Student student=null;
        int left=0,right=studentList.size()-1;
        while(left<right)
        {
            for(int i=left+1;i<=right;i++){
                if(list.get(left).getSum()<list.get(i).getSum()){
                    student=list.get(i);
                    list.set(i,list.get(left));
                    list.set(left,student);
                }
            }
            left++;
            for(int i=right-1;i>=left;i--){
                if(list.get(right).getSum()>list.get(i).getSum()){
                    student=list.get(i);
                    list.set(i,list.get(right));
                    list.set(right,student);
                }
            }
            right--;
        }
        return list;
    }

2.快速排序

public List<Student> quickSort(List<Student> studentList){
        List<Student> list=studentList;
        quickSort1(list,0,list.size()-1);
        return list;
    }
    public void quickSort1(List<Student> studentList,int left,int right){
        if(left<right){
            int i=left,j=right;
            Student student=studentList.get(left);
            double x=student.getSum();
            while(i<j){
                while((i<j)&&(studentList.get(j).getSum()<x)){
                    j--;
                }
                if(i<j){
                    studentList.set(i,studentList.get(j));
                    i++;
                }
                while((i<j)&&(studentList.get(i).getSum()>x)){
                    i++;
                }
                if(i<j){
                    studentList.set(j,studentList.get(i));
                    j--;
                }
            }
            studentList.set(i,student);
            quickSort1(studentList,left,i-1);
            quickSort1(studentList,i+1,right);
        }
    }

3.希尔排序

  public List<Student> shellSort(List<Student> studentList){
        List<Student> list=studentList;
        Student student=null;
        int j;
        for (int gap = list.size() / 2; gap >  0; gap /= 2) {
            for (int i = gap; i < list.size(); i++) {
                student=list.get(i);
                double tmp=student.getSum();
                for (j = i; j >= gap && tmp>list.get(j-gap).getSum(); j -= gap) {
                    list.set(j,list.get(j-gap));
                }
                list.set(j,student);
            }
        }
        return list;
    }

4.堆排序

 public List<Student> heapSort(List<Student> studentList){
        List<Student> list=studentList;
        int len = list.size();

        buildMaxHeap(list, len);

        for (int i = len - 1; i > 0; i--) {
            swap(list, 0, i);
            len--;
            heapify(list, 0, len);
        }
        return list;
    }

    private void buildMaxHeap(List<Student> studentList, int len) {
        for (int i = (int) Math.floor(len / 2); i >= 0; i--) {
            heapify(studentList, i, len);
        }
    }

    private void heapify(List<Student> studentList, int i, int len) {
        int left = 2 * i + 1;
        int right = 2 * i + 2;
        int largest = i;

        if (left < len && studentList.get(left).getSum() < studentList.get(largest).getSum()) {
            largest = left;
        }

        if (right < len && studentList.get(right).getSum() < studentList.get(largest).getSum()) {
            largest = right;
        }

        if (largest != i) {
            swap(studentList, i, largest);
            heapify(studentList, largest, len);
        }
    }

    private void swap(List<Student> studentList, int i, int j) {
        Student student=studentList.get(i);
        studentList.set(i,studentList.get(j));
        studentList.set(j,student);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值