在线考试小程序怎么做?题库、组卷、防作弊、成绩单全流程

简介: 在线考试小程序完整方案:题库数据结构、组卷算法、考试状态机、防作弊三层、成绩单统计全流程拆解,含SQL与代码实现。

【导读】
想做在线考试小程序,从题库设计到组卷算法、再到防作弊和成绩统计,是一整套流程。本文按"先做题库、再做组卷、再做考试、最后做成绩"的顺序,拆一个可落地的在线考试小程序完整方案:数据模型怎么设计、组卷怎么抽题、防作弊怎么落地、成绩单怎么出。

一、先把题库数据结构设计好

在线考试的地基是题库,数据结构没设计好,后面组卷、统计全要返工。一个题库至少需要这几张核心表:

-- 题目表:支持单选、多选、判断、填空
CREATE TABLE question (
  id BIGINT PRIMARY KEY,
  type TINYINT,              -- 1单选 2多选 3判断 4填空
  content TEXT,              -- 题干(含富文本/图片)
  options JSON,              -- 选项:[{"key":"A","text":"..."}]
  answer JSON,               -- 标准答案
  difficulty TINYINT,        -- 1-5 难度
  category_id BIGINT,        -- 所属分类(章节/知识点)
  tags VARCHAR(255),         -- 标签:如"第一章""高频考点"
  created_at DATETIME
);

-- 试卷表:一次考试 = 一张试卷
CREATE TABLE exam (
  id BIGINT PRIMARY KEY,
  title VARCHAR(255),
  category_rule JSON,        -- 组卷规则:{"第1章":5,"第2章":8}
  duration_minutes INT,      -- 考试时长
  pass_score INT,            -- 及格分
  shuffle_question TINYINT,  -- 题目乱序
  shuffle_option TINYINT     -- 选项乱序
);

关键设计:题目和试卷分离——试卷只存组卷规则,不存题目快照;考生答卷时再按规则抽题,才能支持"同一场考试每人题目顺序不同"的防作弊基础。

二、组卷:抽题算法怎么写

组卷的核心是"按规则抽题"。常见两种:

固定试卷(重要考试):预先人工组好一张卷,所有人做同一套(可乱序);
随机组卷(模拟考试/刷题):按分类+难度比例动态抽题。

# 随机组卷:按分类和难度比例抽题
def compose_paper(category_rule, difficulty_ratio, question_count):
    picked = []
    for cat, count in category_rule.items():
        # 每个分类按难度比例抽
        by_diff = {
   1:0, 2:0, 3:0, 4:0, 5:0}
        for q in questions_of(cat):
            by_diff[q.difficulty] += 1
        # 先按难度比例分配名额,再从每个难度池随机抽
        quota = {
   d: round(count * ratio) for d, ratio in difficulty_ratio.items()}
        for d, n in quota.items():
            pool = [q for q in questions_of(cat) if q.difficulty == d]
            picked += random.sample(pool, min(n, len(pool)))
    return picked

注意点:抽题要去重(同一考生不能抽到重复题)、比例兜底(某个难度池不够时从邻近难度补)。

三、考试流程:进入、答题、交卷三段状态机

考试过程是一个状态机:未开始 → 进行中 → 已交卷 → 已判分。中间最容易出问题的是"交卷":

  • 自动保存:每答一题立即保存,防断网丢答案;
  • 交卷幂等:交卷接口必须幂等,重复点击/超时重试不能重复提交;
  • 弱网重试:交卷请求失败自动重试,带请求ID去重。
# 交卷幂等:用 request_id 防重复提交
def submit_exam(exam_id, user_id, answers, request_id):
    if redis.set(f"submit:{exam_id}:{user_id}", request_id, nx=True, ex=60):
        save_answers(exam_id, user_id, answers)
        score = auto_grade(exam_id, user_id)
        return {
   "status": "success", "score": score}
    return {
   "status": "duplicate"}

四、防作弊:环境约束 + 行为风控 + 雷同检测三层

