面向对象程序设计实验三:学生成绩管理系统

本文介绍了如何使用Java的类与对象概念,实现一个包含学生成绩管理、菜单操作(查看、添加、修改、删除、统计、查找和排序)的简单信息系统。详细步骤包括创建Score类和ScoreList类,以及在ScoreTest中集成这些功能进行操作。
摘要由CSDN通过智能技术生成

实验目的与要求

实验目的:

1.掌握java的类与对象的基本概念;

2.掌握简单的信息管理系统的设计与实现。

实验要求:

1. 一人一组完成实验,提交编写的源代码和实验报告。

2. 所编写的程序要能成功运行,通过现场测试。

3. 从一个功能点出发,接着一个功能一个功能地扩充程序代码。

实验原理与内容

(一) 问题描述

要求采用java类与对象的基本知识,实现简单的学生成绩管理系统。

(二) 实验要求

  1. 实现定义学生成绩记录,记录包括字段有:序号、学生姓名、学号、课程名称、成绩。
  2. 实现学生成绩管理系统的菜单管理功能,允许查看、添加、修改、删除、统计、查找和排序等操作;
  3. 实现查看学生成绩单功能,能显示所有学生成绩记录;
  4. 实现添加学生成绩记录功能,输入某位学生某门课的成绩,能保存到成绩表里面;
  5. 实现修改学生成绩记录功能,根据学生学号修改课程成绩;
  6. 实现删除学生成绩记录功能,根据学生学号删除课程成绩;
  7. 实现统计某门课平均分、最高分和最低分的功能;
  8. 实现查找某位学生成绩功能,根据学生学号显示该学生的成绩;
  9. 实现按成绩从高往低排序,并输出。

实验设备与软件环境

  1. Windows系统或MacOS系统
  2. JDK作为运行支持环境
  3.  Eclipse或IDEA作为开发工具

实验过程与结果

        第一步-建立一个Score类

public class Score {
    String id;
    String name;
    double score;

    /*构造方法*/
    public Score() {
    }

    /*set方法*/
    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        
        this.name = name;
    }

    public void setScore(double score) {
        
        this.score = score;
    }
}

        第二步-建立一个ScoreList类

public class ScoreList {
    //实现查看学生成绩单功能
    int maxLength = 100;
    int length = 0;
    Score[] data = new Score[maxLength];
    Scanner input = new Scanner(System.in);

    /*构造函数*/
    public ScoreList() {
    }

    //1.显示成绩单方法
    public void showAll() {
        System.out.println("姓名\t\t\t学号\t\t\t成绩");
        int i;
        for(i = 0; i < length; i++) {
            System.out.println(data[i].name + "\t\t\t" + data[i].id + "\t\t\t" + data[i].score);
        }
        /*如果没有学生成绩记录,输出提醒*/
        if(i == 0) {
            System.out.println("成绩记录为空,请添加后再次查询");
        }
    }

    //2.实现添加学生成绩记录功能
    public void addScore() {
        if(length <= maxLength) {
            data[length] = new Score();
            System.out.println("请输入学生的学号:");
            //写入学生学号
            data[length].setId(input.next());
            System.out.println("请输入学生的姓名:");
            //写入学生姓名
            data[length].setName(input.next());
            System.out.println("请输入学生的课程名称:");
            //写入成绩
            data[length].setScore(input.nextDouble());
            length++;
            System.out.println("添加成功!");
        } else {
            System.out.println("添加失败!");
        }
    }

    //实现修改学生成绩记录功能
    public void updateScore() {
        System.out.println("请输入你要修改信息的学生学号:");
        String number1 = input.next();
        int i;
        for(i = 0; i < length; i++) {
            /*查询判断成绩单是否有该学号*/
            if(number1.equals(data[i].id)) {
                System.out.println("请输入该学生新的学号,姓名和成绩:");
                data[i].setId(input.next());
                data[i].setName(input.next());
                data[i].setScore(input.nextDouble());
                System.out.println("修改成功!\n");
                break;
            }
        }
        if(i == length) {
            System.out.println("查无此人!请核对后重新输入学号\n");
            updateScore();
        }
    }

