Java进阶学习笔记16——接口的综合案例

接口的综合案例:

接口的应用案例:班级学生信息管理模块的开发

需求:

请设计一个班级学生的信息管理模块:学生的数据有:姓名、性别、成绩。

功能1: 要求打印出全班学生的信息;功能2:要求打印全班学生的平均成绩。

注意:以上功能的业务实现是由多套方案的,比如:

第一套方案:能打印出班级全部学生的信息;能够打印班级全部学生的平均分;

第二套方案:能打印出班级全部学生的信息(包含男女人数);能够打印班级全部学生的平均分(要求去掉最高分、最低分)。

要求:系统可以支持灵活的切换这些实现功能。

Student类:

package cn.ensource.interface_demo;

public class Student {
    private String name;
    private char sex;
    private double score;

    public Student() {
    }

    public Student(String name, char sex, double score) {
        this.name = name;
        this.sex = sex;
        this.score = score;
    }

    public String getName() {
        return name;
    }

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

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public double getScore() {
        return score;
    }

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

ClassManager类:

package cn.ensource.interface_demo;

import java.util.ArrayList;

public class ClassManager {
    private ArrayList<Student> students = new ArrayList<>();
//    StudentOperator studentOperator = new StudentOperatorImpl1();  //多态的写法
    StudentOperator studentOperator = new StudentOperatorImpl2();

    public ClassManager() {
        students.add(new Student("迪丽热巴", '女', 98));
        students.add(new Student("古丽扎拉", '女', 100));
        students.add(new Student("马尔扎哈", '男', 80));
        students.add(new Student("巴拉巴拉", '女', 96));
        students.add(new Student("卡尔扎巴", '男', 60));
    }

    // 打印全班全部学生的信息
    public void printInfo() {
        studentOperator.printAllInfo(students);
    }

    // 打印全班全部学生的平均分
    public void printAvgScore() {
        studentOperator.printAverageScore(students);
    }
}

StudentOperatorImpl1类:

package cn.ensource.interface_demo;

import java.util.ArrayList;

public class StudentOperatorImpl1 implements StudentOperator {

    @Override
    public void printAllInfo(ArrayList<Student> students) {
        System.out.println("----全班全部学生信息如下----");
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.println("学生姓名:" + s.getName());
            System.out.println("学生性别:" + s.getSex());
            System.out.println("学生成绩: " + s.getScore());
        }
        System.out.println("-------------------------");
    }

    @Override
    public void printAverageScore(ArrayList<Student> students) {
        double sum = 0.0;
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            sum += s.getScore();
        }
        double avg = sum / students.size();
        System.out.println("平均分:" + avg);

    }
}

StudentOperatorImpl2类:

package cn.ensource.interface_demo;

import java.util.ArrayList;

public class StudentOperatorImpl2 implements StudentOperator {

    @Override
    public void printAllInfo(ArrayList<Student> students) {
        int counter1 = 0;  // 男生计数器
        int counter2 = 0;  // 女生计数器
        System.out.println("----全班全部学生信息如下----");
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.println("学生姓名:" + s.getName());
            System.out.println("学生性别:" + s.getSex());
            System.out.println("学生成绩: " + s.getScore());
            if (s.getSex() == '男') {
                counter1++;
            }else {
                counter2++;
            }
        }
        System.out.println("男生人数:" + counter1);
        System.out.println("女生人数:" + counter2);
        System.out.println("-------------------------");
    }

    @Override
    public void printAverageScore(ArrayList<Student> students) {
        double sum = 0.0;
        double max = students.get(0).getScore();
        double min = students.get(0).getScore();
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            sum += s.getScore();
            if (s.getScore() > max) {
                max = s.getScore();
            }
            if (s.getScore() < min) {
                min = s.getScore();
            }
        }
        System.out.println("学生最高分:" + max);
        System.out.println("学生最低分:" + min);
        double avg = (sum - max - min) / (students.size() - 2);
        System.out.println("平均分(去掉最高分、最低分):" + avg);
    }
}

测试类:

package cn.ensource.interface_demo;

public class Test {
    public static void main(String[] args) {
        // 目标:完成班级学生信息管理系统的案例
        ClassManager classManager = new ClassManager();
        classManager.printInfo();
        classManager.printAvgScore();
    }
}

运行结果:

----全班全部学生信息如下----
学生姓名:迪丽热巴
学生性别:女
学生成绩: 98.0
学生姓名:古丽扎拉
学生性别:女
学生成绩: 100.0
学生姓名:马尔扎哈
学生性别:男
学生成绩: 80.0
学生姓名:巴拉巴拉
学生性别:女
学生成绩: 96.0
学生姓名:卡尔扎巴
学生性别:男
学生成绩: 60.0
男生人数:2
女生人数:3
-------------------------
学生最高分:100.0
学生最低分:60.0
平均分(去掉最高分、最低分):91.33333333333333

感觉真的是非常方便。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值