毕业设计实战:基于Spring Boot的医药管理系统设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

78 阅读15分钟

毕业设计实战:基于Spring Boot的医药管理系统设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

谁懂啊!当初做医药管理系统毕设时,光药品表和销售表的关联就卡了3天——一开始没设外键,查某药品的销售记录时数据全乱套,导师看了直接让我“重画数据库E-R图”😫 后来踩遍无数坑才摸出一套高效落地流程,今天把需求分析、技术选型、功能实现到测试的细节全说透,宝子们不用再熬夜改代码,轻松搞定毕设!

一、先搞懂“医药管理系统要啥”!需求分析别瞎蒙

刚开始我跳过需求分析就写代码,花两周加了个“患者问诊互动功能”,结果导师一句“核心是药品、进货、销售管理,不是问诊服务”直接打回重改!后来才明白,需求分析得先抓准“谁用系统、要干啥”,这步做对,后面少走90%弯路。

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

医药管理系统就两类核心用户:管理员员工(别加“患者角色”!我当初加了后,权限逻辑混乱,员工连基础药品查询都卡壳,最后砍掉才顺畅):

  • 管理员端(必做功能):
    • 药品管理:增删改查药品信息(含传图/设库存/改进价售价)、上下架药品(用不同颜色标“上架/下架”,直观清晰)
    • 员工管理:查看员工列表、新增员工、重置密码、模糊查询(支持按姓名/手机号搜,我当初没加,查员工要翻几十页)
    • 供应商管理:维护供应商信息、设置信用等级(用下拉框选“一级/二级/三级”,别让管理员手动输,效率翻倍)
    • 销售管理:查看销售记录、生成销售报表(支持柱状图/折线图切换,答辩时超加分)
  • 员工端(核心功能):
    • 进货管理:新增药品进货、按进货编号查询记录(含进货数量/时间,避免漏记)
    • 销售管理:提交药品销售、查看个人销售数据(别漏“销售数量校验”,我当初没加,导致超库存销售被导师批评)
    • 药品查看:按药品功效/所治疾病筛选、看库存和售价(按“库存递减”排序,方便优先卖临期药品)

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

  • 别光靠“空想”!找2个同学模拟管理员和员工提意见:比如有同学说“想快速查低库存药品”,我才加了“库存预警功能”,比瞎加“患者问诊”实用多了
  • 一定要画用例图!用DrawIO画简单版,标清“管理员-审核供应商”“员工-提交销售”,跟导师汇报时,比光说“我要做XX功能”直观10倍(当初没画,导师听20分钟还没get到逻辑)
  • 写“需求规格说明书”!不用复杂,把“功能描述、约束条件”写清楚(比如“药品库存不能为负”“销售数量不能为0”),编码时对着做,不会跑偏

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

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

  • 技术可行性:Spring Boot、Java、MySQL都是课堂学过的,图书馆有《Spring Boot实战》《MySQL从入门到精通》,遇到问题能查资料(别选Vue3!我当初想试,环境配置卡了一周,换回Vue2才顺利)
  • 经济可行性:所有工具全免费!IDEA(社区版)、MySQL、Tomcat官网直接下,不用花钱买版权,答辩时说“开发成本为0”,导师会觉得你懂成本控制
  • 操作可行性:界面用简洁布局,按钮位置参考药店管理软件,我找系里药店实习的同学测试,3分钟就学会进货和销售,导师直接认可

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

刚开始我跟风用Spring Boot+Vue3+Redis,结果“药品库存缓存”卡了5天——Redis的key-value逻辑不熟,库存数据总加载失败😫 后来换成Spring Boot+Vue2+MySQL+Tomcat9,新手友好度拉满,调试效率翻两倍!

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

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

技术工具为啥选它避坑提醒!(重点!)
Spring Boot比SSM配置简单,自带依赖管理别用3.x版本!2.7.x就行,3.x和Vue2兼容性差,会报“接口请求错误”
MySQL 8.0占内存小,存药品、供应商数据足够用安装时设“utf8mb4”编码!我当初用默认编码,药品名称含特殊符号乱码,查2小时才解决
Tomcat 9.0稳定!和Spring Boot、Vue适配最好别用Tomcat 10!会出现“Servlet API包名变更”,答辩时崩了就完了
Vue 2文档丰富,新手易上手,组件生态成熟别用Vue CLI 5!用4.x版本,5.x创建项目时依赖加载慢,还容易报错

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

