
每年到毕业设计季总有学弟学妹来问我同一个问题“Spring Boot的课题到底做什么好”问的人多了我发现大家真正担心的不是不会写代码而是怕选错题、搭错框架最后在论文和答辩阶段翻车。今天想认真聊一个我反复推荐过的方向——基于Spring Boot的EHR管理系统。这个课题好就好在它是个“标准但不过时”的业务系统技术栈主流、需求边界清晰、数据库关系有得写、功能模块可以自由伸缩。我建议过不少人选它也帮人调试过好几套可以说从选题到部署答辩的全流程坑我都踩过一遍。这篇文章就把这套完整方案展开讲清楚源码、数据库、开发环境、调试部署、论文结构全都覆盖到希望能帮你少走弯路。1. 为什么EHR管理系统值得作为毕业设计选题很多同学一开始会纠结EHR是什么是不是医院里的HIS系统会不会太难这里要先厘清概念。EHR全称是Electronic Health Record即电子健康档案系统核心是围绕“个人健康档案”来做信息化管理。它和医院内部的HISHospital Information System有交集但毕设完全不用做到HIS那种复杂程度。你可以把它理解成一个面向诊所、体检中心或者企业健康管理部门的业务系统管理患者的基本信息、历次就诊记录、体检结果、用药情况和医生排班等。这个选题的优势可以从三个维度看。第一业务模型清晰不容易做飘。毕设最常见的翻车方式就是需求不明确今天想加一个模块明天想换一个功能最后代码写得乱七八糟。EHR的核心流程很固定患者建档、医生录入病历、预约/就诊、体检数据管理、统计查询。哪怕你只把这几条主线做扎实系统完整度已经很高不会出现“功能很多但没有一条能跑通”的尴尬局面。第二技术栈主流配合Spring Boot非常自然。Spring Boot本身就是做企业级业务系统的主力框架。EHR这种“用户-角色-核心业务表-后台管理”的经典结构非常适合用Spring Boot MyBatis/MyBatis-Plus MySQL来落地。而且这个组合在招聘市场上也是常见主流组合写在简历上不丢分。第三数据库设计有足够的“料”。论文和答辩里最怕“没东西讲”而EHR系统天然带有多张核心表用户表、角色表、患者档案表、病历表、预约记录表、体检报告表、药品信息表、医生排班表等。表与表之间的关联关系一对多、多对多可以直接画ER图写进论文这是答辩时很有说服力的内容。当然选题之前也要想清楚一个边界问题别把EHR做成医院全流程系统。挂号收费、药房库存、医保结算这些模块对于毕设来说太重了塞进去只会把开发和论文都拖垮。把格局定位在“健康档案管理基础诊疗流程”就够了做一个功能闭环、能演示、能讲清楚的小系统远比做一个半吊子的“大系统”要聪明得多。2. 需求边界与功能模块拆解动手前先画好“功能地图”我第一次做这类系统的时候犯过一个很典型的错误——上来直接建表写代码结果写到一半发现角色权限没想清楚又回头重构数据库白白浪费了很多时间。后来我养成了一个习惯无论项目大小先花两天把需求边界和模块拆解画成一张功能地图。这一步完成后前后端开发都只是照着地图填充而已。2.1 角色划分权限设计是EHR系统的地基EHR系统至少要设计三种角色系统管理员负责用户管理、角色权限配置、基础数据维护如药品信息、科室信息、医生排班、系统日志查看。医生/医护人员核心操作者是医生负责患者档案查看、病历录入与修改、体检结果录入、医嘱管理。普通用户/患者患者可以登录系统查看自己的档案、历史病历、体检报告可以提交预约申请。如果想让系统更有层次感还可以增加一个“护士/体检录入员”角色专门负责体检数据录入医生只做审核和诊断。但这个属于加分项不强制看你的开发周期和论文篇幅设计。2.2 功能模块清单分清“主干”和“枝叶”从项目管理的角度我会把功能模块分成P0必做、P1建议做、P2加分项三个等级P0核心模块登录认证与权限拦截Shiro、Spring Security或简单的拦截器方案三选一实现登录校验、角色鉴权。用户管理管理员对用户账号进行增删改查、分配角色、重置密码。患者档案管理患者基本信息的CRUD包括姓名、性别、出生日期、联系方式、过敏史、既往病史、家族病史等。病历管理医生为患者录入诊断记录包括主诉、现病史、检查结果、诊断结论、处理意见、用药处方等。预约/排班管理医生维护出诊时间段患者选择时间段提交预约医生确认或取消预约。P1建议模块体检管理体检项目模板维护、体检结果录入、体检报告查看支持按时间维度查看历史体检数据对比。药品信息管理药品库的增删改查用药医嘱与药品信息关联。数据统计按疾病类型、就诊人次、体检异常率等维度做简单统计用ECharts展示图表。公告/消息管理员发布公告用户登录后能看到。P2加分模块文件上传检查报告图片上传到服务器支持在线预览。邮件通知预约成功/取消时发送邮件Spring Boot集成JavaMail。操作日志基于AOP记录用户关键操作。我建议你按照P0 → P1 → P2的顺序来开发。先把P0写完并且跑通你的系统已经是一个完整可演示的项目了再根据自己的精力和论文需求决定要不要扩展P1、P2。千万不要一上来就想着P2否则很容易前紧后松核心模块反而写得粗糙。2.3 业务流程梳理把“用户故事”写成“系统流程”模块拆完之后还要把主要业务场景走一遍。举个例子“患者预约就诊”完整的链路是这样的患者登录系统在医生排班页面选择一个时间段。系统校验该时间段是否已被预约若已被占用提示更换时间。预约成功后生成一条预约记录状态为“待就诊”。医生登录后看到本次预约就诊结束后补录病历和医嘱。患者可在“我的预约”里看到已完成的病历记录。这样的流程描述建议在你动手前就写成文档哪怕只是草稿。因为论文里的“需求分析”章节直接可以用这些流程来填充答辩时讲项目也能讲得更顺畅。3. 技术选型与项目架构Spring Boot这套组合怎么定技术选型是一项毕设项目中最关键也最容易被忽视的环节。选得太老显得没有新意选得太新文档和参考资料不全容易卡住。我自己调试过很多套环境给出的建议是选“稳定之中带一点热门组件”的组合。3.1 后端版本、ORM、权限框架怎么选Spring Boot版本目前主流推荐Spring Boot 2.7.x系列搭配JDK 8。虽然Spring Boot 3.x已经出来很长时间了但很多高校的毕业设计项目还集中在JDK 8部分云服务器和旧版MySQL驱动也对JDK 8更友好。如果你不想在环境配置上浪费大量时间直接JDK 8 Spring Boot 2.7.x是最稳的搭配。这里特别提醒不要随手下载最新版的Spring Boot 3.x因为Spring Security、MyBatis-Plus等组件的适配版本略有不同有时候“版本太高”带来的兼容性坑会让人怀疑人生。持久层框架首选MyBatis-Plus。它的LambdaQueryWrapper写单表查询非常方便代码量能比原生MyBatis少很多。对于EHR这种业务场景大部分CRUD用MyBatis-Plus自带的BaseMapper、IService就能完成复杂一点的联表统计再手写XML做SQL查询。用JPA也可以但MyBatis-Plus在毕设中的资料更多遇到问题更容易搜到答案。权限认证这里有三条路取决于你的前端方案和野心最简单自己写一个拦截器HandlerInterceptor登录接口生成token每次请求拦截校验。适合前端是Thymeleaf或简单页面追求快速成型。中等集成Sa-Token推荐程度较高。它的API设计非常直观登录就是一个StpUtil.login()鉴权注解就是SaCheckRole学习成本很低文档也齐全。正统集成Spring Security JWT。如果你论文里想展示“高级感”或者面试时想聊权限框架的原理选这个。但门槛确实高一些建议安排好时间。从我的经验来看大多数毕设选题用Sa-Token是最优解。它比手写拦截器专业又比Spring Security容易驾驭论文里能写出来的内容也不少。3.2 前端方案模板渲染还是前后端分离这是另一个需要提前决定的事情。方案AThymeleaf服务端模板渲染。工程结构简单一个项目搞定前后端不涉及跨域问题部署时只需要打一个jar包。适合对前端不熟、时间紧、想快速出成果的情况。方案BSpring Boot Vue前后端分离。前端单独一个Vue3 Element Plus项目后端提供RESTful API前后端通过JSON交互。作为展示来说前后端分离的项目在答辩时效果会更好界面更现代也可以顺便讲一讲跨域处理、接口设计等内容。缺点是需要同时维护两个项目部署时要先构建前端静态文件再放到后端静态目录或单独部署。两个方案我都跑通过给出这样一条建议如果你只有一个月出头的时间选方案A如果你有比较充足的时间或者前端本身有基础选方案B。不少学校对毕设的前后端没有硬性要求但“Spring Boot Vue MySQL”这个组合在标题上确实更吸引眼球论文里的“系统实现”章节也能多配几张截图。3.3 数据库与服务端环境清单数据库MySQL 5.7或8.0都可以推荐8.0要注意连接驱动版本对应。开发工具IDEA后端、Navicat或DataGrip数据库可视化、Postman接口测试。项目管理Maven必用JDK 8。环境变量MAVEN_HOME、JAVA_HOME配置好避免命令行打包时找不到命令。服务器可选阿里云轻量服务器或者腾讯云部署演示更完整这个放到后面的部署章节细说。这里有一个很多人会踩的坑Maven仓库下载依赖太慢。建议在settings.xml中配置阿里云镜像否则一个Spring Boot项目依赖拉取可能要卡半小时以上。这个属于“前人栽树后人乘凉”的基础配置务必提前搞定。4. 数据库设计EHR系统的表结构与核心关系EHR系统的数据库是整个项目的灵魂。很多同学写论文写到“数据库设计”这一章时发现无话可说根本原因是表格建得太随意。如果一开始就按照规范设计好了表结构和关系论文直接可以画出清晰的ER图答辩时讲“为什么这样设计”也底气十足。4.1 核心表清单与字段说明我按P0模块整理了一套最常用的表结构方案用户表sys_user字段名类型说明idbigint主键自增usernamevarchar(50)登录账号唯一passwordvarchar(100)加密后的密码real_namevarchar(50)真实姓名phonevarchar(20)手机号role_idbigint关联角色表statustinyint状态0禁用1启用create_timedatetime创建时间角色表sys_role字段名类型说明idbigint主键role_namevarchar(50)角色名称role_codevarchar(50)角色编码如ADMIN/DOCTOR/USERremarkvarchar(255)备注患者档案表patient_profile字段名类型说明idbigint主键user_idbigint关联sys_user作为患者账号id_cardvarchar(18)身份证号gendertinyint性别birth_datedate出生日期addressvarchar(255)住址allergy_historytext过敏史past_historytext既往病史family_historytext家族病史病历表medical_record字段名类型说明idbigint主键patient_idbigint关联患者档案doctor_idbigint关联医生用户visit_datedatetime就诊时间chief_complainttext主诉present_illnesstext现病史examination_resulttext检查结果diagnosistext诊断结论treatment_plantext处理意见prescriptiontext用药处方预约记录表appointment_record字段名类型说明idbigint主键patient_idbigint患者档案IDdoctor_idbigint医生IDappointment_datedate预约日期time_slotvarchar(20)时间段如09:00-09:30statustinyint状态0待就诊1已完成2已取消体检记录表physical_exam字段名类型说明idbigint主键patient_idbigint患者档案IDexam_datedate体检日期heightdecimal(5,2)身高weightdecimal(5,2)体重blood_pressurevarchar(20)血压blood_sugardecimal(5,2)血糖result_summarytext体检总结药品信息表drug_info字段名类型说明idbigint主键drug_namevarchar(100)药名specificationvarchar(100)规格unitvarchar(20)单位manufacturervarchar(100)生产厂家stockint库存数量这些表的字段已经足够写一篇结构清晰的数据库设计章节了。你用Navicat建表时可以顺手把这些表关系画出来生成ER图存入论文附录。4.2 表关系设计主外键与索引策略表关系上的核心设计原则是用逻辑外键而不是物理外键。什么意思呢就是在表中保留user_id、doctor_id、patient_id这些关联字段但不一定在数据库层面设置真正的FOREIGN KEY约束。原因很简单毕设系统往往有大量的批量导入和测试数据如果设置了物理外键删数据、导数据、改数据时会非常痛苦一个外键约束报错能卡住很久。逻辑外键让程序通过代码保证数据一致性数据库层面保持轻量这在中小型业务系统中是一个很实用的取舍。索引方面建议给这几类字段加普通索引sys_user.username唯一索引medical_record.patient_id、visit_dateappointment_record.doctor_id、appointment_date、statuspatient_profile.user_id理由也很直接这些字段都是高频查询条件比如“查看某患者的历史病历”“查某医生某天的预约情况”加索引后数据量到几万条时性能差异会非常明显。在论文里你还可以专门写一小节探讨索引的设计答辩时能加分。4.3 建表SQL与初始化数据的重要性表结构确定后要写一份完整的init.sql包含建表语句和初始化数据。初始化数据至少要有管理员账号admin/admin123一个医生账号、一个患者账号10条以上患者档案、若干条病历和预约记录很多同学觉得初始化数据无所谓其实这个环节很重要原因有两条答辩演示时你需要给评委演示“列表有数据、详情能查看、图表有展示”这是最直观的系统完成度证明。论文截图需要大量的界面示例没有数据可截的页面非常难看。你可以直接在Navicat里手动插入也可以用Java的CommandLineRunner在项目启动时自动插入初始数据我推荐后者这样换了一台电脑部署项目一启动就有数据可用省去很多麻烦。5. 核心功能实现登录鉴权、患者档案与病历管理功能实现部分是整个项目的工程量重头。这里重点拆解三个核心链路登录鉴权怎么设计、患者档案怎么做CRUD、病历录入为什么用“主子表”结构而不是单表。这三个功能写明白你的系统骨架就立住了。5.1 登录鉴权从拦截器到Sa-Token的实现思路如果你用的是Sa-Token实现登录只需要几个步骤// 登录接口 PostMapping(/login) public Result login(RequestBody LoginDTO dto) { LambdaQueryWrapperSysUser wrapper new LambdaQueryWrapper(); wrapper.eq(SysUser::getUsername, dto.getUsername()); SysUser user sysUserService.getOne(wrapper); if (user null || !BCrypt.checkpw(dto.getPassword(), user.getPassword())) { return Result.error(用户名或密码错误); } if (user.getStatus() 0) { return Result.error(账号已禁用); } StpUtil.login(user.getId()); // 将用户角色写入会话方便后续做权限校验 StpUtil.getSession().set(roleCode, roleService.getById(user.getRoleId()).getRoleCode()); return Result.ok(StpUtil.getTokenInfo()); }登录成功后在方法上加注解就能控制权限SaCheckRole(ADMIN) GetMapping(/user/list) public Result userList(RequestParam Integer pageNum, RequestParam Integer pageSize) { PageSysUser page sysUserService.page(new Page(pageNum, pageSize)); return Result.ok(page); }这里有一个比较常见的坑密码加密。永远不要在数据库里存明文密码。我见过很多人的项目为了方便直接password字段存“123456”答辩时被评委看见印象分直接掉一大截。Spring Security自带的BCryptPasswordEncoder、Sa-Token内置的密码加密工具或者Spring的DigestUtils.md5DigestAsHex都可以用。退一步讲就算你用了最简单的方式也要在代码里体现“加密后存储”的意识这是安全素质的体现。另外无论用哪种鉴权方案推荐写一个全局异常处理器RestControllerAdvice统一捕获未登录异常NotLoginException / 401未授权并返回JSON格式的错误信息。这样前端不会收到一个乱七八糟的默认错误页。5.2 患者档案CRUDMyBatis-Plus的常规操作档案管理模块本质上是单表CRUD用MyBatis-Plus的BaseMapper就能完成。核心是做好分页查询与条件搜索。GetMapping(/patient/page) public Result page(RequestParam Integer pageNum, RequestParam Integer pageSize, RequestParam(required false) String keyword) { LambdaQueryWrapperPatientProfile wrapper new LambdaQueryWrapper(); wrapper.like(StringUtils.hasText(keyword), PatientProfile::getRealName, keyword) .or(StringUtils.hasText(keyword), w - w.like(PatientProfile::getIdCard, keyword)); PagePatientProfile page patientProfileService.page(new Page(pageNum, pageSize), wrapper); return Result.ok(page); }这里要注意一个细节条件构造器里用like时一定要判空。如果keyword为空还拼接like条件SQL就会变成where name like %%看起来不影响结果但索引会失效而且给人一种不严谨的感觉。新增和修改的接口建议在Service层做一下字段校验比如身份证号格式、手机号格式。MyBatis-Plus有注解校验NotBlank等也可以用hibernate-validator但最简单的方式是自己在Service里写一个validate方法。论文里可以写“本系统在业务层实现了输入校验确保进入数据库的数据完整性与合法性”这又是一个可以写的内容点。5.3 病历管理为什么建议用单表冗余而不是拆分多表病历模块最常见的做法是单表但要把“诊断结论”“用药处方”这些字段设计得足够灵活。比如prescription字段可以存文本也可以用JSON数组格式存储一组药品信息[{drugName: 阿莫西林, dosage: 0.5g, frequency: 每日三次, days: 7}, {drugName: 布洛芬, dosage: 0.3g, frequency: 每日两次, days: 3}]后端用一个实体类的字段接住前端用表格形式渲染展示。这种方法在毕设项目中足够实用也避免了拆出“处方明细表”带来的复杂性。真正的大医院系统会拆成诊断表、处方头表、处方明细表、检查检验表等多张表但作为毕业设计在“系统设计”章节里讲清楚你的取舍理由比堆表更重要。如果你想让论文更有深度可以在“数据库设计”中专门写一段“设计权衡单表冗余与多表归一化”从性能、实现难度、场景体量来分析评委看了会觉得你有思考。5.4 前后端联调时的小经验如果你选了前后端分离方案联调期间有几个常见问题提前说一下跨域配置在Spring Boot中写一个CorsConfigallowedOriginPatterns设为*否则前端axios请求会被浏览器拦截。日期格式后端返回的LocalDateTime默认是一串数组或带T的ISO格式建议在application.yml里配置Jackson的日期格式或者用JsonFormat注解统一处理。接口返回结构统一用一个Result类包装code、message、data前端可以封装一个请求拦截器统一处理后端返回码。6. 从编码到运行环境搭建、调试部署与常见问题系统跑起来不是终点能在一台新电脑上“一键运行”才是毕业设计顺利交付的关键。这里整理一套我实际验证过的部署调试流程以及过程里最常碰到的几个问题。6.1 标准运行环境与启动步骤一套完整的运行环境包括JDK 8、Maven 3.6、MySQL 5.7/8.0、IDEA或Eclipse、Navicat可选。启动步骤建议写成一份README文档随项目一起交付# 1. 创建数据库并导入脚本 mysql -uroot -p init.sql # 2. 修改application.yml中的数据库账号密码 # 3. 使用Maven打包 mvn clean package -DskipTests # 4. 运行jar包 java -jar target/ehr-system-0.0.1-SNAPSHOT.jar这个步骤看着简单但我见过太多人卡在第二步。application.yml里最需要确认的几个配置项spring: datasource: url: jdbc:mysql://localhost:3306/ehr_system?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 你的密码 driver-class-name: com.mysql.cj.jdbc.Driver jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT8 server: port: 8080url里这个serverTimezone参数经常被漏掉漏了之后会报时区错误看起来像是连接失败但实际上就是这个参数的问题。密码改成自己的以后如果还不通先去检查MySQL服务是不是启动了、端口是不是3306。6.2 打包部署本地jar包和云服务器的区别本地运行正常只是第一步如果想让评委在答辩现场看到系统通过IP访问建议部署到云服务器上。我这里不推荐具体的云厂商只讲操作流程和注意点买一台最低配的轻量服务器操作系统选CentOS 7.x或Ubuntu 20.04。安装JDK 8、MySQL、Maven配置好环境变量。把jar包和init.sql上传到服务器。导入init.sql修改application.yml里的数据库地址为localhost或服务器内网IP。运行nohup java -jar xxx.jar log.log 21 让项目在后台常驻。部署时最常遇到的是端口没开服务器安全组默认不开放8080端口需要在控制台的安全组规则里手动放行。这个坑值得提前说一下很多人代码完全没问题但就是访问不了查了很久发现是安全组没放行端口。启动后如果报错先看日志。Java项目的错误日志就是最好的调试老师。常见几类错误Access denied for user rootlocalhost用户名密码错或者MySQL没有给root授权。Unknown database ehr_system数据库还没建。Table doesnt exist忘了导入表结构或者表名大小写配置不一致。6.3 开发阶段最容易踩的五个“隐形坑”用我帮人调项目的实际经历来说以下五类问题出现的频率最高提前知道能省下大把时间Maven依赖冲突。Spring Boot整合第三方组件时经常出现jar包版本冲突表现是启动时报NoSuchMethodError或ClassNotFoundException。解决思路是用mvn dependency:tree查看依赖树或者用IDEA的Maven Helper插件直接排除冲突的依赖。数据库连接驱动版本不匹配。MySQL 8.0需要com.mysql.cj.jdbc.Driver5.7用com.mysql.jdbc.Driver。如果驱动包版本和数据库版本不匹配启动时会报奇怪的异常。端口被占用。启动报Port 8080 was already in use用netstat -ano | findstr 8080查占用进程在任务管理器里结束掉或者改application.yml里的server.port也行。mybatis-plus的逻辑删除配置忘记设置。如果你用了TableLogic注解实现逻辑删除但全局配置没写logic-not-delete-value和logic-delete-value删除操作会执行成update而查询时又会过滤掉被“删除”的数据效果会很混乱。前端项目跨域或者代理问题。如果是前后端分离Vue项目的vue.config.js里需要配置proxy代理把/api开头的请求转发到后端端口否则本地联调会一直报网络错误。7. 论文写作与答辩准备把项目变成“毕业成果”系统代码完成后距离毕业还差最后一公里——论文和答辩。很多技术功底不错的人在这上面反而吃亏因为不知道论文怎么写才能体现项目价值。这一节把我总结的论文结构和答辩套路一并交给你。7.1 论文目录框架一套可以直接套用的结构EHR管理系统这套课题的论文推荐按下面的目录来组织绪论研究背景与意义、国内外研究现状、论文组织结构相关技术介绍Spring Boot、MyBatis-Plus、MySQL、前端框架等系统需求分析可行性分析、功能需求分析、非功能需求分析、用例图系统设计总体架构设计、功能模块设计、数据库设计、ER图系统实现各个核心模块的界面截图核心代码实现说明系统测试测试方法、测试环境、功能测试用例、测试结果分析总结与展望这套结构是高校计算机论文最常见的套路评委不陌生你不会踩雷。关键在于第3章和第4章要写足内容可以结合在前面讲到的功能地图和表结构来写。技术介绍那一章不要直接抄官方文档要用“项目实际使用了什么技术解决了什么问题”的表述方式。7.2 图表是论文的加分项论文里至少要具备以下图形系统架构图横向分层前端、后端、数据库功能结构图树形结构展示所有功能模块业务流程图患者预约就诊流程E-R图数据库实体关系核心模块的运行界面截图画架构图和功能结构图推荐用ProcessOn或者draw.io前者在线就能用模板多后者免费且导出清晰。E-R图建议直接用Navicat的逆向模型生成再微调一下比自己手动画准得多。7.3 答辩演示的“三段式”节奏答辩演示环节很多人的通病是“只顾着点按钮没讲清楚业务逻辑”。我的建议是采用“三段式”演示节奏宏观介绍1分钟介绍系统是什么、服务对象是谁、用到什么技术栈演示管理员视角的整体界面。核心流程3分钟走一遍完整的业务闭环。比如从管理员创建医生账号、医生登录、创建患者档案、填写病历到患者登录查看病历。这条线走完评委就明白系统的核心价值了。亮点展示1分钟展示统计图表、文件上传、数据库设计等有特色的功能最后可以打开数据库表快速展示一下表结构。演示之前建议准备一份**“演示场景预设数据”**比如一条完整的张三患者档案包含多次就诊病历、一次体检记录这样演示时不用临时输入流畅度瞬间提升一个档次。我见过太多人当场打字慢、数据格式不对导致场面尴尬提前把数据准备好是非常重要的细节。7.4 答辩提问的高频问题和参考答法答辩时评委一般会问以下几类问题提前准备答案场面上会从容很多“你这个系统的权限是怎么控制的”——答使用Sa-Token登录后发放token通过SaCheckRole注解实现按钮级别和接口级别的权限校验。“数据库表为什么这么设计”——答围绕业务主链路设计一张核心表对应一个业务对象用逻辑外键保留关联关系高频查询字段建索引。“遇到过什么难点怎么解决的”——这是一个展示亮点的问题可以讲一个真实的坑比如文件上传时的路径问题或跨域问题重点在“怎么排查、怎么解决”。“系统还有什么可以改进的地方”——可以从大数据量下分库分表、引入消息队列做异步处理、对接更专业的医疗数据标准如HL7等方向说既真诚又显得有视野。我想特别强调一点答辩时千万不要说“我这个系统没有难点”。评委问这个问题不是为了刁难你而是给你一个展示自己解决问题的机会。哪怕是一个很小的bug只要你能讲清楚“问题是什么、怎么定位的、怎么解决的”都比“没有难点”好得多。回到开头的话题。EHR管理系统能成为计算机毕业设计中的常青选题本质上是因为它同时满足了“业务可理解、技术可展示、论文可展开、演示可操作”四个条件。你不需要做一个惊艳四座的产品而是要证明自己具备从需求分析到设计实现再到测试部署的完整工程能力。这套系统的每一环——从数据库表关系设计到Sa-Token权限控制从MyBatis-Plus分页查询到服务器部署——都是可以讲清楚、写明白、经得起追问的内容。如果你正在选毕设课题EHR管理系统是一个稳妥且有拓展空间的选择。如果你已经开始做这个题目了希望这篇文章里的模块拆解、数据库方案和部署经验能帮你少踩几个坑。按照“先P0后P1再P2”的节奏一步步来把核心业务闭环跑通再把论文和演示打磨到位这个项目完全可以成为你毕业答辩中的加分项。