【JavaSE项目】利用数组完成学生管理系统【简】

【JavaSE项目】利用数组完成学生管理系统【简】

项目描述

设计一个名为Student的类,包括属性有"学号"、“姓名”、以及3门课程
“数学”、“英语"和"计算机"的成绩,包括的方法有计算3门课程的"总分”、
“平均分”、“最高分"及"最低分”。
使用数组来实现对多个学生的管理。写一个控制台应用程序。
菜单如下:
 1.添加学生
 2.删除学生
 3.查询学生
 4.修改学生
 5.打印学生
打印格式如下
学号 姓名 数学 英语 计算机
01 张三 56 65 77
02 李四 89 55 44
 6.统计学生:
所有学生的“数学”、“英语”和“计算机”每门课程总的平均成绩、最高分、最低分。
打印格式:
学科 平均成绩 最高分 最低分
数学
英语

class Student2 {//学生类
    private String id;//学号
    private String name;//姓名
    private float math;//数学成绩
    private float english;//英语成绩
    private float computer;//计算机成绩

    public Student2() {
    }

    public Student2(String id, String name, float math, float english, float computer) {
        this.id = id;
        this.name = name;
        this.math = math;
        this.english = english;
        this.computer = computer;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public float getMath() {
        return math;
    }

    public void setMath(float math) {
        this.math = math;
    }

    public float getEnglish() {
        return english;
    }

    public void setEnglish(float english) {
        this.english = english;
    }

    public float getComputer() {
        return computer;
    }

    public void setComputer(float computer) {
        this.computer = computer;
    }

    @Override
    public String toString() {
        return id + "\t\t\t" + name + "\t\t" + math + "\t\t" + english + "\t\t" + computer;
    }

    /*
        三门课程的总和
     */
    public float sum() {
        return getMath() + getEnglish() + getComputer();
    }

    /*
        三门课程的平均值
     */
    public float avg() {
        return (getMath() + getEnglish() + getComputer()) / 3;
    }

    /*
        三门课程中的最大值
     */
    public float max() {
        float m = getMath();
        float e = getEnglish();
        float c = getComputer();

        float max = Math.max(m, e);
        max = Math.max(max, c);

        return max;
    }

    /*
        三门课程中的最小值
     */
    public float min() {
        float m = getMath();
        float e = getEnglish();
        float c = getComputer();

        float min = Math.min(m, e);
        min = Math.min(min, c);

        return min;
    }
}
class Manager {//学生操作类
    static Student2[] stus = {
            new Student2("1", "张三", 99, 147, 60),
            new Student2("2", "李四", 96, 130, 100)};//学生信息数组
    private static int count = 10;//当前学生个数

    public Manager() {
    }

    public Manager(Student2[] stus, int count) {
        Manager.stus = stus;
        Manager.count = count;
    }

    public Student2[] getStus() {
        return stus;
    }

    public int getCount() {
        return count;
    }

    /*
       添加学生
     */
    public boolean add(Student2 student) {
        Scanner scanner = new Scanner(in);
        out.println("请输入添加的学生的id");
        String id = scanner.next();
        out.println("请输入添加的学生的姓名");
        String name = scanner.next();
        out.println("请输入添加的学生的数学成绩");
        float math = scanner.nextFloat();
        out.println("请输入添加的学生的英语成绩");
        float english = scanner.nextFloat();
        out.println("请输入添加的学生的计算机成绩");
        float computer = scanner.nextFloat();
        student.setId(id);
        student.setName(name);
        student.setMath(math);
        student.setEnglish(english);
        student.setComputer(computer);
        Student2[] newStudents = new Student2[stus.length + 1];//定义一个新数组,容量比原数组大1
        boolean flag = false;
        for (int i = 0; i < stus.length; i++) {//遍历原数组
            if (stus[i].getId().equals(student.getId())) {
                out.println("添加失败,提示:该学生学号已存在,请输入正确的学号");
                break;
            }

            if (stus.length < getCount()) {//如果原数组的容量小于学生人数,则把原数组的数据放入新数组
                newStudents[i] = stus[i];
                flag = true;
            }else {
                out.println("学生人数已满,无法添加");
                break;
            }
        }
        while (flag) {
            out.println("添加成功");
            newStudents[newStudents.length - 1] = student;//把要添加的数据放入到新数组的最后一位
            stus = newStudents;//把原数组的引用指向新数组
            flag = false;
        }
        out.println();
        return true;
    }

