文章目录
业务场景
- 100道不定项选择题,不同考生的题目顺序不一样
- 200位考生在规定时间同时开始和结束答题
- 考试开始后可以查看题目列表,不一定要按照顺序作答,已作答的题目可以修改,最终分数以交卷时的分数为准
- 在考场后台的办公室中可以实时刷新分数的排行榜
- 考试环境为学校的机房,网络环境为局域网
- 考试题目为文学类知识竞赛,考生准考证号和身份证号分别作为用户名和密码
需求分析
1、为了避免相互抄袭,不同考生的题目顺序需要不一样,这里需要打乱题目的顺序。
2、考试开始作答的时间可能不同,但是都要在统一的时间截止答题,这就要求考生的机器需要统一时间,能够在考试结束后自动提交。
3、在考试过程中要能够查看分数排行版,这里可以在考生每回答或者更新题目的时候都去刷新排行榜,或者在管理段定时刷新的时候再去计算所有考试的分数和排行榜情况。
4、考试环境为本地局域网,考试过程中有监考老师进行巡逻,并且考试群体大多不具备计算机知识,这里可以基本排除考生进行抓包后主动调用接口的场景。
设计思路
打乱题目顺序
1、使用mysql的随机排序方法,ORDER BY RAND(准考证号)
2、在用户首次登录时,可以使用php的shuffle($arr)
函数将题目顺序打乱后返回,并将打乱后的数组顺序再次存储到数据库中。
##统一时间交卷
交卷时间是确定的,我们要以服务器时间为准,用户机器上的时间不可靠。用户的每次请求的返回