药品库房管理系统总报告书.docx
《药品库房管理系统总报告书.docx》由会员分享,可在线阅读,更多相关《药品库房管理系统总报告书.docx(52页珍藏版)》请在冰豆网上搜索。
药品库房管理系统总报告书
《药品库房管理系统报告书》
学院管理学院
专业电子商务
年级班别2013级1班
指导教师胡凤
学生姓名陈昌桐陈宏武吴明斌
吴孙德钟嘉成
2015年6月
一、需求分析
1、药品入库管理
药品库房从厂家进货,填写入库单,录入药品信息
2、药品库存管理
(1)库存药品管理
能对药品进行调价,并分别填写调价单;一种药品可能有多种规格,应分别存放,大的包装可以分装成小的规格,填写分装单;能对药品进行各项查询,包括现有入库查询、出库查询、退药查询、调价查询、报损查询、调拨查询等;还能对药品进行有效期管理,查询并统计过期药品的品种数和金额。
(2)药品盘点管理
定期盘点药品库存量,并能校对账目及库存的平衡关系,反映盘亏或盘盈的情况。
某种药品库存量=入库总量-调拨总量-销售总量-退药总量量-科室领药总数量-报损总数量;账目的金额=销售数量*(进货价-销售价)-报损量*进货价。
3、药品出库管理
药品出库主要有几个去向:
药品库房把药品发放到各个药房,填写调拨单;药品报损,填写报损单;药品库房把药品卖出,填写销售单;药品库房退货给生产厂家,填写退药单;药品库房接收科室的领药单,从而把药品发给科室。
二、概念结构设计
根据概念设计的步骤,先产生局部E-R图,然后再将局部E-R图合并成初步E-R图,最后进行优化,得到全局E-R图。
1.局部E-R图
根据药品库房管理系统的业务模块进行划分和设计局部E-R图,根据需求抽取实体、实体的属性和实体之间的联系。
(1)药品入库管理E-R图
在药品入库管理业务模块中,包括4个实体:
生产厂家、药品库房、药品、入库单。
其中,药品是由生产厂家生产的,他们之间是多对一的关系,同一个生产厂家可以生产多种药品;药品库房和生产厂家存在一对多的关系,一个药品库房可以从多个生产厂家进货;药品库房与药品是一对多的关系,同一个药品库房可以存放多种不同的药品;药品库房与入库单是一对多的关系,药品库房从生产厂家进货,然后填写入库单。
(2)药品库存管理E-R图
在药品库存管理业务模块中,包括药品、调价单、分装单和盘点4个实体。
药品与调价单、药品与报损单、药品与分装单、药品与盘点都是一对多的关系。
(3)药品出库管理E-R图
在药品入库管理业务模块中,包括8个实体:
药品、药品库房、调拨单、报损单、出库单、退药单、领药单、生产厂家。
2.全局E-R图
将各个局部E-R图汇集成一个整体的E-R图,消除冗余和冲突,进行优化后产生全局E-R图。
3.检查CDM
在创建的CDM(概念数据模型)的过程中,必须遵循一些基本准则。
例如,每个实体的名称和代码必须唯一,每个实体至少包含一个属性,每个联系至少连接一个实体等。
由于系统的复杂性,很可能会在设计过程中违背了这些准则,这就有必要随时对CDM的正确性进行检查,包括检查包、域、数据项、实体、实体属性、联系和关联。
操作的方法:
打开CDM,选择ToolsCheckModel菜单项,根据系统给出的错误和警告信息进行修改。
三、逻辑结构设计
1.自动生成的物理数据模型(PDM)
下图是由概念数据模型生成的物理数据模型。
2.关系模式
要将所有关系模式规范化为3NF,该系统的关系模式有:
生产厂家(厂家编号,厂家名称,厂家地址)
药品(药品编号,厂家编号,药品名称,处方药标志,规格,批号,批次,生产日期,有效日期)
入库单(入库单号,药品编号,入库量,进货价,入库日期)
调价单(调价单号,药品编号,调价前的价格,调价后的价格,调价日期)
分装单(分装单号,药品编号,分装后的规格,分装日期)
盘点(盘点编号,药品编号,库存量,金额,盘点日期)
调拨单(调拨单号,药品编号,调拨数量,药房地址,调拨日期)
领药单(领药单号,药品编号,领药数量,领药科室,领药日期)
报损单(报损单号,药品编号,进货价,报损数量,报损原因,报损日期)
退药单(退药单号,药品编号,退药原因,退药数量,厂家编号,退药日期)
销售单(销售单号,药品编号,销售数量,进货价,销售价,销售日期)
经检验,以上的关系模式都符合3NF了
四、物理结构设计
表名
字段名
字段类型
关键字
约束说明
生产厂家
厂家编号
6个字符
是
前2位为英文大写字母CJ,后4位为数字字符
厂家名称
30个字符
厂家地址
30个字符
药品
药品编号
6个字符
是
前2位为英文大写字母YP,后4位为数字字符
厂家编号
参照生产厂家表的厂家编号
药品名称
30个字符
处方药标志
2个字符
值只能取‘是‘或’不是‘
药品类别
30个字符
规格
15个字符
批号
10个字符
唯一,不允许空值
批次
10个字符
生产日期
日期
唯一,不允许空值
有效日期
日期
唯一,不允许空值
入库单
入库单号
6个字符
是
前2位为英文大写字母RK,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
入库量
整数
进货价
货币
大于0
入库日期
日期
是
默认为当前日期
调价单
调价单号
6个字符
是
前2位为英文大写字母TJ,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
调价前的价格
货币
调价后的价格
货币
调价日期
日期
是
默认为当前日期
分装单
分装单号
6个字符
是
前2位为英文大写字母FZ,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
分装后的规格
30个字符
分装日期
日期
是
默认为当前日期
盘点
盘点编号
6个字符
是
前2位为英文大写字母BD,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
库存量
整数
默认空值
金额
货币
默认空值
盘点日期
日期
是
默认是当前日期
调拨单
调拨单号
6个字符
是
前2位为英文大写字母DB,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
调拨数量
整数
药房地址
30个字符
调拨日期
日期
是
默认为当前日期
领药单
领药单号
6个字符
是
前2位为英文大写字母LY,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
领药数量
整数
领药科室
30个字符
领药日期
日期
是
默认为当前日期
报损单
报损单号
6个字符
是
前2位为英文大写字母BS,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
报损数量
整数
报损原因
50个字符
报损日期
日期
是
默认为当前日期
进货价
货币
大于0
退药单
退药单号
6个字符
前2位为英文大写字母TY,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
退药数量
整数
退药原因
50个字符
厂家编号
参照生产厂家表的厂家编号,允许空值
退药日期
日期
是
默认为当前日期
销售单
销售单号
6个字符
是
前2位为英文大写字母XS,后4位为数字字符
药品编号
参照药品表的药品编号,不允许空值
销售数量
整数
大于或等于0,允许空值
销售价
货币
大于0,不允许空值
销售日期
日期
是
默认是当前日期
进货价
货币
大于0
五、数据库实施
1.创建数据库
创建数据库药品库房管理系统,代码和截图如下:
createdatabase药品库房管理系统
on
(name=yaopinkf,
filename='F:
\yaopinkf.mdf',
size=10,
maxsize=50,
filegrowth=5)
logon
(name=yaopinkf_log,
filename='F:
\yaopinkf.ldf',
size=5MB,
maxsize=25MB,
filegrowth=5MB)
2.创建数据库表文件
在创建表之前,先创建模式YPKF,代码和截图如下:
createschemaYPKF
依次创建各个表,代码和截图如下:
createtableYPKF.生产厂家
(厂家编号char(6)primarykeycheck(厂家编号like'CJ[0-9][0-9][0-9][0-9]'),
厂家名称char(30),
厂家地址char(30))
createtableYPKF.药品
(药品编号char(6)primarykeycheck(药品编号like'YP[0-9][0-9][0-9][0-9]'),
厂家编号char(6)nullconstraintfactoryforeignkeyreferencesYPKF.生产厂家(厂家编号)ondeletesetnull,
药品名称char(30),
处方药标志char
(2)check(处方药标志='是'or处方药标志='不是'),
药品类别char(30),
规格char(15),
批号char(10)uniquenotnull,
批次char(10),
生产日期datetimeuniquenotnull,
有效日期datetimeuniquenotnull)
createtableYPKF.入库单
(入库单号char(6)check(入库单号like'RK[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_1foreignkeyreferencesYPKF.药品(药品编号),
入库量int,
进货价moneycheck(进货价>0),
入库日期datetimedefaultgetdate(),
primarykey(入库单号,入库日期))
createtableYPKF.调价单
(调价单号char(6)check(调价单号like'TJ[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_2foreignkeyreferencesYPKF.药品(药品编号),
调价前的价格money,
调价后的价格money,
调价日期datetimedefaultgetdate(),
primarykey(调价单号,调价日期))
createtableYPKF.分装单
(分装单号char(6)check(分装单号like'FZ[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_3foreignkeyreferencesYPKF.药品(药品编号),
分装后的规格char(30),
分装日期datetimedefaultgetdate(),
primarykey(分装单号,分装日期))
createtableYPKF.盘点
(盘点编号char(6)check(盘点编号like'PD[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_4foreignkeyreferencesYPKF.药品(药品编号),
库存量intdefaultnull,
金额moneydefaultnull,
盘点日期datetimedefaultgetdate(),
primarykey(盘点编号,盘点日期))
createtableYPKF.调拨单
(调拨单号char(6)check(调拨单号like'DB[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_5foreignkeyreferencesYPKF.药品(药品编号),
调拨数量int,
药房地址char(30),
调拨日期datetimedefaultgetdate(),
primarykey(调拨单号,调拨日期))
createtableYPKF.领药单
(领药单号char(6)check(领药单号like'LY[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_6foreignkeyreferencesYPKF.药品(药品编号),
领药数量int,
领药科室char(30),
领药日期datetimedefaultgetdate(),
primarykey(领药单号,领药日期))
createtableYPKF.报损单
(报损单号char(6)check(报损单号like'BS[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_7foreignkeyreferencesYPKF.药品(药品编号),
报损数量int,
进货价moneycheck(进货价>0),
报损原因char(50),
报损日期datetimedefaultgetdate(),
primarykey(报损单号,报损日期))
createtableYPKF.退药单
(退药单号char(6)check(退药单号like'TY[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_8foreignkeyreferencesYPKF.药品(药品编号),
退药数量int,
退药原因char(50),
厂家编号char(6)nullconstraintfactory_0foreignkeyreferencesYPKF.生产厂家(厂家编号)ondeletesetnull,
退药日期datetimedefaultgetdate(),
primarykey(退药单号,退药日期))
createtableYPKF.销售单
(销售单号char(6)check(销售单号like'XS[0-9][0-9][0-9][0-9]'),
药品编号char(6)notnullconstraintdrug_9foreignkeyreferencesYPKF.药品(药品编号),
销售数量intnullcheck(销售数量>=0),
进货价moneycheck(进货价>0),
销售价moneynotnullcheck(销售价>0),
销售日期datetimedefaultgetdate(),
primarykey(销售单号,销售日期))
3.插入记录
insertintoYPKF.生产厂家values('CJ0001','三九医药股份有限公司','上海')
insertintoYPKF.生产厂家values('CJ0002','白云药业','广州')
insertintoYPKF.生产厂家values('CJ0003','么么哒有限公司','深圳')
insertintoYPKF.药品values('YP0001','CJ0001','999牌感冒灵颗粒','是','普通药品','10g*9包','9990001','0001','2015-2-13','2017-2-13')
insertintoYPKF.药品values('YP0002','CJ0003','天舒胶囊','是','院内制药,精神药品','0.34g*60粒','mmd0002','0002','2014-6-25','2015-6-25')
insertintoYPKF.药品values('YP0003','CJ0002','格列吡嗪控释片','是','贵重药品,自费药品','5mg*14片','by0006','0001','2014-12-27','2015-12-27')
insertintoYPKF.入库单values('RK0001','YP0003',60,500,'2015-1-1')
insertintoYPKF.入库单values('RK0002','YP0001',100,15,'2015-2-27')
insertintoYPKF.入库单values('RK0003','YP0002',45,150,'2015-2-14')
insertintoYPKF.入库单values('RK0004','YP0001',200,19,'2015-4-6')
insertintoYPKF.入库单values('RK0005','YP0003',60,500,'2015-5-18')
insertintoYPKF.入库单values('RK0006','YP0003',50,490,'2015-2-27')
insertintoYPKF.入库单values('RK0007','YP0002',70,130,'2015-3-15')
insertintoYPKF.入库单values('RK0008','YP0001',160,14,'2015-4-20')
insertintoYPKF.入库单values('RK0009','YP0002',80,170,'2015-5-1')
insertintoYPKF.入库单values('RK0010','YP0001',90,12,'2015-6-23')
insertintoYPKF.调价单values('TJ0001','YP0003',150,155,'2015-4-23')
insertintoYPKF.分装单values('FZ0001','YP0001','10g*3包','2015-5-20')
insertintoYPKF.盘点(盘点编号,药品编号,盘点日期)values('PD0001','YP0001','2015-6-25')
insertintoYPKF.盘点(盘点编号,药品编号,盘点日期)values('PD0002','YP0002','2015-6-25')
insertintoYPKF.盘点(盘点编号,药品编号,盘点日期)values('PD0003','YP0003','2015-6-25')
insertintoYPKF.调拨单values('DB0001','YP0001',15,'2号药房','2015-4-20')
insertintoYPKF.调拨单values('DB0002','YP0002',15,'1号药房','2015-4-20')
insertintoYPKF.调拨单values('DB0003','YP0003',15,'2号药房','2015-4-20')
insertintoYPKF.领药单values('LY0001','YP0001',50,'305','2015-5-20')
insertintoYPKF.领药单values('LY0002','YP0001',60,'508','2015-4-17')
insertintoYPKF.领药单values('LY0003','YP0002',20,'601','2015-3-26')
insertintoYPKF.领药单values('LY0004','YP0003',53,'111','2015-6-24')
insertintoYPKF.报损单values('BS0001','YP0001',10,14,'药品霉变','2015-5-26')
insertintoYPKF.报损单values('BS0002','YP0003',10,500,'药品裂开','2015-6-11')
insertintoYPKF.报损单values('BS0003','YP0002',15,130,'药品霉变','2015-6-20')
insertintoYPKF.退药单values('TY0001','YP0001',12,'用药后出现不良反应','CJ0001','2015-4-20')
insertintoYPKF.退药单values('TY0002','YP0003',10,'患者认为医院售药价高','CJ0002','2015-5-23')
insertintoYPKF.退药单values('TY0003','YP0002',15,'用药后出现不良反应','CJ0003','2015-4-20')
insertintoYPKF.销售单values('XS0001','YP0001',20,14,25,'2015-4-23')
insertintoYPKF.销售单values('XS0002','YP0001',20,19,30,'2015-4-24')
insertintoYPKF.销售单values('XS0003','YP0001',25,15,28,'2015-4-26')
insertintoYPKF.销售单values('XS0004','YP0002',15,130,200,'2015-4-23')
insertintoYPKF.销售单values('XS0005','YP0002',15,150,210,'2015-4-24')
insertintoYPKF.销售单values('XS0006','YP0002',15,170,240,'2015-4-26')
insertintoYPKF.销售单values('XS0007','YP0003',10,500,700,'2015-4-23')
insertintoYPKF.销售单values('XS0008','YP0003',10,500,680,'2015-4-23')
insertintoYPKF.销售单values('XS0009','YP0003',10,490,690,'2015-4-23')
4.添加视图
视图入库明细
createviewYPKF.入库明细(入库单号,药品编号,入库量,进货价,入库日期,生产厂家,药品名称,处方药标志,药品类别,规格,批号,批次)asselect入库单号,入库单.药品编号,入库量,进货价,入库日期,厂家编号,药品名称,处方药标志,药品类别,规格,批号,批次fromYPK