凭空想象小练习

news/2024/4/26 9:15:33/文章来源:https://blog.csdn.net/m0_46391590/article/details/130314553

学生的考试

功能描述

学生类

  1. 答题
  2. 交卷
  3. 作弊
  4. 交头接耳

班长

  1. 打小报告(看有没有同学交头接耳)

老师

  1. 发卷子
  2. 收卷子
  3. 监督考场
  4. 评卷
  5. 公布分数
  6. 处理小报告

班主任

  1. 巡视考场

场景描述

10个学生(含一个班长)有一场考试。根据以上功能完成以下需求
40道题,学生答题,交卷。在整个考试期间学生随机出现作弊、交头接耳的行为。
班长随机抽查有没有学生交头接耳,如果有则报告给老师。
老师分发试卷,考试结束(时间五分钟)收卷,对卷子进行评分,并公布成绩,老师收到班长的小报告,对交头接耳的同学进行批评教育

代码实现

1.学生类

1.首先准备学生类,根据需求属性需要设计 姓名,试卷
2. @Data 实现构造方法
3. 实现学生的行为,分别为作弊、答题、交卷、交头接耳
4. 考虑到班长是学生,设计班长的抽象类,提供打小报告的方法,学生类继承此抽象类,实现抽象方法

package com.common.test;import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.util.StringUtils;import java.util.*;
import java.util.concurrent.ThreadLocalRandom;@Data@Accessors(chain = true)
public class Student extends Monitor {private String name;private ExaminationPaper examinationPaper;//作弊public Boolean Cheat() {return random(4) == 0;}private final Map<Integer, String> map = new HashMap<Integer, String>() {{put(0, "A");put(1, "B");put(2, "C");put(3, "D");put(4, "N");}};public void tianjuan(ExaminationPaper examinationPaper){this.examinationPaper = examinationPaper;this.examinationPaper.setName(this.name);}//答题public void Answer() {Map<String, String> topic = this.examinationPaper.getTopic();for (String key : topic.keySet()) {if (StringUtils.isEmpty(topic.get(key))) {topic.put(key, map.get(random(5)));return;}}}//交卷public Boolean HandPaper() {Map<String, String> topic = this.examinationPaper.getTopic();for (String key : topic.keySet()) {if (StringUtils.isEmpty(topic.get(key))) {return false;}}return true;}//交头接耳public Boolean Whisper() {return random(6) == 0;}private Integer random(Integer bound){ThreadLocalRandom random = ThreadLocalRandom.current();return random.nextInt(bound);}@Overridevoid report(List<String> names) {System.out.print("交头接耳的同学有:");List<String> result = new ArrayList<>();Set set = new HashSet(); //新建一个HashSetset.addAll(names); //list里的所有东西放入set中 进行去重result.addAll(set); //把去重完的set重新放回list里for (String name : result) {System.out.print(name+",");}System.out.println("");}
}

班长抽象类

package com.common.test;import java.util.List;abstract  class Monitor {abstract void report(List<String> names);
}

试卷类

  1. 试卷包含姓名、题目属性
  2. 题目属性为map key为题目 value 为答案
package com.common.test;
import lombok.Data;
import java.util.Map;@Data
public class ExaminationPaper {private String name;//姓名private Map<String,String> topic;//题目}

老师类

  1. 由于班主任为老师,因此设计班主任的接口,提供监督考场的功能(方法)
  2. 结合老师收取学生试卷与公布成绩的需要,设计试卷与成绩的属性
  3. 实现老师的发卷、收卷、批评教育、判卷、公布成绩的功能,分别对应以下方法
package com.common.test;import lombok.Data;
import java.util.*;@Data
public class Teacher implements ClassTeacher {private List<ExaminationPaper> examinationPapers = new ArrayList<>();//试卷private Map<String, Integer> result = new HashMap<>(); //成绩@Overridepublic void supervise() {System.out.println("班主任监督第一个考场");}/*** 分发试卷** @return*/public ExaminationPaper DistributePapers() {HashMap<String, String> map = new HashMap<>();for (int i = 1; i <= 40; i++) {map.put(i + "、第" + i + "题的答案是什么?", null);}ExaminationPaper examinationPaper = new ExaminationPaper();examinationPaper.setTopic(map);return examinationPaper;}/*** 收试卷*/public void CollectPapers(List<Student> students) {for (Student student : students) {this.examinationPapers.add(student.getExaminationPaper());}}/*** 批评教育*/public void ReportCollection(List<String> names) {System.out.print("以下同学考试交头接耳,下课来办公室!");List<String> result = new ArrayList<>();Set set = new HashSet(); //新建一个HashSetset.addAll(names); //list里的所有东西放入set中 进行去重result.addAll(set); //把去重完的set重新放回list里for (String name : result) {System.out.print(name+",");}System.out.println("");}/*** 判卷*/public void MarkPapers() {List<ExaminationPaper> examinationPapers = this.examinationPapers;for (ExaminationPaper examinationPaper : examinationPapers) {Integer score = 0;String name = examinationPaper.getName();Map<String, String> topic = examinationPaper.getTopic();for (String key : topic.keySet()) {if ("A".equals(topic.get(key))) {score += 1;}}this.result.put(name, score);}}/*** 公布成绩*/public void AnnounceResults() {for (String key : this.result.keySet()) {System.out.println(key+"的成绩为"+this.result.get(key));}}
}

复现场景

