以下为《选题-标准化试题训练系统》的无排版文字预览,完整内容请下载
第5章 标准化试题训练系统 5.1 设计要求 设计 GUI 界面的标准化试题训练系统。具体要求如下: ① 使用 Microsoft Excel 工作簿存放标准化试题,形成题库。 ② 程序每次从题库随机抽取若干道题目形成一张试卷,用户可以依次做试卷上的题目, 允许用户向前、向后翻阅试卷上的题目。 ③ 用户每次做完一个题目必须确定该题目的答案,否则无效。 ④ 有计时功能,比如指定一张试卷限用时 15 分钟,时间一到用户再无法答题,提示用 户提交试卷。 ⑤ 用户一旦提交试卷,程序将给出试卷的分值。 ⑥ 为了达到反复训练的目的,用户提交试卷后可以继续让程序再出一套试卷。 程序运行的参考效果图如图 5.1 所示。 图 5.1 标准化试题训练系统 注意 我们按照 MVC-Model View Control(模型,视图,控制器)的设计思想展开程 序的设计和代码的编写。数据模型部分相当于 MVC 中的 Model 角色,视图设计部分给出 的界面部分相当于 MVC 中的 View,视图设计部分给出的事件监视器相当于 MVC 中的 Control。 5.2 数据模型 根据系统设计要求在数据模型部分设计了 Excel 表,编写了有关的类。 • 创建 Excel 工作簿。 103 Java 课程设计 第 3 版 • Problem 类:其实例是一道试题。 • TestPaper 类:其实例是一张试卷。 • GiveTestPaper 接口:封装给出试卷方法。 • RamdomInitTestPaper 类:实现 GiveTestPaper 接口,其实例负责随机从题库抽取题目 给出试卷。 • Teacher 接口:封装阅卷方法。 • TeacherOne 类:实现 Teacher 接口,其实例负责阅卷。 数据模型部分涉及的主要类的 UML 图如图 5.2 所示。 图 5.2 主要类的 UML 图 1 Excel 工作簿 Excel 工作簿在存储数据方面有着广泛的应用(它不是数据库),其中的 Sheet 表的结构 和数据库中的表类似。JDBC 没有提供操作 Excel 工作簿的 API。为了操作 Excel 工作簿,需 要额外下载操作 Excel 的 API。 1)下载 Excel API 用户可以搜索 Excel API 得到一个 Excel API 的下载地址,比如: http://download.csdn.net/download/sparkthink/*** 然后将下载的 jexcelapi_2_6_6.zip(版本号及名字略有差异,有些下载网址的下载名称是 jxls-2.3.0)解压缩到本地,则根目录下的 jxl.jar 文件就是操作 Excel 所需要的 API 的 JAR 文 件(不要解压缩该文件),根目录下的其他文件主要是 Excel API 的帮助文档。将 jxl.jar 复制 到 Java 运行环境的扩展中,即将这个 JAR 文件 jxl.jar 存放在 JDK 安装目录的“\jre\lib\ext” 中,比如“E:\jdk1.8\jre\lib\ext”。在安装 JDK 时还额外有一个 JRE,比如默认安装在“C:\Program Files (x86)\Java\ jre1.8.0_45 ”。 将 jxl.jar 文 件 也 复 制 到 “ C:\Program Files (x86)\Java\ jre1.8.0_45\lib\ext”中。 注意 可以到作者的网盘“http://pan.baidu.com/s/1qYCv0ra”下载 jexcelapi_2_6_6.zip。 2)存储试题的 Sheet 表 在标准化试题训练系统中,按照要求需要使用 Excel 工作簿中的 Sheet 表存储试题,即 Excel 工作簿中的 Sheet 表充当题库的角色。Excel 中 Sheet 表的结构对代码的编写是十分重要 104 第 5 章 标准化试题训练系统 的,比如列的数目以及顺序,因为后续的某些代码依赖于这些结构,即某些代码会和 Sheet 表的结构形成紧耦合关系,因此,Sheet 表的结构一旦更改,必然引起代码的修改。对 Excel 中 Sheet 表的结构要求如下: Sheet 表一共 7 列(A、B、C、D、E、F、G),各列的取值规则如下(不可再改变其取 值规则)。 • A 列:试题内容。例如“这个标志是何某某?” • B 列:正确答案。试题的正确答案只可以是 A、B、C、D 字母的组合(不区分大小 写),例如 B、ABC、C、D。 • C 列:选择项目。例如“A.沿左侧车道掉头”。 • D 列:选择项目。例如“B.该路口不能掉头”。 • E 列:选择项目。例如“C.选择中间车道掉头”。 • F 列:选择项目。例如“D.多股铁路与道路相交”。 • G 列:题目类型。题目的类型只可以是“p”“x”“p#图像文件名字”或“x#图像文件 名字”(字母 p、x 不区分大小写),例如 x#hello.jpg、p#java001.jpg。类型 p 表示试题 类型是判断题,类型 x 表示试题类型是选择题,类型 p#表示试题类型是判断题并带 有图像,x#表示试题类型是选择题并带有图像。 • Excel 中 Sheet 表的第一行不是试题,是试题的说明,说明文字可任意给定。 根据设计要求打开 Microsoft Excel 设计了 Excel 工作簿以及其中的第一张 Sheet 表(在 Excel 工作簿中是 Sheet1 表)——交通理论.xls,Sheet1 表结构如图 5.3 所示。 图 5.3 Excel 中的 Sheet 表的结构 下载的操作 Excel 表的 API 要求 Excel 工作簿必须是扩展名为.xls 的 Excel 文件,因此在 用 Microsoft Excel 保存 Excel 工作簿时需要把保存类型选择为“Excel 97-2003 工作簿 (*.xls)”。 3)题库与图像管理 需要建立一个名字是“题库”的文件夹,存放 Excel 工作簿,以及名字是“图像管理” 的文件夹,存放所需要的图像文件。文件夹的位置需要和程序在同级目录中。比如,程序中 的包名目录是“ch5\gui”,“ch5\gui”目录的上一层目录是 D:\,那么“题库”文件夹和“图 像管理”文件夹必须存放在 D:\下,即保持和 ch5 是同级。 为了便于软件的管理以及编写,对于不需要图像的试题,程序统一用默认的图像,该默 认图像的名字固定为 havenot.jpg。另外,程序还需要一个名字是 renew.jpg 的图像,当用户重 新选择试卷时用该图像友好地提示用户,因此必须将 havenot.jpg 和 renew.jpg 图像保存到“图 像管理”文件夹中(图像的外观可自己指定)。havenot.jpg 和 renew.jpg 图像如图 5.4 所示。 105 Java 课程设计 第 3 版 图 5.4 havenot.jpg 和 renew.jpg 2 试题与试卷 1)Problem 类 Sheet 表中的一行数据是一道试题。用 Problem 类来封装 Sheet 表的基本结构,即试题, 这对于后续代码的设计是非常有利的。下列 Problem 类封装表结构,其实例是一道试题。 Problem.java package ch5.data; public class Problem { boolean isChoice; //是否为选择题 boolean isJudge; //是否为判断题 String content; //题目内容 String giveChoiceA,giveChoiceB,giveChoiceC,giveChoiceD;//提供选择 String imageName; //题目所带的图像文件的名字 String correctAnswer="QWEQ@#$@!@#1QWEQ"; //题目的正确答案 //用户回答的初始答案和 correctAnswer 不同,防止出题人忘记给正确答案 String userAnswer ="" ; //初始值必须是不含任何字符的串 public boolean getIsChoice() { return isChoice; } public void setIsChoice(boolean b) { isChoice = b; } public boolean getIsJudge() { return isJudge; } public void setIsJudge(boolean b) { isJudge = b; } public void setContent(String c) { content = c; } public String getContent() { return content; } public void setCorrectAnswer(String a) { correctAnswer = a; } public String getCorrectAnswer() { 106 第 5 章 标准化试题训练系统 return correctAnswer; } public void setUserAnswer(String u) { userAnswer = u; } public String getUserAnswer() { return userAnswer; } public void setGiveChoiceA(String a) { giveChoiceA = a; } public String getGiveChoiceA() { return giveChoiceA; } public void setGiveChoiceB(String b) { giveChoiceB = b; } public String getGiveChoiceB() { return giveChoiceB; } public void setGiveChoiceC(String c) { giveChoiceC = c; } public String getGiveChoiceC() { return giveChoiceC; } public void setGiveChoiceD(String d) { giveChoiceD = d; } public String getGiveChoiceD() { return giveChoiceD; } public void setImageName(String c) { imageName = c; } public String getImageName() { return imageName; } } 2)TestPaper 类 训练时需要从题库获得若干个试题,即用若干个试题组成一张试卷,这里用 TestPaper 类封装试卷,即该类的实例就是一张试卷。 TestPaper.java package ch5.data; 107 Java 课程设计 第 3 版 public class TestPaper { //试卷 private Problem [] problem=null;//数组的每个单元存放一道试题(一个 Problem 对象) int index = -1; String problemSource ; //试卷的题库 public void setProblem(Problem [] problem){ this.problem = problem; } public Problem getProblem(int i) { if(problem == null) { return null; } if(problem.length==0){ return null; } if(i>=problem.length||i请点击下方选择您需要的文档下载。
以上为《选题-标准化试题训练系统》的无排版文字预览,完整内容请下载
选题-标准化试题训练系统由用户“xxx61941973mbb”分享发布,转载请注明出处