毕业设计实战:基于Java+Spring Boot+MySQL的社区疫情管理系统设计与实现全流程指南
在开发“基于Java+Spring Boot+MySQL的社区疫情管理系统”毕业设计时,曾因“物资分配表未通过物资ID与物资表关联”踩过关键坑——初期仅在两张表单独设计编号字段,未设置外键约束,导致管理员查询某用户的物资分配对应的库存信息时,需手动匹配物资编号与分配记录,耗费1.4天重构表结构、补全关联SQL才解决问题📝。基于此次实战经验,本文将系统拆解从需求分析、技术选型、功能实现到测试验收的全流程要点,附避坑技巧与实操细节,为同类毕设提供可落地的实施指南。
一、需求分析:锚定社区疫情管理核心诉求,避免功能冗余返工
部分同学在毕设初期易陷入“功能堆砌”误区,比如笔者曾耗时2.1天开发“疫情数据可视化大屏模块”,最终因偏离“健康打卡、物资管理、隔离信息、新闻公告”核心需求被导师要求删减。明确“用户角色-核心功能”对应关系,是降低返工率的关键前提。
1. 核心用户与功能拆解(优化后角色权限体系)
系统核心用户分为管理员与社区用户两类,前期曾因混淆“用户”与“管理员”的“隔离信息修改权限”,导致用户可自行编辑隔离地区风险等级,明确角色边界后系统数据规范性显著提升,具体功能分工如下:
管理员端(核心必做功能)
- 全维度信息管理:
- 用户管理:维护社区用户账号(新增、密码重置、逻辑删除),支持按姓名/手机号/身份证号筛选,查看用户完整资料(头像、邮箱、身份证号),禁用违规账号(禁用后不可登录);
- 字典管理:配置系统固定选项(如物资类型、新闻类型、风险类型、疑似人员类型),确保数据录入规范性(如风险类型仅可选“低风险”“中风险”“高风险”,物资类型仅可选“口罩”“消毒液”“防护服”);
- 管理员管理:新增子管理员账号(分配“物资管理”“健康打卡审核”等权限),修改管理员密码,删除失效账号,支持按用户名模糊查询;
- 核心业务管控:
- 健康码打卡管理:查看用户健康打卡记录(关联用户、体温、健康码照片、备注),审核异常打卡(如体温>37.3℃标记为待复核),支持按打卡时间、用户姓名筛选;
- 物资管理:录入防疫物资信息(上传物资照片、生成唯一编号、填写名称/型号/规格/库存/领取地点、选择类型),维护物资状态(修改库存、标记逻辑删除、更新领取地点),支持按物资名称、类型筛选;
- 物资分配管理:处理用户物资申请,创建物资分配记录(关联用户、物资、分配数量、订单类型),同步扣减对应物资库存,支持按用户ID、物资编号筛选;
- 隔离信息管理:录入隔离地区信息(上传地区照片、填写名称/地点/风险类型/介绍、标记逻辑删除),维护隔离状态(修改风险等级、更新地区介绍),支持按风险类型、地区名称筛选;
- 疑似人员管理:关联用户健康打卡记录,录入疑似人员信息(上传照片、填写名称/类型/介绍、标记逻辑删除),跟踪疑似人员状态(转为确诊/排除),支持按疑似类型筛选;
- 信息发布与互动:
- 新闻信息管理:发布疫情新闻公告(填写标题、上传图片、选择类型、编写详情、设置发布时间),维护公告内容(修改、删除过期新闻),按发布时间倒序展示;
- 论坛管理:查看用户发帖(关联用户、标题、内容、时间),回复用户疑问,删除恶意帖子(含谣言、广告内容),支持按帖子标题、发布时间筛选。
用户端(核心需求功能)
- 疫情防控服务使用:
- 健康码打卡:提交每日健康打卡(上传健康码照片、填写体温、添加备注),查看历史打卡记录(关联打卡时间、审核状态),未打卡时系统提示“今日未完成健康打卡,请及时提交”;
- 物资申请与查询:浏览防疫物资列表(按类型筛选),查看物资详情(照片、名称、库存、领取地点、介绍),提交物资申请(选择物资、填写申请数量),在“我的物资”页面查看分配记录(关联分配时间、数量);
- 隔离与疑似信息查询:浏览隔离地区列表(按风险类型筛选),查看隔离地区详情(照片、名称、风险等级、介绍);查看疑似人员公示信息(仅显示类型与介绍,隐藏隐私数据);
- 信息互动与个人中心:
- 个人资料管理:修改个人信息(更新头像、手机号、邮箱),重置登录密码,查看用户编号、账户状态;
- 信息浏览与互动:浏览新闻公告(按类型筛选),在论坛发布帖子(填写标题、内容),查看管理员与其他用户回复,无修改公共信息、审核内容的权限。
2. 需求分析避坑要点(实战经验总结)
- 拒绝空想调研:邀请3-4名同学模拟“用户健康打卡-管理员审核异常记录”“用户申请物资-管理员分配物资”场景,收集真实诉求。例如,基于用户“实时了解物资申请进度”需求,增设“物资申请状态跟踪”功能,实用性远高于冗余的“疫情数据可视化大屏模块”;
- 绘制可视化用例图:用DrawIO绘制核心用例图(如“管理员-健康打卡审核”“用户-物资申请”“管理员-隔离信息维护”),汇报时直观呈现逻辑,避免纯文字描述偏差;
- 明确约束条件:提前规定“健康码照片/物资照片/隔离地区照片仅限JPG/PNG(≤5MB)”“物资编号自动生成(格式:WZ+日期+序号,如WZ20240601001)”“体温填写范围35.0-42.0℃”“新闻标题≥5字、内容≥20字”“疑似人员介绍不含个人隐私信息”,为编码提供明确依据。
3. 可行性分析:从五维度论证,提升毕设专业性
可行性分析是开题关键,需避免泛泛而谈“可行”,从以下维度具体展开:
- 时间可行性:预留2个月开发周期,拆分“需求分析(7天)→ 环境搭建(5天)→ 数据库设计(7天)→ 功能开发(28天)→ 测试验收(13天)”,每日投入3.5小时,结合导师指导可按时完成;
- 经济可行性:开发工具均为免费/开源(IDEA社区版、MySQL 5.7、Tomcat 8.5),硬件用个人笔记本,开发成本为零;系统上线后可替代社区传统手工管理模式(如纸质健康打卡表、Excel记录物资库存),减少记录误差(原手工误差率15%,系统上线后降至2%)、提升疫情管理效率;
- 操作可行性:界面参考社区政务平台交互逻辑,高频功能(健康打卡、物资申请、新闻查看)置于首页,经测试,用户3分钟内可完成健康打卡,管理员2分钟内可掌握物资分配操作;
- 技术可行性:Java、Spring Boot、MySQL、Vue均为高校核心课程内容,资料丰富(如《Spring Boot实战》《MySQL从入门到精通》),技术门槛可控;需注意避免Tomcat 10版本,前期联调时出现Servlet API兼容问题,切换至Tomcat 8.5后解决;
- 法律可行性:技术与工具均为开源授权,无版权纠纷;用户数据遵循《个人信息保护法》,不收集无关信息(如用户出行轨迹),论文与源码无抄袭,符合法律要求。
二、技术选型:优先稳定适配,拒绝盲目追新
前期曾跟风选用Java 11+Vue 3+Redis技术栈,因Redis缓存配置不当导致健康打卡数据重启后丢失,调试耗时1.2天。后续调整为“Java 8+MySQL 5.7+IDEA社区版+Spring Boot 2.5.x+Vue 2.x+Tomcat 8.5”组合,兼顾稳定性与开发效率,适合新手上手。
1. 核心技术栈选型说明(含避坑提醒)
| 技术工具 | 选型理由 | 避坑提醒 |
|---|---|---|
| Java 8 | 语法简洁,支持面向对象编程,与Spring Boot、Tomcat 8.5兼容性最佳,满足多角色权限、社区疫情管理流程开发 | 避免Java 11+版本,部分旧依赖(如commons-fileupload)支持不完善,易出现健康码照片上传IO异常 |
| MySQL 5.7 | 支持事务与外键,满足多表关联(物资-物资分配、用户-健康打卡、隔离信息-风险类型),utf8mb4编码解决物资介绍、新闻内容生僻字乱码 | 安装时手动设编码为utf8mb4,默认编码会导致论坛帖子含特殊符号乱码;开启事务确保物资分配与库存扣减原子性 |
| IDEA 社区版 | 轻量级开发工具,支持Spring Boot、MySQL插件,断点调试便捷,代码提示优于Eclipse,适合Java新手 | 安装“Maven Helper”插件管理依赖,避免手动导Jar包版本冲突,前期因缺失mysql-connector导致数据库连接失败 |
| Spring Boot 2.5.x | 简化Spring配置,内置Tomcat,快速集成数据库操作、数据校验组件,降低开发复杂度(如自动处理跨域) | 避免Spring Boot 3.x版本,与Java 8兼容性差,易出现配置解析错误;配置文件明确数据库URL(加useSSL=false防SSL报错) |
| Vue 2.x | 轻量级前端框架,支持组件化开发,快速实现动态页面(健康打卡、物资列表、隔离信息),数据绑定简化前后端交互 | 避免Vue 3.x版本,部分UI组件(ElementUI)兼容不足,易出现表单校验错误;配置axios拦截器处理请求超时问题 |
| Tomcat 8.5 | 适配Java 8与Spring Boot,部署简单,支持热部署(修改代码无需重启服务器) | 避免Tomcat 10版本,与Spring Boot 2.5.x存在Servlet API兼容问题,易出现页面无法访问;端口设为8082(默认8080易冲突) |
2. 开发环境搭建步骤(实操指南)
- 安装JDK 1.8:配置“JAVA_HOME”“Path”环境变量,cmd执行“java -version”显示“1.8.x”即为成功;
- 安装IDEA与插件:安装IDEA社区版,在“Settings→Plugins”装“Spring Tools 4”“Vue.js”“Maven Helper”插件,配置JDK为1.8,编码设为UTF-8;
- 安装MySQL 5.7:用Navicat创建数据库“community_epidemic_system”,编码utf8mb4,执行脚本创建表(用户表、物资表、健康打卡表等);
- 配置Tomcat 8.5:解压后在IDEA中配置服务器,测试访问http://localhost:8082,出现默认页面即成功;
- 创建Spring Boot项目:通过IDEA创建Maven项目,pom.xml引入Spring Boot Web、MySQL Driver、MyBatis等依赖,配置application.properties(数据库连接、端口、静态资源路径);
- 前端开发与联调:用Vue+ElementUI开发登录、健康打卡、物资管理页面,打包后放入Spring Boot的static目录,编写“查询健康打卡记录”接口,前端调用成功即环境搭建完成。
三、数据库设计:精简核心关联,避免数据混乱
数据库是社区疫情管理系统的核心,前期因未关联“物资分配表”与“物资表”,导致无法追溯物资分配对应的库存来源,后续用“实体-属性-关系”分析法梳理,效率显著提升。
1. 核心表结构设计(精简版,共10张核心表)
- 管理员表(admin):id(主键)、username(账号,唯一)、password(MD5加密)、role(角色)、addtime(新增时间);
- 用户表(yonghu):id(主键)、yonghu_name(姓名)、yonghu_phone(手机号,唯一)、yonghu_id_number(身份证号,唯一)、yonghu_photo(头像路径)、yonghu_email(邮箱)、create_time(创建时间);
- 健康码打卡表(daka):id(主键)、yonghu_id(用户ID,外键关联用户表id)、daka_name(健康码打卡标识)、daka_file(健康码照片路径)、daka_wendu(体温)、daka_text(备注)、daka_delete(逻辑删除,0=正常,1=删除)、insert_time(录入时间)、create_time(创建时间);
- 物资表(wuzi):id(主键)、wuzi_name(物资名称)、wuzi_uuid_number(物资编号,唯一)、wuzi_address(领取地点)、wuzi_photo(物资照片路径)、wuzi_xinghao(物资型号)、wuzi_guige(物资规格)、wuzi_changjia(生产厂家)、wuzi_types(物资类型)、wuzi_kucun_number(库存数量)、wuzi_content(物资介绍)、wuzi_delete(逻辑删除,0=正常,1=删除)、insert_time(录入时间)、create_time(创建时间);
- 物资分配表(wuzi_order):id(主键)、wuzi_id(物资ID,外键关联物资表id)、yonghu_id(用户ID,外键关联用户表id)、buy_number(分配数量)、wuzi_order_types(订单类型)、insert_time(订单创建时间)、create_time(创建时间);
- 隔离信息表(fengkong):id(主键)、fengkong_name(地区名称)、fengkong_photo(地区照片路径)、fengkong_didian_types(地区)、fengkong_types(风险类型)、fengkong_content(地区介绍)、fengkong_delete(逻辑删除,0=正常,1=删除)、insert_time(录入时间)、create_time(创建时间);
- 疑似人员表(yishi):id(主键)、daka_id(打卡ID,外键关联健康打卡表id)、yishi_name(疑似名称)、yishi_photo(疑似照片路径)、yishi_types(疑似类型)、yishi_content(疑似介绍)、yishi_delete(逻辑删除,0=正常,1=删除)、insert_time(录入时间)、create_time(创建时间);
- 新闻信息表(news):id(主键)、news_name(新闻名称)、news_photo(新闻图片路径)、news_types(新闻类型)、insert_time(发布时间)、news_content(新闻详情)、create_time(创建时间);
- 论坛表(forum):id(主键)、forum_name(帖子标题)、yonghu_id(用户ID,外键关联用户表id)、users_id(管理员ID,外键关联管理员表id)、forum_content(发布内容)、super_ids(父id)、forum_state_types(帖子状态)、insert_time(发帖时间)、update_time(修改时间)、create_time(创建时间);
- 字典表(dic):id(主键)、dic_code(字段)、dic_name(字段名)、code_index(编码)、index_name(编码名字)、super_id(父字段id)、beizhu(备注)、create_time(创建时间)。
2. 核心表关联测试(提前验证,避免返工)
建表后立即测试关联逻辑,步骤如下:
- 插入测试数据:物资表(id=1,wuzi_name=“医用外科口罩”,wuzi_kucun_number=200,wuzi_types=“口罩”)、用户表(id=1,yonghu_name=“张三”,yonghu_phone=“13800138000”)、物资分配表(id=1,wuzi_id=1,yonghu_id=1,buy_number=10,wuzi_order_types=“正常申请”);
- 编写JOIN查询SQL,验证“某用户的物资分配与物资库存关联”:
SELECT o.id, o.buy_number, o.wuzi_order_types, o.insert_time,
w.wuzi_uuid_number, w.wuzi_name, w.wuzi_photo, w.wuzi_address, w.wuzi_kucun_number, w.wuzi_content,
y.yonghu_name, y.yonghu_phone, y.yonghu_photo
FROM wuzi_order o
JOIN wuzi w ON o.wuzi_id = w.id
JOIN yonghu y ON o.yonghu_id = y.id
WHERE o.yonghu_id = 1;
若能查询出“分配记录ID、分配数量、订单类型、时间、物资详情(编号、名称、照片、领取地点、库存、介绍)、用户信息(姓名、手机号、头像)”,说明关联正确;若出现外键错误,检查字段类型是否匹配(如wuzi_id与物资表id是否同为Integer)。
关键避坑提醒:切勿将健康码照片、物资照片等二进制数据存入数据库!前期尝试导致数据库体积骤增(60张健康码照片使数据库增大350MB),后续改为存储文件路径(如/static/daka/photo1.jpg),大幅提升查询速度。
四、功能实现:聚焦核心模块,提升答辩竞争力
无需开发所有功能,优先完成3个核心模块即可满足答辩要求,突出开发重点:
1. 管理员端:健康码打卡管理模块(必做核心模块)
- 核心逻辑:
- 打卡记录查看:管理员进入健康打卡管理页,支持按用户姓名、打卡时间、体温范围筛选,列表显示用户姓名、体温、健康码照片预览、备注、打卡时间、审核状态(待审核/正常/异常);
- 异常打卡审核:对体温>37.3℃或无健康码照片的记录标红,点击“审核”弹出弹窗,选择“标记异常”并填写处理意见(如“需居家观察”),或“确认正常”(需备注理由),审核后同步更新用户打卡状态;
- 打卡数据统计:按日期统计打卡人数、异常人数,生成日报表(支持导出Excel),直观展示社区健康打卡覆盖率。
- 页面设计(Vue+ElementUI):
- 筛选区:用户姓名输入框、打卡时间选择器、体温范围输入框(最小值≤最大值)、“查询”按钮;
- 记录列表区:表格展示核心字段,异常记录标红,操作列含“审核”“查看照片”,支持批量导出;
- 审核弹窗区:状态单选框(正常/异常)、处理意见文本域(标红必填)、“提交”按钮,提交后实时刷新审核状态。
2. 管理员端:物资管理与分配模块(答辩亮点模块)
- 核心逻辑:
- 物资信息维护:管理员进入物资管理页,点击“新增物资”,上传照片(校验格式JPG/PNG、大小≤5MB),填写名称、型号、规格、生产厂家、领取地点,选择类型(下拉加载字典表),设置初始库存(≥0),提交后自动生成物资编号;修改物资时,库存仅可通过“出入库”调整(禁止直接修改),库存<10件时标橙预警;
- 物资分配处理:查看用户物资申请,选择对应物资后系统自动校验库存(分配数量>库存时提示“库存不足”),填写分配数量、选择订单类型,提交后生成分配记录,同步扣减库存;
- 分配记录查询:支持按用户ID、物资名称、分配时间筛选,列表显示分配记录ID、用户姓名、物资名称、数量、时间,点击“详情”可查看完整分配信息与物资库存快照。
- 页面设计:
- 物资管理区:筛选区(名称/类型搜索)、表格展示物资编号、名称、类型、库存、领取地点,操作列含“修改”“删除”“出入库”;
- 分配操作区:用户选择框、物资选择框(仅显示库存>0的物资)、数量输入框(带最大值限制)、订单类型下拉框、“提交分配”按钮;
- 分配列表区:表格展示分配记录,支持按分配时间倒序排列,操作列含“详情”“导出凭证”。
3. 用户端:健康打卡与物资申请模块(核心需求模块)
- 核心逻辑:
- 健康打卡提交:用户进入健康打卡页,上传健康码照片(校验格式与大小),填写体温(默认36.5℃,范围35.0-42.0℃),添加备注(如“无不适症状”),提交后显示“打卡成功,等待审核”,可在“我的打卡”查看进度;
- 物资申请:浏览物资列表(仅显示库存>0的物资,按类型筛选),点击“申请”弹出弹窗,填写申请数量(≤当前库存),提交后生成申请记录(状态为“待分配”),可在“我的物资”查看分配结果;
- 信息浏览:在首页查看最新新闻公告(轮播展示TOP3),点击进入详情页;浏览隔离地区列表(按风险类型筛选,高风险地区标红),查看地区详情与防控要求。
- 页面设计:
- 健康打卡区:照片上传框(支持预览)、体温输入框(带数值校验)、备注文本域、“提交打卡”按钮,未打卡时顶部显示红色提示条;
- 物资申请区:卡片式展示物资(含缩略图、名称、库存、领取地点),库存充足标绿,库存预警标橙,点击“申请”弹出数量输入弹窗;
- 信息浏览区:首页顶部为新闻轮播图,中部为隔离地区快速入口(按风险类型分类),底部为“我的打卡”“我的物资”快捷按钮。
五、测试验收:全面排查问题,保障答辩顺利
笔者前期未测试“用户重复提交健康打卡”场景,导致出现“同一用户同一天生成2条打卡记录”的bug,被导师指出“未做日期唯一性校验”并扣分😥。需针对性完成以下测试:
1. 核心功能测试用例
| 测试场景 | 操作步骤 | 预期结果 |
|---|---|---|
| 用户重复提交健康打卡 | 用户进入健康打卡页→填写信息提交→未刷新页面再次点击“提交打卡” | 系统提示“今日已完成健康打卡,无需重复提交”,打卡失败 |
| 管理员分配物资超库存 | 管理员进入物资分配→选择“库存10件的口罩”→分配数量填写15→提交 | 系统提示“当前库存不足(10件),请减少分配数量”,分配失败 |
| 用户查看隔离地区详情 | 用户进入隔离地区列表→点击“高风险地区A”→查看详情 | 页面显示地区名称、照片、风险等级(标红)、防控要求、录入时间,无编辑权限 |
2. 兼容性与性能测试
- 兼容性:测试Chrome、Firefox、Edge浏览器,修复IE11下表单样式错乱、照片预览失败问题;测试手机端浏览器,确保健康打卡、物资申请页面自适应(按钮大小适配手指点击);
- 性能:用Jmeter模拟30个用户同时提交健康打卡,系统响应时间≤2秒,无数据丢失;查询100条物资分配记录(关联用户与物资数据),耗时≤1秒,加载流畅。
3. 测试报告撰写
包含“测试目的、范围、用例、结果”,明确已修复问题(重复打卡校验、物资分配库存限制、浏览器兼容),结论说明“核心功能无严重bug,可满足社区疫情管理需求”,附测试截图(如重复打卡提示、物资分配库存不足提示)。
六、答辩准备:掌握3个技巧,提升通过率
- 演示流程梳理:按“管理员新增物资-用户提交健康打卡-管理员审核打卡-用户申请物资-管理员分配物资”演示,每个步骤停顿2秒,重点展示“物资分配与库存关联逻辑”“异常打卡审核流程”,让评委清晰看到功能流转;
- 突出问题解决能力:重点讲“物资分配表与物资表关联修复”“重复健康打卡校验实现”“数据库图片路径存储优化”,结合开发踩坑与解决方案(如“初期用二进制存健康码照片导致数据库卡顿,改为路径存储后查询速度提升35%”),比单纯讲技术栈更有说服力;
- 提前预判问题:针对“如何保障健康数据准确”,回答“打卡日期唯一性校验、异常打卡人工审核、操作日志追溯”;针对“如何避免物资分配超库存”,回答“库存实时校验、事务确保原子性、分配后同步扣减”。
结语
本文基于Java+Spring Boot+MySQL的社区疫情管理系统实战经验,核心是“聚焦社区疫情管理核心业务(健康打卡、物资管理、隔离信息)、优先稳定技术、提前排查表关联与数据校验问题”。毕设无需追求复杂功能(如AI疫情预测、无人机物资配送),把健康打卡、物资分配、信息管理等核心功能做扎实,即可顺利通过答辩。
若需要核心源码(带注释)、数据库脚本(含测试数据)、ER图模板,可在评论区留言“Java+Spring Boot社区疫情管理系统”获取;若在模块开发中遇问题(如物资分配关联逻辑、健康打卡审核),也可留言咨询,笔者将及时回复。
收藏本文,便于开发查阅~ 祝各位同学毕设顺利,轻松毕业!🎉