模拟考试系统

  • 一、功能描述
  • 二、实现代码
    • 1. 定义考题类
    • 2. 定义单选题类,继承考题类
    • 3. 定义多选题类,继承考题类
    • 4. 定义测试类
  • 四、演示效果图

一、功能描述

定义考题类(Question)及其子类,目前先实现了单选和多选两种题型,其他题型可以扩展
完成考题类(Question),单选题(SingleChoice)和多选题(MultiChoice)是其子类
要求:

  1. Question包含题干属性(text)
  2. Question包含检测标准答案的方法 boolean check(int[] answers)
    • 参数answers:用户提供的答案(注意:单选题只有一个答案)
  3. 单选题(SingleChoice)和多选题(MultiChoice)是Question的子类
    • MultiChoice包含属性:
      选项:String[] options
      多选标准答案:int[] answers
    • SingleChoice包含属性:
      选项:String[] options
      单选标准答案:int answers
  4. 在MultiChoice实现参数为(String text,String[] options,int[] answers)的构造方法
    • 参数text:题干
    • 参数options:选项
    • 参数answers:多选标准答案(正确选项的序号)
  5. 在SingleChoice实现参数为(String text,String[] options,int answers)的构造方法
    • 参数text:题干
    • 参数options:选项
    • 参数answers:单选标准答案(正确选项的序号)
  6. 在SingleChoice和MultiChoice类中重写Question类中的check方法
    • 方法中提供具体的检查用户答案的逻辑

二、实现代码

1. 定义考题类

Question.java

package com.feonix;/*** 考题类* * @author FeoniX**/
public abstract class Question {/** 题干 */private String text;/*** 有参构造器* * @param text 题干*/public Question(String text) {this.text = text;}/*** 检测标准答案的方法* * @param answers 考生填写的答案* @return*/public abstract boolean check(int[] answers);/*** 获取题干* * @return*/public String getText() {return text;}/*** 设置题干* * @param text*/public void setText(String text) {this.text = text;}}

2. 定义单选题类,继承考题类

SingleChoise.java

