目 录
一、概述 . ................................................................. 错误!未定义书签。 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)