基于Spring Boot的社区医院管理系统毕设稳过秘籍!从需求到测试全流程,新手也能抄作业✨

47 阅读12分钟

基于Spring Boot的社区医院管理系统毕设稳过秘籍!从需求到测试全流程,新手也能抄作业✨

谁懂啊!去年做社区医院管理系统毕设时,光就诊信息和药品库存的关联就卡了4天——一开始没处理"药品库存扣减"逻辑,医生开药后库存没减少,导师看了直接让我"重写业务层代码"😫 后来踩遍坑才摸出一套能快速落地的流程,今天把需求分析、技术选型、功能实现到测试的全细节说透,宝子们再也不用熬夜改代码,轻松搞定毕设!

一、先搞懂"用户要啥"!需求分析别瞎蒙

刚开始我直接跳过需求分析就写代码,结果做了半个月的"医院资讯推送"功能,导师一句"核心是就诊管理和药品库存,不是资讯"直接打回重改!后来才明白,需求分析得先抓准"谁用系统、要干啥",这步做对,后面少走80%弯路。

1. 核心用户&功能拆解(踩坑后总结版)

社区医院管理系统就四类核心用户:管理员医生前台患者(角色别太多!我当初加了"药剂师"角色,后期调试超麻烦,最后合并到医生角色才轻松):

  • 管理员端(必做功能):
    • 用户管理:新增/修改患者信息、重置密码、查询用户列表(别漏"身份证号唯一校验"!我当初没加,导致重复注册)
    • 医生管理:添加医生信息、分配科室、设置工号(用下拉框选择科室,别让管理员手动输)
    • 药品管理:录入药品信息、设置库存和价格、维护药品详情(支持"模糊查询",搜药品名称就能找到)
    • 数据统计:查看就诊量、药品使用统计、生成报表
  • 医生端(核心功能):
    • 患者管理:查看就诊患者、维护健康档案、记录病例信息
    • 就诊管理:开具处方、记录检查项目、更新病例状态
    • 药品开具:选择药品、设置用量、自动扣减库存
  • 前台端(业务处理):
    • 挂号管理:患者挂号、分配就诊科室、收取挂号费
    • 信息查询:查询患者信息、医生排班、药品库存
  • 患者端(基础功能):
    • 个人信息:查看健康档案、就诊记录、病例信息
    • 家庭医生:选择家庭医生、查看医生信息

2. 需求分析避坑指南(血泪教训!)

  • 别光靠"想"!找2个同学模拟患者提意见:比如有同学说"想查看历史就诊记录",我才加了"病例档案"功能,比自己瞎加实用多了
  • 一定要画用例图!用DrawIO画简单版就行,标清"医生-开具处方""患者-查看病例",后期跟导师汇报时,比光说"我要做XX功能"直观10倍
  • 写"需求规格说明书"!不用太复杂,把"功能描述、约束条件"写清楚(比如"药品库存不能为负""病例信息不能删除"),后期编码时对着做,不会跑偏

3. 可行性分析别敷衍!3点写清楚就能过

导师超爱问"你这系统可行吗",别只说"我觉得可行",要从3个角度写,显得专业:

  • 技术可行性:Spring Boot、Java、MySQL都是课堂学过的,遇到问题能查资料(别选没学过的技术!我当初想试试微服务,结果卡了一周服务调用)
  • 经济可行性:所有工具都是免费的!Eclipse、MySQL、Tomcat全是官网下载,答辩时说"开发成本为0",导师会觉得你会控制成本
  • 操作可行性:界面用Bootstrap做,按钮布局跟医院HIS系统类似,我找系里老师测试,她5分钟就学会了开处方,导师直接认可

二、技术选型别跟风!这套组合稳到爆

刚开始我跟风用Spring Cloud+React,结果"服务注册发现"卡了5天——Eureka配置不熟,服务一直无法调用😫 后来换成Spring Boot+JSP+MySQL+Tomcat9,新手友好度直接拉满,调试效率翻了倍!

1. 技术栈详细对比(附避坑提醒)

宝子们别盲目选"最新技术",稳定比炫酷重要!我整理了4个核心工具的选择理由和坑点,直接抄:

