学习笔记——日常实现思路

要求:实现每个考生对于一套试卷进行乱序显示。

前提:由于所有考生的试卷是一套,且只有一份数据,并不是每个考生都生成了一份试卷。要想保证每个考生进入考试都看到不一样的顺序,以及要保留考生每次进去之后要与初次进入的乱序结果要一致。

 思路:要乱序还要保留原始数据,则需缓存数据,缓存有两个方案:
            1、考虑Redis进行缓存每个考生考试的试题和选项乱序顺序数据。
            2、在考生开始考试后存储当前考生所有提交的试题答案数据,一道题一条数据(带有默认空答案)。此时存储当前试题的顺序,和选项顺序Id排列。

       步骤:    
  
         1、考试提交答案数据关联着试卷Id、试题Id,需增加试题当前的顺序,试题对应的选项Id集合。
            2、每次考生点击开始考试后,存储乱序后的试题和选项。
            3、获取试卷试题数据时,根据答案数据反向去获取试题和选项数据进行组装。

考生进入后乱序试题生成实现代码块:

//原始数据试题Id集合
List<Integer> questionIdList = new ArrayList<Integer>();//将试题Id乱序
Collections.shuffle(questionIdList);//存放乱序后试题排序,key:试题Id,value:试题排序
Map<Integer,Integer> questionSortMap = new HashMap<Integer, Integer>();
int sort = 1;
for(Integer qId:questionIdList) {questionSortMap.put(qId, sort);sort++;
}//此时questionSortMap为最新试题乱序数据,可缓存。//原始选项Id集合
List<Integer> questionItemIdList= new ArrayList<Integer>();//将选项Id乱序
Collections.shuffle(questionItemIdList);//此时questionItemIdList为最新选项乱序数据,可缓存。

考生进入时获取初次乱序缓存的数据进行渲染:

//获取缓存的试题顺序进行排序渲染
userAnswerList.sort(Comparator.comparing(exam_examinee_answer::getQuestionSort));//获取试题绑定的乱序选项Id
//mysql使用 order by field(id,?)关键字进行固定顺序查询。
select * from tableName where id in (4,3,1,2) order by field(id,4,3,1,2);//由于乱序选项之后的A、B、C、D顺序也乱了,则需要对乱序后的选项数据重新赋字母。
for (int i = 0; i < itemList.size(); i++) {item = itemList.get(i);item.setSort((char) (65 + i));
}
//其中可使用ASCII码获取大写字母,进行char类型强转会根据ASCII码转成对应字母的字符。

以上就完成的乱序试题和选项啦个人业务实现提取的思路哈~

Tips:
    1、ASCII码65~90为26个大写英文字母
    2、ASCII码97~122为26个小写英文字母

Java考试系统题目和选项乱序实现相关推荐

  1. java考试系统详细源码_Java在线考试系统(含源码)

    本文demo下载和视频教学观看地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1076 本实例介绍了在线考 ...

  2. java考试系统前台界面,在线考试系统前端界面

    整个在线考试系统分为教师端和学生端,教师端和学生端的登录端也不一样,二者分开登录 学生库表设计 var stuSchema = new Schema({ stuName: String, stuId: ...

  3. 重学 Java 设计模式:实战原型模式「上机考试多套试,每人题目和答案乱序排列场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  4. Java考试测试题目

    题目一: 创建一个Student类,要求有2个实例变量和2个实例函数 public class Test1 { class Student{private String name;private in ...

  5. java考试系统中自动组卷功能的核心逻辑实现

    /** * 自动组卷 *  * @param request * @param response * @param out * @throws IOException * @throws Servle ...

  6. 大学作业java考试系统_教学辅助之作业批改考试系统

    本教学辅助系统使用MyEclipse开发平台,jsp编程技术连接MySQL数据库而设计的,本系统主要分为三个角色,管理员角色实现班级信息管理.课程信息管理.课表管理.授课计划管理.已上课程.财务信息管 ...

  7. 原型设计模式—解决随机乱序出试卷(试题顺序、选项顺序随机打乱)

    原型设计模式 1.实现机制 2.使用场景 3.使用案例 3.1.案例说明 3.2.代码结构 3.3.案例实现 3.3.1.实体类 3.3.2.工具类 3.3.3.实现类 3.3.4.测试类 3.3.5 ...

  8. JAVA语言考试系统的设计与实现(论文+源代码+文献综述+外文翻译+开题报告)

    毕业论文(设计)开题报告 论文题目: java考试系统 学生姓名: 年级(学号): 二级学院: 专业: 指导教师: 职称: 填表日期:20 年 月 日 学 院 教 务 处 制 一.选题依据(背景与意义 ...

  9. java输出乱序日语假名

    package com.test;import java.util.ArrayList; import java.util.Arrays; import java.util.List; import ...

  10. SSM+mysql离散数学线上考试系统-计算机毕业设计源码83059

    摘  要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,高校当然也不例外.离散数学线上考试系统是以实际运用为开发背景,运用软件工程原理和开 ...

最新文章

  1. OpenCV java 图像基本处理-模糊 (8)
  2. 使用JavaScript在文本框中的Enter键上触发按钮单击
  3. shiro的用户认证
  4. JUnit4单元测试报错问题:method initializationerror not found
  5. 大数据架构详解_【数据如何驱动增长】(3)大数据背景下的数仓建设 amp; 数据分层架构设计...
  6. 快速实现一个分布式定时器
  7. Win32窗体应用程序如何添加资源文件?
  8. 中兴f650是千兆的吗_装宽带送的光猫自带WiFi功能,我还需要买路由器吗?
  9. Python稳基修炼的经典案例13(计算机二级、初学者必会的字符文件处理)
  10. 【翻译】Ext JS——高效的编码风格指南
  11. 构建一个基本的Python迭代器
  12. JavaScript--百度地图那些坑
  13. python数据分析之(5)scipy
  14. iis启动 服务无法在此时接受控制信息。 (异常来自 HRESULT:0x80070425)
  15. 音视频基础1:H264、H265、MPEG-4、VP8、VP9编码基础知识
  16. for循环、break和continue、循环的嵌套、white和do-white循环
  17. 基于SpringBoot+VUE的酒店管理信息系统的设计思路
  18. 第一次系统发版的过程(一)
  19. 校招 | 华为终端云服务招聘NLP、CV、推荐和大数据等岗位
  20. 蓝桥杯 2015国赛 穿越雷区

热门文章

  1. csdn下载频道资源整理
  2. Linux中ctrl+z 和trl+c的区别以及jobs、bg、fg命令
  3. 一个简单小说阅读网页html,简单版小说搜索阅读(64位程序)
  4. 基于STM32的USB枚举过程学习笔记
  5. JavaScript高级教程——(19)构造函数、原型、原型链、继承
  6. 深圳市最新10区地图json文件,使用与echarts,百度,高德等免费
  7. 学生选课管理系统(python)
  8. 计算机网络重置点命令,重置网络命令
  9. J2ME 手机模拟器插件 eclipseme.feature_1.7.9_site.zip
  10. Git 工具之TortoiseGit小乌龟安装配置及使用