    //实现删除学生成绩记录功能
    public void deleteScore() {
        System.out.println("请输入你要删除信息的学生的学号");
        String number2 = input.next();
        int i, flag = length;
        for(i = 0; i < length; i++) {
            if(number2.equals(data[i].id)) {
                flag = i;
                break;
            }
        }
        if(i == length) {
            System.out.println("查无此人!请核对后重新输入\n");
            deleteScore();
        } else {
            for(int j = flag; j < length; j++) {
                data[j] = data[j + 1];
            }
            System.out.println("删除成功!\n");
            length -= 1; //删除成功后对数组减1 不然会导致数组越界
        }
    }

    //实现统计某门课平均分
    public void avgScore() {
        double sum = 0.0;
        double max = 0.0;
        double min = 100.0;
        for(int i = 0; i < length; i++) {
            sum += data[i].score;
            /*使用三目运算符判断最大值*/
            max = max > data[i].score ? max : data[i].score;
            min = min < data[i].score ? min : data[i].score;
        }
        System.out.println("这门课的平均成绩为:\n" + sum / length);
        System.out.println("最高分为:" + max + "\n" + "最低分为:" + min + "\n");
    }

    //实现查找某位学生成绩功能
    public void queryScore() {
        System.out.println("请输入你要查看信息的学生的学号");
        String number3 = input.next();
        int i;
        for(i = 0; i < length; i++) {
            if(number3.equals(data[i].id)) {
                System.out.println("========================================");
                System.out.println("学号\t\t\t姓名\t\t\t成绩");
                System.out.println(data[i].id + "\t\t" + data[i].name + "\t\t" + data[i].score + "\n");
                System.out.println("========================================\n");
                break;
            }
        }
        if(i == length) {
            System.out.println("查无此人!请核对后重新输入学号:\n");
            queryScore();
        }
    }

    //实现按成绩从高往低排序
    public void sortScore() {
        Score score = new Score();
        for(int i = 1; i < length; i++) {
            for(int j = 0; j < length - i; j++) {
                if(data[j].score < data[j + 1].score) {  //使用冒泡排序法
                    score = data[j];
                    data[j] = data[j + 1];
                    data[j + 1] = score;
                }
            }
        }
    }
}

        最后一步,建立一个ScoreTest类:

public class ScoreTest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String choice = "1";
        ScoreList studentScoreList = new ScoreList();
        System.out.println("***********学生成绩管理系统************");
        while(choice.equals("0") == false) {
            System.out.println("1.查看学生成绩单");
            System.out.println("2.添加学生成绩记录");
            System.out.println("3.修改学生成绩记录");
            System.out.println("4.删除学生成绩记录");
            System.out.println("5.统计这门课平均分、最高分和最低分");
            System.out.println("6.查看某位学生成绩记录");
            System.out.println("7.按成绩从高到低排序");
            System.out.println("0.退出程序");
            System.out.println("Enter your Choice:");
            choice = input.next();
            switch(choice) {
                /*退出程序*/
                case "0":
                    System.out.println("谢谢您的使用,欢迎下次光临!\n" + "*******按任意键结束程序********");
                    break;

                /*查看学生成绩单*/
                case "1":
                    studentScoreList.showAll();
                    System.out.println("请问您还需要什么服务?\n");
                    break;
                /*添加学生成绩记录*/
                case "2":
                    int i = 1;
                    /*当i==1时,继续添加*/
                    do {
                        studentScoreList.addScore();
                        System.out.println("\n是否继续添加?" + "\n" + "0.否" + "\n" + "1.是");
                        i = input.nextInt();
                    } while(i == 1);
                    studentScoreList.showAll();
                    System.out.println("请问您还需要什么服务?\n");
                    break;
                /*修改学生成绩记录*/
                case "3":
                    studentScoreList.updateScore();
                    studentScoreList.showAll();
                    System.out.println("请问您还需要什么服务?\n");
                    break;
                /*删除学生成绩记录*/
                case "4":
                    studentScoreList.deleteScore();
                    studentScoreList.showAll();
                    System.out.println("请问您还需要什么服务?\n");
                    break;
                /*统计这门课平均分、最高分和最低分*/
                case "5":
                    studentScoreList.avgScore();
                    System.out.println("请问您还需要什么服务?\n");
                    break;

                /*查看某位学生成绩记录*/
                case "6":
                    studentScoreList.queryScore();
                    System.out.println("请问您还需要什么服务?\n");
                    break;

                /*按成绩从高到低排序*/
                case "7":
                    studentScoreList.sortScore();
                    studentScoreList.showAll();
                    System.out.println("请问您还需要什么服务?\n");
                    break;
                default:
                    System.out.println("Invalid input! Please enter again.");
                    break;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值