如何设计简单的php在线考试系统

一、需求分析

1.题库功能。可以支持选择、填空、简答(多选原理与填空一样)单个题目录入;可以支持excel批量导入。

2.题库管理。支持全部题库的罗列,支持按题型及关键字搜索,可以对题库进行删除操作。

3.试卷管理。 生成无试题的空白试卷或生成已有试卷试题的试卷。生成的试卷支持从题库选题并设置每题的分数,支持对选题进行指定顺序排序,试卷试题及分数设置完成后可以进行试卷预览。 每个试卷提供考试开关,只有开启状态下才可使用考试连接进行考试。

4.试卷及评分。设置好试卷后会自动按题型及试题顺序生成试卷并标示每题的分数。试卷完成后可以在后台查阅试卷进行自动评分,(简答题等)自动评分不准确的可以进行手动分数修改。所有参加考试的人按成绩结果排名展示。

二、程序架构 php+mysql实现 前端展示用Bootstrap

1.mysql表规划。使用三张数据库表,exam_question_bank(所有试题的题库存放),exam_testpaper(考试试卷列表),exam_answer_paper(所有参加考试的答题卷数据库表)。

2.exam_question_bank设计。题库表需要包含下列字段【题型-难度-问题名称-题目选项stem字段(针对选择题)-参考答案answer字段-建档时间-题目默认分数-来源(批量上传/手动新增)】。 其中stem与answer字段是文本格式,如果有多个选择选项或多个答案答案之间以“&”连接。后期生成试卷(生成试卷时会将试卷对应题库的所有题目及答案全部复制插入到exam_answer_paper中)后进行自动阅卷的时候加上条件判断使用explode 分割成数组即可,选择题的多个选项explode成数组后使用foreach循环展示出选项。 自动阅卷explode答案后使用array_intersect判断答题的结果与餐标答案的交集,交集个数小于答案个数则回答不正确!

3.exam_testpaper设计。试卷列表包含【试卷名称-试题id(text字段对应题库试题id以“,”号进行拼接)-创建时间-试卷试题分数(拼接顺序与题库试题id一一对应)-试卷试题顺序(拼接 顺序与题库试题id一一对应 )-开考状态】。每次生成新试卷的时候除非选择复制试题,否则只有空白卷没有试题,新增试题时可以勾选试题并设置分数及顺序,提交后将参数及题库问题、答案、分值等插入exam_testpaper表。

4.exam_answer_paper设计。试卷id,题库id,参考人姓名,参考人准考证号(以时间替代),开考(创建)时间,结束(提交)时间,答案1,答案2,答案3,答案4……,本题得分,本题手动评分得分,本题分值,本题问题名称,题目选项stem,参考答案answer,试题顺序。 预览或参加试卷考试时,会根据exam_testpaper内的配置(多个题id以,拼接)对试题使用explode进行分割得出所有对应于题库的试题id,将这些试题(再加上其他需要作答、显示的字段)全部插入到exam_answer_paper中。为防止考试已经开考后又对试卷题目进行了别的修改,可以加上版本号进行控制。因为每次考试都会自动复制最新的完整试题配置(含具体问题、答案、分值、排序)过来插入,即使后期修改也不影响前面已经完成考试的人的试卷结构,但是加上版本号容易区分试卷是不是同一批次生成的试卷!

5.试题题库的批量上传。这工作可以放到整个mysql设计完成之后,如果单题新增题库没问题后就可以开始批量上传模块的设计,使用excel上传到mysql数据库咱们主要使用PHPExcel这个组件,可以到网上下载。PHPExcel可以实现excel的单元格内容读取到数组,读取过程中加上合理判断后可以进行数据库插入操作。每完成一行excel的读取简介将插入语句存入类似$sql_insert[]数组内,等全部读取完毕后foreach该数组达到一条条插入数据库的目的。另外可以在插入过程中进行锁表操作并记录下插入前后的自增id序号,如果两者差与插入数据库的条数不对应说明插入过程中出现了问题,这时候可以将两个id之间的内容之间删除并进行客户端报错提示。

网上php在线考试的做的比较好的有http://www.phpems.net/ 开源免费的PHP无纸化模拟考试系统,本文设计思路部分来源于该项目,有兴趣的可以到官网下载下来好好研究下,很强大很完善的系统,但是一般用不到这么多功能所以本文仅结合实际做了部分功能的实现。

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/如何设计简单的php在线考试系统/

赞赏

微信赞赏支付宝赞赏

mysql备份工具xtrabackup2-4(安装)
jquery-ajax跨域提交请求获取远程更新文件
每次电脑关机后都自动重启