技术工具为啥选它避坑提醒!(重点!)
Spring Boot比SSM配置简单,自带Tomcat,快速开发用Spring Boot 2.7.x,3.x版本兼容性问题多
MySQL 8.0社区医院数据量不大,完全够用安装时设"utf8mb4"编码!避免中文乱码
Tomcat 9.0稳定!和Spring Boot适配性最好别用Tomcat 10!包名变更问题很麻烦
JSP+Bootstrap不用学前端框架,快速开发Bootstrap用3.x版本!4.x布局问题多

2. 开发环境搭建(step by step 实操)

很多宝子卡在"环境配置",其实跟着步骤来超简单:

  1. 装JDK 1.8:配置JAVA_HOME环境变量
  2. 装Eclipse:选Enterprise版本,自带Web开发插件
  3. 装MySQL 8.0:用Navicat管理数据库
  4. 创建Spring Boot项目:用Spring Initializr,选Web、MySQL、MyBatis依赖

3. 架构图一定要画!答辩加分项

用DrawIO画B/S架构图,标清"浏览器-服务器-数据库"交互逻辑:比如患者挂号→前台录入→医生就诊→药品库存扣减。去年答辩时,评委特意夸这个图"业务逻辑清晰"!

三、数据库设计:别让表关联坑了你

这部分是毕设的"核心骨架",我当初把"病例信息"和"药品信息"没做关联,查"患者用药历史"时要写复杂SQL,调试到凌晨😫 后来按"实体-属性-关系"来设计,终于理清了。

1. 核心实体&属性(附ER图绘制技巧)

先确定系统里的"实体"(患者、医生、药品、病例),再想每个实体有啥"属性"。我整理了必做的8张表:

  • 患者表(yonghu):id、yonghu_name(姓名)、yonghu_phone(电话)、yonghu_id_number(身份证号)、yonghu_email(邮箱)
  • 医生表(yisheng):id、yisheng_uuid_number(工号)、yisheng_name(姓名)、yisheng_phone(电话)、科室信息
  • 药品表(yaopin):id、yaopin_uuid_number(药品编号)、yaopin_name(名称)、yaopin_new_money(价格)、yaopin_kucun_number(库存)
  • 病例信息表(bingli):id、bingli_uuid_number(病例编号)、yonghu_id(患者)、yisheng_id(医生)、bingli_bingqing(病情)、yaodan_text(药单)
  • 就诊信息表(jiuzhen):id、yonghu_id(患者)、jiuzhen_jiuzhen(就诊号)、jiuzhen_feiyong(费用)、keshi_types(科室)
  • 健康档案表(jiuankangdangan):id、yonghu_id(患者)、jiuankangdangan_name(档案标题)、jiuankangdangan_content(健康状况)
  • 家庭医生表(qiantai):id、qiantai_name(负责人)、qiantai_phone(电话)、服务患者信息
  • 字典表(dictionary):id、dic_code(字段)、dic_name(字段名),用于科室、药品类型等枚举数据

避坑提醒:别把"病例附件"存数据库!存文件路径,比如/static/files/bingli1.pdf

2. 数据库物理设计(附建表SQL示例)

给宝子们贴一段"药品表"的建表SQL,直接复制到Navicat就能用:

CREATE TABLE `yaopin` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '药品ID',
  `yaopin_uuid_number` VARCHAR(100) DEFAULT NULL COMMENT '药品编号',
  `yaopin_name` VARCHAR(100) NOT NULL COMMENT '药品名称',
  `yaopin_new_money` DECIMAL(10,2) NOT NULL COMMENT '药品价格',
  `yaopin_kucun_number` INT NOT NULL DEFAULT 0 COMMENT '药品库存',
  `yaopin_zuoyong` VARCHAR(200) DEFAULT NULL COMMENT '主要药效',
  `fuzuoyong` VARCHAR(200) DEFAULT NULL COMMENT '副作用',
  `yaopin_content` TEXT DEFAULT NULL COMMENT '药品详情',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_yaopin_number` (`yaopin_uuid_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药品表';

3. 表关联测试!别等编码才发现错

