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 {@Overridepublic 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("-------------------------");}@Overridepublic 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 {@Overridepublic 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("-------------------------");}@Overridepublic 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

感觉真的是非常方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天线增益越高不一定越好

在以下应用场景下&#xff0c;过高的天线增益会导致性能下降&#xff1a;   城市环境或建筑物周围&#xff1a;高增益天线容易受到其他信号的干扰&#xff0c;在城市环境下或者在某些建筑物周围使用时&#xff0c;可能会被其他无线网络和其他电磁设备的信号干扰&#xff0c;…

浏览器的一些功能

1.改主页面 点浏览器右上角的三个点也就是一个... 点了设置 你可以在这里改它的颜色 还有页面 一些有意思的网站: sandspiel像素风格游戏 趣味互动游戏&#xff1a;请画一个小人 (webhek.com)​​​​​​ 2018 - makemepulse解压游戏 Layered Water (vlucendo.com)水模…

【C++项目】实时聊天的在线匹配五子棋对战游戏

目录 项目介绍 开发环境 核心技术 项目前置知识点介绍 Websocketpp 1. WebSocket基本认识 2. WebSocket协议切换原理解析 3. WebSocket报文格式 4. Websocketpp介绍 5. 搭建一个简单WebSocket服务器 JsonCpp 1. Json格式的基本认识 2. JsonCpp介绍 3. 序列化与反序…

[js] 中文编码解码encodeURI,decodeURI

encodeURI (URIstring)// 编码decodeURI (URIstring)  // 解码参考&#xff1a; JS 中的编码和解码&#xff08;encode和decode&#xff09;

CSS3盒模型与布局

盒模型与布局 居中对齐 文本居中对齐 水平居中 使用 text-align: center; 属性在块级元素内使内联元素(如文本、图片等)水平居中。 .parent {text-align: center; }垂直居中 使用 line-height 设置为与容器高度相同的值,实现单行文本的垂直居中。 .parent {height: 100…

基于地理坐标的高阶几何编辑工具算法(3)——相离面吸附

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 点击面&#xff0c;点击“相离面吸附”工具&#xff0c;绘制一个面&#xff0c;双击结束后&#xff0c;与所有相交的面进行吸附 应用场景 为了让相离的两个几何面在空间上相邻&#xff0c;使用该工具…

ROS+UBUNTU开发常用指令

ROS部分 一、功能包编译 1.1、单独编译指定的功能包 catkin_make -DCATKIN_WHITELIST_PACKAGES"需要单独编译的包名"1.2、再次回到编译所有功能包 catkin_make -DCATKIN_WHITELIST_PACKAGES""ubuntu部分 一、清空 Bash 历史记录文件&#xff1a; ~/.b…

数据插值之朗格朗日插值(一)

目录 一、引言 二、代码实现 2.1 Lagrange插值求插值多项式&#xff1a; 代码解析&#xff1a; 1.vpa解释 2.ploy&#xff08;x&#xff09;解释: 3.conv&#xff08;&#xff09;解释 4.poly2sym()解释 2.2 Lagrange插值求新样本值和误差估计&#xff1a; 代码解析&…

【编译原理】LL(1)预测分析法

一、实验目的 LL(1)的含义&#xff1a;第一个L表明自顶向下分析是从左向右扫描输入串&#xff0c;第2个L表明分析过程中将使用最左推导&#xff0c;1表明只需向右看一个符号便可决定如何推导&#xff0c;即选择哪个产生式进行推导。 LL(1) 预测分析方法是确定的自顶向下的语…

2024年【N1叉车司机】免费试题及N1叉车司机模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机免费试题考前必练&#xff01;安全生产模拟考试一点通每个月更新N1叉车司机模拟试题题目及答案&#xff01;多做几遍&#xff0c;其实通过N1叉车司机模拟考试题库很简单。 1、【多选题】《中华人民共和国特…

Java 反射效率

反射性能比正常new对象使用慢&#xff0c;今天我们来测试一下其中效率&#xff0c;以及探索优化。 测试方法main long start System.currentTimeMillis();for (int i0;i<10000000;i){// 调用如下不同case的测试方法分别创建一千万个对象&#xff0c;对比效率}long end Sys…

第三讲 栈、队列和数组 (1)

文章目录 第三讲 栈、队列和数组3.1 栈3.1.1 出栈元素的不同排列与卡特兰数3.1.2 栈的顺序表实现3.1.3共享栈3.1.4 栈的链表实现3.1.5 栈的两种实现的优缺点3.1.6 c中的栈( s t a c k stack stack)容器适配器3.1.7 栈的应用:star:3.1.7.1 **栈在括号匹配中的应用**3.1.7.2 **栈…

白话文docker-001

第一章&#xff1a;Docker简介 Docker的定义与历史 Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中。Docker 首次发布于2013年&#xff0c;由 Solomon Hykes 和他领导的团队在 dotCloud 公司开发。Docker 的…

CSS布局和定位应用方案

目录 浮动布局绝对布局表格布局响应式布局弹性布局网格布局多栏布局浮动布局 CSS3浮动布局的核心在于使用float属性将元素移出文档流,通过左右浮动来排列元素,并结合clear属性或清除浮动技巧(如这里的伪元素法)来处理浮动带来的副作用。尽管浮动布局在某些简单布局中依然实…

m1系列芯片aarch64架构使用docker-compose安装rocketmq5.0以及运维控制台

之前看到 DockerHub 上有大佬制作了 m1 芯片, aarch64架构的 rocketmq 镜像, 所以就尝试的安装了下, 亲测可用: 一. docker-compose.yml 文件命令 volumes 挂载目录需要换成自己的目录 注意 depends_on 标签, broker 和 console 的 启动要晚于 namesrv, 因为 broker 需要注册…

MPLS LDP原理与配置

1.LDP基本概念 &#xff08;1&#xff09;LDP协议概述 &#xff08;2&#xff09;LDP会话、LDP邻接体、LDP对等体 &#xff08;3&#xff09;LSR ID 与LDP ID &#xff08;4&#xff09;LDP消息 ⦁ 按照消息的功能&#xff0c;LDP消息一共可以分为四大类型&#xff1a;发现…

JKI State Machine的特点与详细介绍

JKI State Machine是一种基于状态机的LabVIEW架构&#xff0c;由JKI公司开发。它广泛用于开发复杂的应用程序&#xff0c;提供了一种灵活且可扩展的结构&#xff0c;适用于多种任务的管理和执行。其设计目标是提高开发效率、代码可读性和可维护性。 2. 基本架构 JKI State Ma…

【算法题】520 钻石争霸赛 2024 全解析

都是自己写的代码&#xff0c;发现自己的问题是做题速度还是不够快 520-1 爱之恒久远 在 520 这个特殊的日子里&#xff0c;请你直接在屏幕上输出&#xff1a;Forever and always。 输入格式&#xff1a; 本题没有输入。 输出格式&#xff1a; 在一行中输出 Forever and always…

python给图片加上图片水印

python给图片加上图片水印 作用效果代码 作用 给图片加上图片水印图片水印的透明度&#xff0c;位置可自定义 效果 原始图片&#xff1a; 水印图片&#xff1a; 添加水印后的图片&#xff1a; 代码 from PIL import Image, ImageDraw, ImageFontdef add_watermark(in…

线性表——链式存储

单链表&#xff08;有头结点&#xff09; #include<stdio.h> #include<stdlib.h> //定义 typedef struct LNode{int data; //数据域 struct LNode *next; //指针域指向下一个结点&#xff0c;所以是 struct LNode类型 }LNode,*LinkList; //…