    /*
        通过id删除学生
     */
    public boolean deleteById(String id) {
        for (int i = 0; i < stus.length; i++) {//遍历原数组


            if (stus[i].getId().equals(id)) {//如果传入的id在原数组中找到
                stus[i] = stus[stus.length - 1];//把最后一位元素赋给要删除的那个位置上
                Student2[] student2s = Arrays.copyOf(stus, stus.length - 1);//取[0,length-1]范围内的数组
                stus = student2s;
                out.println("删除成功");
            } else {
                out.println("删除失败,提示:该学生不存在,请输入正确的学号");
                break;
            }
        }
        out.println();
        return true;
    }

    /*
        通过 name 查询学生
     */
    public Student2[] select(String name) {
        for (Student2 student2 : stus) {
            boolean flag = false;
            if (student2.getName().equals(name)) {
                out.println("找到了这名学生,信息如下:");
                out.println("学号" + "\t\t" + "姓名" + "\t\t" + "数学" + "\t\t" + "英语" + "\t\t" + "计算机");
                out.println(student2);
                flag = true;
                break;
            }
            while (flag) {
                out.println("查找失败,提示:该学生不存在,请输入正确的姓名");
            }
        }
        out.println();
        return stus;
    }

    /*
        通过id修改数组中的学生信息
     */
    public boolean update(Student2[] stus) {
        out.println("请输入要修改的学生的id");
        Scanner scanner = new Scanner(in);
        String id = scanner.nextLine();
        for (Student2 student2 : stus) {
            if (student2.getId().equals(id)) {
                out.println("请选择要修改的序号");
                out.println("1.姓名");
                out.println("2.数学成绩");
                out.println("3.英语成绩");
                out.println("4.计算机成绩");

                int choose = scanner.nextInt();
                switch (choose) {
                    case 1:
                        out.println("请输入你想修改的姓名");
                        String name = scanner.next();
                        student2.setName(name);
                        break;
                    case 2:
                        out.println("请输入你想修改的数学成绩");
                        float mathScore = scanner.nextFloat();
                        student2.setMath(mathScore);
                        break;
                    case 3:
                        out.println("请输入你想修改的英语成绩");
                        float englishScore = scanner.nextFloat();
                        student2.setEnglish(englishScore);
                        break;
                    case 4:
                        out.println("请输入你想修改的计算机成绩");
                        float computerScore = scanner.nextFloat();
                        student2.setComputer(computerScore);
                        break;
                    default:
                        out.println("请输入正确的序号");
                }
            } else {
                out.println("修改失败,提示:该学生不存在,请输入正确的学号");
                break;
            }
        }
        out.println();
        return true;
    }

    /*
        打印学生
     */
    public void printInfo(Student2[] students) {
        out.println("学号" + "\t\t" + "姓名" + "\t\t" + "数学" + "\t\t" + "英语" + "\t\t" + "计算机");
        for (Student2 student : students) {
            out.println(student);
        }
        out.println();
    }

