医院药品进销存系统

目 录

一、概述 . ................................................................. 错误!未定义书签。 1.1 课程设计的目的 ........................................ 错误!未定义书签。 1.2 课程设计的内容 ........................................ 错误!未定义书签。 1.3 课程设计的要求 ........................................ 错误!未定义书签。 二、需求分析.......................................................... 错误!未定义书签。 2.1 系统需求 .................................................... 错误!未定义书签。 2.2 数据字典 .................................................... 错误!未定义书签。 三、系统总体设计 ................................................. 错误!未定义书签。 3.1系统总体设计思路 ..................................... 错误!未定义书签。 3.2 概念模型设计 ............................................ 错误!未定义书签。 3.2.1 局部E-R 图 ....................................... 错误!未定义书签。 3.2.2 全局E-R 图 ....................................... 错误!未定义书签。 3.3 逻辑结构设计 ............................................ 错误!未定义书签。 3.4 数据库建立实施 ........................................ 错误!未定义书签。 3.4.1 建立数据库 ....................................... 错误!未定义书签。 3.4.2 建立关系表 ....................................... 错误!未定义书签。 四、系统实现.......................................................... 错误!未定义书签。 五、系统评价.......................................................... 错误!未定义书签。 六、课程设计心得、总结 ..................................... 错误!未定义书签。 参考文献: . ............................................................. 错误!未定义书签。

一、概述

1.1课程设计的目的

随着互联网的发展,利用网络技术来实现“无纸办公”这个概念已经深入人心,医药管理系统作为医院信息化建设的一个重要平台在完成各种医药资源的合理统计与分配,互联网访问,医院管理,电子设备等方面面发挥了重要的作用。但是现在十分缺少类似的能够满足医院需求的医药进销存管理系统,为规范医院的医药进存销管理和数据统计和分析,在较小的代价下满足用户信息需求,设计了这个医药进存销管理系统。

1.2课程设计的内容

(1)主要的数据表

药品分类代码表,药品库存表,供货商信息表,采购信息表等等。 (2)主要功能模块

1) 新药品的入库。

2) 过期药品的出库登记、处理记录。 3) 药品库存检索。 4) 供货商信息检索。 5) 药品采购记录管理。 6) 药品用药说明信息管理。 7) 输出相应的数据报表。

8) 具有数据备份和数据恢复功能。

1.3课程设计的要求

具体项目内容去医院进行调研,药品编码也应参考国家统一编码方法。

二、需求分析 2.1 系统需求

目前中小型药店的营业规模不断的扩大,药品的数量和种类不断增加。对于许多仍处于人工管理阶段的药店来说 管理也越来越复杂。如果以药店工作人员的增加来实现药品的管理 虽然能使工作变得方便起来 但是这样带来更大的经济开销 对于中小型药店来说要解决实际问题并不是很合适。开发药品进销存

管理系统可以很大程度上方便管理人员对药品的管理 实现药品管理的高效化和统一化。为便于管理的方便性和可行性。根据现阶段的应用需求的开发目标设计药品进销存数据库管理系统。实现药品采购 库存和销售管理的功能 完成对药品从采购到销售的流水作业的数据管理功能。

根据市场的需求,要求系统具有以下功能: 1)新药品的入库。

2)过期药品的出库登记、处理记录。 3)药品库存检索。 4)供货商信息检索。 5)药品采购记录管理。 6)药品用药说明信息管理。 7)输出相应的数据报表。

8)具有数据备份和数据恢复功能。

系统主要为登陆,登陆后可以浏览,查询,添加,删除药品信息外还可以对销售记录进行浏览,删除,添加,修改。本系统是根据中小企业的实际需求而开发的,完全能够实现药品入库、销售管理,通过本系统可以达到以下目标:

❑ ❑ ❑ ❑ ❑

系统运行稳定,安全可靠。 界面设计美观,人机交互界面友好。

信息查询灵活、方便、快捷、准确,数据存储安全可靠。 强大的报表预览、打印功能。 信息安全保密。

开发及运行环境

硬件要求

CPU :300MHz 以上的处理器 内存:128MB ,推荐256MB 硬盘:150MB 以上剩余空间

显示像素:最低800*600,最佳效果1024*768 软件要求

操作系统:Windows2000/NT/XP/Vista。

数据库:SQL Server2000。

2.2数据字典 2.2.1数据项

数据项编号 Dl-1 Dl-2 Dl-3 Dl-4 Dl-5 Dl-6 Dl-7 Dl-8 Dl-9 Dl-10 Dl-11 Dl-12 Dl-13 Dl-14 Dl-15 Dl-16 Dl-17 Dl-18 Dl-19 Dl-20 Dl-21 Dl-22

数据项名 Supnumber Supname Supadress Supphone Gsname Gkind Gtype Gprice Gshelf Empnumber Empkind Empname Hounumer Houkind Houaddr Buynumber Buydate Buyliang

数据项含义 供应商编号 供应商名称 供应商地址 供应商电话 药品名称 药品分类 药品剂型 药品单价 药品保质期 职员编号 职员类别 职员姓名 仓库编号 仓库类别 仓库地址 采购单编号 采购日期 采购量

与其他数据项关系

类型 varchar(10) varchar(30) varchar(30) varchar(20) varchar(20) varchar(20) varchar(20) float date varchar(10) varchar(10) varchar(10) varchar(10) varchar(10) varchar(20) varchar(10) date int

varchar(10) int date varchar(10)

Sendnumber 发货单编号 Sendliang Senddate

发货量 发货日期

Lostnumber 报损单编号

Dl-24 Dl-25 Dl-26 Dl-27 Dl-28 Dl-29 Dl-30 Dl-31 Dl-32 Dl-33 Dl-34 Dl-35 Dl-36 Dl-37 Dl-38 Dl-39 Dl-40 Dl-41 Dl-42 Dl-43 Dl-44 Dl-45 Dl-46 Dl-47 Dl-48 Dl-49 Dl-50 Dl-51

Lostliang Swnumber Swliang Jcnumber Jcliang

报损量 实物清单编号 实物数量 盘查记录单编号 记录量

int

varchar(10) int

varchar(10) int

varchar(10) int

varchar(10) date int

varchar(10) date int

varchar(10) varchar(10) varchar(2) varchar(20) varchar(10) date int

varchar(10) varchar(30) date int

varchar(10) int

varchar(30) varchar(10)

Pancnumber 盘存单编号 Pancliang Dynumber Dydate Dyliang

盘存实际量 订药单编号 订药日期 订药数量

Salenumber 销售单编号 Saledate Saleliang Cusnumber Cusname Cussex Cusphone Innumber Indate Inliang Outnumber Outreas Outdate Outliang CBacknum

销售日期 销售量 客户编号 客户姓名 客户性别 客户电话 药品入库单编号 药品入库日期 药品入库量 药品出库单编号 药品出库原因 药品出库时间 药品出库量 客户退货单编号

Cbackliang 客户退货单量 Cbackreas Sbacknum

客户退货原因 药店退货单编号

Dl-53

Sbackreas

药店退货原因

varchar(30)

2.2.2数据结构

数据结构编号 DS-1 DS-2 DS-3 DS-4 DS-5 DS-7

数据结 构名称 Supplier Customer Goods Hourse Employer Buylist

数据结 构含义 供应商 客户 药品 仓库 职员 采购单

数据结构组成 Supnumber ,Supname ,Supadress ,Supphone Cusnumber ,Cusname ,Cussex ,Cusphone Gname ,Gkind ,Gtype ,Gprice ,Gshelf Hounumber ,Houkind ,Houaddr Empnumber ,Empname ,Empkind

Buynumber ,Buydate ,Buyliang,Gname, Supnumber,Empnumber

Sendnumber ,Sendliang ,Senddate,Gname, Supnumber,Empnumber

Lostnumber ,Lostreas ,Lostliang,Gname, Empnumber ,Hounumber

Swlistnumber,Swliang,Gname ,Empnumber , Hounumber

Jcnumber,Empnumber ,Jcliang

Pancnumber ,Pancliang,Gname ,Hounumber, Empnumber

Dynumber ,Dydate ,Dyliang, Gname,Cusnumber, Empnumber

Salenumber ,Saledate ,Saleliang ,Cusnumber, Empnumber,Gname

Innumber ,Indate ,Inliang,Gname,Empnumber,

DS-8 Sendlist 发货单

DS-9 Lostlist 报损单 实物清单 盘查记录单 盘存单

DS-10 Swlist

DS-11 Jclist

DS-12 Panclist

DS-13 Dyaolist 订药单

DS-14 DS-15

Salelist Inlist

销售单 入库单

Hounumber

DS-16

Outlist

出库单 客户退货单 采购退货单

Outnumber ,Outdate ,Outliang ,Gname,Empnumber ,Hounumber

CBacknumber ,Cbackliang ,

Cbackreas,Gname,Cusnumber,Empnumber Sbacknumber ,Sbackliang ,Sbackreas ,Gname, Empnumber ,Supnumber

DS-17 Cbacklist

DS-18 Sbacklist

2.2.3数据流

