
1. 项目概述与需求拆解1.1 这个毕设到底在做什么社区老人健康管理系统说白了就是给社区医疗机构或者养老服务站做的一套信息化工具。之前社区给老人做健康管理基本靠纸质档案和Excel表格老人每次来测血压、量血糖工作人员手写记录回头要统计某个片区的老人高血压比例得翻半天纸质档案效率低还容易漏。这套系统要解决的问题就是把老人基本信息、体检数据、慢病随访、用药提醒这些事儿全部搬到线上前端工作人员用浏览器就能操作老人家属也能通过网页查看相关健康数据。技术栈选的是Spring Boot加Vue这是当前JavaWeb方向毕业设计里最主流的组合没有之一。Spring Boot负责后端接口和数据逻辑Vue负责前端页面交互前后端分离开发的时候两边可以并行推进部署的时候也能分开扩展。对于本科毕设来说这个组合既有足够的技术深度可以写进论文又有清晰的业务逻辑可以讲明白评审老师一看就知道你系统学过这套东西。我见过太多毕设选题要么是纯管理系统CRUD没有业务深度要么是算法研究看不懂应用场景。健康管理这个方向好就好在它有一个明确的业务闭环建档、测量、评估、干预、随访每个环节都有数据流转有权限区分有统计报表这些素材写论文、画架构图、做答辩PPT都非常顺手。1.2 目标用户与核心场景这套系统主要面向三类角色对应的功能权限完全不同。管理员社区健康管理站的工作人员负责系统运维和基础数据维护比如管理工作人员账号、维护社区/网格信息、查看全站数据统计。医生或健康管理师负责老人的健康档案管理、体检数据录入、慢病评估、制定随访计划、发送用药提醒。老人或家属是查询端可以登录查看自己的健康档案、历次体检数据趋势、用药计划和健康宣教内容。核心使用场景有三个第一个场景是日常体检数据采集。老人到社区健康站工作人员登录系统选择老人档案录入当天的血压、血糖、心率、体重等数据系统自动对比历史数据给出趋势判断。这个场景要求录入界面简洁必填项明确最好支持快捷键操作因为工作人员可能在忙的时候单手操作鼠标点来点去就慢了。第二个场景是慢病管理和随访计划。社区里高血压、糖尿病老人占比很高系统要支持给每个慢病老人打标签设定随访周期比如每两周随访一次到期自动生成待随访提醒。随访记录要能结构化存储方便后期统计这个社区的慢病控制率。第三个场景是数据统计与可视化。社区管理者需要看月度体检人数、异常指标检出率、慢病人群分布等统计报表用于工作汇报。这个场景对图表要求不高ECharts就够用了关键是统计口径要清晰指标定义要严谨别出现同一数据前后对不上的尴尬。1.3 为什么Spring Boot Vue是合适的选型很多人纠结毕设用什么框架我直接给结论JavaWeb方向选Spring Boot Vue是性价比最高的方案。Spring Boot的好处在于它把Spring繁琐的XML配置全部干掉内置Tomcat一个main方法就能启动项目对毕设来说大大降低了环境搭建的门槛。它的starter机制让你加功能特别方便用MyBatis连MySQL就加一个mybatis-spring-boot-starter要做权限校验就加spring-boot-starter-security或者用JWT自己写拦截器。这些技术点写论文的时候都有话说不会显得空洞。Vue这边选Vue 2还是Vue 3我的建议是看你自己熟悉哪个。Vue 3的组合式API更现代但网上资料和学习成本略高Vue 2的选项式API比较好理解组件写起来直观而且Element UI对Vue 2的支持非常成熟后台管理界面几乎开箱即用。毕设不是工业项目不需要追求最新版本稳定能用、自己能讲清楚才是关键。前后端分离还有个隐藏的好处你可以把后端接口用Swagger生成在线文档答辩的时候现场演示接口调用比单纯打开网页点按钮更有说服力。老师问你某个功能怎么实现的你直接打开接口文档说“这是体检数据查询接口接收老人ID参数返回最近十次血压记录”比空口解释清晰十倍。2. 系统功能与数据库设计2.1 功能模块全景图社区老人健康管理系统的功能模块划分我建议按业务域拆成六大块这样无论写代码还是写论文都逻辑清晰。基础数据管理老人档案信息包含姓名、性别、出生日期、身份证号、联系电话、紧急联系人、居住地址、所属社区网格、医保类型等。这块要注意身份证号要做格式校验和唯一性校验防止重复建档。老人的既往病史、过敏史、家族病史这些也要记录对后续健康评估很重要。健康体检管理体检记录的增删改查支持血压、血糖、心率、体温、血氧、身高体重、腰围等常见指标录入。每条体检记录关联一个老人记录体检日期和录入工作人员。查询要支持按老人、按日期范围、按指标异常状态过滤。慢病管理高血压、糖尿病、冠心病等常见慢病的建档、评估和随访。老人可以绑定多种慢病标签每种慢病有独立的随访计划。随访记录包含随访日期、方式电话/上门/门诊、主诉、体征数据、用药情况、医生建议。用药提醒管理给老人创建用药计划每次用药有药品名称、剂量、频次、开始日期、结束日期。系统根据用药计划生成提醒记录工作人员或家属登录后能看到当天该老人的用药清单。统计报表按时间维度统计体检人数、新建档人数、异常指标检出率、随访完成率等。按病种统计慢病患病率、控制率。按社区网格对比健康数据差异。系统管理用户管理、角色管理、菜单权限管理、操作日志。这套是后台管理的标配用Spring Security或者JWT做认证授权前端根据角色动态渲染路由和按钮。2.2 数据库表设计思路数据库设计是整个系统的地基我的习惯是先把表结构想清楚再动手写代码。核心表大概这些老人信息表——老人基础信息字段包含姓名、性别、出生日期、身份证号、手机号、紧急联系人、联系关系、紧急联系电话、地址、网格ID、既往病史、过敏史、创建时间、更新时间。身份证号要建唯一索引这是老人的业务主键。逻辑删除字段建议加上后面数据统计的时候好追溯。体检记录表——主键ID、老人ID、体检日期、收缩压、舒张压、心率、空腹血糖、餐后血糖、体温、血氧、身高、体重、腰围、体质指数、体检备注、创建人ID、创建时间。体检日期和老人ID建联合索引因为查询基本都按这两个维度走。慢病档案表——主键ID、老人ID、慢病类型用字典表管理别直接存字符串、确诊日期、确诊医院、当前状态管理中/已控制/已治愈、用药依从性评估、创建人ID。一个老人可以有多个慢病所以是独立的表不是老人表里的字段。随访记录表——主键ID、慢病档案ID、老人ID、随访日期、随访方式、随访医生ID、主诉、体征数据JSON、用药情况、医嘱建议、下次随访日期、创建时间。随访日期加下次随访日期这两个字段是做待随访提醒的关键。用户表——主键ID、用户名、密码BCrypt加密存储、姓名、手机号、角色ID、状态、最后登录时间。密码绝不允许明文存储这是安全底线。角色表——主键ID、角色编码、角色名称、角色描述。系统内置三种角色管理员、医生/健康管理师、老人/家属。菜单权限表——主键ID、菜单名称、父菜单ID、路由路径、组件路径、权限标识、排序号、是否显示。前端路由表和后端接口权限都靠这张表联动。操作日志表——主键ID、用户ID、操作模块、操作类型、操作内容、IP地址、操作时间。答辩评委会关注这部分体现系统安全性。设计表的时候有几个关键原则。第一多对多关系一定要拆中间表。比如一个老人可能同时有多种慢病一种慢病对应多个老人慢病和老人之间就通过慢病档案表来关联。第二金额、身高体重等数值字段要定义好精度比如血压存整数身高体重存小数点后一位。第三所有业务表都要有创建时间和更新时间字段这是排查问题时的救命稻草。2.3 核心业务逻辑深度解析健康评估是这套系统的灵魂功能这里面的逻辑比普通CRUD复杂得多。简单说系统要根据老人最近的体检数据和历史档案自动判断健康状况并给出异常提示。具体实现分三步走。第一步后端接口接收老人的最新体检数据后按照卫生行业标准设定各指标的阈值范围。比如收缩压的正常范围是90到139mmHg舒张压是60到89mmHg空腹血糖是3.9到6.1mmol/L。超出范围的标记为异常。第二步把本次数据和老人历史数据做对比计算环比变化。比如上次收缩压142这次138降幅约2.8%生成“血压呈下降趋势”的描述。第三步结合慢病档案综合分析。如果老人有高血压标签本次收缩压大于等于140则生成“高血压控制不理想建议尽快随访”的提示。这个逻辑用代码实现不复杂但要把业务场景聊透。阈值判断放在后端做前端只负责展示。因为前端判断规则容易被绕过而且修改规则要重新发布前端而后端改个配置文件就行。严格来说健康评估的判定逻辑应该是可配置的把阈值参数抽到配置表里这样即使将来行业标准调整了工作人员也能在界面上直接维护不用动代码。用药提醒功能看似简单实际注意的点不少。用药计划表设计的时候可以做减法先支持每轮用药的药品名称、单次剂量、频次、开始和结束日期。提醒逻辑的触发策略需要重点设计。我的做法是在后端启动一个定时任务每天凌晨扫描当天需要提醒的老人和药品生成待提醒记录。用户登录后接口返回当天的待提醒列表前端在首页弹窗提示。为什么不用实时推送因为社区场景下用户不一定时刻在线定时生成待办更可靠而且实现成本低。3. 前后端核心实现与实操记录3.1 后端项目结构搭建Spring Boot项目用IDEA创建很简单。Spring Initializr里选好Java版本建议JDK 1.8或11毕设环境最稳、Spring Boot版本2.x系列都行别追求最新版本2.7.x就很成熟依赖勾选Spring Web、MyBatis、MySQL Driver然后生成项目。项目包结构我强烈建议按业务分层而不是按技术分层。什么意思呢很多教程让你建controller、service、mapper三大包结果controller下面堆了几十个类找个体检接口得翻半天。按业务域分包是这样com.example.health ├── common // 通用类统一返回结果、异常处理、工具类 ├── config // 配置类跨域、拦截器、Swagger ├── controller // 控制器层登录、老人档案、体检、慢病、统计 ├── service // 业务逻辑层接口和实现类 ├── mapper // 数据访问层MyBatis接口和XML ├── entity // 数据库实体类 ├── vo // 视图对象给前端返回的封装对象 ├── dto // 数据传输对象接收前端参数的封装对象 └── util // 工具类JWT工具、日期工具等Controller层按功能模块分多个Controller类老人档案相关接口放OldPersonController体检相关放PhysicalExamController统计相关放StatisticsController。这样别人看你的代码一眼就能定位到某个功能的入口。配置这一块有三件事必须做好。第一件是跨域配置。前后端分离开发时前端跑在8080端口后端跑在9090端口建议改掉默认8080避免和前端冲突浏览器跨域请求会被拦截所以后端的WebMvcConfigurer里要配置CORS映射规则。第二件是统一返回结果。定义一个Result类字段包含code、message、data所有接口返回这个对象前端统一处理。第三件是全局异常处理。用RestControllerAdvice捕获业务异常和系统异常返回友好提示别让前端看到一堆堆栈信息。3.2 登录认证与权限控制的实现认证方案我推荐JWT配合拦截器这是Spring Boot项目最经典的组合比Shiro、Spring Security学习成本低写论文也容易讲清楚。登录接口的逻辑是这样的用户提交用户名密码后端查询用户表用BCrypt校验密码校验通过后用JWT工具类生成tokentoken里封装用户ID、用户名、角色编码设置过期时间建议8小时毕设场景够了。token返回给前端前端存在本地存储之后每次请求在请求头带上Authorization: Bearer token。拦截器的作用是拦截需要认证的接口。实现HandlerInterceptor接口在preHandle方法里从请求头取token解析验证如果token无效或过期直接返回401状态码。用户信息放到request的attribute里后续接口直接从request取当前用户不用每个接口重复解析token。权限控制这块的做法是在拦截器层面只做登录验证角色权限往细了做需要用到自定义注解和AOP。我建议毕设做到登录验证加按钮级别权限就够了后端根据角色编码判断当前用户能否执行某个操作比如只有管理员能删除档案普通医生只能查看和编辑。在需要权限校验的接口上标注RequireRole(ADMIN)这样的自定义注解用拦截器统一处理注解逻辑代码干净又清晰。前端这边配合的方式是路由守卫检查本地存储有没有token没有则跳到登录页登录后根据用户角色动态生成菜单不同角色看到的功能入口不一样。Vue-router的addRoutes方法就是干这个事儿的。3.3 Vue前端核心页面与组件实现前端项目用Vue CLI创建UI组件库用Element UI。页面结构按布局拆最外层是整体布局组件包含侧边栏菜单、顶部导航栏和内容区域。侧边栏菜单根据路由表自动生成路由表根据用户角色过滤。内容区域是路由出口各业务页面渲染在这里。核心页面我逐个说一下实现要点。登录页表单校验必填项登录成功后把token和用户信息存到本地存储然后跳转到首页。登录页的细节是回车键提交以及登录按钮loading状态防止重复提交。老人档案管理页表格展示老人列表分页组件控制页码。搜索区域支持按姓名、身份证号、所属网格过滤。新增和编辑用对话框表单校验身份证号格式和手机号格式。删除操作弹确认框避免误删。因为老人信息字段比较多表单可以分基础信息和健康信息两个页签。体检记录页上面是查询条件下面分成两栏。左侧显示所选老人的基本信息卡片右侧是历次体检记录表格。这样工作人员选了一个老人之后既能看到档案信息又能看到历史体检记录不用来回切换页面。体检记录新增按钮弹出录入表单录完自动刷新列表。健康评估展示页拿ECharts做趋势图展示某个老人最近十次血压的趋势曲线再拿一个指标卡片区域展示最近一次体检数据的判定结果。这个页面适合给家属展示图形化比一堆数字直观多了。统计报表页头部放几个统计卡片本月体检人数、异常检出率、随访完成率下面放柱状图和饼图。柱状图展示各网格社区的体检人数饼图展示慢病类型分布。数据都是后端接口算好返回的前端只做渲染。慢病随访页默认展示所有慢病档案的待随访列表按随访截止日期排序状态标注紧急程度。点击某条随访记录可以查看详情从详情页可以直接跳到新增随访记录的入口。3.4 后端接口开发实践后端接口开发我踩过一个坑就是图省事把业务逻辑全写死在Controller里。改了几次需求之后发现一个Controller方法两三百行测试也不好测代码也看不下去。后来规规矩矩按Controller调Service调Mapper的三层结构来写哪怕简单接口也走完整链路代码清晰度和维护性提升了一个档次。接口设计要遵守几个原则。第一RESTful风格资源用名词复数表示比如GET /api/old-persons是分页查询老人档案POST /api/old-persons是新建档案PUT /api/old-persons/{id}是更新档案。第二参数用DTO接收不要直接接收JsonObject然后手写一堆getString类型安全性和可读性都差。第三返回结果统一用Result包装前端根据code字段判断成功失败message展示提示信息。体检数据录入接口是业务核心我贴一下思路。请求参数包含老人ID和各项体检数据接收进PhysicalExamDTO。Service层先校验参数完整性收缩压舒张压不能同时为空老人ID必须存在。然后把DTO转成实体设置创建时间和创建人ID插入数据库。接着触发健康评估逻辑查询该老人最近十次体检数据按2.3节的规则生成评估结果把评估结果存到一张健康评估总结表或者直接返回给前端展示。最后返回最新体检记录和评估结果前端一次性拿到展示。这里有个细节值得提一下健康评估逻辑不要和保存逻辑耦合太深。我一开始的方案是保存完直接调用评估方法结果后来加了异步任务调整、评估规则调整发现代码耦合很难维护。后面改成观察者模式体检数据保存成功后发布一个事件评估模块监听事件去执行分析两个模块彻底解耦。这个事情对毕设来说有点过度设计但如果想展示架构思考能力在论文里提一下事件驱动设计是有加分的。4. 部署与运行环境配置4.1 本地开发环境搭建环境搭建是很多人开局就卡住的地方我按顺序说一遍完整的流程。JDK安装毕设用JDK 1.8或者JDK 11都行。安装完配置JAVA_HOME环境变量在命令行输入java -version能正常输出版本号即可。IDEA里File → Project Structure → SDK选择对应版本。Maven配置IDEA自带Maven但默认下载依赖很慢。建议配置阿里云镜像在Maven的settings.xml里加mirror节点。依赖下载好了项目才能正常编译运行。MySQL安装社区版MySQL 5.7或8.0都行。安装时设置root密码记住字符集选utf8mb4。启动服务后创建一个数据库比如health_community然后执行项目的初始化SQL脚本建表。Navicat或DataGrip用来管理数据库学生用社区版就够。Vue环境安装Node.js建议用14.x或16.x版本版本太高可能会有兼容问题。然后全局安装npm镜像加速npm install -g cnpm --registryhttps://registry.npmmirror.com。创建Vue项目用vue create命令选择Vue 2 Router Vuex的模板。后端启动IDEA里运行主启动类控制台看到Tomcat started on port 9090表示成功。浏览器访问Swagger地址可以调试接口。前端启动项目目录下命令行执行npm install安装依赖然后npm run serve启动开发服务器。访问localhost:8080就能看到登录页。开发环境下前端访问后端接口通过代理转发在vue.config.js里配置devServer.proxy把/api开头的请求转发到localhost:9090。4.2 打包部署的两种方式毕设验收通常要求能现场演示打包部署也是必要环节。前端打包在Vue项目根目录执行npm run build构建产物在dist目录。把dist目录下的文件复制到Spring Boot项目的src/main/resources/static目录下。Spring Boot重新打包后访问jar包的根路径就能直接看到前端页面这是前后端单机部署最简单的方案。要注意一点前端请求的接口地址要用相对路径比如/api/login这样部署到同一个端口才能正常工作。前后端分离部署前端打包后部署到Nginx后端jar包部署到服务器Nginx配置反向代理把/api请求转发到后端端口。这种方式适合有云服务器的同学演示效果更专业。jar包打包后端项目在IDEA右侧Maven面板执行package命令产出target目录下的jar包。命令行执行java -jar 项目名.jar启动。如果服务器配置了Java环境且端口没被占用就能直接跑起来。4.3 配置多环境切换的小技巧开发环境、测试环境、生产环境的数据库地址和端口通常不一样。Spring Boot支持多环境配置在application.yml的同级目录下创建application-dev.yml、application-prod.yml主配置里用spring.profiles.active指定激活哪个环境。比如dev环境数据库用了本地地址后端端口9090prod环境数据库用了云服务器地址后端端口80。启动时加参数--spring.profiles.activeprod就能切到生产配置。这个操作写进论文和答辩讲稿里能体现你对工程化部署的理解程度。5. 常见问题与排查技巧实录5.1 前端跨域请求被拦截怎么办后端配置了跨域前端还是报跨域错误这是开发中遇到最多的一个问题。其实跨域问题的排查链很简单浏览器控制台看具体报错如果是CORS错误看响应头里有没有Access-Control-Allow-Origin字段后端配置了还报错看是不是配置类没被扫描到或者拦截器优先级问题。我踩过的一个坑是自定义拦截器先于跨域配置生效。Spring框架处理CORS的机制是如果请求被拦截器拦截了并且返回了内容那么CORS响应头就不会被加上。解决方式是HandlerInterceptor里放行OPTIONS请求因为浏览器跨域预检请求用的是OPTIONS方法。在preHandle方法里加一行判断if (request.getMethod().equals(OPTIONS)) return true;还有一个我之前忽略的问题是如果前端用axios需要允许携带凭证。后端配置setAllowCredentials(true)的时候不能把allowedOrigins设置成*必须指定具体来源地址否则浏览器会拒绝。这些细节文档里都写过但踩过坑才有深刻印象。5.2 JWT Token过期导致页面反复跳转登录登录后过了一段时间点击某个功能页面又跳回登录页。排查后发现token过期了前端路由守卫发现本地存储的token还存在但后端接口返回401前端没有统一处理401状态。解决方案是前后端配合。前端在axios的响应拦截器里统一判断HTTP状态码如果返回401清除本地存储的用户信息跳转登录页。后端在token校验失败时返回统一的401状态。这样不管token是过期还是伪造表现一致。Token过期时间的设计也有讲究。社区工作人员可能一个上午都在系统里操作token过期时间设太短频繁重新登录很烦设太长又不安全。我的建议是普通工作人员8小时管理员4小时。如果要做“记住我”功能可以发一个refresh_token延长会话但毕设没必要直接调整过期时间更省事。5.3 Vue组件数据不更新的问题用Element UI的表格组件绑定数据后窗口重新赋值不生效页面不刷新。这个问题90%的Vue初学者都会遇到原因是Vue 2的响应式系统对对象新增属性是检测不到的。比如在data里定义了form对象初始时没有remark字段后面赋值form.remark xxx页面不会更新。解决办法要么是在data初始化时就把所有用到的字段定义出来要么用this.$set(this.form, remark, xxx)添加响应式属性。还有个情况是直接通过索引修改数组元素例如this.list[0].name xxx这样也触发不了更新要用splice或者$set方法。5.4 数据库表字段命名规范引发的坑MyBatis开启驼峰映射后数据库字段下划线命名可以自动映射到实体类驼峰属性比如db_column映射为dbColumn。但有个坑是如果实体类属性是布尔类型isDeleted数据库字段是is_deletedMyBatis默认映射会出问题。解决方案是实体类里别用is开头命名布尔属性或者配置map-underscore-to-camel-case同时注意字段getter/setter的生成。我遇到过一个比较隐蔽的问题查出来的数据里时间字段变成带毫秒的字符串前端展示不好看。解决方式是在实体类的日期属性上加上JsonFormat(pattern yyyy-MM-dd HH:mm:ss)控制JSON序列化格式。5.5 前端构建成功但页面空白Vue项目npm run build成功后部署到服务器访问页面空白控制台报错或者什么都不报。常见原因有三个。第一静态资源路径配置问题。Vue CLI默认的路由模式是hash构建后的js路径是绝对的放在子目录会找不到资源。解决办法是vue.config.js里设置publicPath: ./。第二路由模式问题。如果用了history模式部署到Nginx需要配置try_files重写到index.html。第三路由懒加载和分包问题某个chunk加载失败页面空白检查一下网络控制台的资源加载情况。5.6 数据库连接不上的排查套路Spring Boot启动报数据库连接失败排查步骤按顺序来。第一检查MySQL服务是否启动命令行执行netstat -ano | findstr 3306看看端口是否监听。第二检查连接配置url、用户名、密码是否准确。注意url里要加useSSLfalse和serverTimezoneAsia/Shanghai否则会有时区警告。第三检查MySQL用户权限确认当前用户有访问对应数据库的权限。第四如果数据库版本是8.0driver依赖要用com.mysql.cj.jdbc.Driver旧版driver会有兼容问题。5.7 前后端数据对接格式不一致开发时前端拿到接口数据格式和后端约定对不上比如后端返回的数据结构是{code:200, data:{list:[], total:100}}前端封装却按data直接是数组来解析。这种问题在项目前期就要统一约定最好用Swagger把接口文档管理起来前端照着文档联调。后端返回Result统一包装前端封装的request工具统一解包。6. 项目演示与答辩准备建议6.1 演示数据库准备技巧现场演示最怕数据太干净列表页面空空如也没有真实感。建议提前往数据库里灌入一批演示数据30到50个老人的完整档案每个老人在近三个月内有5到10条体检记录部分老人带有高血压或糖尿病慢病标签随访记录若干条。演示数据的质量直接影响展示效果。姓名别用张三李四编一些有地方特色的名字年龄分布覆盖55到95岁慢病类型覆盖高血压、糖尿病、冠心病等常见病。体检数据要根据老人年龄和慢病状态模拟出合理数值别出现80岁老人血压110/70这种过于完美的数据要有一些异常值方便演示健康评估和异常提醒功能。还可以准备一个搜索用例比如在搜索框输入老人的身份证号后四位快速定位到某条记录。录数据的时候把某位老人的名字取特殊一点比如记忆中容易记的名字演示时直接搜这个关键字操作流畅又自然。6.2 答辩讲稿的叙事逻辑很多同学答辩的时候喜欢按功能一个个讲这个模块可以干什么那个模块可以干什么讲完老师也不知道你的系统有什么亮点。我的建议是倒过来按使用场景讲故事。开场讲清楚选题背景社区老人健康管理存在档案分散、数据统计困难、慢病随访不及时这几个实际痛点。然后讲系统设计如何针对这些痛点做了哪些功能。接着演示核心流程给一位新老人建档、录入首次体检数据、系统给出健康评估、创建慢病随访计划、查看统计报表。这个叙事逻辑让老师觉得你思考过业务而不是只会调接口。技术亮点要单独总结两三个出来。比如JWT无状态认证解决了多端登录会话问题健康评估规则可配置化让系统适应不同社区的差异化需求事件解耦让评估模块独立演进。每个亮点配一句为什么这么设计不配的话显得牵强。6.3 高频答辩问题预处理老师大概率会问你为什么选这个技术栈。准备话术Spring Boot简化了项目搭建和配置过程提供了丰富的starter生态适合快速开发这类管理系统Vue的组件化开发让前端代码更好维护配合Element UI能快速构建后台界面。再补一句前后端分离便于分工协作和后期扩展。数据库表设计的问题为什么老人和慢病是多对多关系。回答思路一个老人可能同时患高血压和糖尿病一种慢病可能对应多位老人所以在两者之间建一个慢病档案关联表同时记录确诊日期、当前状态等关联信息。权限设计的细节问题如果老师问某个接口怎么防止越权访问你要能说出实现方案自定义拦截器里根据当前用户的角色和接口需要的角色做匹配不匹配直接返回403。前端也做了路由守卫和菜单过滤双端配合控制了越权风险。健康评估规则的来源依据说明血压分级参照了中国高血压防治指南的标准血糖判定参考了糖尿病防治指南并在代码注释和论文里标明。7. 项目后续扩展方向做完基础版本如果你想在毕设基础上更进一步有几个不大不小的扩展方向。第一个是健康数据的趋势预测基于老人历史体检数据用简单的时间序列方法预测下一次体检指标的走向提前预警。第二个是家属消息通知服务体检出现异常后向家属手机发送通知。第三个是移动端适配社区工作人员经常要走访问卷Vue项目加上移动端布局适配至少在手机上能流畅操作。结项以后给社区的实操人员做一次简单的培训教会他们建档和录入数据、查看统计报表。再准备一份操作手册把每个功能配上截图和文字说明。这些交付物放进论文附录里也是加分项。我在实际操作中最深的体会是做这种系统的难点永远不在技术本身而在于你想清楚业务流程然后让技术服务于业务。技术框架选型上求稳不求新业务细节上多思考为什么答辩自然底气足。如果你在搭建过程中遇到了这里没覆盖的问题回过头看看每个模块的实现思路排查方向通常比我列的那些经验更明确。