最近在做工作的项目时有一个在线考试的需求,一个在线试卷模块,包括单选题,多选题,判断题和填空题。
一、业务介绍
在线考试模块在现代教育和培训领域的应用越来越广泛。这个模块需要后端在数据库中获取题目并通过前端的请求发送给前端,然后将其渲染到页面上。提交考试结果后记录用户的选择并计算考试分数,然后保存到数据库中。根据此项目要求,用户可以没有限制的进行考试,每一次考试就会更新考试成绩。
二、使用的技术栈
主要技术栈
前端技术:React
React 是一个流行的 JavaScript 库,用于构建用户界面。它是一个高效、灵活的库,适用于构建各种类型的应用程序,包括在线答题试卷模块。
-
后端技术:PHP Laravel
使用php Laravel是基于已有的项目后端使用的是Laravel。后端可以使用任何语言或框架Java,Python,Node,C#。
Laravel 是一个流行的 PHP 框架,用于构建高效、可扩展的 Web 应用程序。它提供了一套完整的工具,可以帮助开发人员快速构建强大的后端应用程序。 -
数据库:MySQL
本项目采用最流行的开源数据库mysql。
MySQL 是一个流行的关系型数据库管理系统。它提供了高效、可靠的数据存储和处理功能,是构建在线答题试卷模块的重要组件。
其他使用的工具包
antd(样式),axios,Reflux(状态管理)
三、业务实现
1. 数据库设计
这个项目数据库包含2个主要的表(其他的表像users不在此过多描述),questions表和theory_exam表。questions表存放所有题目信息,字段包括id,type题目类型(单选dx,多选ddx,判断pd,问答wd),title题目,options选项,correct正确选项,name为题目名称(这里用q1-qn表示)。具体的每个字段的设计如下图所示
下图是对questions表的模拟数据,题目都为xxxxxxxxxxxxxxx,选项ABCD也是xxxxxxxxxxxxxxxxx。
theory_exam表字段有id,user_id为连接users表的外键,answer为学生考试的选项,score是最后的成绩,theory_time是理论考核的用时,具体字段的设计和类型如下图:
下图是学生模拟考试的结果,数据是通过后端发送到数据库。