数据流名称

简述

数据流来源

数据流去向

数据流量

高峰流量

数据流组成

Sendnumber ,

发货单

供应商发出的收货单

供应商

验收货品模块

Sendliang ,

Senddate,Gname,Supnu mber,Empnumber

采购单

采购部发给供应商的采购单 采购部发给库管员的进货单 采购部发给退货部的清单

采购部

Buynumber ,Buydate ,

供应商

Buyliang,Gname,Supnu mber,Empnumber Buynumber ,Buydate ,

采购部

库管模块

Buyliang,Gnumber,Gsn ame,Empnumber ,Kugname

采购部

退货模块

Buynumber ,Buydate ,Buyliang,Gnumber,Gsn ame

15/月

30/月

15/月

30/月

15/月

30/月

15/月

30/月

合格单

不合格单

退货单

退货部发给供应商的退货单

退货部

Sbackliang ,

供应商

Sbackreas ,Gname,Empnumber ,Supnumber

入库单

库管员编制的入库记录

库管员编制 退货部编制

库存记录模块

Innumber ,Indate ,Inliang,Gname, ,Hounumber

Sbacknum ,Sbackliang ,

退货记录模块

Sbackreas ,

Sbackdate,Gnumber ,Gsname

采购记录模块

SendnumberSendliangS enddate,Gnumber,Gsna me,Supnumber ,Supname Dynumber ,Dydate ,

订货单

客户发出的订货单

客户

销售部

Dyliang,

Gname,Cusnumber,Empn umber

销售部给客户的销售记录

Salenumber ,Saledate ,

销售部

客户

Saleliang ,

Cusnumber,Empnumber, Gname

Outnumber ,Outdate ,

销售部

库房

Outliang ,Gname,Empnumber ,Hounumber

52/月

102/月

51/月

101/月

50/月

100/月

32/月

62/月

31/月

61/月

30/月

60/月

15/月

30/月

退货记录单 采购记录单

退货部向供应商的退单记录

采购部编制的采购记录

采购部

销售单

出库单

销售部给库房的出库记录

退货单

客户给退货部的退货单

客户

退货模块

Cbackliang ,Cbackreas,Gname,Cusn umber,Empnumber

销售记录单 退货记录单

销售部编制的销售记录

销售部

销售记录模块

Salenumber ,Saledate ,Saleliang,Cusnumber, Empnumber CBacknumber ,

退货记录模块

Cbackliang ,Cbackdate,Gnumber ,Cusnumber

CBacknum ,Cbackliang ,

客户

退货模块

Cbackreas ,

Cbackdate,Gnumber ,Cusnumber

退货部 库管员编制 主管部

主管部

CBacknum ,

库房

Cbackliang,Cusnumber ,Empnumber,

Lostnumber ,Lostreas ,Lostliang,Gname,Empn umber ,Hounumber Lostnumber ,

库管

Lostliang,Gnumber ,Gsname,Empnumber

报损模块

Lostnumber ,Lostliang,Gnumber

31/月

51/月

30/月

50/月

19/月

34/月

18/月

33/月

17/月

32/月

16/月

31/月

15/月

30/月

退货部给客户的退单记录

退货部编制

退货部审核

退单

通过的客户退单

退货确认单 报损单 不合格报损单 合格报损单

退货部给库房的退货记录 库管给主管部的报损记录 主管检查不生效的报损单 主管检查生效的报损单

主管部

32/月 52/月

报损记录单 报损清单

主管检查的生效报损记录单 主管部发给库房的报损记录 库管发给盘查部的实物清单 盘查部盘查后的记录单 账务不实盘查部生成新的盘存单 盘查部发给库房的记录

主管部

报损记录模块

Lostnumber ,Lostliang,Gnumber Lostnumber ,Lostliang,Gnumber,Em pnumber

Pancnumber ,Pancdate ,

33/月 53/月

主管部 库管员编制 盘查部编制 盘查部编制 盘查部编制 盘查部编制

库房记录模块

34/月 54/月

药品清单

盘查部 Pancliang,Gnumber,Em pnumber

Pancnumber ,Pancdate ,Pancliang,Gnumber Pancnumber ,Pancliang,Gname ,Hounumber,Empnumber Pancnumber ,Pancdate ,Pancliang,Gnumber ,Empnumber

Pancnumber ,Pancdate ,Pancliang,Gnumber ,Empnumber

35/月 55/月

记录单

盘查部 36/月 56/月

盘存单

库房和盘存记录 库房记录模块

37/月 57/月

盘存清单 盘存记录单

38/月 58/月

盘查部生成的盘查记录

盘查记录模块

38/月 58/月

2.2.4处理逻辑

处理处理逻辑逻辑编号 名称

采购部检验来货 简述

输入的数据流

处理

输出的数据流

理频率

F1发货单

根据发货单检验商品

F3合格单,F4不合格单

30/月

P1.1 验收

处理处理逻辑逻辑编号 名称

检验合格入库 简述

输入的数据流

处理

输出的数据流

理频率

F3合格单 登记库存账目

F6入库记录单,35/F8采购记录单 F5退货单,F7退货记录单

月 10/月

P1.2 入库

P1.3 退货

检验不合格F4不合格退去 销售部向客户卖货 退货部处理客户退货单 客户退货成功

确定退货

P2.1 销售

确认退货

F9订货单 导购提货

F10销售单,F1150/出库单 F15退单 F14退货记录

月 5/月 5/月

P2.2 F12退货单 处理退货单

P2.3 退货 F15退单 客户退货成功 单,F16退货确认单

P3.1

主管检查 确定

主管检查报损单

F17报损单

根据报损单检查报损

F18不合格报损单,F19合格报损单 F20报损记录

1/月

P3.2 报损

单 报损P3.3 不生

效 P4.1

存货清查 对比账单

主管接受合F19合格报格报损单

损单

确定报损单 单,F21报损清单

F18不合格报损单

1/月

主管反馈不F18不合格向库管反馈不合合格报损单 报损单

格报损单

1/月 2/月 3/月 4/

对仓库存货F22药品清根据药品清单存清查 对比清查结果

单 F23记录单

货清查 根据药品清单对比记录单

F23记录单 F22药品清单,F24盘存单 F25盘存清单,

P4.2

P4.3 确定确定盘存单 F24盘存单 登记盘存和库存

处理处理逻辑逻辑编号 名称

盘存单

简述

输入的数据流

处理

输出的数据流

理频率

记录

F26盘存记录单 月

2.2.5数据存储

数据存储编号

数据存储名称

商品入库出库,

S1

库存记录

客户退货,报损盘存清查后修改库存量

采购记录 退货记录 销售记录 退货记录 报损记录 盘存记录

商店从供应商采购的货物记录

商店退给供应

供应商编号,商品编号,商品名,商品数量,商品价格 供应商编号,商品编号,商品商品编号,仓库编号,存储量

P1.2,P2.2,P2.3,P3.2,P4.3

简述 数据存储组成

相关联的处理

S2 P1.2

S3

商的退货记录 名,商品数量 商品卖给客户的销售记录 客户退给商店的退货记录 库房报损记录 商品盘存清查的记录

商品编号,客户编号,商品名,商品数量

商品编号,客户,商品名,商品数量

仓库编号,商品编号,商品名,报损数量

仓库编号,商品编号,商品名,实际数量

P1.3

S4 P2.1

S5 P2.3

S6 P3.2

S7

P4.3

三、系统总体设计

3.1系统总体设计思路

将需求分析得到的用户需求抽象为信息结构(概念模型)的过程。要能充分的反应事物与事物之间的联系,是对现实世界的一个真实模型。在需求分析阶段得到的应用需求首先抽象为信息世界的结构才能更好的用某一DBMS 实现这些需求。E-R 模型是概念模型的有力工具。逐一设计分E-R 图,再将所有的分E-R 图综合成系统的总E-R 图。 3.2 概念模型设计 3.2.1 局部E-R 图

局部E-R 图的建立依据于数据流图的建立。以下可从第二层数据流图分别建立局部E-R 图。详见图1-1至1-8。

职员姓名

职员性别

仓库类别

仓库地址

职员编号

仓库编号

职员

仓库

图1-1 局部E-R 图 图1-2 局部E-R 图

供应商名称

供应商供应商编号

客户编号

客户

供应商地址供应商电话

客户姓名

客户性别

客户电话

图1-3 局部E-R 图 图1-4 局部E-R 图

药品保质

药品的剂

药品

药品分类

药品单价

药品名称

图1-5 局部E-R 图

m 购买商品

m

销售

n

职员

n

客户

图1-6 局部E-R 图

库房

m

管理

n

库管理

图1-7 局部E-R 图

图1-8 局部E-R 图

3.2.2 全局E-R 图

综合各部分的局部E-R 图,药品进销存管理系统的总体E-R 图的设计如下图1-10所示。

药品供应供应商药品库存

m

n

m

n

m

采购

n

职员

发货量

供应

库存量

库存

入库量

出库量

供应商

仓库

1

管理

n

库管员

m m

图1-10 全局 E-R 图

采购员

采购量