  1. 首先先初始化10位学生
  2. 在学生中随机选一位学生作为班长
  3. 老师分发试卷,分发完成之后记录考试开始的时间
  4. 在五分钟的考试过程中(并发的考试过程),学生进行答题,会可能伴随作弊,交头接耳的行为;班长会随时查看并记录交头接耳的学生名单
  5. 考试结束之后,老师收卷
  6. 班长打小报告,老师批评教育交头接耳的学生
  7. 老师判卷,公布学生成绩
package com.common.test;import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;public class Test {public static void main(String[] args) {Student monitor = null;List<String> names = new ArrayList<>();List<String> blacklist = new ArrayList<>();List<Student> students = new ArrayList<>();for (int i = 0; i < 40; i++) {Student student = new Student();student.setName("学生" + i);students.add(student);}//班长任命ThreadLocalRandom random = ThreadLocalRandom.current();int num = random.nextInt(students.size());monitor = students.get(num);//老师发试卷Teacher teacher = new Teacher();for (int i = 0; i < students.size(); i++) {ExaminationPaper examinationPaper = teacher.DistributePapers();Student student = students.get(i);student.tianjuan(examinationPaper);}long time = new Date().getTime();//考试开始时间//答题while (new Date().getTime() - time <= 3000) {Integer number = 0;for (Student student : students) {Student finalMonitor = monitor;Thread thread = new Thread(new Runnable() {@Overridepublic void run() {//答题student.Answer();//作弊if (student.Cheat()) {blacklist.add(student.getName());}
//                                //答题完成,交卷
//                                if (student.HandPaper()) {
//                                    number += 1;
//                                }//记录交头接耳的人名 ;班长打小报告if (student.Whisper() && !finalMonitor.equals(student.getName())) {names.add(student.getName());}}});thread.start();}if (number == 10) {break;}}if (!StringUtils.isEmpty(names)) {//打小报告的方法monitor.report(names);//批评教育teacher.ReportCollection(names);}teacher.CollectPapers(students);System.out.println("收卷完成,考试结束!");teacher.MarkPapers();teacher.AnnounceResults();}
}

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

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

相关文章

Vue表单基本操作-收集表单数据

收集表单数据 使用vue中的v-model收集表单里面的数据&#xff0c;不同的表单元素配合v-model会有不同的写法和技巧 本次的表单元素包括&#xff1a;文本框&#xff0c;单选&#xff0c;多选&#xff0c;下拉框&#xff0c;文本域 编写表单元素 首先编写表单元素&#xff0c;…

ROS学习第三十七节——机器人运动控制以及里程计信息显示

https://download.csdn.net/download/qq_45685327/87719766 https://download.csdn.net/download/qq_45685327/87719873 gazebo 中已经可以正常显示机器人模型了&#xff0c;那么如何像在 rviz 中一样控制机器人运动呢&#xff1f;在此&#xff0c;需要涉及到ros中的组件: ros…

camunda的service task如何使用

在 Camunda 中&#xff0c;使用 Service Task 节点可以执行各种类型的业务逻辑&#xff0c;例如计算、数据转换、数据格式化等。在 Service Task 节点中&#xff0c;可以使用不同的编程语言来实现业务逻辑&#xff0c;例如 Java、JavaScript、Python 等。 下面是使用 Java 实现…

状态压缩DP-蒙德里安的梦想

题意 求把 NM 的棋盘分割成若干个 12 的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0c;M4 时&#xff0c;共有 5 种方案。当 N2&#xff0c;M3 时&#xff0c;共有 3 种方案。 如下图所示&#xff1a; 输入格式 输入包含多组测试用例。 每组测试用例占一行&#xff0…

这份最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,你看过没?

互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况&#xff0c;但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况&#xff0c;非技术线(如产品、运营、…

【Linux】环境变量与进程优先级知识点

目录 环境变量1.基本概念2.常见环境变量3.我们写的程序和命令行指令有什么区别&#xff1f;4.自己的程序为什么要用 ./ 执行&#xff0c;而命令行指令可以直接执行&#xff1f;5.如何追加环境变量&#xff1f;6.Linux如何查看环境变量7.如何在代码层面获取环境变量main函数的参…

ubuntu 3060显卡驱动+cuda+cudnn+pytorch+pycharm+vscode

文章目录 运行环境&#xff1a;适用&#xff1a;思路&#xff1a;1.1 3060显卡驱动自动安装2.1 CUDA11.1.11)下载CUDA Toolkit 11.1 Update 1 Downloads2)contunue , 然后accept3)回车取消Driver安装&#xff0c;然后install4)添加环境变量5)确认是否安装成功 3.1 cudnn 8.1.11…

【Cartopy基础入门】如何更好的确定边界显示

原文作者&#xff1a;我辈理想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 Cartopy基础入门 【Cartopy基础入门】Cartopy的安装 【Cartopy基础入门】Geojson数据的加载 【Cartopy基础入门】如何更好的确定边界显示 文章目录 Ca…

【边缘计算】登临(Goldwasser-UL64)BW-BR2边缘设备配置指南

目录 开箱配置激活SDK环境测试cuda兼容性 开箱配置 更改盒子root用户密码&#xff1a; sudo passwd root(密码同为root) 切换到root用户身份&#xff1a; su root查看ssh的状态&#xff0c;没有返回说明没有启动 sudo ps -e|grep ssh此时说明ssh服务已启动。 更改ssh配置文…

java定位系统源码,通过独特的射频处理,配合先进的位置算法,可以有效计算出复杂环境下的人员与物品的活动信息

智慧工厂人员定位系统源码&#xff0c;区域电子围栏管控源码 文末获取联系&#xff01; 在工厂日常生产活动中&#xff0c;企业很难精准地掌握访客和承包商等各类人员的实际位置&#xff0c;且无法实时监控巡检人员的巡检路线&#xff0c;当厂区发生灾情或其他异常状况时&#…

postman安装

目录 下载、安装 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。 Postman原是Chrome浏览器的插件&#xff0c;可以模拟浏览器向后端服务器发起任何形式(如:get、post)的HTTP请求 使用Postman还可以在发起请求时&#xff0c;携带一些请求参数、请求头等信息…

WebSocket+Vue+SpringBoot实现语音通话

参考文章 整体思路 前端点击开始对话按钮后&#xff0c;将监听麦克风&#xff0c;获取到当前的音频&#xff0c;将其装化为二进制数据&#xff0c;通过websocket发送到webscoket服务端&#xff0c;服务端在接收后&#xff0c;将消息写入给指定客户端&#xff0c;客户端拿到发送…

日本PSE认证日本的電気用品安全法METI备案

日本的電気用品安全法&#xff08;PSE认证&#xff09;法规要求日本的采购商在购进商品后一个月内必须向日本METI注册申报&#xff0c;并必须将采购商名称或ID标在产品上&#xff0c;以便在今后产品销售过程中进行监督管理&#xff0c;完成后将获得電気用品製造事業届出書&…

Java基础学习(10)

Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.…

元宇宙场景下的实时互动RTI技术能力构建

元宇宙可谓是处在风口浪尖&#xff0c;无数的厂商都对元宇宙未来抱有非常美好的憧憬。正因如此&#xff0c;许许多多厂商都在用他们自己的方案&#xff0c;为元宇宙更快、更好的实现&#xff0c;在自己的领域贡献力量。LiveVideoStack 2022北京站邀请到了 ZEGO 即构科技的解决方…

17.集合

集合 集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容&#xff0c;它允许以各种方式将元素分组&#xff0c;并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是…

【Vue2源码】响应式原理

【Vue2源码】响应式原理 文章目录 【Vue2源码】响应式原理Vue响应式的核心设计思路整体流程响应式中的关键角色检测变化注意事项响应式原理数据观测重写数组7个变异方法增加__ob__属性__ob__有两大用处&#xff1a; Vue.js 基本上遵循 MVVM&#xff08;Model–View–ViewModel&…

【Cartopy基础入门】如何丝滑的加载Geojson数据

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 Cartopy基础入门 【Cartopy基础入门】Cartopy的安装 【Cartopy基础入门】如何丝滑的加载Geojson数据 文章目录 Cartopy基础入门一、Geojson数据来源二…

camunda的manual task节点用途

Camunda的Manual Task用于在流程中暂停执行&#xff0c;直到人工干预完成某个任务。与User Task不同&#xff0c;Manual Task没有分配给特定用户或用户组&#xff0c;而是需要手动启动并指定下一步流程。 Manual Task可以用于以下场景&#xff1a; 1、流程执行需要等待人工干…

安全狗入选2023年福建省数字经济核心产业领域创新企业名单

近日&#xff0c;福建省数字福建建设领导小组办公室公布了入选2023年全省数字经济核心产业领域创新企业名单。 作为国内云原生安全领导厂商&#xff0c;安全狗凭借综合表现与优势入选名单&#xff0c;荣膺“未来独角兽”称号。 据悉&#xff0c;此次对“未来独角兽”的评选条件…