返回作品

智能组卷系统

创建于 2025 年 4 月 19 日

标签
  • Java 8
  • Spring Boot 2.5.15
  • RuoYi 3.8.9
  • Easy-Query 2.5.17
  • MyBatis-Plus
  • MySQL
  • Redis
  • Druid
  • Swagger 3
  • Apache POI
  • Vue 2
  • Element UI

项目介绍

智能组卷系统是一个面向考试命题场景的自动化组卷平台,基于若依 RuoYi-Vue 3.8.9(Spring Boot 版)二次开发。项目围绕”题库 → 规则 → 算法 → 试卷”这条主线展开:题库侧支持题型与树形知识点的双维维护,题目可携带内容、JSON 选项、答案、解析、分值、难度系数与累计使用次数,并支持 Excel 模板批量导入;试卷侧可配置总分、及格分、难度系数(0-1)、考试时长与组卷算法模型,再以”组卷规则”(题型 × 题目数量 × 每题分值)和”知识点分布”(各知识点占比)为约束条件,一键生成整卷试题并落库。

核心功能

  • 题库管理ExamQuestionController 提供题目 CRUD,支持按题型、知识点、分值区间(minScore / maxScore)、难度系数多条件筛选与 Excel 导出;/app/question/importData 通过 ExcelUtil<ExamQuestionImportReqVo> 解析上传模板,按”知识点名称 → 知识点 ID、题型编码 → 题型 ID”自动匹配,逐条校验并汇总成功/失败明细,选项按 A-F 拼接为 JSON 存储。前端题目页左侧为知识点树(splitpanes 分栏 + el-tree),右侧表格展示题目内容(v-html 渲染)、选项、答案、分值,难度用 el-rate 星级展示。
  • 试卷与组卷规则配置ExamPaperController 支持试卷 CRUD 与 Excel 导出,新增/编辑弹窗中可填写总分、及格分、难度系数(滑块)、考试时长与算法模型(knowledge 基于知识点 / difficulty 基于难度系数);“组卷规则”区以行内表格配置每条规则的题型、题目数量与每题分值,前端实时计算题型小计(questionCount * score);“知识点分布”区通过 vue-treeselect 树形选择知识点并填写占比,validatePercentage 实时校验占比总和必须为 100%,不满足时提交被拦截并弹出警告。
  • 遗传算法引擎GeneticAlgorithm 抽象基类按”初始化种群 → 适应度评估 → 轮盘赌选择 → 单点交叉 → 变异 → 精英保留”完成进化;KnowledgeBasedGeneticAlgorithm 按知识点占比分配各知识点题目配额(allocateQuestionsByKnowledgePoint),适应度以知识点覆盖度(0.3)、题型分布(0.3)、总分偏差(0.2)、难度偏差(0.2)加权相乘;DifficultyBasedGeneticAlgorithm 按目标难度把题目分配到简单/中等/困难三档(allocateQuestionsByDifficulty),适应度以难度分布(0.4)、题型分布(0.3)、总分(0.2)、知识点覆盖(0.1)加权,变异操作按概率用”同题型同维度”的替代题替换个体中的随机题目。

设计亮点

  • “规则 + 占比”双约束的可解释组卷:与传统黑盒随机抽题不同,本系统把命题经验显式建模为”每类题型几道题、每题几分、每个知识点占多少百分比”的结构化规则,生成结果可解释、可复现,教师调整占比即可精确控制试卷的知识覆盖面。
  • 遗传算法作为可切换的组卷模型:算法层把”进化流程”与”约束建模”解耦,两种模型分别以知识点覆盖度和难度系数为核心目标,适应度采用多因子加权相乘(缺项会整体压低得分),配合轮盘赌选择、单点交叉、变异与精英保留,为后续接入真实题库并做多目标寻优预留了完整框架;种群、迭代、交叉/变异率等参数通过 exam.genetic 配置项外部化,无需改码即可调参。
  • 占比校验前置到表单层:前端在录入阶段即实时计算知识点占比总和并以警告条提示必须为 100%,提交时再次拦截,把非法组卷规则挡在接口之外,配合后端按配额取题(配额不足自动用同题型题目补齐)的兜底策略,保证任何规则组合都能产出一份可用试卷。
  • Easy-Query 强类型 ORM 的工程实践:业务接口全部采用 Easy-Query 的代理式 Lambda 查询(如 leftJoin 联表查试卷试题、insertable 批量落库),编译期即可发现字段拼写错误,代码中几乎看不到手写 SQL 与 XML Mapper,是若依体系下轻量替换/增强 MyBatis 写法的可参考范例。

功能截图

暂无运行截图。