订购量

采购

销售量

客户

订购

n

n

m

m n

药品销售

销售员

m

n

3.3 逻辑结构设计

逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R 图转换为与选用DBMS 产品所支持的数据模型相符合的逻辑结构。根据DBMS 产品以及不同系统的限制,设计逻辑结构时一般有以下三个步骤:首先将概念结构转换为一般的关系,网状,层次模型;将转换来的关系,网状,层次模型向特定DBMS 支持下的数据模型转换;最后对数据模型进行优化。

药品管理系统的设计采用关系模型。E-R 图转化为关系模型实际上就是要将实体型、实体的属性和实体型之间的联系转换为关系模式。

一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。对于实体型间的联系有以下不同的情况:

(1) 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的

码以及联系本身的属性均转换为关系的属性。

(2) 一个1:n 联系可以转换为一个独立的关系模式,也可以与n 端对应的关系模式合并。如果转换为一个独立的关系没模式,则与联系向连的各实体的码以及联系本身的属性均转换为关系的属性。

(3) 一个m :n 联系转换为一个关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系的码的一部分。

3.4 数据库建立实施

3.4.1 建立数据库 3.4.1.1索引

建立索引是加快查询速度的有效手段。如果访问某一数据项的频率较高时,可为之建立索引。而系统在存取数据时会自动选择合适的索引作为存取路径,对用户是透明的。在本系统由于药品和供应厂家的访问频率较大,故为之建立索引。由于在使用时供应商的信息表,药品信息表,客户信息表访问的次数较多。故为

之建立索引。建立的索引如下表所示。

编号 I-1

名称 In_SupName

定义 见附录

备注

表3-1

3.4.1.2触发器

触发器是用户定义在关系表上的一类由事件驱动的过程。触发器的定义可以更加便捷的实现数据的操作,增加数据操作的灵活性,对数据有更大的控制能力。这里只要建立触发器来实现对数据的约束条件。如进货量,药品入库时保质期的检测等。主要建立的触发器见表。

编号 T-1 T-2 T-3 T-4 T-5

触发器名称

定义 见附录 见附录 见附录 见附录 见附录

作用

tri_C02 tri_Acc tri_gprice tri_gshelf tri_buy

限制删除C-02客户的退货记录 限制某一药品入库量不小于400

限制更新的药品价格不小于1元,小于元的改为1元 保质期到2010年的不允许插入 限制采购量更新量不小于100 表3-2

3.4.1.3存储过程

存储过程可以实现数据库操作的增删改功能,在执行时需要调用。运用想函数一样,也可以有参数的参与。定义存储过程提供了过程封装的效果,执行只需调用,在更大程度上简化了数据处理过程。药品的进销存过程部分存储过程如下表所示。

表3-3

编号 P-1 P-3 P-4 P-5 P-6 P-7 P-8

存储过程名称 定义 见附录 见附录 见附录 见附录 见附录 见附录 见附录

作用

Goods_shelf pro_Gtype pro_cback pro_addgoods pro_delgoods pro_orderSale pro_updIn

查询某一药品保质期 查询剂型为普通片的药品 查询某种原因的药品的退货量 插入一条药品信息 删除一条药品记录 按药品销量排序 更新入库量

3.4.2建立关系表

供应商 列名 供应商编号 供应商名称

数据类型

约束

主外键

varchar(10) not null 主键 varchar(30) not null ——

供应商地址 供应商电话

varchar(40) varchar(20)

—— ——

药品 列名 药品名称 药品分类 药品剂型 药品单价 药品保质期

数据类型

约束

主外键

varchar(30) not null 主键 varchar(20) varchar(20) float date

—— ——

not null ——

——

职员 列名 职员编号 职员姓名 职员类别

仓库 列名 仓库编号 仓库类别

数据类型

约束

主外键

数据类型

约束

主外键

varchar(10) not null 主键 varchar(10) varchar(10)

—— ——

varchar(10) not null 主键 varchar(10) varchar(20)

—— ——

仓库地址

客户 列名 客户编号

数据类型

约束

主外键

varchar(10) not null 主键

客户姓名 客户性别 客户的电话

varchar(10) not null —— varchar(2)

—— ——

varchar(20)

采购

列名 数据类型 约束

采购单编号 varchar(10) not null

供应商编号 varchar(10) not null

药品名称 varchar(30) not null

职员编号 varchar(10) not null

采购量 int not null

发货 列名 发货单编号 供应商编号 药品名称 职员编号 发货量 发货日期

数据类型

约束

采购日期

date

主外键 主键 外键 外键 外键 —— ——

主外键 主键 外键 外键 外键 —— ——

varchar(10) not null varchar(8)

not null

varchar(30) not null varchar(10) not null int date

not null

采购退货 列名

数据类型

约束 not null not null not null not null

主外键 主键 外键 外键 外键

采购退货单编号 varchar(10) 供应商编号 药品名称 职员编号

varchar(10) varchar(30) varchar(10)

退货量 退货原因

int

varchar(30)

not null

—— ——

客户退货 列名

客户退货单编号 客户编号 药品名称 职员编号 退货量 退货原因

数据类型

约束

主外键

varchar(10) not null 主键 varchar(10) not null 外键 varchar(30) not null 外键 varchar(10) not null 外键 int

not null ——

——

varchar(30)

销售 列名 销售单编号 客户编号 药品名称 职员编号 销售量 销售日期

数据类型

约束

主外键 主键 外键 外键 外键 —— ——

varchar(10) not null varchar(10) not null varchar(30) not null varchar(10) not null int date

not null

客户订药 列名 订药单编号 客户编号 药品名称 职员编号 订药量

数据类型

约束

主外键

varchar(10) not null 主键 varchar(10) not null 外键 varchar(30) not null 外键 varchar(10) not null 外键 int

not null ——

订药日期 date ——

入库 列名 入库单编号 药品名称 仓库编号 职员编号 入库量 入库日期

数据类型

约束

主外键

varchar(10) not null 主键 varchar(30) not null 外键 varchar(10) not null 外键 varchar(10) not null 外键 int date

not null ——

——

出库 列名 出库单编号 药品名称 仓库编号 职员编号 出库量 出库日期

报损 列名 报损单编号 药品名称 仓库编号 职员编号 报损量 报损原因

数据类型

约束

主外键 主键 外键 外键 外键 —— ——

数据类型

约束

主外键

varchar(10) not null 主键 varchar(30) not null 外键 varchar(10) not null 外键 varchar(10) not null 外键 int date

not null ——

——

varchar(10) not null varchar(30) not null varchar(10) not null varchar(10) not null int

not null

varchar(30)

盘存 列名 盘存单编号 药品名称 仓库编号 职员编号 盘存量

数据类型

约束

主外键

varchar(10) not null 主键 varchar(30) not null 外键 varchar(10) not null 外键 varchar(10) not null 外键 int

not null ——

四、系统实现

4.1 数据库实施(详见附录)

数据库的物理设计阶段之后就进入了实施阶段,这一阶段要用SQL2000来操作。具体的数据库,数据表,视图,索引和存储过程等都是这个阶段用SQL 语句创建。

4.1.1数据库及数据库对象建立

药店的药品管理所涉及的对象主要包括:数据库、基本表、视图、索引、触发器以及存储过程。以实现对数据的操作的简便和有效。

(详细的sql 代码见附录)。 4.1.2 数据入库

对各个主要数据表要录入20条以上的记录,方法可用EXCEL 批量导入,也可以逐条录入。 4.1.3 数据库测试

主要内容是对建立的数据库及数据库对象进行测试 具体要求:

(1)要设计好测试数据

(2)对测试的结果要以图片形式,同时注意图片的格式 (3)对测试结果进行分析,是否满足设计要求。 (数据操作的验证,存储过程的验证详见附录。)

五、系统评价

这次数据库的课程设计是医院药品进销存系统,医院药品进销存系统能够为用户提供充足的信息和快捷的查询手段。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好等。这些优点能够极大地提高医院药品进销存系统的效率, 而在本系统中还有很多的遗漏和欠缺,但是基本的医院药品进销存系统的功能,已经能够实现。

六、课程设计心得、总结

在此次数据库设计中,我有一下心得及体会: 一.在这学期的数据库系统概论学习中,因为对数据库系统的认识不够深刻,以及平时所做的练习都是老师给定的表,自己只是做简单的查询,删除,更新工作,所以给了我一个很大的误区:数据库系统只是一个很简单的系统,它只会做简单的工作。在老师说做数据库设计师,我觉得就是一个简单的事情。但是我错了,在这次实习中我遇到了很多的问题,比如:对于我的题目《医药销售管理系统》,在对现实的抽象上我遇到了较多的问题,我觉得自己可以做的业务一经老师的指导才知道看似简单的问题其实是那么的复杂。

二.我深刻的感受到了数据库设计是环环嵌套的,只有做好了需求分析,有了好的数据流图,才会使后期的工作顺利的展开,否则就会在折回来接着做需求分析,所以我们要花大量的时间去做需求分析。

