凭空想象小练习

这篇具有很好参考价值的文章主要介绍了凭空想象小练习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学生的考试

功能描述

学生类

  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);

    }

    @Override
    void report(List<String> names) {
        System.out.print("交头接耳的同学有:");
        List<String> result = new ArrayList<>();
        Set set = new HashSet(); //新建一个HashSet
        set.addAll(names); //list里的所有东西放入set中 进行去重
        result.addAll(set); //把去重完的set重新放回list里

        for (String name : result) {
            System.out.print(name+",");
        }
        System.out.println("");
    }
}


班长抽象类文章来源地址https://www.toymoban.com/news/detail-423171.html

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<>(); //成绩

    @Override
    public 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(); //新建一个HashSet
        set.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() {
                            @Override
                            public 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();


    }
}

到了这里,关于凭空想象小练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive考试练习题(参考题解)

      前置环境: 请打开【VMware Workstation Pro】中的【linux1】环境,登录账号【root】密码【root】。  一、搭建MySQL运行环境(25分,每项5分) 1、删除MySQL依赖的libs包 2、安装MySQL的服务器与安装MySQL的客户端 3、登录MySQL并修改MySQL密码 4、给与MySQL的master权限 5、刷新MySQL权限并退出

    2024年02月09日
    浏览(50)
  • 交安ABC考试单选练习题库(1)

    题库来源:【学视线】公众号提供公路水运工程企业安全员考试试题、公路水运安全员考试预测题、公路水运工程安全生产管理人员考试真题、公路水运工程施工企业安全生产三类人员证书考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 16.下列关于特种

    2024年02月07日
    浏览(56)
  • Verilog的三种描述方式(结构化描述、数据流描述、行为级描述对电路功能的描述有三种方式:结构化描述、数据流描述、行为级描述

    Verilog的三种描述方式(结构化描述、数据流描述、行为级描述对电路功能的描述有三种方式:结构化描述、数据流描述、行为级描述。三种描述方式抽象级别不同,各有优缺点,相辅相成,需要配合使用。 目录 一、结构化描述 1、概念 2、特点 3、示例 真值表: 电路抽象:

    2024年02月04日
    浏览(64)
  • 计算机组成原理期末考试知识点练习题

    全部内容包括1-8章,本篇是1-5章,后3章会在作者学习完新课后第一时间更新。(大概16号左右,请大家耐心等待) 目录 1. 计算机系统由     软件     、   硬件    两部分组成。 2. 计算机硬件系统由     存储器      、   运算器    、     控制器     、   输入设备

    2024年02月08日
    浏览(65)
  • N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。

    本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析 分别包含C语言、C++、Java、Python四种语言的解法和详细解析。 N名学生的成绩已在主函数中放入一个带头

    2024年04月22日
    浏览(36)
  • 计算机组成原理期末考试知识点练习题(补发)

    按时来更新了  不过由于作者这边的考试推迟 第八章I/O没有学到,不能全更了 不过我会把相应的练习题上传,对于第八章,大家可以给班里同学商量着做。 若是下周能学到,会第一时间补上。 6.控制器 7.总线 6.控制器 一、填空 1. 控制器 是整台计算机的指挥系统,它指挥和

    2024年01月18日
    浏览(65)
  • 智能安全芯片ACH512芯片描述及功能

         ACH512 芯片是一款基于安全算法的高性能 SOC 芯片, 主要应用于 eMMC/SD/Nandflash 大容量存储设备、加密 U 盘、指纹识别等市场。 芯片采用 32 位内核,片内集成多种安全密码模块,包括SM1、 SM2、 SM3、 SM4、 SSF33 算法以及RSA/ECC、 ECDSA、 DES/3DES、AES128/192/256、SHA1/256/384/512 等安

    2024年01月16日
    浏览(52)
  • 九耶丨阁瑞钛伦特-请描述一下如何用Axure绘制banner图效果,并且将这个功能进行详细描述。

    第一步:准备图片 首先准备三张大小相同的图片。 第二步:创建动态面板 右键点击第一张图片,唤起菜单,选择“创建动态面板”。 双击动态面板,进入动态面板编辑界面。点击“复制状态”图标,复制出三个状态,分别放置三张图片。 接下来需要替换状态2与状态3的图片

    2024年02月11日
    浏览(46)
  • 企业电子招投标采购系统——功能模块&功能描述+数字化采购管理 采购招投标

    功能模块: 待办消息,招标公告,中标公告,信息发布   描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部供应商集中推送展示与其相关的所有采购业务信息(历史合作、

    2024年02月04日
    浏览(47)
  • 在线考试组卷Word文档导出|废纸篓|支持搜索组员查看练习情况|官网上线

    土著刷题微信小程序v1.1 6 ,主要是 对系统功能的优化,同时迭代开发了反馈热度比较高的【在线考试组卷word文档导出】和废纸篓功能 。 下面将逐条介绍一下这一版的 新功能和优化点 。 【组卷Word导出】这个功能对于线下组织考试是个刚需,也是反馈热度比较高的需求。

    2024年02月09日
    浏览(113)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包