曾经开发过的一个四六级模拟考试系统,分享一下开发的部分思路以及数据库设计
一个通过爬虫爬取到的试题聚合成在线模拟考试系统:通过JavaEE语言设计,利用网络爬虫技术Jsoup爬取网络上各大英语四六级学习网站的数据,聚合数据到本系统并以简洁的界面展示出来,为用户提供学习四六级资源的检索和模拟四六级考试的练习。
系统分为几大模块:系统管理模块、爬虫聚合试题模块、考试试题学习模块、在线模拟考试模块。其中,核心在线模拟考试和爬取聚合试题模块,爬取模块有两种聚合数据方式:第一种是统一爬取页面的听力、作文、翻译等页面,然后获取标题页面列表和超链接,再爬取标题超链接的页面主要内容 ,数据保存在Tomcat服务器硬盘上,第二种爬取方式是分类爬取试题的作文题、完形填空题、翻译题、阅读题等题目,保存到数据库表上。
框架:SpringMVC+Mybatis的web项目框架
系统流程图
注
Lucence开放源代码的全文检索引擎工具包,提供完整的查询引擎和索引引擎,在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。
数据库设计
- 一份英语试卷只要由作文题、听力题、完形填空题、阅读题、信息匹配题、翻译题等大题以及每道大题下面有小题组成,把这些题目抽象成表:题型表、大题表、小题表、科目表
- 把试卷相关的信息抽象:试卷表、作答表(答题表)、试卷-试题中间表、
- 用户信息以及参加考试记录抽象:用户表、考试记录表
- 爬虫标志表
表3-1 ANSWER作答表
字段名 | 类型 | 长度 | 非空 | 注释 |
---|---|---|---|---|
A_ID | NUMBER | 12 | True | 主键(自增) |
A_ANSWER | VARCHAR2 | 2000 | False | 考生答案 |
A_RESULT | NUMBER | 1 | False | 对错 |
A_SCORE | NUMBER | 5 | True | 分数 |
A_EXAMLOG_ID | NUMBER | 10 | True | 外键(考试记录ID) |
A_QUESTIONES_ID | NUMBER | 10 | True | 外键(大题ID) |
A_QUESTION_ID | NUMBER | 10 | False | 外键(小题ID) |
表3-2 EPAPER试卷表
字段名 | 类型 | 长度 | 非空 | 注释 |
---|---|---|---|---|
EP_ID | NUMBER | 8 | True | 主键(自增) |
EP_NAME | VARCHAR2 | 90 | True | 试卷名称 |
EP_TIME | NUMBER | 5 | True | 考试时长 |
EP_SCORE | NUMBER | 5 | True | 总分 |
EP_PASS_SCORE | NUMBER | 5 | True | 合格分数 |
EP_CREATE_TIME | TIMESTAMP | 3 | True | 创建时间 |
EP_SUBJECT_ID | NUMBER | 6 | True | 外键(科目ID) |
EP_CREATE_USER_ID | NUMBER | 10 | True | 外键(创建者) |
表3-3 EPAPER_QUESTIONES试卷-试题中间表
字段名 | 类型 | 长度 | 非空 | 注释 |
---|---|---|---|---|
EPQ_EPAPER_ID | NUMBER | 8 | True | 外键(试卷ID) |
EPQ_QUESTIONES_ID | NUMBER | 10 | True | 外键(试题ID) |
EPQ_QS_PRIORITY | NUMBER | 2 | True | 试题优先级 |
表3-4 EXAMLOG考试记录表
字段名 | 类型 | 长度 | 非空 | 注释 |
---|---|---|---|---|
EL_ID | NUMBER | 10 | True | 主键(自增) |
EL_ANSWER_TIME | TIMESTAMP | 3 | True | 开考时间 |
EL_SUBMIT_TIME | TIMESTAMP | 3 | False | 交卷时间 |
EL_TOTAL_SCORE | NUMBER | 5 | True | 总成绩 |
EL_USER_ID | NUMBER | 10 | True | 外键(用户ID) |
EL_EPAPER_ID | NUMBER | 8 | True | 外键(试卷ID) |
表3-6 QTYPES题型表
字段名 | 类型 | 长度 | 非空 | 注释 |
---|---|---|---|---|
QT_ID | NUMBER | 6 | True | 主键(自增) |
QT_NAME | NVARCHAR2 | 30 | True | 题型名称 |
QT_DESCRIPTION | NVARCHAR2 | 500 | False | 题型描述 |
QT_CATEGORY | NVARCHAR2 | 30 | True | 题型分类 |
QT_OPTIONS | NUMBER | 2 | False | 题型选项 |
表3-7 QUESTION小题表
字段名 | 类型 | 长度 | 非空 | 注释 |
---|---|---|---|---|
Q_ID | NUMBER | 10 | True | 主键(自增) |
Q_TITLE | VARCHAR2 | 4000 | True | 小题题目 |
Q_ANSWER | VARCHAR2 | 4000 | True | 小题答案 |
Q_SCORE | NUMBER | 5 | True | 小题分值 |
Q_PRIORITY | NUMBER | 2 | True | 小题优先级 |
Q_QUESTIONES_ID | NUMBER | 10 | True | 外键(大题ID) |
表3-8 QUESTIONES大题表
字段名 | 类型 | 长度 | 非空 | 注释 |
---|---|---|---|---|
QS_ID | NUMBER | 10 | True | 主键(自增) |
QS_DESCRIPTION | VARCHAR2 | 4000 | False | 大题描述 |
QS_TITLE | VARCHAR2 | 4000 | True | 大题题目 |
QS_ANSWER | VARCHAR2 | 4000 | False | 大题答案 |
QS_SCORE | NUMBER | 5 | True | 大题分值 |
QS_CREATE_TIME | TIMESTAMP | 3 | True | 创建时间 |
QS_QTYPES_ID | NUMBER | 6 | True | 外键(题型ID) |
SUBJECT_ID | NUMBER | 10 | True | 外键(科目ID) |
表3-9 reptilia爬虫标志表
字段名 | 类型 | 长度 | 非空 | 注释 |
---|---|---|---|---|
ID | NUMBER | 10 | True | 主键(自增) |
TITLE | NVARCHAR2 | 20 | True | 标题 |
LINK | NVARCHAR2 | 32 | True | 连接 |
TIME | TIMESTAMP | 3 | True | 时间 |