很多宝子卡在“环境配置”,跟着步骤来超简单,我当初一次成功:

  1. 装JDK 1.8:记路径(比如D:\Java\jdk1.8.0_301),配置“JAVA_HOME”别错,不然IDEA认不到
  2. 装IDEA(社区版):选“Community Edition”,免费够用,自带Spring Boot插件
  3. 装MySQL 8.0:用Navicat管理(可视化工具超方便,新建表直接选字段类型,比命令行快10倍)
  4. 配Vue项目:用Vue CLI 4创建项目,勾“Router”“Vuex”,启动看到“Compiled successfully”就是成功

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

用DrawIO画三层架构图(像论文里的“系统架构图”),标清“表现层-业务层-数据访问层”:比如员工点“提交销售”→Vue页面传请求→Spring Boot Controller接请求→Service校验库存→Mapper存数据。去年答辩时,评委特意夸这图“逻辑清晰”,比光说“我用了Spring Boot”专业多了!

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

这部分是毕设的“核心骨架”,我当初没关联“药品表”和“供应商表”,查“某供应商的所有药品”要写3层嵌套SQL,调试到凌晨1点😫 后来按“实体-属性-关系”设计,终于理清了。

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

先确定“实体”(药品、供应商、员工),再想“属性”,别漏关键字段!我整理了必做的6张表,直接照着画ER图:

  • 药品表(yaopin):id(主键)、yaopin_name(名称)、yaopin_photo(图片路径)、yaopin_kucun_number(库存)、yaopin_jinjia_money(进价)、yaopin_xiaoshou_money(售价)
  • 供应商表(gongyingshang):id(主键)、gongyingshang_name(名称)、gongyingshang_xinyongdengji_types(信用等级)、gongyingshang_content(详情)
  • 销售表(xiaoshou):id(主键)、xiaoshou_uuid_number(销售编号)、yaopin_id(关联药品)、yuangong_id(关联员工)、xiaoshou_shuliang_number(销售数量)

画ER图用Visio或亿图,记住3个规则:

  1. 矩形代表“实体”(比如“药品”“供应商”)
  2. 椭圆代表“属性”(比如药品的“名称”“库存”)
  3. 菱形代表“关系”(比如“员工-销售-药品”是多对多,一个员工能卖多件药品,一件药品能被多个员工卖) 避坑提醒:别把“药品图片、供应商资质”存数据库!我当初存二进制导致数据库崩溃,改成存“文件路径”(比如/static/photo/yaopin1.jpg)才对。

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

ER图画好后,转成实际表,字段类型和约束别瞎设!比如“药品价格”用DECIMAL(10,2),别用INT,不然没法存“39.99元”;“销售编号”设UNIQUE约束,避免重复。

给宝子们贴“药品表”的建表SQL,复制到Navicat就能用:

CREATE TABLE `yaopin` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '药品ID',
  `gongyingshang_id` INT DEFAULT NULL COMMENT '关联供应商ID',
  `yaopin_name` VARCHAR(200) NOT NULL COMMENT '药品名称',
  `yaopin_photo` VARCHAR(200) DEFAULT NULL COMMENT '药品图片路径',
  `yaopin_kucun_number` INT DEFAULT NULL COMMENT '库存',
  `yaopin_jinjia_money` DECIMAL(10,2) DEFAULT NULL COMMENT '进价',
  `yaopin_xiaoshou_money` DECIMAL(10,2) DEFAULT NULL COMMENT '售价',
  `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `fk_gongyingshang` (`gongyingshang_id`), -- 外键关联供应商表
  UNIQUE KEY `uk_yaopin_name` (`yaopin_name`) -- 药品名称唯一
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药品表';

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

建完表一定要测关联!比如在“销售表”插数据(员工ID=1,药品ID=1),用JOIN查询:

SELECT y.yuangong_name, p.yaopin_name, s.xiaoshou_shuliang_number, s.xiaoshou_time
FROM xiaoshou s
JOIN yuangong y ON s.yuangong_id = y.id
JOIN yaopin p ON s.yaopin_id = p.id
WHERE s.id = 1;

如果能查出“员工名+药品名+销售数量+销售时间”,说明关联没问题;如果报错“Unknown column”,大概率是外键没设对,赶紧检查表结构。

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

不用做所有功能!先搞定3个核心模块,答辩时足够出彩。每个模块我都附关键操作逻辑和页面设计要点,宝子们直接套就行。

1. 管理员端:药品管理模块(必做!)

这是医药系统的核心功能,实现“新增药品、管理库存”,重点说“药品图片上传”和“库存校验”——别漏这两步,我当初就是这里踩了大坑!

(1)关键操作逻辑
  1. 新增药品时,先校验药品名称是否重复(同一系统不能有同名药品);
  2. 上传药品图片时,限制格式(仅JPG/PNG)和大小(≤5MB),避免无效文件占用空间;
  3. 调整库存时,校验“库存不能为负”,比如减少库存时,若输入数量大于现有库存,提示“库存不足”。
(2)页面设计要点(Vue)

页面标题:管理员-药品管理页面
(插入图片位置:此处放“药品管理页面截图”,需包含以下元素)

  • 筛选条件:药品名称模糊查、供应商下拉选、库存区间筛选(比如“0-50/50-100/100+”)
  • 药品列表表格:列名“药品名称、供应商、库存、进价、售价、操作”,库存低于10时标红色(预警)
  • 操作按钮:“查看详情”“修改”“删除”“增加库存”“减少库存”
  • 新增药品弹窗:含药品名称输入框、供应商下拉、图片上传框、库存/进价/售价输入框(标红必填项)
(3)避坑提醒
  • 药品售价不能低于进价!加校验逻辑:
    if (yaopin.getXiaoshouMoney().compareTo(yaopin.getJinjiaMoney()) < 0) {
        return Result.error("售价不能低于进价!");
    }
    
  • 记录库存变更日志!方便追溯(需新增日志表):
    StockLog log = new StockLog();
    log.setYaopinId(yaopinId);
    log.setOperateType("增加库存");
    log.setOperateNumber(number);
    log.setOperateTime(new Date());
    stockLogService.save(log);
    

2. 员工端:销售管理模块(核心需求!)

员工用系统的核心是“卖药品”,流程别复杂:选药品→填数量→提交销售,我当初加“会员折扣”,代码量翻倍,其实“基础销售+库存同步”更实用。

(1)关键操作逻辑
  1. 选择药品时,仅显示“上架且库存>0”的药品(避免卖下架/无库存药品);
  2. 输入销售数量后,自动计算“销售金额=数量×售价”,无需手动计算;
  3. 提交销售前,二次校验库存,若库存不足,提示“库存仅剩XX件,请调整数量”;
  4. 销售成功后,自动扣减药品库存,并生成唯一销售编号(格式:XS+时间戳+随机数)。
(2)页面设计要点(Vue)

页面标题:员工-销售提交页面
(插入图片位置:此处放“销售提交页面截图”,需包含以下元素)

  • 药品选择区:下拉选药品(仅显有效药品)、自动带出“当前库存”“售价”
  • 销售信息区:数量输入框(默认1,最大为当前库存)、销售金额(自动计算,不可改)
  • 按钮:“提交销售”(绿色btn-success)和“重置”(灰色btn-default)
  • 销售记录列表:提交后下方显最近3条销售记录,含销售编号、药品名、数量、金额
(3)避坑提醒
  • 防止重复提交!加防抖处理:
    submitSale() {
      if (this.isSubmitting) return;
      this.isSubmitting = true;
      // 提交逻辑...
      this.isSubmitting = false;
    }
    
  • 销售编号唯一!用工具类生成:
    public static String generateSaleNo() {
      return "XS" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + (int)(Math.random()*1000);
    }
    

3. 管理员端:销售报表模块(答辩亮点!)

这个功能最能体现“管理属性”,导师超爱问!核心是“统计药品销售数据”,别漏“图表展示”,不然数据不够直观。

页面设计要点

页面标题:管理员-销售报表页面
(插入图片位置:此处放“销售报表页面截图”,需包含以下元素)

  • 筛选条件:时间范围(近7天/近30天/自定义)、药品类型下拉
  • 数据图表区:左侧柱状图(显每日销售总量)、右侧折线图(显热门药品销售趋势)
  • 报表表格区:列名“药品名称、销售数量、销售金额、占比”(占比=该药品金额/总金额)
  • 操作按钮:“导出Excel”“切换图表类型”(柱状图/折线图/饼图)

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

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

很多宝子觉得“功能能跑就行”,结果答辩时评委一测就出问题!我当初没测“超库存销售”,导致员工能卖10件但库存只剩5件,导师说“不符合药店管理逻辑”,当场扣分😫 测试一定要针对性做!

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

别全测!重点测“核心功能”,我整理了测试用例表,直接填结果:

(1)销售提交测试(表1:销售提交测试用例)
测试场景操作步骤预期结果实际结果测试结论
库存不足选库存5的药品→填数量10→提交提示“库存仅剩5件,请调整数量!”
数量为0选药品→填数量0→提交提示“销售数量不能为0!”
正常销售选库存20的药品→填数量2→提交提示“销售成功!”,生成销售编号,库存剩18
(2)药品新增测试(表2:药品新增测试用例)
测试场景输入数据预期结果实际结果测试结论
图片格式错误药品名:感冒灵→图片:GIF→提交提示“仅支持JPG/PNG格式图片!”
售价低于进价药品名:退烧药→进价10元→售价8元→提交提示“售价不能低于进价!”
正常新增药品名:止咳糖浆→图片:JPG→库存50→提交提示“新增成功!”,列表显该药品
(3)管理员登录测试(表3:管理员登录测试用例)
测试场景操作步骤预期结果实际结果测试结论
密码错误账号:admin→密码:123456(正确123)→登录提示“账号或密码不正确!”
未填账号账号:空→密码:123→登录提示“请输入账号!”
正常登录账号:admin→密码:123→登录登录成功,跳管理员首页

2. 兼容性测试(容易忽略的点)

别只在自己电脑测!答辩时评委可能用不同浏览器,我当初没测IE,结果销售报表图表错乱,赶紧改CSS才好:

  • 浏览器测试:Chrome、Firefox、Edge、IE11(重点测IE,兼容性最差)
  • 分辨率测试:1920×1080、1366×768(别让页面出现横向滚动条)

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

把测试结果整理成“测试报告”,含“目的、范围、用例、结果、问题总结”,导师会觉得你“做事严谨”。比如:

  • 问题总结:“IE浏览器下销售报表图表错乱,用兼容性CSS修复;未登录能访问销售页,加拦截器控制”
  • 测试结论:“核心功能(药品管理、销售提交、登录)均通过测试,无严重bug;兼容性问题已修复,系统可正常用”

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

毕设不仅要做出来,还要说清楚!我当初准备了这3点,导师直接给“良好”:

  1. 演示流程要顺畅:提前录演示视频(怕系统崩),按“管理员新增药品→员工提交销售→管理员看报表”的流程来,别跳步
  2. 重点讲“你解决了啥问题”:比如“一开始药品图片存数据库加载慢,改成存路径后,速度提升70%”,比光说“我用了Spring Boot”有亮点
  3. 准备常见问题:导师大概率问“为啥选MySQL不选Oracle”“药店人多怎么优化”,提前答:“MySQL轻量适合中小型药店;人多就加Redis缓存热门药品,减数据库压力”

最后:毕设通关的小私心

以上就是基于Spring Boot的医药管理系统从0到1的避坑干货!毕设没那么难,关键是找对方法,别瞎做复杂功能。

需要核心源码(带注释,直接能跑)、数据库脚本(含测试数据)、ER图模板的宝子,评论区扣“医药管理系统”,我私发你;卡在某个模块(比如药品新增、销售提交),也可以留言,我看到必回!

点赞收藏这篇,下次找流程不迷路~祝宝子们毕设顺利,轻松毕业!😘