在线考试必须有防作弊,三层落地:

  1. 环境约束:全屏考试、切屏记录(超过阈值自动收卷)、IP/设备指纹检测(同IP多账号高危)、迟到禁入、开考最短交卷时间;
  2. 行为风控:答题速度异常(选择题平均3秒/题)、粘贴外部内容、多账号同设备——算风险分,达到阈值标记或收卷;
  3. 雷同检测:考后比"错误模式相似度"——选项序列相同率、错题重合度、答题时长曲线、交卷时间窗,生成证据包交人工复核。

五、成绩单与数据统计

判分后输出:总分、各分类得分率、用时、排名、证书(可选)。统计维度至少要有:通过率、平均分、各题正确率(找薄弱知识点)、各分类得分分布。给老师的后台要能导出明细,给学员的页面要有错题回顾。

注意事项

  1. 题库先分级:不按分类/难度组织,组卷就是瞎抽,先建好分类体系。
  2. 别把答案存前端:标准答案放服务端,前端只存用户作答,防止抓包拿答案。
  3. 组卷要去重兜底:题目池不够时程序会崩,先算够不够再抽。
  4. 防作弊要留证据:不追求全防,追求"每次可疑都有据可查",人工复核兜底。

结语

在线考试小程序从0到1,核心是题库建好、组卷规则清晰、考试状态机稳定、防作弊三层兜底、成绩统计闭环。按这个顺序做,一个能支撑千人在线考试的题库+考试系统就能跑起来。中小企业没有研发团队时,用成熟底座(比如乔拓云这类零代码平台)+ 自研关键模块,是最快的落地路径。

相关文章
|
云安全 安全 网络安全
|
6天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
1987 1
|
13天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
2143 43
|
10天前
|
Web App开发 人工智能 前端开发
2026 年 AI 浏览器怎么选?Ego Lite、Tabbit、Chrome DevTools MCP 深度对比,开发者到底该用哪个?
2026年AI浏览器选型指南:Ego Lite专注多Agent协同(Mac优先),Tabbit国产首选,原生支持Windows与Codex控制;Chrome DevTools MCP非浏览器而是开发者利器,深度集成Console/Network/Performance调试能力,让AI真正“看懂并验证”前端代码。
1389 3
|
14天前
|
JSON 程序员 数据格式
最新版Notepad++下载、安装、配置保姆级教程(附官网安装包)
Notepad++ 是一款免费开源、轻量快速的 Windows 文本编辑器,支持多标签、语法高亮、代码折叠与宏录制,体积小、启动快、资源占用低,兼容 x64/x32/ARM 架构,是程序员和文字工作者的高效利器。
2759 0
|
7天前
|
安全 应用服务中间件 Go
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
PHP2Shell 双 RCE 已遭在野利用:WordPress、Drupal 全在射程内,nginx 其实另有洞。拆成因与修复顺序
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
|
14天前
|
安全 Linux 芯片
【万字长文】Ollama下载、安装、配置、使用保姆级教程(2026最新图解)
Ollama 是一款免费开源的本地大模型运行工具,支持 DeepSeek、Qwen 等主流模型,一条命令即可下载运行。2026 最新版 v0.35.1 官方安装包(1.47GB)已提供国内直连下载,纯本地、离线可用、无广告、无隐私泄露风险。
1322 5
|
7天前
|
开发者 索引
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
Open Plugin Market 是一个开放插件索引平台,收录800+优质DSH插件,支持分类浏览、智能推荐与随机发现。无需安装市场,粘贴索引地址即可一键接入,网页版直访 dshopen.org,助力小开发者被看见。(239字)
1527 1
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
|
5天前
|
安全 程序员 应用服务中间件
PHP 被曝两大致命漏洞,请所有程序员抓紧做这件事!
PHP 官方发布了紧急安全更新,一口气修复了两个严重漏洞。如果网站和服务器用了 PHP 应该怎么处理?漏洞的原理是什么?本文给你讲清楚
659 0