    /*
        统计学生
     */
    public void statistic() {
        float[] maths = new float[stus.length];//定义数学成绩数组用来接收数学成绩
        float mathSum = 0;//数学成绩总和
        float[] englishs = new float[stus.length];//定义英语成绩数组用来接收英语成绩
        float englishSum = 0;//英语成绩总和
        float[] computers = new float[stus.length];//定义计算机成绩数组用来接收计算机成绩
        float computerSum = 0;//计算机成绩总和

        for (int i = 0; i < stus.length; i++) {//遍历原数组,把学生数学成绩放入到数学成绩数组中
            maths[i] = stus[i].getMath();
        }
        for (float math : maths) {//遍历数学成绩数组求出所有学生的数学成绩总和
            mathSum += math;
        }

        for (int i = 0; i < stus.length; i++) {//遍历原数组,把学生数学成绩放入到英语成绩数组中
            englishs[i] = stus[i].getEnglish();
        }
        for (float english : englishs) {//遍历英语成绩数组求出所有学生的英语成绩总和
            englishSum += english;
        }

        for (int i = 0; i < stus.length; i++) {//遍历原数组,把学生数学成绩放入到计算机成绩数组中
            computers[i] = stus[i].getComputer();
        }
        for (float computer : computers) {//遍历计算机成绩数组求出所有学生的计算机成绩总和
            computerSum += computer;
        }

        float mathAverage = mathSum / stus.length;//求出数学成绩的平均数
        float englishAverage = englishSum / stus.length;//求出英语成绩的平均数
        float computerAverage = computerSum / stus.length;//求出计算机成绩的平均数


        float mathMax = 0;//数学成绩最大值
        float mathMin = 0;//数学成绩最小值
        float englishMax = 0;//英语成绩最大值
        float englishMin = 0;//英语成绩最小值
        float computerMax = 0;//计算机成绩最大值
        float computerMin = 0;//计算机成绩最小值
        //遍历数学成绩数组求出数学成绩的最大值
        for (int i = 0; i < maths.length - i - 1; i++) {
            mathMax = maths[i];//数学成绩最大值
            for (int j = i; j < maths.length; j++) {
                if (maths[i] < maths[j]) {
                    mathMax = maths[j];
                }
            }
        }
        //遍历数学成绩数组求出数学成绩的最小值
        for (int i = 0; i < maths.length - i - 1; i++) {
            mathMin = maths[i];//数学成绩最小值
            for (int j = i; j < maths.length; j++) {
                if (maths[i] > maths[j]) {
                    mathMin = maths[j];
                }
            }
        }
        //遍历英语成绩数组求出数学英语的最大值
        for (int i = 0; i < englishs.length - i - 1; i++) {
            englishMax = englishs[i];//英语成绩最大值
            for (int j = i; j < englishs.length; j++) {
                if (englishs[i] < englishs[j]) {
                    englishMax = englishs[j];
                }
            }
        }
        //遍历英语成绩数组求出英语成绩的最小值
        for (int i = 0; i < englishs.length - i - 1; i++) {
            englishMin = englishs[i];//英语成绩最小值
            for (int j = i; j < englishs.length; j++) {
                if (englishs[i] > englishs[j]) {
                    englishMin = englishs[j];
                }
            }
        }
        //遍历计算机成绩数组求出计算机成绩的最大值
        for (int i = 0; i < computers.length - i - 1; i++) {
            computerMax = computers[i];//计算机成绩最大值
            for (int j = i; j < computers.length; j++) {
                if (computers[i] < computers[j]) {
                    computerMax = computers[j];
                }
            }
        }
        //遍历计算机成绩数组求出计算机成绩的最小值
        for (int i = 0; i < computers.length - i - 1; i++) {
            computerMin = computers[i];//计算机成绩最大值
            for (int j = i; j < computers.length; j++) {
                if (computers[i] > computers[j]) {
                    computerMin = computers[j];
                }
            }
        }
        //打印统计的学生信息
        out.println("学科" + "\t\t" + "平均成绩" + "\t\t" + "最高分" + "\t\t" + "最低分");
        out.println("数学" + "\t\t" + mathAverage + "\t\t" + mathMax + "\t\t" + mathMin);
        out.println("英语" + "\t\t" + englishAverage + "\t\t" + englishMax + "\t\t" + englishMin);
        out.println("计算机" + "\t\t" + computerAverage + "\t\t" + computerMax + "\t\t" + computerMin);
        out.println();
    }
}

public class Demo13 {
    public static void main(String[] args) {
        Manager manager = new Manager();
        while (true) {
            out.println("===============学生管理系统===============");
            out.println("\uF06C\t1.添加学生");
            out.println("\uF06C\t2.删除学生");
            out.println("\uF06C\t3.查询学生");
            out.println("\uF06C\t4.修改学生");
            out.println("\uF06C\t5.打印学生");
            out.println("\uF06C\t6.统计学生");
            out.println("\uF06C\t7.退出程序");
            Scanner scanner = new Scanner(in);
            int choose = scanner.nextInt();
            switch (choose) {
                case 1://添加学生
                    Student2 student = new Student2();
                    manager.add(student);
                    break;
                case 2://删除学生
                    out.println("请输入要删除的学生的id");
                    String did = scanner.next();
                    manager.deleteById(did);
                    break;
                case 3://查询学生
                    out.println("请输入要查询的学生的姓名");
                    String cname = scanner.next();
                    manager.select(cname);
                    break;
                case 4://修改学生
                    manager.update(manager.getStus());
                    break;
                case 5://打印学生
                    manager.printInfo(manager.getStus());
                    break;
                case 6://统计学生
                    manager.statistic();
                    break;
                case 7://退出程序
                    out.println("程序已退出,感谢您的使用");
                    exit(0);
                    return;
                default:
                    out.println("请输入正确的选择");
            }
        }
    }
}

项目成果部分图

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值