/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
摘要
本系统基于 SpringBoot 框架开发,以 MySQL 作为数据库,面向老年学员、社区反诈宣讲员、平台管理员三类用户。系统围绕老年人数字反诈知识普及业务,包含反诈课程学习、典型案例库、诈骗手法图解、在线答题测试、模拟诈骗场景演练、防骗自测、线索举报、家属协同提醒等功能模块。老年学员可以按大字体、语音播报的方式学习反诈课程,浏览真实诈骗案例,参与答题和模拟演练巩固记忆;宣讲员上传课件与案例,组织线下宣讲报名,查看学员学习进度;管理员维护题库与栏目内容、处理举报线索、统计学习数据。系统用通俗易懂的内容与无障碍交互设计,帮助老年人识别电信诈骗、虚假理财、保健品骗局等常见套路,提升风险防范意识,同时为社区反诈宣传工作提供数据支撑与统一管理入口。
技术栈
后端采用 SpringBoot 作为核心框架,结合 MyBatis-Plus 简化数据库操作,快速实现课程、题库、案例、学习记录等业务数据持久化。MySQL 存储用户、课程、案例、题目、答题记录、举报线索等业务数据,Redis 缓存热门课程、首页推荐案例、登录 token,缓解数据库压力。前端使用 Vue3 搭配 Element Plus 组件库,针对老年用户采用大字字号、高对比配色、按钮放大等无障碍适配;ECharts 实现各社区学习人次、答题正确率等数据可视化。项目通过 Maven 管理依赖,JWT 实现多角色身份认证,区分老年学员、宣讲员、管理员权限。集成 OSS 上传课程视频与案例图片,音频合成接口实现课程文字转语音播报,EasyExcel 导出学习与答题统计报表,全局异常处理器统一处理接口异常。整套技术方案成熟稳定,界面友好,适合公共服务类毕设项目开发。
具体实现截图

系统设计
系统采用表现层、业务逻辑层、数据访问层三层架构,按业务划分为六大模块。用户模块实现注册登录、大字模式切换、学习档案维护;课程模块支持反诈课程发布、分类管理、视频与图文学习、学习进度记录;案例模块维护典型案例库,按诈骗类型分类展示;测试模块配置题库、在线答题、自动判分、错题回顾;演练模块提供模拟诈骗情境,用户选择应对方式并给出解析;后台管理模块实现宣讲员审核、内容审核、举报线索处理、学习数据统计。三类角色权限相互隔离,老年学员侧重学习、答题、举报;宣讲员侧重上传内容、组织宣讲、查看学员进度;管理员拥有全部内容管控与数据统计权限。各模块低耦合,通过接口交互,便于后续拓展家属协同提醒、短信预警推送等功能。
核心代码
@RestController
@RequestMapping("/antiFraud")
public class AntiFraudController {
@Autowired
private ICourseService courseService;
// 分页查询反诈课程
@GetMapping("/courseList")
public Result courseList(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String fraudType) {
Page<AntiFraudCourse> page = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<AntiFraudCourse> wrapper = Wrappers.lambdaQuery();
if (StringUtils.isNotEmpty(fraudType)) {
wrapper.eq(AntiFraudCourse::getFraudType, fraudType);
}
wrapper.eq(AntiFraudCourse::getStatus, 1);
wrapper.orderByDesc(AntiFraudCourse::getCreateTime);
return Result.success(courseService.page(page, wrapper));
}
// 记录课程学习进度
@PostMapping("/learnRecord")
public Result learnRecord(@RequestBody LearnRecord record) {
boolean flag = courseService.saveLearnRecord(record);
return flag ? Result.success("学习进度已保存") : Result.error("进度保存失败");
}
// 提交反诈答题答卷
@PostMapping("/submitAnswer")
public Result submitAnswer(@RequestBody AnswerRecord answerRecord) {
Integer score = courseService.autoJudge(answerRecord);
return Result.success("答题完成,本次得分:" + score + "分");
}
}
数据库设计
数据库基于 MySQL 设计,根据反诈教育业务实体建立数据表,设置关联关系保证数据完整性。核心数据表包括用户表 user,存储账号、密码、昵称、角色、所在社区、创建时间;课程表 anti_fraud_course,记录课程标题、诈骗类型、图文内容、视频地址、音频地址、状态;案例表 case_info,保存案例标题、诈骗手法、涉案金额、防范提示;题目表 question,关联课程或类型,记录题干、选项、正确答案、解析;答题记录表 answer_record,关联用户 id,保存得分、答题时间、错题编号;学习记录表 learn_record,记录用户 id、课程 id、学习进度、学习时长;举报线索表 report,保存举报内容、联系方式、处理状态。所有数据表统一设置自增主键,添加创建时间、更新时间字段,针对课程分类、答题记录查询建立索引,优化查询性能,减少数据冗余,满足反诈教育平台的数据存储需求。
系统测试
系统采用单元测试结合黑盒功能测试开展测试工作。单元测试重点对答题自动判分、学习进度累加、权限校验等核心逻辑编写测试用例,验证判分准确性、越权访问拦截是否正确。黑盒测试模拟老年学员、宣讲员、管理员三类角色,依次测试注册登录、课程学习、案例浏览、在线答题、错题回顾、模拟演练、线索举报、宣讲员上传内容、后台内容审核等完整业务流程。同时覆盖异常场景,重复提交答卷、空题目提交、越权修改他人学习记录、未审核课程被浏览、非法参数等,记录接口返回、页面展示与数据变化,并对老年用户界面的字号、对比度、操作路径进行可用性检查,及时修复发现的缺陷。经过多轮测试,系统功能运行稳定,判分准确,内容审核有效,权限控制可靠,数据读写无误,页面交互对大字体与语音播报支持正常,满足老年人数字反诈教育平台的业务需求。



