SpringBoot+Vue医院住院管理系统:毕业设计全流程实战解析
发布时间:2026/9/8 13:53:34 作者:尧图编辑部 阅读量:1,286

这次我们来看一个基于 SpringBoot Vue 的医院住院信息管理系统。它面向的是 Java 计算机毕业设计、课程设计和实训项目场景整套资料里除了源码还带文档报告和代码讲解。如果你正在找 SpringBoot 全栈项目的参考、需要一份能写进论文的系统设计与实现案例或者想在答辩前把核心业务逻辑吃透这个项目可以直接往下看。先说最值得关注的几个点前后端分离架构、住院全流程业务闭环、角色权限管理、界面化的数据维护方式以及覆盖入院登记、病房分配、医嘱录入、费用统计和出院结算的完整演示链路。后端以 SpringBoot 为核心前端用 Vue 搭建数据存储走 MySQL。由于是毕业设计向项目整体设计会优先考虑“结构清晰、代码可读、业务场景完整”而不是过度堆砌微服务组件这反而更适合用来学习 SpringBoot Vue 的开发流程。这篇文章会从项目定位、功能模块、源码结构、环境准备、本地启动、功能测试、接口调用、资源占用、常见问题排查到答辩准备完整走一遍。下面按顺序展开。1. 项目定位与核心能力速览医院住院信息管理系统核心是解决住院业务的信息化管理问题。传统人工管理模式下患者入院登记、床位安排、医嘱记录、费用核算、出院结算都依赖纸质单据容易出错也难以统计。这个系统把住院业务拆成清晰的功能模块用 Web 界面完成全流程操作。能力项说明项目类型Java 前后端分离管理系统适合毕业设计、课程设计、实训项目后端技术SpringBoot、MyBatis/MyBatis-Plus、MySQL前端技术Vue、Element UI 或 Element Plus以实际源码为准业务场景医院住院管理覆盖入院、住院、出院全过程核心角色管理员、医生、护士不同版本可能有差异以源码为准启动方式后端启动 SpringBoot 服务前端启动 Vue 开发服务是否支持 API支持后端提供 REST 风格接口可供前端或第三方工具调用是否支持批量任务部分数据维护与初始化可批量进行具体视实际实现而定附带资料源码、文档报告、代码讲解适合人群准备做 Java 毕设的学生、想系统学习 SpringBoot Vue 全栈开发的开发者从项目定位上看这套代码不是那种只做了登录注册的“半成品”而是围绕住院业务完整展开的管理系统。拿到源码后可以通过界面依次完成患者信息维护、科室与病房管理、床位分配、医嘱登记、费用记录、出院结算等操作整个数据流是通的。这也意味着它既能作为课设提交也能作为毕业设计项目直接使用只要你在文档和答辩材料里把业务逻辑讲清楚。2. 系统功能模块拆解住院信息管理系统通常不会是一个单页面应用而是按业务角色和功能域拆分为多个模块。虽然不同版本的源码在命名和页面上会有差异但核心模块结构一般包含以下几类。2.1 系统管理模块系统管理模块用于维护用户、角色和权限。管理员账号可以创建医生、护士账号分配不同角色设置菜单权限。这里有一个很实际的课设演示价值答辩时展示不同角色登录后看到的功能菜单不同这就是权限设计的最好证据。一般会包含用户管理、角色管理、菜单管理和操作日志。比如用户管理新增系统用户、重置密码、启用或禁用账号。角色管理维护管理员、医生、护士等角色并给角色绑定菜单权限。日志管理记录登录、增删改等关键操作方便追溯。2.2 患者入院管理患者入院是住院业务的第一环。操作人员录入患者基本信息、病情描述、主诊断、入院科室、入院日期和登记医生系统自动生成住院号或病历号。这一环节是后期所有业务的数据基础。入院长表单通常包含姓名、性别、年龄、身份证号、联系电话、紧急联系人、既往病史、过敏史等字段。在数据库中对应一张患者主表其他业务表通过患者编号关联。2.3 病房与床位管理住院系统里病房和床位往往使用“科室 - 病房 - 床位”的层级关系维护。科室包含多个病房病房包含多张床位。核心业务是办理入院时分配床位。系统需要区分“空闲、已住、消毒中、停用”等床位状态。床位一旦被分配状态立即变化患者出院或转科时床位状态需要及时释放。这里就是一个很好的测试点如果床位重复分配说明代码里缺少状态校验如果分配成功再看数据库中的状态是否同步更新。2.4 医嘱管理医嘱管理是住院系统的业务枢纽。医生根据患者病情开立医嘱护士负责执行和记录。常见医嘱类型包括长期医嘱、临时医嘱、检查医嘱、检验医嘱、用药医嘱等。医嘱模块通常会记录开立医生、开立时间、医嘱内容、执行状态、执行护士、执行时间。从数据设计上看医嘱表和患者表是多对一关系。这个模块的代码里可以看到大量的增删改查和数据状态流转适合用来讲解 SpringBoot Service 层的业务逻辑写法。2.5 费用管理住院费用一般包括床位费、药品费、检查费、治疗费、护理费等项目。系统在患者住院期间持续累计费用出院时根据费用汇总生成结算单。与普通商城项目不同住院费用管理更强调“按患者维度汇总”。比如查询某位患者的费用明细列表计算费用总和再生成出院结算记录。这部分可以用来说明 SQL 中的分组统计、多表关联查询以及前端表格的分页展示。2.6 统计与查询统计模块用于查看住院人数、科室入住率、费用汇总等数据。即便项目没有做大屏可视化至少也会提供按时间范围、科室、患者姓名等条件的组合查询和基础统计。答辩时统计模块非常适合用来演示 SpringBoot 中接口参数接收、MyBatis 动态 SQL 和前端表格渲染的配合。3. 技术栈与源码结构分析课设和毕设项目技术栈通常追求“主流、稳定、能讲清楚”。这个项目的技术选型是比较经典的 SpringBoot Vue 组合。技术分类技术选型说明后端框架SpringBoot简化配置内置 Tomcat快速启动ORM 框架MyBatis 或 MyBatis-Plus数据库操作MyBatis-Plus 可减少 SQL 编写量数据库MySQL业务数据存储权限方案拦截器/过滤器 Session 或 Token登录校验和接口访问控制前端框架Vue单页应用开发UI 组件Element UI 或 Element Plus表单、表格、弹窗等界面组件构建工具Maven / npm后端依赖管理和前端依赖管理源码拿到手后建议先看整体目录不用急着运行。以常见的项目结构为例hospital-system ├── backend │ ├── src/main/java │ │ ├── com/example/hospital │ │ │ ├── controller # 接口控制层 │ │ │ ├── service # 业务逻辑层 │ │ │ ├── mapper # 数据访问层 │ │ │ ├── entity # 实体类 │ │ │ ├── config # 配置类如跨域、拦截器 │ │ │ └── common # 公共返回类、工具类 │ │ └── resources │ │ ├── application.yml # 配置文件 │ │ └── mapper # MyBatis XML 文件如果用注解则没有 │ └── pom.xml ├── frontend │ ├── src │ │ ├── api # 接口请求封装 │ │ ├── router # 前端路由 │ │ ├── views # 页面组件 │ │ ├── components # 公共组件 │ │ └── utils # 工具方法 │ ├── package.json │ └── vue.config.js ├── sql │ └── hospital.sql # 建库建表脚本和初始化数据 └── README.md数据库表设计是整个项目的地基。住院类系统通常围绕患者建立多张关联表比如表名说明关键字段sys_user系统用户表id、username、password、role_idsys_role角色表id、role_name、descriptionpatient患者表id、patient_no、name、gender、age、phone、diagnosisdepartment科室表id、dept_name、locationward病房表id、dept_id、ward_no、bed_countbed床位表id、ward_id、bed_no、statusmedical_order医嘱表id、patient_id、doctor_id、order_content、order_type、statuscost_record费用记录表id、patient_id、cost_type、amount、create_timedischarge_record出院记录表id、patient_id、discharge_date、total_amount注意以上是一份通用设计思路真实项目的表名和字段以源码中的 SQL 脚本为准。建议拿到 SQL 文件后先整体过一遍表结构再用 Navicat 或 DBeaver 画出简单的 ER 图这张图后续可以直接放进毕业论文。4. 本地部署环境准备在启动项目之前先把开发环境检查一遍。这个项目的环境要求不特殊主要依赖 JDK、Maven、Node.js、MySQL 和 IDE。4.1 环境清单依赖版本建议检查命令JDK1.8 或 11以项目 pom.xml 为准java -versionMaven3.6 以上mvn -vNode.js14 以上node -vnpm随 Node 安装npm -vMySQL5.7 或 8.0mysql --version数据库工具Navicat、DBeaver、MySQL Workbench-后端 IDEIntelliJ IDEA-前端 IDEVSCode 或 IDEA-4.2 环境检查示例打开命令行终端依次执行java -version mvn -v node -v npm -v mysql --version如果某个命令提示“无法识别”说明对应的环境变量没有配置好。Java 环境变量配置、Maven 环境变量配置、Vue 安装及环境配置这些基础问题都能在 CSDN 上找到大量教程这里不展开。4.3 数据库准备启动 MySQL 服务确保能通过命令行或数据库工具连接。例如mysql -uroot -p如果能正常进入 MySQL 命令行说明数据库服务正常。后续需要把项目自带的 SQL 脚本导入数据库具体导入方式在下一节说明。5. 从零到跑通数据库初始化与项目启动这一步是整套项目跑起来的关键。按“导入数据库 - 启动后端 - 启动前端”的顺序操作即可。5.1 导入数据库脚本在项目目录下找到 SQL 文件比如hospital.sql。打开 MySQL 命令行或数据库管理工具创建一个数据库并导入脚本。命令行方式CREATE DATABASE IF NOT EXISTS hospital DEFAULT CHARACTER SET utf8mb4; USE hospital; SOURCE /你的项目路径/sql/hospital.sql;可视化工具方式新建数据库字符集选择utf8mb4然后右键运行 SQL 文件。导入成功后可以看到项目所需的表结构和初始化数据。5.2 修改后端配置用 IDEA 打开后端项目等待 Maven 自动下载依赖。然后找到application.yml或application.properties确认数据库连接信息。以application.yml为例server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/hospital?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 你的数据库密码 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true注意如果你的项目用的是 MyBatis-Plus 或注解 SQL可能没有mapper-locations这一项以实际源码为准。密码必须改成你自己本机 MySQL 的密码否则启动时会报数据库连接失败。5.3 启动后端服务方式一在 IDEA 中直接运行启动类。找到HospitalApplication.java或类似名称的类打开后点击运行按钮。看到类似下面的日志说明后端启动成功Tomcat started on port(s): 8080 Started HospitalApplication方式二命令行打包启动。mvn clean package java -jar target/hospital-0.0.1-SNAPSHOT.jar这种方式适合服务器部署也可以在本地测试打包过程是否正常。5.4 启动前端服务用 VSCode 或 IDEA 打开前端目录先安装依赖npm install如果安装速度很慢可以切换 npm 镜像源npm config set registry https://registry.npmmirror.com依赖安装完成后启动开发服务npm run serve启动成功后终端会显示访问地址通常是Local: http://localhost:8081/具体端口取决于vue.config.js或 package.json 中的配置。浏览器打开前端地址如果能跳转到登录页说明前后端已经基本跑通。5.5 登录验证首页会进入登录页。根据初始化 SQL 中的账号数据输入管理员或医生账号。常见的初始化账号可能是 admin / 123456但必须以 SQL 脚本里的实际数据为准。登录后如果页面能正常显示菜单和数据说明前后端接口、数据库连接全部正常。6. 功能测试从登录到出院结算的演示流程项目启动成功后需要完整走一遍核心业务流程验证各个模块是否真的可用。这套流程也可以直接作为答辩时的演示脚本。6.1 登录与权限验证测试目的验证账号密码校验、角色权限和登录拦截是否正常。输入正确账号密码观察是否能正常登录。输入错误密码观察是否有错误提示。用不同角色登录对比菜单权限是否不同。预期结果正确账号进入首页错误账号被拦截并提示普通护士账号看不到用户管理菜单。6.2 科室、病房、床位基础数据维护测试目的验证基础数据录入和状态更新。新增科室如“内科”“外科”。在科室下新增病房设置病房名称和床位数量。查看床位列表确认系统自动生成对应数量的床位记录。预期结果科室、病房、床位三级联动正常床位初始状态为空闲。6.3 患者入院与床位分配测试目的验证入院登记和床位状态变更。进入患者管理或入院登记页面点击新增患者。填写患者基本信息选择入院科室。为患者分配空闲床位。重新打开床位列表观察该床位状态是否变为“已住”。预期结果患者创建成功床位分配后状态同步更新患者详情页能看到关联的床位信息。6.4 医嘱录入与执行测试目的验证医嘱业务流转。进入患者详情点击新增医嘱。选择医嘱类型填写医嘱内容。护士账号登录进入医嘱执行页面将医嘱状态更新为“已执行”。预期结果医生开立的医嘱能被护士查到执行后状态更新数据库中的medical_order表记录状态正确。6.5 费用记录与统计测试目的验证费用累计和统计查询。为患者新增一笔费用记录比如床位费、检查费。进入费用查询页按患者姓名或住院号查询。确认费用列表能关联到对应患者合计金额正确。预期结果费用记录保存成功查询条件生效金额汇总无误。6.6 出院结算测试目的验证出院业务和床位释放。进入患者列表选择已住院患者点击出院。填写出院日期系统生成结算记录。回到床位列表确认原床位状态已变为“空闲”。预期结果出院记录生成床位状态释放患者状态变为已出院。这套流程走下来基本把住院信息管理系统的主要业务覆盖完整。如果在某一步卡住比如床位状态没变化、医嘱无法保存说明对应接口或前端代码存在问题可以根据报错信息进行针对性排查。7. 核心接口与前后端交互SpringBoot 后端接口是前后端数据交互的核心。这里给出一套通用接口调用思路具体路径和参数需要根据项目源码调整。7.1 登录接口示例后端通常提供一个登录接口接收用户名和密码返回登录状态和用户信息。curl -X POST http://localhost:8080/api/login \ -H Content-Type: application/json \ -d {username:admin,password:123456}如果使用 axios 封装请求前端写法通常是这样的import request from /utils/request export function login(data) { return request({ url: /login, method: post, data: data }) }7.2 分页查询接口示例分页查询在管理系统中非常常见。以患者分页查询为例前端通过请求参数传递页码、每页数量和查询条件。export function fetchPatientPage(params) { return request({ url: /patient/page, method: get, params: params }) }对应的查询参数示例{ pageNum: 1, pageSize: 10, patientName: 张 }SpringBoot 接口内部通过 MyBatis 查询数据库返回分页后的结果集。前端拿到数据后渲染到表格中。7.3 新增数据接口示例新增患者、新增医嘱、新增费用记录都是提交一个 JSON 对象给后端接口。{ patientName: 李四, gender: 男, age: 45, phone: 13800000000, diagnosis: 急性阑尾炎, deptId: 1, bedId: 12 }后端接收请求后在 Service 层做业务校验然后调用 Mapper 写入数据库。这里建议重点看 Service 层的写法因为课设答辩时老师最常问的就是业务逻辑放在哪一层、为什么这样做。7.4 接口访问与跨域问题前端开发地址和后端接口地址通常不在同一个端口开发阶段会产生跨域问题。常见解决方案是后端配置 CORS 全局跨域。以下是一个通用配置写法Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOriginPatterns(*) .allowedMethods(GET, POST, PUT, DELETE, OPTIONS) .allowedHeaders(*) .allowCredentials(true); } }如果你的前端项目配置了代理也可以在vue.config.js里做代理转发比如module.exports { devServer: { proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } } }上述两种方式解决的是同一个问题使用哪一种以项目源码为准。8. 资源占用与性能观察方法毕业设计项目虽然并发压力不大但部署和运行时的资源占用依然值得关注。尤其是把项目放到云服务器上演示时内存和 CPU 情况直接影响体验。8.1 后端服务资源SpringBoot 应用默认使用内置 Tomcat进程占用与 JVM 堆内存设置直接相关。默认情况下JVM 会根据物理内存自动配置堆大小。如果服务器内存有限可以显式指定参数java -jar -Xms256m -Xmx1024m target/hospital-0.0.1-SNAPSHOT.jar可以通过jps命令查看 Java 进程jps -l如果你观察到内存占用过高优先检查是否是数据库查询返回过多数据或者某些接口没有做分页。8.2 前端资源前端开发模式下npm run serve会启动一个开发服务器占用的内存相对较低。真正吃内存的是构建阶段比如执行npm run build时Webpack 或 Vite 会进行打包CPU 占用会明显上升。生产部署时建议把前端项目构建成静态文件用 Nginx 托管再由 Nginx 反向代理后端的/api接口。npm run build构建完成后dist目录就是可部署的静态站点目录。8.3 数据库资源数据库连接和慢查询是影响体验的关键。可以在 MySQL 中执行SHOW PROCESSLIST;查看当前数据库连接情况。如果某个统计页面响应慢在 SQL 执行的表上增加合适的索引并检查查询条件是否走了索引。9. 常见问题与排查清单不管是第一次跑通项目还是二次开发下面这些问题都属于高频出现的情况。整理成排查表方便直接对照。问题现象可能原因排查方式解决方案启动后端时报数据库连接失败MySQL 未启动或账号密码错误检查 MySQL 服务状态核对配置文件密码启动 MySQL修改 application.yml 数据源配置访问接口返回 404请求路径与 Controller 不一致查看控制台日志检查前端请求地址统一前后端接口前缀和路径前端页面空白依赖未安装完整或路由配置错误查看浏览器控制台报错重新执行 npm install检查路由配置npm install 失败网络问题或 Node 版本不兼容查看命令行报错内容切换 npm 镜像或升级/降级 Node 版本端口被占用8080 或其他端口已被其他程序占用执行netstat -ano查看端口占用情况修改端口或结束占用进程跨域请求失败前端端口和后端端口不一致浏览器 F12 查看 Network 请求报错后端配置 CORS或前端配置代理中文乱码数据库字符集或连接参数不正确检查数据库编码和 jdbc URL创建数据库时使用 utf8mb4url 增加 characterEncodingutf8数据库表不存在SQL 脚本未导入成功确认 SQL 执行是否有报错重新导入 SQL 脚本登录提示用户不存在初始化数据未导入账号查看用户表是否有数据补导入 SQL 脚本或手动初始化账号功能可以点但数据不展示后端接口报错或接口返回结构不一致查看后端日志和浏览器 Network 面板根据具体接口返回信息定位问题排查问题的总体原则是先看控制台报错再看接口返回最后查数据库。不要一上来就改代码。10. 课设/毕设文档写作与答辩准备代码能跑通只是第一步毕业设计最重要的是文档和答辩表达。项目自带的文档报告是很好的底稿但建议在这个基础上按学校要求调整结构。10.1 论文结构参考章节内容建议绪论项目背景、研究意义、国内外现状、主要工作相关技术介绍SpringBoot、Vue、MySQL、MyBatis 简介系统分析需求分析、可行性分析、系统用例图、业务流程系统设计系统架构图、功能模块图、数据库 ER 图、表结构设计系统实现按模块展示关键页面截图和核心代码片段系统测试测试环境、测试用例表、测试结果分析总结与展望项目总结、不足之处、后续扩展方向10.2 答辩常问问题为什么选择前后端分离架构登录权限是怎么实现的数据库中患者表和医嘱表是什么关系病房分配时怎么避免重复分配床位如何解决前端跨域问题这个系统相比传统人工管理有什么优势如何保证费用统计准确如果未来要支持更多并发用户怎么优化每个问题都不需要背答案关键是能对照自己的源码和数据库表讲清楚。建议答辩前用演示流程至少完整走三遍确保每一步页面操作和数据库变化都能说清楚。10.3 演示脚本参考一套完整的演示流程可以按下面顺序执行管理员登录展示系统首页和数据概况。进入用户管理展示医生和护士账号。进入科室管理展示科室列表。新增一位患者办理入院登记。为患者分配病房和床位。模拟医生开立医嘱。模拟护士执行医嘱。查看患者费用明细。办理出院结算。回到床位列表展示床位状态已释放。这套演示流程业务逻辑连贯每一步都能看到前一步产生的数据变化比零散展示页面更有说服力。11. 先跑通再改造下一步建议最后给一套务实的建议。拿到这类毕业设计项目后不要急着改功能先按数据库初始化、后端启动、前端启动的顺序完整跑通一次确认能登录、能操作、能统计数据再谈二次开发。如果你打算在这个项目基础上增加亮点可以考虑以下几个方向改造难度按顺序递增引入 ECharts 在首页增加住院人数趋势图、科室占比图。将用户密码改为 BCrypt 加密存储并在登录时接入 JWT 生成 Token。使用 Spring Schedule 定时统计每日住院人数生成日报。增加患者 Excel 批量导入功能直接用 EasyExcel 或 POI 实现。使用 Docker Compose 将 MySQL、后端、前端打包成一键部署环境。这些扩展功能都能在文档里单独写一章让毕设从“完成基本功能”提升到“有工程化思考”的层次。如果你想在面试时把这个项目讲成自己的经验可以从“权限设计、业务闭环、数据库建模、接口分层”四个角度组织描述再配合几轮完整的功能演示会比单纯背八股文更有说服力。先跑通登录再按流程走一遍后面的改造和论文写作都会顺很多。