package com.feonix;/*** 单选题类* * @author FeoniX**/
public class SingleChoice extends Question {/** 单选题题目选项 */private String[] options;/** 单选题标准答案 */private int answers;/*** 有参构造器* * @param text 题干* @param options 题目选项* @param answers 题目答案*/public SingleChoice(String text, String[] options, int answers) {super(text);this.options = options;this.answers = answers;}/*** 检测标准答案的方法* * @param answers 考生填写的答案* @return*/@Overridepublic boolean check(int[] answers) {// 单选题不能有多个答案if (answers.length > 1) {return false;}return answers[0] == this.answers;}/*** 获取题目选项* * @return*/public String[] getOptions() {return options;}/**** 设置题目选项* * @param options*/public void setOptions(String[] options) {this.options = options;}/*** 获取标准答案* * @return*/public int getAnswers() {return answers;}/*** 设置标准答案* * @param answers*/public void setAnswers(int answers) {this.answers = answers;}@Overridepublic String toString() {String text = this.getText() + "\n";for (String op : this.getOptions()) {text += op + "\n";}return text;}}

3. 定义多选题类,继承考题类

MultiChoise.java

package com.feonix;/*** 多选题类* * @author FeoniX**/
public class MultiChoice extends Question {/** 多选题题目选项 */private String[] options;/** 多选题标准答案 */private int[] answers;public MultiChoice(String text, String[] options, int[] answers) {super(text);this.options = options;this.answers = answers;}/*** 检测标准答案的方法* * @param answers 考生填写的答案* @return*/@Overridepublic boolean check(int[] answers) {// 如果考生选择的选项个数和答案的选项个数不一致,说明这题答错了if (answers.length != this.answers.length) {return false;}// 正确的选项个数int corrects = 0;// 因为考生的选项个数和答案一致,但是顺序不一定一致for (int i = 0; i < answers.length; i++) {for (int j = 0; j < answers.length; j++) {// 所以找到一个一致的,就记录一下if (answers[i] == this.answers[j]) {corrects++;}}}// 如果正确的个数和答案个数不一致,就说明答错了,否则就是答对了return this.answers.length == corrects;}/*** 获取题目选项* * @return*/public String[] getOptions() {return options;}/**** 设置题目选项* * @param options*/public void setOptions(String[] options) {this.options = options;}/*** 获取标准答案* * @return*/public int[] getAnswers() {return answers;}/*** 设置标准答案* * @param answers*/public void setAnswers(int[] answers) {this.answers = answers;}@Overridepublic String toString() {String text = this.getText() + "\n";for (String op : this.getOptions()) {text += op + "\n";}return text;}
}

4. 定义测试类

package com.feonix;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class Test {/** 存放考题的list集合 */private static List<Question> list = new ArrayList<Question>();public static void main(String[] args) {// 这里调用初始化考题的方法initQuestions();Scanner key = new Scanner(System.in);String answer = "";String[] answers = new String[4];System.out.println("模拟考试现在开始");System.out.println("本套试题分为单选题和多选题,单选题只能选择一个选项,多选题多个选项中间以英文逗号“,”分隔\n");for (Question question : list) {System.out.println(question);System.out.println("请选择:");answer = key.next();answers = answer.split(",");boolean result = question.check(stringArrayToIntegerArray(answers));System.out.println("回答" + (result ? "正确" : "错误") + "\n");System.out.println("==========================================================================\n");}key.close();}/*** 初始化生成试卷* 这里手动写的两个,后续可以添加从数据库里面读取*/private static void initQuestions() {String text = "1. (单选题)下面的程序执行结果为:( )\npublic class Point {\n\tint y = 7;\n\tpublic void step(int y) {\n\t\ty += y;\n\t\tSystem.out.println(y);}\n\tpublic static void main(String[] args) {\n\t\tPoint p = new Point();\n\t\tp.step(10);\n\t}\n}\n";String[] options = new String[] { "1. 14", "2. 20", "3. 10", "4. 17" };int answer = 2;Question singleChoose = new SingleChoice(text, options, answer);list.add(singleChoose);text = "2. (多选题)下列关于JVM的内存结构描述正确的是:( )\n";options = new String[] { "1. 类的各种信息在堆中保存", "2. 栈用于存放程序运行过程中所有的局部变量", "3. 堆一般用于存储使用new关键字创建的对象","4. 类是JVM的内存结构" };int[] answers = { 2, 3 };Question multiChoose = new MultiChoice(text, options, answers);list.add(multiChoose);}/*** String类型的数组转为Integer类型的数组* * @param array* @return*/private static int[] stringArrayToIntegerArray(String[] array) {int[] ins = new int[array.length];for (int i = 0; i < array.length; i++) {ins[i] = Integer.parseInt(array[i]);}return ins;}
}

四、演示效果图

我的Java学习之路(七)-- 模拟考试系统相关推荐

  1. java实现模拟考试系统,Java Web应用开发—— 在线模拟考试系统-毕业设计

    Java Web应用开发-- 在线模拟考试系统-毕业设计 毕毕 业业 设设 计(论计(论 文)文) 题题 目目 Java Web 应用开发 在线模拟考试系统的设计与实现 学学 院院 计算机学院 专专 ...

  2. Java学习之路(七):泛型

    泛型的概述和基本使用 作用:把类型明确的工作推前到创建对象或者调用方法的时候 泛型是一种参数化类型,把类型当做参数一样传递来明确集合的元素类型 泛型的好处 提高安全性 省去强转的麻烦 泛型的基本使用 ...

  3. java学习之路目录(已完结)

    java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...

  4. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应 ...

  5. 萌新的java学习之路——第一周

    萌新的java学习之路--第一周 第一周的学习 这是我学习Java的第一周,写这个博客更多的时为了总结自己这一周的学习情况,如果有人看到我写的博客,有什么问题的话,可以问我.虽然我也是一个小白,但我会 ...

  6. JAVA自学之路 七:路线图明细

    [原创 - 尚学堂科技 - 马士兵老师] JAVA自学之路 七:路线图明细 [转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_7.html] 下面给出第二节 ...

  7. java学习之路---java学习的方法和java学习路线

    转载于: http://blog.csdn.net/zhangerqing 前段时间逛论坛,总会有很多新手很迷茫,问到:到底该怎么学好Java,这个问题很重要,尤其对于像我们这样大多数都是靠自学的人来 ...

  8. Java学习之路02_选择方向_旺旺老师

    提示:请您先阅读第一部分:Java学习之路01_软件江湖_旺旺老师 第二部分:帮派之争 就好像玩游戏要先选择角色种族,进入江湖要先选择帮派,那搞软件开发也要选择方向.个人总结的软件开发的方向:嵌入式开 ...

  9. java学习之路2--简单工厂模式实现饮料自动贩卖机

    java学习之路2 用简单工厂模式实现饮料自动贩卖机 功能简介 具体实现 1.简单工厂模式 2.代码 总结 用简单工厂模式实现饮料自动贩卖机) 功能简介 接收用户输入的信息,选择购买的饮料. 可供选择 ...

最新文章

  1. VMware前路难测,多个厂家群雄逐鹿
  2. SpringBoot资料整理(3)
  3. datagrid加checkbox实现分页不丢失选择的记录 (转)
  4. oracle for函数,oracle分区表述的FOR语句(一)
  5. QPW 企业维度评分表(tf_company_dimesion)
  6. 使用javamail发信过程中的一些问题及解决方法
  7. Python特殊函数
  8. 糖豆人显示此服务器正在进行游戏,糖豆人服务器频繁崩溃,west滚石教技巧,蓝哥踢球做内鬼...
  9. DotNet控件缩写
  10. R语言学堂开通付费咨询业务了~~
  11. 感觉自己不适合编程 确学了计算机专业,高薪程序员:“我劝他学医,别学计算机,却被冤枉在害人”...
  12. 如何进行大数据可视化分析
  13. 5.企业应用架构模式 --- 并发
  14. linux九九乘法表,linux shell 九九乘法表
  15. Mybatis-plus 代码生成器(新)工具类
  16. myftpadmin+proftpd+mysql架设ftp服务器_配置proftpd-admin管理proftpd服务器
  17. 【数据结构-K】基数排序
  18. 运营干货分享 | 公众号运营需要具备什么能力以及引流工具渠道吗?
  19. mysql搜索结果去重_mysql数据库去重查询
  20. 电脑为什么无法更改计算机,电脑打不开更改电脑设置怎么办

热门文章

  1. ajax 传对象数组到后台
  2. java的发展历史 现状
  3. 微信小程序在使用权限时,不弹弹框
  4. 游戏服务器 协议安全,游戏服务器 协议安全
  5. python统计爬取全国地铁线路站点
  6. MacBook如何删除卸载软件
  7. intel 服务器芯片8180,Intel Xeon Platinum 8180M报价52000
  8. java applet的生命周期_Java Applet的生命周期是什么?生命周期方法介绍
  9. Android运行虚拟机怎样解锁,vm 虚拟机 android 如何解锁
  10. PyG Cora图数据集可视化教程