1. 项目背景与需求分析
药品管理系统是医疗机构和药店日常运营中不可或缺的核心业务系统。随着医药行业信息化建设的不断深入,传统的手工记录和Excel管理方式已经无法满足现代药品管理的需求。一个完善的药品管理系统需要解决以下几个核心痛点:
首先,药品信息管理混乱的问题。在传统管理模式下,药品的基本信息(如名称、规格、生产厂家、批号等)、库存数量、有效期等关键数据分散在不同表格中,难以实现统一管理和实时更新。我曾在一家社区医院见到药剂师需要同时翻看3个不同的Excel文件才能确认某药品的完整信息,效率极低且容易出错。
其次,库存管理缺乏预警机制。药品过期和短缺是医药机构面临的常见问题。没有系统化的预警功能,工作人员难以及时发现近效期药品或库存不足的品种。根据中国药学会的统计,约23%的医疗机构曾因库存管理不善导致药品过期报废。
第三,业务流程不规范。从采购入库到处方发药,涉及多个环节和岗位,手工操作容易出现差错。某三甲医院的调研数据显示,引入信息化系统后,发药差错率从0.15%降至0.02%。
针对这些痛点,本系统设计目标包括:
- 实现药品基础信息的数字化管理
- 建立完善的库存预警机制(低库存、近效期)
- 规范采购、入库、处方、发药等核心业务流程
- 提供多维度的数据统计和分析功能
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术选型与开发环境
本系统采用Python作为主要开发语言,具体技术栈如下:
后端技术:
- 语言:Python 3.8+
- Web框架:Django 3.2(选择理由:自带ORM、Admin后台、完善的文档和社区支持)
- 数据库:MySQL 5.7(关系型数据库适合处理药品的复杂关联数据)
- 缓存:Redis(用于高频访问的药品目录缓存)
前端技术:
- 基础框架:HTML5 + CSS3 + JavaScript
- UI库:Bootstrap 5(响应式设计适配不同设备)
- 图表库:ECharts(用于数据可视化展示)
开发工具:
- IDE:PyCharm Professional(对Django有很好的支持)
- 版本控制:Git + GitHub
- 接口测试:Postman
提示:Django框架的选择特别考虑了毕业设计的实际情况。相比Flask等微框架,Django自带的管理后台(Admin)可以快速构建基础CRUD功能,让学生把更多精力放在业务逻辑的实现上。
2.2 系统模块划分
系统采用经典的MVC架构,主要功能模块包括:
-
基础信息管理模块
- 药品信息管理(分类、规格、厂家等)
- 供应商管理
- 员工账号管理
-
库存管理模块
- 入库管理(采购入库、退货入库)
- 出库管理(处方发药、报损出库)
- 库存盘点
- 库存预警(低库存、近效期)
-
业务处理模块
- 处方管理
- 发药管理
- 退药处理
-
统计报表模块
- 药品销量统计
- 库存周转分析
- 效期预警报表
2.3 数据库设计
核心表结构设计如下(部分):
药品信息表(medicine)
sql复制CREATE TABLE `medicine` (
`id` int NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL COMMENT '药品编码',
`name` varchar(100) NOT NULL COMMENT '通用名称',
`spec` varchar(50) NOT NULL COMMENT '规格',
`unit` varchar(10) NOT NULL COMMENT '单位',
`manufacturer` varchar(200) DEFAULT NULL COMMENT '生产厂家',
`category_id` int DEFAULT NULL COMMENT '分类ID',
`price` decimal(10,2) NOT NULL COMMENT '单价',
`stock` int NOT NULL DEFAULT '0' COMMENT '库存数量',
`warning_stock` int DEFAULT NULL COMMENT '库存预警值',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态(1正常 0停用)',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
库存流水表(stock_record)
sql复制CREATE TABLE `stock_record` (
`id` int NOT NULL AUTO_INCREMENT,
`medicine_id` int NOT NULL COMMENT '药品ID',
`batch_number` varchar(50) NOT NULL COMMENT '批号',
`production_date` date NOT NULL COMMENT '生产日期',
`expiry_date` date NO