建完表测试关联是否正常:

SELECT y.yonghu_name, yis.yisheng_name, b.bingli_bingqing, b.yaodan_text
FROM bingli b
JOIN yonghu y ON b.yonghu_id = y.id
JOIN yisheng yis ON b.yisheng_id = yis.id
WHERE y.id = 1;

能查出"患者名+医生名+病情+药单"说明关联正确。

四、功能实现:核心模块代码+页面设计

不用做所有功能!先搞定4个核心模块,答辩时足够出彩。

1. 医生端:病例信息管理模块(必做!)

这是医生最常用的功能,主要实现"新增病例、修改病例、查看病例"。

(1)核心代码片段(Spring Boot)

Service层(处理病例信息,含药品库存校验):

@Service
public class BingliServiceImpl implements BingliService {
    @Autowired
    private BingliMapper bingliMapper;
    @Autowired
    private YaopinMapper yaopinMapper;

    @Override
    @Transactional
    public void addBingli(BingliEntity bingli) {
        // 1. 校验患者和医生是否存在
        // 2. 处理药品库存扣减
        if (bingli.getYaodanText() != null && !bingli.getYaodanText().isEmpty()) {
            // 解析药单,扣减库存
            String[] yaopinList = bingli.getYaodanText().split(",");
            for (String yaopinInfo : yaopinList) {
                String[] info = yaopinInfo.split(":");
                Integer yaopinId = Integer.parseInt(info[0]);
                Integer useCount = Integer.parseInt(info[1]);
                
                YaopinEntity yaopin = yaopinMapper.selectById(yaopinId);
                if (yaopin.getYaopinKucunNumber() < useCount) {
                    throw new RuntimeException(yaopin.getYaopinName() + "库存不足!");
                }
                
                // 扣减库存
                yaopin.setYaopinKucunNumber(yaopin.getYaopinKucunNumber() - useCount);
                yaopinMapper.updateById(yaopin);
            }
        }
        
        // 3. 保存病例信息
        bingli.setBingliUuidNumber(System.currentTimeMillis() + "" + (int)(Math.random()*1000));
        bingli.setCreateTime(new Date());
        bingliMapper.insert(bingli);
    }
}

Controller层:

@Controller
@RequestMapping("/doctor/bingli")
public class DoctorBingliController {
    @Autowired
    private BingliService bingliService;

    @PostMapping("/add")
    public String addBingli(BingliEntity bingli, HttpServletRequest request) {
        try {
            bingliService.addBingli(bingli);
            request.setAttribute("msg", "病例添加成功!");
        } catch (Exception e) {
            request.setAttribute("msg", "病例添加失败:" + e.getMessage());
        }
        return "redirect:/doctor/bingli/list";
    }
}
(2)页面设计要点(Bootstrap)

页面标题:医生-病例信息管理页面

  • 病例列表表格:
    • 列名:病例编号、患者姓名、病情描述、检查项目、开药情况、操作
    • 状态显示:不同病情用不同颜色标签
  • 新增病例表单:
    • 患者选择(下拉框,从患者表读取)
    • 病情描述(文本域,必填)
    • 检查项目(多选框:血常规/尿常规/B超等)
    • 药品选择(多选下拉,显示库存数量)
    • 用药剂量(输入框,配合药品选择)
(3)避坑提醒
  • 药品库存实时校验!在Service层处理:
    if (yaopin.getYaopinKucunNumber() < useCount) {
        throw new RuntimeException("药品库存不足!");
    }
    
  • 病例编号要唯一!用时间戳+随机数生成

2. 药品库存管理模块(核心需求!)

管理员用系统管理药品库存,这个功能要实时准确!

(1)核心代码片段

Service层(药品库存预警):

@Service
public class YaopinServiceImpl implements YaopinService {
    @Autowired
    private YaopinMapper yaopinMapper;

    @Override
    public List<YaopinEntity> getLowStockYaopin() {
        // 返回库存小于10的药品,用于预警
        return yaopinMapper.selectList(
            new EntityWrapper<YaopinEntity>()
                .lt("yaopin_kucun_number", 10)
                .orderBy("yaopin_kucun_number", true)
        );
    }