在此次课程设计中我按时完成了数据库设计的要求。同时经过这次课程设计我知道了做任何事都要事先考虑好所有可能发生的事情,然后做好相应的准备。

附录: Sql

语句

create database YYJXC --表

create table Supplier(

Supnumber varchar(10) primary key, Supname varchar(30) not null, Supadress varchar(40) not null, Supphone varchar(20))

create table Goods(

Gname varchar(30) primary key, Gkind varchar(20), Gtype varchar(20),

Gprice float not null, Gshelf date)

create table Employer(

Empnumber varchar(10) primary key, Empname varchar(10), Empkind varchar(10))

create table Hourse(

Hounumber varchar(10) primary key, Houkind varchar(10), Houaddr varchar(20))

create table Customer(

Cusnumber varchar(10) primary key, Cusname varchar(10) not null,

Cussex varchar(2) check(Cussex in('男', '女')), Cusphone varchar(20))

create table Buylist(

Buynumber varchar(10) primary key, Supnumber varchar(10), Gname varchar(30),

Empnumber varchar(10), Buyliang int not null, Buydate date,

foreign key (Supnumber) references Supplier(Supnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Sendlist(

Sendnumber varchar(10) primary key, Supnumber varchar(10), Gname varchar(30),

Empnumber varchar(10), Sendliang int not null, Senddate date,

foreign key (Supnumber) references Supplier(Supnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Sbacklist(

Sbacknumber varchar(10) primary key, Supnumber varchar(10),

Gname varchar(30),

Empnumber varchar(10), Sbackling int not null, Sbackreas varchar(30),

foreign key (Supnumber) references Supplier(Supnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Dyaolist(

Dynumber varchar(10) primary key, Gname varchar(30), Cusmumber varchar(10), Empnumber varchar(10), Dyliang int not null, Dydate date,

foreign key (Cusmumber) references Customer(Cusnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Salelist(

Salenumber varchar(10) primary key, Gname varchar(30), Cusmumber varchar(10), Empnumber varchar(10), Saleliang int not null, Saledate date,

foreign key (Cusmumber) references Customer(Cusnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Cbacklist(

Cbacknumber varchar(10) primary key, Gname varchar(30), Cusnumber varchar(10), Empnumber varchar(10), Cbackliang int not null, Cbackreas varchar(30),

foreign key (Cusnumber) references Customer(Cusnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Inlist(

Innumer varchar(10) primary key, Gname varchar(30),

Hounnumber varchar(10), Empnumber varchar(10), Inliang int not null, Indate date,

foreign key (Hounnumber) references Hourse(Hounumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Outlist(

Outnumber varchar(10) primary key, Gname varchar(30),

Hounnumber varchar(10), Empnumber varchar(10), Outliang int not null, Outdate date,

foreign key (Hounnumber) references Hourse(Hounumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Lostlist(

Lostnumber varchar(10) primary key, Gname varchar(30),

Hounnumber varchar(10), Empnumber varchar(10), Lostliang int not null, Lostreas varchar(30),

foreign key (Hounnumber) references Hourse(Hounumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Panclist(

Pancnumber varchar(10) primary key, Gname varchar(30),

Hounnumber varchar(10), Empnumber varchar(10), Pancliang int not null,

foreign key (Hounnumber) references Hourse(Hounumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

--视图

create view Vi_supplier as

select *

from Supplier

create view Vi_goods as

select * from Goods

create view Vi_sale as

select Gname,Saleliang from Salelist

create view Vi_baosun as

select Gname,Lostliang from Lostlist

create view Vi_pancun as

select Gname,Pancliang from Panclist

--索引

create nonclustered index In_Supname on Supplier(SupName) --触发器

--限制删除C-02客户的退货记录 create trigger tri_C02 on Cbacklist

instead of delete as begin if exists( select *

from deleted

where Cusnumber='C-02' )

print '删除记录' end --测试 delete

from Cbacklist

where Cusnumber='C-02'

--限制某一药品入库量不小于400 create trigger tri_Acc on Inlist

instead of insert,update as declare

@Gname char(30), @Inliang int select

@Gname=Gname, @Inliang=Inliang from inserted if @Inliang

print '入库量小于400' --测试 insert into Inlist

values('I-25','牛黄解毒片','H-01','E-16',300,'2011-4-15')

--限制更新的药品价格不小于1元,小于1元的改为1元 create trigger tri_gprice on Goods

instead of insert,update as

declare

@Gname varchar(30), @Gprice float select

@Gname=Gname, @Gprice=Gprice from inserted if

@Gprice

where Gname=@Gname

--测试

insert into Goods

values('三黄片',' 处方药',' 普通片',0.5,'2012-9-1')

--保质期到2010年的不允许插入 create trigger tri_gshelf

on Goods for insert as

if exists (

select * from Goods

where Year(Gshelf)

print '药品已过期' rollback end --测试

insert into Goods

values('泻立停',' 处方药',' 普通片',3,'2009-1-7')

--限制采购量更新量不小于100 create trigger tri_buy on Buylist

for insert,update as

if exists (

select *

from inserted

where Buyliang

print' 采购量小于100' end --测试

insert into Buylist

values('B-26','S-11','保和丸','E-04',50,'2012-1-12')

--存储过程

--查询某一药品保质期

create procedure Goods_shelf @Gname varchar(30) as

select Gname 药品名, Gshelf 保质期 from Goods

where Gname=@Gname --测试执行结果

exec Goods_shelf @Gname='防风通圣丸'

--查询剂型为普通片的药品 create procedure pro_Gtype as

select Gname 药品名,Gtype 剂型 from Goods

where Gtype='普通片' --测试执行结果 exec pro_Gtype

--查询某种原因的药品的退货量 create procedure pro_cback @BackSake varchar(30) as

select Goods.Gname 药品名,Cbackliang 退货量,Cbackreas 退货原因 from Goods,Cbacklist

where Goods.Gname=Cbacklist.Gname and Cbackreas=@BackSake --测试执行结果

exec pro_cback '损坏' exec pro_cback '数量有误'

--插入一条药品信息

create procedure pro_addgoods @Gname varchar(30), @Gkind varchar(20), @Gtype varchar(20), @Gprice float, @Gshelf date as

insert into Goods

values(@Gname,@Gkind,@Gtype,@Gprice,@Gshelf) --测试执行结果

exec pro_addgoods ' 牛黄解毒片',' 处方药',' 普通片',1.2,'2013-2-3'

--删除一条药品记录

create procedure pro_delgoods @Gname char(30) as delete

from Goods

where Gname=@Gname

--测试执行结果

exec pro_delgoods '牛黄解毒片'

--按销售量排序

create procedure pro_orderSale as

select Goods.Gname 药品名,Saleliang 销售量 from Goods,Salelist

where Goods.Gname=Salelist.Gname order by Saleliang desc --测试执行结果 exec pro_orderSale

--更新入库量

create procedure pro_updIn as

update Inlist

set Inliang=Inliang+500 --测试执行结果 exec pro_updIn

drop procedure pro_updIn

Sql 语句验证

视图过程验证:

视图验证结果(Vi_supplier)

视图验证结果(Vi_sale) 视图验证结果(Vi_pancun)

存储过程验证:

存储过程验证(Goods_shelf)

存储过程验证(pro_Gtype)

存储过程验证(pro_cback)

存储过程验证(pro_orderSale)

存储过程验证(pro_updIn)

触发器验证:

触发器验证(tri_C02)

触发器验证(tri_Acc)

触发器验证(tri_gprice)

触发器验证(tri_gshelf)

触发器验证(tri_buy)

目 录

一、概述 . ................................................................. 错误!未定义书签。 1.1 课程设计的目的 ........................................ 错误!未定义书签。 1.2 课程设计的内容 ........................................ 错误!未定义书签。 1.3 课程设计的要求 ........................................ 错误!未定义书签。 二、需求分析.......................................................... 错误!未定义书签。 2.1 系统需求 .................................................... 错误!未定义书签。 2.2 数据字典 .................................................... 错误!未定义书签。 三、系统总体设计 ................................................. 错误!未定义书签。 3.1系统总体设计思路 ..................................... 错误!未定义书签。 3.2 概念模型设计 ............................................ 错误!未定义书签。 3.2.1 局部E-R 图 ....................................... 错误!未定义书签。 3.2.2 全局E-R 图 ....................................... 错误!未定义书签。 3.3 逻辑结构设计 ............................................ 错误!未定义书签。 3.4 数据库建立实施 ........................................ 错误!未定义书签。 3.4.1 建立数据库 ....................................... 错误!未定义书签。 3.4.2 建立关系表 ....................................... 错误!未定义书签。 四、系统实现.......................................................... 错误!未定义书签。 五、系统评价.......................................................... 错误!未定义书签。 六、课程设计心得、总结 ..................................... 错误!未定义书签。 参考文献: . ............................................................. 错误!未定义书签。

一、概述

1.1课程设计的目的

随着互联网的发展,利用网络技术来实现“无纸办公”这个概念已经深入人心,医药管理系统作为医院信息化建设的一个重要平台在完成各种医药资源的合理统计与分配,互联网访问,医院管理,电子设备等方面面发挥了重要的作用。但是现在十分缺少类似的能够满足医院需求的医药进销存管理系统,为规范医院的医药进存销管理和数据统计和分析,在较小的代价下满足用户信息需求,设计了这个医药进存销管理系统。

1.2课程设计的内容

(1)主要的数据表

药品分类代码表,药品库存表,供货商信息表,采购信息表等等。 (2)主要功能模块

1) 新药品的入库。

2) 过期药品的出库登记、处理记录。 3) 药品库存检索。 4) 供货商信息检索。 5) 药品采购记录管理。 6) 药品用药说明信息管理。 7) 输出相应的数据报表。

8) 具有数据备份和数据恢复功能。

1.3课程设计的要求

具体项目内容去医院进行调研,药品编码也应参考国家统一编码方法。

二、需求分析 2.1 系统需求

目前中小型药店的营业规模不断的扩大,药品的数量和种类不断增加。对于许多仍处于人工管理阶段的药店来说 管理也越来越复杂。如果以药店工作人员的增加来实现药品的管理 虽然能使工作变得方便起来 但是这样带来更大的经济开销 对于中小型药店来说要解决实际问题并不是很合适。开发药品进销存

管理系统可以很大程度上方便管理人员对药品的管理 实现药品管理的高效化和统一化。为便于管理的方便性和可行性。根据现阶段的应用需求的开发目标设计药品进销存数据库管理系统。实现药品采购 库存和销售管理的功能 完成对药品从采购到销售的流水作业的数据管理功能。

根据市场的需求,要求系统具有以下功能: 1)新药品的入库。

2)过期药品的出库登记、处理记录。 3)药品库存检索。 4)供货商信息检索。 5)药品采购记录管理。 6)药品用药说明信息管理。 7)输出相应的数据报表。

8)具有数据备份和数据恢复功能。

系统主要为登陆,登陆后可以浏览,查询,添加,删除药品信息外还可以对销售记录进行浏览,删除,添加,修改。本系统是根据中小企业的实际需求而开发的,完全能够实现药品入库、销售管理,通过本系统可以达到以下目标:

❑ ❑ ❑ ❑ ❑

系统运行稳定,安全可靠。 界面设计美观,人机交互界面友好。

信息查询灵活、方便、快捷、准确,数据存储安全可靠。 强大的报表预览、打印功能。 信息安全保密。

开发及运行环境

硬件要求

CPU :300MHz 以上的处理器 内存:128MB ,推荐256MB 硬盘:150MB 以上剩余空间

显示像素:最低800*600,最佳效果1024*768 软件要求

操作系统:Windows2000/NT/XP/Vista。

数据库:SQL Server2000。

2.2数据字典 2.2.1数据项

数据项编号 Dl-1 Dl-2 Dl-3 Dl-4 Dl-5 Dl-6 Dl-7 Dl-8 Dl-9 Dl-10 Dl-11 Dl-12 Dl-13 Dl-14 Dl-15 Dl-16 Dl-17 Dl-18 Dl-19 Dl-20 Dl-21 Dl-22

数据项名 Supnumber Supname Supadress Supphone Gsname Gkind Gtype Gprice Gshelf Empnumber Empkind Empname Hounumer Houkind Houaddr Buynumber Buydate Buyliang

数据项含义 供应商编号 供应商名称 供应商地址 供应商电话 药品名称 药品分类 药品剂型 药品单价 药品保质期 职员编号 职员类别 职员姓名 仓库编号 仓库类别 仓库地址 采购单编号 采购日期 采购量

与其他数据项关系

类型 varchar(10) varchar(30) varchar(30) varchar(20) varchar(20) varchar(20) varchar(20) float date varchar(10) varchar(10) varchar(10) varchar(10) varchar(10) varchar(20) varchar(10) date int

varchar(10) int date varchar(10)

Sendnumber 发货单编号 Sendliang Senddate

发货量 发货日期

Lostnumber 报损单编号

Dl-24 Dl-25 Dl-26 Dl-27 Dl-28 Dl-29 Dl-30 Dl-31 Dl-32 Dl-33 Dl-34 Dl-35 Dl-36 Dl-37 Dl-38 Dl-39 Dl-40 Dl-41 Dl-42 Dl-43 Dl-44 Dl-45 Dl-46 Dl-47 Dl-48 Dl-49 Dl-50 Dl-51

Lostliang Swnumber Swliang Jcnumber Jcliang

报损量 实物清单编号 实物数量 盘查记录单编号 记录量

int

varchar(10) int

varchar(10) int

varchar(10) int

varchar(10) date int

varchar(10) date int

varchar(10) varchar(10) varchar(2) varchar(20) varchar(10) date int

varchar(10) varchar(30) date int

varchar(10) int

varchar(30) varchar(10)

Pancnumber 盘存单编号 Pancliang Dynumber Dydate Dyliang

盘存实际量 订药单编号 订药日期 订药数量

Salenumber 销售单编号 Saledate Saleliang Cusnumber Cusname Cussex Cusphone Innumber Indate Inliang Outnumber Outreas Outdate Outliang CBacknum

销售日期 销售量 客户编号 客户姓名 客户性别 客户电话 药品入库单编号 药品入库日期 药品入库量 药品出库单编号 药品出库原因 药品出库时间 药品出库量 客户退货单编号

Cbackliang 客户退货单量 Cbackreas Sbacknum

客户退货原因 药店退货单编号

Dl-53

Sbackreas

药店退货原因

varchar(30)

2.2.2数据结构

数据结构编号 DS-1 DS-2 DS-3 DS-4 DS-5 DS-7

数据结 构名称 Supplier Customer Goods Hourse Employer Buylist

数据结 构含义 供应商 客户 药品 仓库 职员 采购单

数据结构组成 Supnumber ,Supname ,Supadress ,Supphone Cusnumber ,Cusname ,Cussex ,Cusphone Gname ,Gkind ,Gtype ,Gprice ,Gshelf Hounumber ,Houkind ,Houaddr Empnumber ,Empname ,Empkind

Buynumber ,Buydate ,Buyliang,Gname, Supnumber,Empnumber

Sendnumber ,Sendliang ,Senddate,Gname, Supnumber,Empnumber

Lostnumber ,Lostreas ,Lostliang,Gname, Empnumber ,Hounumber

Swlistnumber,Swliang,Gname ,Empnumber , Hounumber

Jcnumber,Empnumber ,Jcliang

Pancnumber ,Pancliang,Gname ,Hounumber, Empnumber

Dynumber ,Dydate ,Dyliang, Gname,Cusnumber, Empnumber

Salenumber ,Saledate ,Saleliang ,Cusnumber, Empnumber,Gname

Innumber ,Indate ,Inliang,Gname,Empnumber,

DS-8 Sendlist 发货单

DS-9 Lostlist 报损单 实物清单 盘查记录单 盘存单

DS-10 Swlist

DS-11 Jclist

DS-12 Panclist

DS-13 Dyaolist 订药单

DS-14 DS-15

Salelist Inlist

销售单 入库单

Hounumber

DS-16

Outlist

出库单 客户退货单 采购退货单

Outnumber ,Outdate ,Outliang ,Gname,Empnumber ,Hounumber

CBacknumber ,Cbackliang ,

Cbackreas,Gname,Cusnumber,Empnumber Sbacknumber ,Sbackliang ,Sbackreas ,Gname, Empnumber ,Supnumber

DS-17 Cbacklist

DS-18 Sbacklist

2.2.3数据流

数据流名称

简述

数据流来源

数据流去向

数据流量

高峰流量

数据流组成

Sendnumber ,

发货单

供应商发出的收货单

供应商

验收货品模块

Sendliang ,

Senddate,Gname,Supnu mber,Empnumber

采购单

采购部发给供应商的采购单 采购部发给库管员的进货单 采购部发给退货部的清单

采购部

Buynumber ,Buydate ,

供应商

Buyliang,Gname,Supnu mber,Empnumber Buynumber ,Buydate ,

采购部

库管模块

Buyliang,Gnumber,Gsn ame,Empnumber ,Kugname

采购部

退货模块

Buynumber ,Buydate ,Buyliang,Gnumber,Gsn ame

15/月

30/月

15/月

30/月

15/月

30/月

15/月

30/月

合格单

不合格单

退货单

退货部发给供应商的退货单

退货部

Sbackliang ,

供应商

Sbackreas ,Gname,Empnumber ,Supnumber

入库单

库管员编制的入库记录

库管员编制 退货部编制

库存记录模块

Innumber ,Indate ,Inliang,Gname, ,Hounumber

Sbacknum ,Sbackliang ,

退货记录模块

Sbackreas ,

Sbackdate,Gnumber ,Gsname

采购记录模块

SendnumberSendliangS enddate,Gnumber,Gsna me,Supnumber ,Supname Dynumber ,Dydate ,

订货单

客户发出的订货单

客户

销售部

Dyliang,

Gname,Cusnumber,Empn umber

销售部给客户的销售记录

Salenumber ,Saledate ,

销售部

客户

Saleliang ,

Cusnumber,Empnumber, Gname

Outnumber ,Outdate ,

销售部

库房

Outliang ,Gname,Empnumber ,Hounumber

52/月

102/月

51/月

101/月

50/月

100/月

32/月

62/月

31/月

61/月

30/月

60/月

15/月

30/月

退货记录单 采购记录单

退货部向供应商的退单记录

采购部编制的采购记录

采购部

销售单

出库单

销售部给库房的出库记录

退货单

客户给退货部的退货单

客户

退货模块

Cbackliang ,Cbackreas,Gname,Cusn umber,Empnumber

销售记录单 退货记录单

销售部编制的销售记录

销售部

销售记录模块

Salenumber ,Saledate ,Saleliang,Cusnumber, Empnumber CBacknumber ,

退货记录模块

Cbackliang ,Cbackdate,Gnumber ,Cusnumber

CBacknum ,Cbackliang ,

客户

退货模块

Cbackreas ,

Cbackdate,Gnumber ,Cusnumber

退货部 库管员编制 主管部

主管部

CBacknum ,

库房

Cbackliang,Cusnumber ,Empnumber,

Lostnumber ,Lostreas ,Lostliang,Gname,Empn umber ,Hounumber Lostnumber ,

库管

Lostliang,Gnumber ,Gsname,Empnumber

报损模块

Lostnumber ,Lostliang,Gnumber

31/月

51/月

30/月

50/月

19/月

34/月

18/月

33/月

17/月

32/月

16/月

31/月

15/月

30/月

退货部给客户的退单记录

退货部编制

退货部审核

退单

通过的客户退单

退货确认单 报损单 不合格报损单 合格报损单

退货部给库房的退货记录 库管给主管部的报损记录 主管检查不生效的报损单 主管检查生效的报损单

主管部

32/月 52/月

报损记录单 报损清单

主管检查的生效报损记录单 主管部发给库房的报损记录 库管发给盘查部的实物清单 盘查部盘查后的记录单 账务不实盘查部生成新的盘存单 盘查部发给库房的记录

主管部

报损记录模块

Lostnumber ,Lostliang,Gnumber Lostnumber ,Lostliang,Gnumber,Em pnumber

Pancnumber ,Pancdate ,

33/月 53/月

主管部 库管员编制 盘查部编制 盘查部编制 盘查部编制 盘查部编制

库房记录模块

34/月 54/月

药品清单

盘查部 Pancliang,Gnumber,Em pnumber

Pancnumber ,Pancdate ,Pancliang,Gnumber Pancnumber ,Pancliang,Gname ,Hounumber,Empnumber Pancnumber ,Pancdate ,Pancliang,Gnumber ,Empnumber

Pancnumber ,Pancdate ,Pancliang,Gnumber ,Empnumber

35/月 55/月

记录单

盘查部 36/月 56/月

盘存单

库房和盘存记录 库房记录模块

37/月 57/月

盘存清单 盘存记录单

38/月 58/月

盘查部生成的盘查记录

盘查记录模块

38/月 58/月

2.2.4处理逻辑

处理处理逻辑逻辑编号 名称

采购部检验来货 简述

输入的数据流

处理

输出的数据流

理频率

F1发货单

根据发货单检验商品

F3合格单,F4不合格单

30/月

P1.1 验收

处理处理逻辑逻辑编号 名称

检验合格入库 简述

输入的数据流

处理

输出的数据流

理频率

F3合格单 登记库存账目

F6入库记录单,35/F8采购记录单 F5退货单,F7退货记录单

月 10/月

P1.2 入库

P1.3 退货

检验不合格F4不合格退去 销售部向客户卖货 退货部处理客户退货单 客户退货成功

确定退货

P2.1 销售

确认退货

F9订货单 导购提货

F10销售单,F1150/出库单 F15退单 F14退货记录

月 5/月 5/月

P2.2 F12退货单 处理退货单

P2.3 退货 F15退单 客户退货成功 单,F16退货确认单

P3.1

主管检查 确定

主管检查报损单

F17报损单

根据报损单检查报损

F18不合格报损单,F19合格报损单 F20报损记录

1/月

P3.2 报损

单 报损P3.3 不生

效 P4.1

存货清查 对比账单

主管接受合F19合格报格报损单

损单

确定报损单 单,F21报损清单

F18不合格报损单

1/月

主管反馈不F18不合格向库管反馈不合合格报损单 报损单

格报损单

1/月 2/月 3/月 4/

对仓库存货F22药品清根据药品清单存清查 对比清查结果

单 F23记录单

货清查 根据药品清单对比记录单

F23记录单 F22药品清单,F24盘存单 F25盘存清单,

P4.2

P4.3 确定确定盘存单 F24盘存单 登记盘存和库存

处理处理逻辑逻辑编号 名称

盘存单

简述

输入的数据流

处理

输出的数据流

理频率

记录

F26盘存记录单 月

2.2.5数据存储

数据存储编号

数据存储名称

商品入库出库,

S1

库存记录

客户退货,报损盘存清查后修改库存量

采购记录 退货记录 销售记录 退货记录 报损记录 盘存记录

商店从供应商采购的货物记录

商店退给供应

供应商编号,商品编号,商品名,商品数量,商品价格 供应商编号,商品编号,商品商品编号,仓库编号,存储量

P1.2,P2.2,P2.3,P3.2,P4.3

简述 数据存储组成

相关联的处理

S2 P1.2

S3

商的退货记录 名,商品数量 商品卖给客户的销售记录 客户退给商店的退货记录 库房报损记录 商品盘存清查的记录

商品编号,客户编号,商品名,商品数量

商品编号,客户,商品名,商品数量

仓库编号,商品编号,商品名,报损数量

仓库编号,商品编号,商品名,实际数量

P1.3

S4 P2.1

S5 P2.3

S6 P3.2

S7

P4.3

三、系统总体设计

3.1系统总体设计思路

将需求分析得到的用户需求抽象为信息结构(概念模型)的过程。要能充分的反应事物与事物之间的联系,是对现实世界的一个真实模型。在需求分析阶段得到的应用需求首先抽象为信息世界的结构才能更好的用某一DBMS 实现这些需求。E-R 模型是概念模型的有力工具。逐一设计分E-R 图,再将所有的分E-R 图综合成系统的总E-R 图。 3.2 概念模型设计 3.2.1 局部E-R 图

局部E-R 图的建立依据于数据流图的建立。以下可从第二层数据流图分别建立局部E-R 图。详见图1-1至1-8。

职员姓名

职员性别

仓库类别

仓库地址

职员编号

仓库编号

职员

仓库

图1-1 局部E-R 图 图1-2 局部E-R 图

供应商名称

供应商供应商编号

客户编号

客户

供应商地址供应商电话

客户姓名

客户性别

客户电话

图1-3 局部E-R 图 图1-4 局部E-R 图

药品保质

药品的剂

药品

药品分类

药品单价

药品名称

图1-5 局部E-R 图

m 购买商品

m

销售

n

职员

n

客户

图1-6 局部E-R 图

库房

m

管理

n

库管理

图1-7 局部E-R 图

图1-8 局部E-R 图

3.2.2 全局E-R 图

综合各部分的局部E-R 图,药品进销存管理系统的总体E-R 图的设计如下图1-10所示。

药品供应供应商药品库存

m

n

m

n

m

采购

n

职员

发货量

供应

库存量

库存

入库量

出库量

供应商

仓库

1

管理

n

库管员

m m

图1-10 全局 E-R 图

采购员

采购量

订购量

采购

销售量

客户

订购

n

n

m

m n

药品销售

销售员

m

n

3.3 逻辑结构设计

逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R 图转换为与选用DBMS 产品所支持的数据模型相符合的逻辑结构。根据DBMS 产品以及不同系统的限制,设计逻辑结构时一般有以下三个步骤:首先将概念结构转换为一般的关系,网状,层次模型;将转换来的关系,网状,层次模型向特定DBMS 支持下的数据模型转换;最后对数据模型进行优化。

药品管理系统的设计采用关系模型。E-R 图转化为关系模型实际上就是要将实体型、实体的属性和实体型之间的联系转换为关系模式。

一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。对于实体型间的联系有以下不同的情况:

(1) 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的

码以及联系本身的属性均转换为关系的属性。

(2) 一个1:n 联系可以转换为一个独立的关系模式,也可以与n 端对应的关系模式合并。如果转换为一个独立的关系没模式,则与联系向连的各实体的码以及联系本身的属性均转换为关系的属性。

(3) 一个m :n 联系转换为一个关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系的码的一部分。

3.4 数据库建立实施

3.4.1 建立数据库 3.4.1.1索引

建立索引是加快查询速度的有效手段。如果访问某一数据项的频率较高时,可为之建立索引。而系统在存取数据时会自动选择合适的索引作为存取路径,对用户是透明的。在本系统由于药品和供应厂家的访问频率较大,故为之建立索引。由于在使用时供应商的信息表,药品信息表,客户信息表访问的次数较多。故为

之建立索引。建立的索引如下表所示。

编号 I-1

名称 In_SupName

定义 见附录

备注

表3-1

3.4.1.2触发器

触发器是用户定义在关系表上的一类由事件驱动的过程。触发器的定义可以更加便捷的实现数据的操作,增加数据操作的灵活性,对数据有更大的控制能力。这里只要建立触发器来实现对数据的约束条件。如进货量,药品入库时保质期的检测等。主要建立的触发器见表。

编号 T-1 T-2 T-3 T-4 T-5

触发器名称

定义 见附录 见附录 见附录 见附录 见附录

作用

tri_C02 tri_Acc tri_gprice tri_gshelf tri_buy

限制删除C-02客户的退货记录 限制某一药品入库量不小于400

限制更新的药品价格不小于1元,小于元的改为1元 保质期到2010年的不允许插入 限制采购量更新量不小于100 表3-2

3.4.1.3存储过程

存储过程可以实现数据库操作的增删改功能,在执行时需要调用。运用想函数一样,也可以有参数的参与。定义存储过程提供了过程封装的效果,执行只需调用,在更大程度上简化了数据处理过程。药品的进销存过程部分存储过程如下表所示。

表3-3

编号 P-1 P-3 P-4 P-5 P-6 P-7 P-8

存储过程名称 定义 见附录 见附录 见附录 见附录 见附录 见附录 见附录

作用

Goods_shelf pro_Gtype pro_cback pro_addgoods pro_delgoods pro_orderSale pro_updIn

查询某一药品保质期 查询剂型为普通片的药品 查询某种原因的药品的退货量 插入一条药品信息 删除一条药品记录 按药品销量排序 更新入库量

3.4.2建立关系表

供应商 列名 供应商编号 供应商名称

数据类型

约束

主外键

varchar(10) not null 主键 varchar(30) not null ——

供应商地址 供应商电话

varchar(40) varchar(20)

—— ——

药品 列名 药品名称 药品分类 药品剂型 药品单价 药品保质期

数据类型

约束

主外键

varchar(30) not null 主键 varchar(20) varchar(20) float date

—— ——

not null ——

——

职员 列名 职员编号 职员姓名 职员类别

仓库 列名 仓库编号 仓库类别

数据类型

约束

主外键

数据类型

约束

主外键

varchar(10) not null 主键 varchar(10) varchar(10)

—— ——

varchar(10) not null 主键 varchar(10) varchar(20)

—— ——

仓库地址

客户 列名 客户编号

数据类型

约束

主外键

varchar(10) not null 主键

客户姓名 客户性别 客户的电话

varchar(10) not null —— varchar(2)

—— ——

varchar(20)

采购

列名 数据类型 约束

采购单编号 varchar(10) not null

供应商编号 varchar(10) not null

药品名称 varchar(30) not null

职员编号 varchar(10) not null

采购量 int not null

发货 列名 发货单编号 供应商编号 药品名称 职员编号 发货量 发货日期

数据类型

约束

采购日期

date

主外键 主键 外键 外键 外键 —— ——

主外键 主键 外键 外键 外键 —— ——

varchar(10) not null varchar(8)

not null

varchar(30) not null varchar(10) not null int date

not null

采购退货 列名

数据类型

约束 not null not null not null not null

主外键 主键 外键 外键 外键

采购退货单编号 varchar(10) 供应商编号 药品名称 职员编号

varchar(10) varchar(30) varchar(10)

退货量 退货原因

int

varchar(30)

not null

—— ——

客户退货 列名

客户退货单编号 客户编号 药品名称 职员编号 退货量 退货原因

数据类型

约束

主外键

varchar(10) not null 主键 varchar(10) not null 外键 varchar(30) not null 外键 varchar(10) not null 外键 int

not null ——

——

varchar(30)

销售 列名 销售单编号 客户编号 药品名称 职员编号 销售量 销售日期

数据类型

约束

主外键 主键 外键 外键 外键 —— ——

varchar(10) not null varchar(10) not null varchar(30) not null varchar(10) not null int date

not null

客户订药 列名 订药单编号 客户编号 药品名称 职员编号 订药量

数据类型

约束

主外键

varchar(10) not null 主键 varchar(10) not null 外键 varchar(30) not null 外键 varchar(10) not null 外键 int

not null ——

订药日期 date ——

入库 列名 入库单编号 药品名称 仓库编号 职员编号 入库量 入库日期

数据类型

约束

主外键

varchar(10) not null 主键 varchar(30) not null 外键 varchar(10) not null 外键 varchar(10) not null 外键 int date

not null ——

——

出库 列名 出库单编号 药品名称 仓库编号 职员编号 出库量 出库日期

报损 列名 报损单编号 药品名称 仓库编号 职员编号 报损量 报损原因

数据类型

约束

主外键 主键 外键 外键 外键 —— ——

数据类型

约束

主外键

varchar(10) not null 主键 varchar(30) not null 外键 varchar(10) not null 外键 varchar(10) not null 外键 int date

not null ——

——

varchar(10) not null varchar(30) not null varchar(10) not null varchar(10) not null int

not null

varchar(30)

盘存 列名 盘存单编号 药品名称 仓库编号 职员编号 盘存量

数据类型

约束

主外键

varchar(10) not null 主键 varchar(30) not null 外键 varchar(10) not null 外键 varchar(10) not null 外键 int

not null ——

四、系统实现

4.1 数据库实施(详见附录)

数据库的物理设计阶段之后就进入了实施阶段,这一阶段要用SQL2000来操作。具体的数据库,数据表,视图,索引和存储过程等都是这个阶段用SQL 语句创建。

4.1.1数据库及数据库对象建立

药店的药品管理所涉及的对象主要包括:数据库、基本表、视图、索引、触发器以及存储过程。以实现对数据的操作的简便和有效。

(详细的sql 代码见附录)。 4.1.2 数据入库

对各个主要数据表要录入20条以上的记录,方法可用EXCEL 批量导入,也可以逐条录入。 4.1.3 数据库测试

主要内容是对建立的数据库及数据库对象进行测试 具体要求:

(1)要设计好测试数据

(2)对测试的结果要以图片形式,同时注意图片的格式 (3)对测试结果进行分析,是否满足设计要求。 (数据操作的验证,存储过程的验证详见附录。)

五、系统评价

这次数据库的课程设计是医院药品进销存系统,医院药品进销存系统能够为用户提供充足的信息和快捷的查询手段。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好等。这些优点能够极大地提高医院药品进销存系统的效率, 而在本系统中还有很多的遗漏和欠缺,但是基本的医院药品进销存系统的功能,已经能够实现。

六、课程设计心得、总结

在此次数据库设计中,我有一下心得及体会: 一.在这学期的数据库系统概论学习中,因为对数据库系统的认识不够深刻,以及平时所做的练习都是老师给定的表,自己只是做简单的查询,删除,更新工作,所以给了我一个很大的误区:数据库系统只是一个很简单的系统,它只会做简单的工作。在老师说做数据库设计师,我觉得就是一个简单的事情。但是我错了,在这次实习中我遇到了很多的问题,比如:对于我的题目《医药销售管理系统》,在对现实的抽象上我遇到了较多的问题,我觉得自己可以做的业务一经老师的指导才知道看似简单的问题其实是那么的复杂。

二.我深刻的感受到了数据库设计是环环嵌套的,只有做好了需求分析,有了好的数据流图,才会使后期的工作顺利的展开,否则就会在折回来接着做需求分析,所以我们要花大量的时间去做需求分析。

在此次课程设计中我按时完成了数据库设计的要求。同时经过这次课程设计我知道了做任何事都要事先考虑好所有可能发生的事情,然后做好相应的准备。

附录: Sql

语句

create database YYJXC --表

create table Supplier(

Supnumber varchar(10) primary key, Supname varchar(30) not null, Supadress varchar(40) not null, Supphone varchar(20))

create table Goods(

Gname varchar(30) primary key, Gkind varchar(20), Gtype varchar(20),

Gprice float not null, Gshelf date)

create table Employer(

Empnumber varchar(10) primary key, Empname varchar(10), Empkind varchar(10))

create table Hourse(

Hounumber varchar(10) primary key, Houkind varchar(10), Houaddr varchar(20))

create table Customer(

Cusnumber varchar(10) primary key, Cusname varchar(10) not null,

Cussex varchar(2) check(Cussex in('男', '女')), Cusphone varchar(20))

create table Buylist(

Buynumber varchar(10) primary key, Supnumber varchar(10), Gname varchar(30),

Empnumber varchar(10), Buyliang int not null, Buydate date,

foreign key (Supnumber) references Supplier(Supnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Sendlist(

Sendnumber varchar(10) primary key, Supnumber varchar(10), Gname varchar(30),

Empnumber varchar(10), Sendliang int not null, Senddate date,

foreign key (Supnumber) references Supplier(Supnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Sbacklist(

Sbacknumber varchar(10) primary key, Supnumber varchar(10),

Gname varchar(30),

Empnumber varchar(10), Sbackling int not null, Sbackreas varchar(30),

foreign key (Supnumber) references Supplier(Supnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Dyaolist(

Dynumber varchar(10) primary key, Gname varchar(30), Cusmumber varchar(10), Empnumber varchar(10), Dyliang int not null, Dydate date,

foreign key (Cusmumber) references Customer(Cusnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Salelist(

Salenumber varchar(10) primary key, Gname varchar(30), Cusmumber varchar(10), Empnumber varchar(10), Saleliang int not null, Saledate date,

foreign key (Cusmumber) references Customer(Cusnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Cbacklist(

Cbacknumber varchar(10) primary key, Gname varchar(30), Cusnumber varchar(10), Empnumber varchar(10), Cbackliang int not null, Cbackreas varchar(30),

foreign key (Cusnumber) references Customer(Cusnumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Inlist(

Innumer varchar(10) primary key, Gname varchar(30),

Hounnumber varchar(10), Empnumber varchar(10), Inliang int not null, Indate date,

foreign key (Hounnumber) references Hourse(Hounumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Outlist(

Outnumber varchar(10) primary key, Gname varchar(30),

Hounnumber varchar(10), Empnumber varchar(10), Outliang int not null, Outdate date,

foreign key (Hounnumber) references Hourse(Hounumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Lostlist(

Lostnumber varchar(10) primary key, Gname varchar(30),

Hounnumber varchar(10), Empnumber varchar(10), Lostliang int not null, Lostreas varchar(30),

foreign key (Hounnumber) references Hourse(Hounumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

create table Panclist(

Pancnumber varchar(10) primary key, Gname varchar(30),

Hounnumber varchar(10), Empnumber varchar(10), Pancliang int not null,

foreign key (Hounnumber) references Hourse(Hounumber), foreign key (Gname) references Goods(Gname),

foreign key (Empnumber) references Employer(Empnumber))

--视图

create view Vi_supplier as

select *

from Supplier

create view Vi_goods as

select * from Goods

create view Vi_sale as

select Gname,Saleliang from Salelist

create view Vi_baosun as

select Gname,Lostliang from Lostlist

create view Vi_pancun as

select Gname,Pancliang from Panclist

--索引

create nonclustered index In_Supname on Supplier(SupName) --触发器

--限制删除C-02客户的退货记录 create trigger tri_C02 on Cbacklist

instead of delete as begin if exists( select *

from deleted

where Cusnumber='C-02' )

print '删除记录' end --测试 delete

from Cbacklist

where Cusnumber='C-02'

--限制某一药品入库量不小于400 create trigger tri_Acc on Inlist

instead of insert,update as declare

@Gname char(30), @Inliang int select

@Gname=Gname, @Inliang=Inliang from inserted if @Inliang

print '入库量小于400' --测试 insert into Inlist

values('I-25','牛黄解毒片','H-01','E-16',300,'2011-4-15')

--限制更新的药品价格不小于1元,小于1元的改为1元 create trigger tri_gprice on Goods

instead of insert,update as

declare

@Gname varchar(30), @Gprice float select

@Gname=Gname, @Gprice=Gprice from inserted if

@Gprice

where Gname=@Gname

--测试

insert into Goods

values('三黄片',' 处方药',' 普通片',0.5,'2012-9-1')

--保质期到2010年的不允许插入 create trigger tri_gshelf

on Goods for insert as

if exists (

select * from Goods

where Year(Gshelf)

print '药品已过期' rollback end --测试

insert into Goods

values('泻立停',' 处方药',' 普通片',3,'2009-1-7')

--限制采购量更新量不小于100 create trigger tri_buy on Buylist

for insert,update as

if exists (

select *

from inserted

where Buyliang

print' 采购量小于100' end --测试

insert into Buylist

values('B-26','S-11','保和丸','E-04',50,'2012-1-12')

--存储过程

--查询某一药品保质期

create procedure Goods_shelf @Gname varchar(30) as

select Gname 药品名, Gshelf 保质期 from Goods

where Gname=@Gname --测试执行结果

exec Goods_shelf @Gname='防风通圣丸'

--查询剂型为普通片的药品 create procedure pro_Gtype as

select Gname 药品名,Gtype 剂型 from Goods

where Gtype='普通片' --测试执行结果 exec pro_Gtype

--查询某种原因的药品的退货量 create procedure pro_cback @BackSake varchar(30) as

select Goods.Gname 药品名,Cbackliang 退货量,Cbackreas 退货原因 from Goods,Cbacklist

where Goods.Gname=Cbacklist.Gname and Cbackreas=@BackSake --测试执行结果

exec pro_cback '损坏' exec pro_cback '数量有误'

--插入一条药品信息

create procedure pro_addgoods @Gname varchar(30), @Gkind varchar(20), @Gtype varchar(20), @Gprice float, @Gshelf date as

insert into Goods

values(@Gname,@Gkind,@Gtype,@Gprice,@Gshelf) --测试执行结果

exec pro_addgoods ' 牛黄解毒片',' 处方药',' 普通片',1.2,'2013-2-3'

--删除一条药品记录

create procedure pro_delgoods @Gname char(30) as delete

from Goods

where Gname=@Gname

--测试执行结果

exec pro_delgoods '牛黄解毒片'

--按销售量排序

create procedure pro_orderSale as

select Goods.Gname 药品名,Saleliang 销售量 from Goods,Salelist

where Goods.Gname=Salelist.Gname order by Saleliang desc --测试执行结果 exec pro_orderSale

--更新入库量

create procedure pro_updIn as

update Inlist

set Inliang=Inliang+500 --测试执行结果 exec pro_updIn

drop procedure pro_updIn

Sql 语句验证

视图过程验证:

视图验证结果(Vi_supplier)

视图验证结果(Vi_sale) 视图验证结果(Vi_pancun)

存储过程验证:

存储过程验证(Goods_shelf)

存储过程验证(pro_Gtype)

存储过程验证(pro_cback)

存储过程验证(pro_orderSale)

存储过程验证(pro_updIn)

触发器验证:

触发器验证(tri_C02)

触发器验证(tri_Acc)

触发器验证(tri_gprice)

触发器验证(tri_gshelf)

触发器验证(tri_buy)


相关文章

  • 医院进销存管理系统
  • 前 言 ******市医院建于1917年, 但是2001年底通过国家三级综合性医院评审, 成为******市最大的三级甲等综合性医院,是该地域的医疗.教学.科研中心. 随着业务的不断发展和医院规模的扩大,越来越多的分院相继出现.分院遍及的范 ...查看


  • 新旧医院会计制度下的药品会计核算
  • 新旧医院会计制度下的药品会计核算 [提要] 药品是医院在提供医疗服务工作中必不可少的物资,药品消耗占医院各种物资消耗的比重很大,药品会计则对药品起到了重要的核算和监督作用.财政部于2010年12月31日颁布,2012年1月1日全面实施的新& ...查看


  • 项目需求分析报告
  • 项目需求分析报告 文档名称: 项目名称: 软件标识: 项目负责人: 项目团队成员: 填写时间: 文档编号: 版 本 号: 项目需求分析报告 药品进销存管理系统 2013年5月20日 目 录 1.引言 .................... ...查看


  • 信息管理与信息系统专业毕业论文选题
  • 信息管理与信息系统专业毕业论文选题 一.管理信息系统设计与开发 1.IT 行业市场情报管理信息系统设计与开发 2.某工业企业生产业务处理信息系统设计与开发 3.某产品质量管理信息系统设计与开发 4.某工业企业设备管理信息系统设计与开发 5. ...查看


  • 无忧保-创新医保监管方式 依托大数据撬动改革
  • 近年来, 天津市. 吉林省. 浙江杭州市. 广东湛江市. 四川成都市等地区, 开展了一场以信息化为手段. 全方位. 实时监控定点医疗机构. 定点药店和参保人员医疗行为的 "智能监管平台" 改革. 江苏徐州市也是这场改革的 ...查看


  • 妇幼保健机构会计核算办法探讨
  • 提要妇幼保健机构既是事业单位,同时又是专科医院,其账务处理既不能简单地按照<事业单位会计制度>,也不能简单地按照<医院会计制度>来核算,本文探析药品.收入.支出的会计核算. 关键词:妇幼保健:会计核算:药品 中图分类 ...查看


  • 武强德仁医院药房药品进销存管理制度 (1)
  • 武强德仁医院药房药品进销存管理制度 为加强药房管理,保证药品质量根据药品管理办法的规定,对药房药品进销存制定如下管理制度,请各科室认真执行. 一.药房工作人员必须要高度责任心,认真细心做好各项工作. 二.药品实行实物负责制,差货赔偿制. 三 ...查看


  • 连锁药店管信
  • 管理信息系统作业 作业名称:课程老师:小组成员: 二零一三年 十二月 目录 第一章 现行系统概述 ....................................................................... ...查看


  • 药店管理系统结账模块
  • 药店管理系统销售结账模块 1. 引言 科学的进步和生产的发展使人类的意识总量不断增长,生产社会化趋势的扩大和社会对产品需求的多样化,生产经营活动中涉及内外部的信息量的迅速膨胀等因素,对信息进行收集.加工.传递等过程的时间性和准确性都提出了更 ...查看


热门内容