1. 引言
1.1系统目标
本医药信息管理系统旨在实现药品信息、进货信息、销售信息、库存信息、处方信息以及员工信息等的全面管理,提高医药企业运营效率,优化业务流程,确保信息准确、及时、安全,为企业决策提供有力支持,同时提升服务质量,增强企业竞争力。
1.2适用范围
本系统适用于各类医药企业,包括制药厂、医药批发商、零售商以及医疗机构药房等,用于管理药品相关的各类信息和业务流程。
2. 系统概述
2.1系统架构
本系统采用分层架构设计,包括表现层、业务逻辑层、数据访问层和数据存储层。表现层负责与用户交互,展示数据和接收用户操作;业务逻辑层处理系统的核心业务逻辑;数据访问层负责与数据库进行交互,执行数据的增删改查操作;数据存储层使用关系型数据库(如MySQL)存储系统数据。
2.2功能模块
- 药品信息管理:包括药品基本信息的查询、添加、修改和删除,支持按名称、条形码等多种方式查询药品,以及对药品信息的批量导入导出。
- 进货管理:实现供货商信息管理、进货记录添加与查询、进货审核入库等功能,可生成进货报表,跟踪进货流程。
- 销售管理:处理药品销售业务,记录销售信息,支持销售退货,计算销售利润,生成销售报表,可按时间段、药品类别等查询销售数据。
- 库存管理:管理药品库存,包括库存查询、盘点、补货提醒、库存调整等,确保库存数据准确,优化库存结构。
- 处方管理:对处方药信息进行登记、查询、审核,确保处方药销售合规,记录患者用药信息,跟踪处方处理进度。
- 员工管理:管理员工信息,包括员工基本信息、权限分配、考勤记录等,实现员工信息的增删改查,设置不同员工角色和权限。
2.3系统流程
- 药品信息管理流程:用户在表现层输入药品查询条件,业务逻辑层调用数据访问层的查询方法从数据库获取药品信息,返回给表现层展示。添加药品时,用户在界面输入药品信息,业务逻辑层进行数据验证后调用数据访问层的添加方法将药品信息存入数据库。
- 进货管理流程:添加供货商时,业务逻辑层检查供货商是否已存在,不存在则调用数据访问层的添加方法存入数据库。进货记录添加后,可进行审核入库操作,更新库存信息。
- 销售管理流程:销售药品时,系统检查库存是否充足,充足则进行销售操作,记录销售信息,更新库存和销售报表。退货时,相应调整库存和销售数据。
- 库存管理流程:库存查询可按条件检索库存信息,盘点功能对比实际库存与系统库存,生成盘点报表,补货提醒根据库存阈值提示补货。
- 处方管理流程:处方药销售时,登记处方信息,审核通过后才可销售,处方信息记录患者和药品相关信息,可查询和跟踪处方状态。
- 员工管理流程:添加员工时,分配角色和权限,员工登录系统后根据权限访问相应功能模块,员工信息可修改和查询,考勤记录自动生成或手动录入。
2.4系统部署
本系统可部署在企业内部服务器或云端服务器上。服务器需安装Java运行环境、Tomcat服务器、MySQL数据库等软件。系统部署后,用户可通过浏览器访问系统,进行相关操作。
3. 数据库设计
3.1数据库概念结构设计(E-R图)
绘制系统的E-R图,展示药品、供货商、进货记录、销售记录、库存、处方、员工等实体之间的关系,包括一对一、一对多、多对多关系,体现系统中数据的逻辑结构。
3.2数据库表结构设计
根据E-R图设计数据库表结构,详细列出每个表的字段名称、数据类型、主键、外键、约束条件等信息。例如:
- 药品表(Drug):包含药品ID、名称、规格、条形码、生产厂家、生产日期、有效期、进货价格、销售价格、库存数量等字段。
- 供货商表(Gonghuoshang):包括供货商ID、名称、地址、联系方式等字段。
- 进货记录表(Jinhuo):记录进货ID、药品ID、供货商ID、进货数量、进货单价、进货日期、批次号等信息。
- 销售记录表(Sell):有销售ID、药品ID、销售数量、销售单价、销售日期、销售金额、收银员等字段。
- 库存表(Store):存储库存ID、药品ID、库存数量、库存位置、入库时间、出库时间等数据。
- 处方表(Rxdrug):包含处方ID、患者姓名、性别、年龄、药品ID、处方日期、用法用量等字段。
- 员工表(Manager):包括员工ID、姓名、性别、年龄、职位、登录账号、密码、权限等信息。
3.3数据库索引设计
为提高数据库查询性能,根据业务需求为频繁查询的字段建立合适的索引,如药品名称、条形码、供货商名称等字段,同时考虑索引的维护成本和对数据更新操作的影响。
3.4数据库存储过程与触发器设计(如果有)
如有需要,设计存储过程用于封装复杂的业务逻辑,如计算销售利润、生成报表等操作,提高系统性能和可维护性;设计触发器用于在数据发生特定变化时自动执行相关操作,如更新库存数量、记录操作日志等,确保数据的一致性和完整性。
4. 系统详细设计
4.1功能模块详细设计
- 药品信息管理模块
- 查询功能:用户在界面输入查询条件(如药品名称、条形码、生产厂家等),点击查询按钮后,系统调用DruginfoService中的QueryDrugService方法,根据查询条件构建查询语句,在数据库中查询药品信息,将结果封装成PageInfo对象返回给界面展示。
- 添加功能:用户在添加药品界面输入药品详细信息,点击添加按钮后,系统调用DruginfoService中的AddService方法,先检查药品名称和生产厂家是否已存在,不存在则将药品信息插入数据库。
- 修改功能:用户在修改药品界面修改药品信息后点击保存,系统调用DruginfoService中的UpdateDrugService方法,根据旧的药品名称和生产厂家查找并更新药品信息,若药品名称或生产厂家已更改,需再次检查唯一性。
- 删除功能:用户在药品列表选择要删除的药品,点击删除按钮后,系统调用DruginfoService中的DeleteService方法,根据药品名称和生产厂家从数据库中删除药品信息。
- 进货管理模块
- 供货商管理
- 添加供货商:在添加供货商界面输入供货商信息,点击添加后,JinhuoService中的AddGhsService方法检查供货商是否已存在,不存在则将其添加到数据库。
- 查询供货商:可查看所有供货商信息,调用JinhuoService中的GetAllGhsService方法从数据库获取供货商列表。
- 删除供货商:选择要删除的供货商,点击删除,JinhuoService中的DelGhsAndRecordsService方法先删除进货记录中该供货商的相关记录,再删除供货商信息;DelGhsCheckService方法用于在删除前检查该供货商是否还有未处理的进货记录。
- 进货记录管理
- 添加进货记录:在进货记录添加界面输入药品、供货商、进货数量、单价、批次号等信息,点击添加,JinhuoService中的AddJinhuoService方法将进货记录插入数据库。
- 查询进货记录:可按条件查询进货记录,JinhuoService中的QueryJFYService方法根据查询条件构建查询语句,获取进货记录列表并封装成PageInfo对象返回。
- 审核入库:点击审核入库按钮,JinhuoService中的CpshService方法处理审核操作,将进货记录添加到库存表,更新库存数量,若药品已存在则增加库存,不存在则添加新记录,审核完成后删除进货记录表中的数据。
- 供货商管理
- 销售管理模块
- 销售记录管理
- 查询销售记录:用户可按时间段、药品类别等条件查询销售记录,SellService中的GetRecordsService方法根据查询条件获取销售记录列表,封装成PageInfo对象返回,可选择分页显示,默认每页显示8条记录,同时支持倒序查看最新记录。
- 删除销售记录:在销售记录列表选择要删除的记录,点击删除,SellService中的DelRecordsService方法根据记录的关键信息从数据库中删除销售记录。
- 销售操作
- 药品销售:在销售界面选择药品,输入销售数量,点击销售按钮,SellService中的ProSellService方法检查库存是否充足,充足则进行销售操作,记录销售信息,更新库存数量和销售报表;若库存不足,提示用户。
- 销售退货:输入退货药品信息和数量,点击退货按钮,系统相应调整库存和销售数据,确保数据准确性。
- 报表生成
- 销售报表:可按日、月、年或自定义时间段生成销售报表,显示销售总额、销售数量、利润等信息,可导出报表为Excel或PDF格式,方便数据分析和存档。
- 利润计算:SellService中的GetMoneyInfo方法根据销售记录计算净利润,考虑进货价格和销售价格差异,按查询条件统计指定时间段内的利润。
- 销售记录管理
- 库存管理模块
- 库存查询:用户在库存查询界面输入查询条件(如药品名称、条形码、库存位置等),点击查询后,StoreService中的QueryStoreService方法根据条件从数据库获取库存信息,封装成PageInfo对象返回,支持分页显示,每页8条记录。
- 库存盘点:点击库存盘点按钮,系统生成库存盘点报表,显示实际库存与系统库存的差异,用户可根据盘点结果调整库存数量,确保库存数据准确。
- 补货提醒:系统定期检查库存数量,低于设定阈值时,通过界面提示或邮件通知管理员补货,阈值可根据药品销售频率和重要性设置,提高库存管理效率。
- 库存调整:当发生药品损坏、丢失或其他原因需要调整库存时,管理员在库存调整界面输入调整原因和数量,点击调整按钮,StoreService中的UpdateStoreService方法更新库存信息,记录调整日志,方便追溯。
- 处方管理模块
- 处方登记:在处方登记界面输入患者姓名、性别、年龄、药品信息、处方日期、用法用量等,点击登记,RxService中的AddRxPService方法将处方信息存入数据库,确保处方药销售合规。
- 处方查询:可按患者姓名、处方日期等条件查询处方信息,RxService中的QueryRxService方法根据查询条件获取处方列表,显示处方详细内容,支持模糊查询,方便跟踪处方处理进度。
- 处方审核:审核人员查看待审核处方,确认无误后点击审核通过,系统更新处方状态,允许销售处方药;审核不通过则注明原因,退回修改。
- 员工管理模块
- 员工信息管理
- 添加员工:在员工添加界面输入员工基本信息和权限,点击添加,ManagerService中的AddUser方法检查用户名是否已存在,不存在则将员工信息插入数据库。
- 查询员工:可按姓名、职位等条件查询员工信息,ManagerService中的QueryUserService方法根据条件获取员工列表,支持模糊查询,方便查找特定员工。
- 修改员工信息:在员工信息修改界面更新员工信息后点击保存,ManagerService中的相应方法更新数据库中员工信息,确保信息及时更新。
- 删除员工:选择要删除的员工,点击删除,ManagerService中的DelClerk方法从数据库中删除员工信息,同时处理相关权限和数据关联。
- 权限管理:系统预定义不同角色(如管理员、销售员、库管员等)及其权限,管理员在员工添加或编辑时分配角色,员工登录系统后,根据角色权限访问相应功能模块,确保数据安全和操作合规。
- 员工信息管理
4.2系统接口设计
- 用户接口:采用Web界面,使用HTML、CSS、JavaScript等技术实现,提供简洁、直观、易用的操作界面,包括药品信息管理界面、进货管理界面、销售管理界面、库存管理界面、处方管理界面、员工管理界面等,满足不同用户角色的操作需求。
- 外部接口
- 数据库接口:使用MyBatis框架实现与MySQL数据库的交互,定义数据访问接口(如DrugMapper、GonghuoshangMapper、JinhuoMapper、SellMapper、StoreMapper、RxpersonMapper、RxdrugMapper、ManagerMapper等),封装数据库操作,确保数据访问安全、高效。
- 打印接口:在销售模块,使用Java打印API实现打印销售小票功能,可定制小票格式,包括药店名称、地址、销售时间、商品明细、总价、支付方式等信息,方便顾客留存和财务核算。
4.3系统安全设计
- 用户认证与授权:用户登录系统时,输入用户名和密码,系统验证用户身份,根据用户角色分配相应权限,确保用户只能访问其授权的功能模块和数据,防止非法访问和数据泄露。
- 数据加密:对敏感数据(如用户密码、患者信息、药品进货价格等)进行加密存储,采用安全的加密算法(如MD5、SHA-256等),确保数据在数据库中的安全性,防止数据被窃取或篡改。
- 操作日志记录:系统记录所有用户操作日志,包括登录时间、操作内容、操作结果等,方便管理员跟踪系统使用情况和排查问题,同时作为审计依据,确保系统操作可追溯。
4.4系统性能设计
- 数据库优化:合理设计数据库表结构,建立适当索引,优化查询语句,定期进行数据库维护(如索引重建、数据备份等),提高数据库操作性能,确保系统响应速度。
- 缓存机制:对于频繁访问的数据(如药品基本信息、常用查询结果等),采用缓存技术(如Redis)进行缓存,减少数据库查询次数,提高系统性能,降低服务器负载。
- 代码优化:编写高效、简洁的Java代码,避免代码冗余和复杂逻辑,优化算法和数据结构,提高系统运行效率,确保系统在高并发情况下稳定运行。
4.5系统界面设计
- 界面布局:采用简洁、清晰的布局风格,各功能模块入口明确,操作流程顺畅,方便用户快速找到所需功能,提高工作效率。
- 色彩搭配:选择柔和、舒适的色彩方案,避免刺眼颜色,确保长时间操作不易疲劳,同时符合医药行业专业形象。
- 交互设计:提供友好的交互提示,如操作成功提示、错误信息提示、数据验证提示等,方便用户理解系统反馈,减少操作失误,提升用户体验。
5. 系统测试
5.1测试计划
制定详细的系统测试计划,包括测试目标、测试范围、测试方法、测试环境、测试进度安排等内容,确保系统测试全面、有序进行。
5.2测试用例
针对系统的各个功能模块,设计全面的测试用例,包括正常情况和异常情况的测试,覆盖各种输入数据和操作场景,确保系统在各种情况下的正确性和稳定性。例如:
- 药品信息管理测试用例
- 查询药品:输入不同的查询条件(如药品名称、条形码、生产厂家等),验证查询结果是否准确,是否支持模糊查询,分页显示是否正确。
- 添加药品:输入合法和非法的药品信息(如空值、超长字符等),验证添加操作是否成功,系统是否进行数据验证,重复添加相同药品是否提示错误。
- 修改药品:修改药品信息后,验证修改是否生效,修改后的信息是否正确保存,同时修改药品名称和生产厂家时,检查唯一性验证是否正常。
- 删除药品:选择不同的药品进行删除,验证删除操作是否成功,数据库中相应记录是否被删除,关联数据(如销售记录、库存记录等)是否处理正确。
- 进货管理测试用例
- 添加供货商:输入已存在和不存在的供货商信息,验证添加操作是否正确处理,重复添加时是否提示错误。
- 查询供货商:验证查询结果是否包含所有供货商信息,是否按预期排序显示。
- 删除供货商:先添加进货记录,再尝试删除该供货商,验证系统是否阻止删除或正确处理相关进货记录,无关联记录时删除是否成功。
- 添加进货记录:输入合法和非法的进货信息(如负数数量、无效日期等),验证添加操作是否成功,系统是否进行数据验证,进货价格和数量计算是否正确。
- 审核入库:添加进货记录后进行审核入库操作,验证库存是否正确更新,进货记录是否正确转移,审核失败时系统是否给出错误提示。
- 销售管理测试用例
- 查询销售记录:输入不同的查询条件(如时间段、药品类别等),验证查询结果是否准确,分页和排序功能是否正常。
- 删除销售记录:选择不同的销售记录进行删除,验证删除操作是否成功,相关统计数据(如销售总额、利润等)是否更新正确。
- 药品销售:在库存充足和不足的情况下进行销售操作,验证销售是否成功,库存数量是否正确更新,销售记录是否准确生成,同时测试销售数量输入的边界值(如最大允许销售数量、最小销售数量等)。
5. 部分功能展示