    @Override
    @Transactional
    public void updateYaopinStock(Integer yaopinId, Integer stock) {
        if (stock < 0) {
            throw new RuntimeException("库存不能为负数!");
        }
        YaopinEntity yaopin = new YaopinEntity();
        yaopin.setId(yaopinId);
        yaopin.setYaopinKucunNumber(stock);
        yaopinMapper.updateById(yaopin);
    }
}
(2)页面设计要点

页面标题:管理员-药品信息管理页面

  • 药品列表表格:
    • 列名:药品编号、药品名称、价格、库存、主要药效、操作
    • 库存预警:库存<10标红色,<50标橙色
  • 库存修改功能:
    • 点击"修改库存"弹出模态框
    • 显示当前库存,输入新库存
    • 实时校验不能为负

3. 就诊信息管理模块(前台功能)

前台处理患者挂号就诊流程。

页面设计要点

页面标题:前台-就诊信息管理页面

  • 挂号功能:
    • 患者信息(新患者可现场登记)
    • 选择科室(下拉框)
    • 选择医生(根据科室动态加载)
    • 挂号费用(自动计算)
  • 就诊队列:
    • 显示待就诊患者列表
    • 患者状态:待就诊/就诊中/已就诊
    • 叫号功能(可选)

4. 健康档案管理模块(患者功能)

患者查看个人健康信息,体现系统完整性。

页面设计要点

页面标题:患者-健康档案页面

  • 个人信息卡片:
    • 基本信息:姓名、电话、身份证号
    • 过敏史、既往病史等重要信息
  • 就诊历史:
    • 按时间倒序列出历史就诊记录
    • 点击可查看详细病例信息
  • 家庭医生信息:
    • 显示负责的家庭医生
    • 医生联系方式 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试别敷衍!这3步让答辩不翻车

很多宝子觉得"功能能跑就行",结果答辩时评委一测试就出问题!我当初没测"药品库存为0时开药"的情况,导致医生能开具无库存药品,导师说"不符合医疗逻辑",当场扣分😫

1. 功能测试(必测3个模块)

重点测"核心功能",我整理了测试用例表:

(1)病例开具功能测试
测试场景操作步骤预期结果
药品库存不足医生开具库存为0的药品提示"XXX药品库存不足"
正常开具病例填写完整病例信息提交提示"病例添加成功",药品库存相应减少
(2)药品库存管理测试
测试场景输入数据预期结果
库存为负药品ID=1,库存=-5提示"库存不能为负数"
库存预警修改库存为5在药品列表中标红显示
(3)就诊挂号测试
测试场景操作步骤预期结果
新患者挂号输入新患者信息+选择科室生成就诊号,患者信息入库
重复挂号同一患者同一天挂同一科室提示"今日已挂号"

2. 兼容性测试

  • 浏览器测试:Chrome、Firefox、Edge
  • 分辨率测试:1920×1080、1366×768
  • 数据完整性测试:病例与药品、患者的关联关系

3. 测试报告要写好!答辩加分

把测试结果整理成"测试报告":

  • 问题总结:"药品库存扣减并发问题,已通过数据库事务解决"
  • 测试结论:"核心功能(病例管理、药品库存、就诊挂号)均通过测试"

六、答辩准备:3个加分小技巧

毕设不仅要做出来,还要说清楚!

  1. 演示流程要顺畅:按"患者挂号→医生就诊→开具处方→药品库存扣减"流程演示
  2. 重点讲"业务逻辑":比如"用Spring事务保证病例信息和药品库存的数据一致性"
  3. 准备常见问题:为什么选Spring Boot?数据安全怎么保障?

最后:毕设通关的小私心

以上就是基于Spring Boot的社区医院管理系统从0到1的全流程避坑干货!其实毕设没那么难,关键是抓住医疗业务核心流程。

需要完整源码(带详细注释)、数据库脚本部署文档的宝子,评论区留言,我会分享给大家!遇到Spring Boot配置或医疗业务逻辑问题也欢迎交流!

点赞收藏这篇指南,你的社区医院管理系统毕设一定能顺利通过! 🏥✨