余璜的技术博客

好玩就好

在线考试系统设计与实现精要

1. 技术基础

也许这个问题你已经知道答案,但它的的确确困扰了我,以至于觉得实现考试系统是个麻烦事。这个问题是:后端如何获得学生的答案选项?

所有题目都是在一个<form>里,每个选项对应一个<input>,题目不同,<input>的name属性就不同,有多少个input就应该有多少个name属性。后端怎么知道有多少个input,如何枚举这些input的name属性值呢?

答案在下面,input name数组。

<?php
echo var_dump($_GET['choice']);
echo "<hr>";
echo json_encode($_GET['choice']);
echo "<hr>";
$ch = $_GET['choice'];
foreach($ch as $k => $v)
{   
    echo $k . "=>" . $v;
}   
?><form action="test.php" id="form1" name="form1" method="get">
<input type="text" name="choice[1]" value="A" />
<input type="text" name="choice[2]" value="B" />
<input type="text" name="choice[3]" value="C" />
<input type="text" name="choice[99]" value="D" />
<input type="text" name="choice[99][title]" value="Manager" />
<input type="text" name="choice[99][salary]" value="100" />
<input type="submit" type="text" name="submit" />
</form>
输出结果:


还有两个很重要、很方便的函数:serializeunserialize


多项选择的思路:

$ch = $_GET['choice'];

foreach($ch[100] as $o)
{
    echo $o;
}

<input type="checkbox" name="choice[100][0]" value="A" />
<input type="checkbox" name="choice[100][1]" value="B" checked />
<input type="checkbox" name="choice[100][2]" value="C" />

选中A,则输出A

选中B、C,则输出B、C

2. 数据设计

有了上面的基础后,数据设计就方便多了。

choice表:

 
choice_id 选项id
title 题干
body 选项(数组序列化存储)
answer 答案(数组序列化存储)
explain 答案解析

exam表:

 
exam_id 试卷编号
choice_id 题目编号


exam_session表:

 
user_id 用户id
exam_id 试卷编号
mark 试卷得分


exam_detail表

 
user_id 用户id
exam_id 试卷编号
choice_id 题目编号
user_answer 用户答案


3. 代码架构设计

场景1:题目录入。这个比较简单,就是一道道的题目录入,录一个进一个题库。

场景2:组卷。列出所有题目,每个题目前面一个复选框,选中若干题,然后提交即可。参考phpmyadmin

场景3:做题。选择一张试卷,查询出所有题目,然后输出。用户做题后提交。后端获得question题目编号、答案key-value对,计算答案正确与否。

场景4:勘误。将答案显示给用户,并标出对错。

场景5:查看历史试题。每次提交的试题都有历史记录,都可以在后台查看到。


4. 参考内容

一个非常不错的开源考试平台,php+mysql架构:http://www.phpems.net/



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。微信hustos联系博主。 https://blog.csdn.net/maray/article/details/23617899
个人分类: 应用开发
想对作者说点什么? 我来说一句

在线考试系统的设计与实现

2015年08月04日 6.06MB 下载

在线考试系统设计需求分析

2010年03月28日 4.2MB 下载

在线考试与后台管理系统

2008年11月07日 1.17MB 下载

没有更多推荐了,返回首页

不良信息举报

在线考试系统设计与实现精要

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