资源描述
《数据库原理和设计》
课程设计试验汇报
药店药品管理系统数据库
专 业 计算机科学和技术
班 级 4班
学 号 2080 2085 2086
学生姓名 周雪峰 李毓磊 张凯峰
任课老师 朱焱老师
教导老师 谭洁帆, 林钊
12 月 14 日
一、课程设计目标
(1)加深了解数据库基础概念和原理,提升数据库设计能力
(2)掌握数据流图、ER图,关系模式设计方法
(3)熟练掌握SQL定义子语言,操纵子语句命令语句
(4)掌握关系模型上完整性约束机智
(5)熟悉SQL Server数据库开发方法,和一定数据库管理技术
(6)提升数据库设计标准化文档书写能力
二、课程设计试验环境
Windows XP
Microsoft SQL Server
三、课程设计内容
1、需求分析阶段
1.1系统分析
一、系统处理对象分析
(1)药店药品信息:关键包含 药品编号 药品名称 药品分类 药品规格 药品品牌 进药单价 买药单价等 利用这些信息能够方便查询药品基础信息和了解药品盈利情况
(2)制药商信息:制药商名称 制药商编号 企业地点 联络电话 联络网址 利用这些信息便于进药部门 查找药品产地,联络药品退订情况
(3)买药人信息:买药人编号 买药人姓名 心别 年纪 电话 住址 利用这些信息便于药品出现问题时立即和当事人联络,同时便于退药时确定买药信息
(4)药品存放信息:药品编号 柜台编号
(5)柜台信息:柜台名称 柜台编号
(6)药品退订信息:药品编号 制药商编号 处理时间 药品数量
(7)药品售退信息: 药品编号 买药人编号 药品数量 柜台编号
二、系统功效要求分析
药品管理系统应含有以下多个基础功效:
(1) 药品购进和退订信息查询
(2) 买药人员信息查询和统计
(3) 药品存放信息查询和更新
(4) 药品销售情况统计和药品售退情况查询
(5) 盈利查询和统计
(6) 药品剩下数量查询和缺货药品查询及统计
三、总体安全要求
(1) 保密性。机密或敏感数据在存放处理传输过程中应保密,并用户只有在授权后才能够访问。不一样用户只能访问系统收授权视图,这取决于其授权等级
(2) 完整性。确保系统中信息处于一个完整和未受损害状态,预防因未授权访问,部件故障或其它错误而引发信息篡改,破坏或丢失。药品管理系统信息对不一样用户应有不一样访问权限,购药人员只能查询库存信息,而库存更新应只能库存管理员进行等等。
(3) 可靠性:保障系统在复杂网络环境下提供可连续、可靠服务
1.2业务分析
药品管理系统业务应有以下3个:
(1) 药品购进(退订)业务:购药人员依据售药处对药品需求和库存信息,制订药品需求单并从制药商处购进药品,并将合格药品单送往 库存管理员进行药品存放,将不合格药品单送往制药商处进行退货。
(2) 存药业务:库存管理员负责药品出入库。依据合格购货药品单,对新购进药品进行分类并将药品入库;依据取药单(退药单)将药品出库(入库)并修改库存信息和流水账目,若药品缺货,将缺货药品信息单传给购药人员。
(3) 售药业务:买药人将取药单(退药单)交给售药处,确定后,将药品售出(退回),并将取药单(退药单)交给库存管理员
业务步骤图以下:
(1)药品购进业务步骤图
合格
不合格
库存信息
购药人员
填写药品取货单
药品缺货单
制药商
药品取货单
检验药名单
药品单
库存管理员
药品入库单
存档
退货单
(2)存药业务步骤图
买药人
退药单
取药单
售药处
库存帐目
取药单据
库存管理员
存档
售药处
确定
退药单
(3)售药业务步骤图
售药处
取药单
取药单
库存管理员
登记流水账
流水账
改账
库存帐目
药品入库单
购药员
1.3数据步骤图
系统全局数据流图
数据步骤图是一个能全方面地描述信息系统逻辑模型关键工具,她能够用少数多个符号综合地反应出信息在系统中流动、处理和存放情况,它有抽象性、概括性、层次性三大特点。
经过对药店中药品销售业务调查、数据搜集处理和信息步骤分析,明确了该系统关键功效,分别为(1)药品购进和药品退订信息查询;(2)买药人员信息查询和统计;(3)药品存放信息查询和更新;(4)药品销售情况统计和药品被退情况查询;(5)盈利查询和统计;(6)药品剩下数量查询和缺货药品查询及统计。图,即为药品销售系统全局数据流图,即第一层数据步骤图。
药品发货单
不 符 合
存 储 清 单
符合
库存药品清单
返回重新清点
决定退药
退 药 单
出 库 单
退药单据
取药单
取药单据
退货单
商品不合格单
入库单
制药商
1.1
检验药品
1
库存台账
1.3
退货
2
流水账
2.3
退药
2.1
售药
买药人员
2.2
决定退药
库存管理
3.1
确定药品
3.2
药品进库
药品订货单
药品合格单
1.2
药品进库
系统局部数据流图
全局数据流图从整体上描述了系统数据流向和加工处理过程,为了清楚地描述系统数据流向和加工处理每个细节,在全局DFD基础上,对全局DFD中一些局部进行单独放大,深入细化,过程以下:
药品销售过程关键分为三个业务,第一个业务为药品购进业务,第二个业务为存药业务,第三个业务为售药业务。针对三个业务得到第二层数据步骤图以下:
(1)药品购进业务步骤图
退货单
入库单
药品合格单
药品订货单
药品发货单
商品不合格单
流水账
库存台账
制药商
1.1
检验药品
1.2
药品进库
1
1.3
退货
2
(2)存药业务步骤图
决定退药
退药单据
退药单
出库单
取药单
取药单据
流水账
库存台账
买药人员
2.1
售药
1
2
2.3
退药
2.2
决定退药
(3)售药业务步骤图
不符合
返回重新清点
存放清单
符合
库存药品清单
库存台账
库存管理
3.1
确定药品
3.2
药品进库
1
2.3
退药
1.4数据字典
因为数据步骤图表示不够正确、具体,只有当数据步骤图中出现每一个成份全部给出定义以后,才能完整、正确地描述一个系统,所以,有必需建立数据字典来对数据步骤图中各个元素作出具体说明。数据字典通常包含数据项、数据结构、数据存放和处理过程5个部分,其中数据项是数据最小组成单位,若干个数据项能够组成一个数据结构,数据字典经过对数据项和数据结构定义来描述数据流、数据存放逻辑内容。
(1) 数据项
该系统设计数据项共有24个,以下表:
数据项编号
数据项名
存放结构
别名
取值约束
DI-1
Dno
char(5)
药品编号
DI-2
Dname
char(20)
药品名称
DI-3
Dclass
char(8)
药品分类
DI-4
Dguige
char(10)
药品规格
DI-5
Dbrand
char(10)
药品品牌
DI-6
Dprice1
float
进药单价
DI-7
Dprice2
float
卖药单价
大于零
DI-8
Pno
char(5)
买药人编号
大于零
DI-9
Pname
char(10)
买药人姓名
DI-10
Page
int
年纪
1-255
DI-11
Psex
char(2)
性别
男女
DI-12
Pphone
char(11)
联络电话
DI-13
Paddress
char(20)
住址
DI-14
Mno
char(5)
制药商编号
DI-15
Mname
char(20)
制药商名称
DI-16
Mplace
char(20)
企业地点
DI-17
Mphone
char(11)
联络电话
DI-18
Memail
char(15)
联络网址
DI-19
Lname
char(20)
柜台名称
DI-20
Lno
char(5)
柜台编号
DI-21
Quantity
int
药品数量
大于零
DI-22
Time_SD
smalldatetime
处理时间
DI-23
Supply
char(4)
订退方法
订购、退订
DI-24
Deal
char(4)
售退方法
售出、退回
数据结构
该系统数据结构共有7个,具体见下表:
数据结构编号
数据结构名
含义说明
组成
DS-1
Drug
药品信息
Dno Dname Dclass Dbrand Dprice1 Dprice2
DS-2
Patient
买药人信息
Pno Pname Page Psex Pphone Paddress
DS-3
Maker
制药商信息
Mno Mname Mplace
Mphone
Memail
DS-4
Storage
柜台信息
Lno Lname
DS-5
Order_Back
药品退订信息
Mno Dno Time_SD Quantity Supply
DS-6
Buy_Back
药品退售信息
Pno Dno Time_SD
Quantity Deal
DS-7
Stored
药品存放信息
Dno Lno Quantity
2.概念设计部分
2.1 分析过程
依据之前数据流图和数据字典,我们提取出实体、实体属性、标识实体码、确定实体之间联络及其类型。定义以下:
药品:[药品编号、药品名称、药品分类、药品规格、药品品牌、进药单价‘买药单价]
买药人员:[买药人编号、买药人性命、性别、年纪、联络电话、住址]
制药商:[制药商编号、制药商名称、企业地位、联络电话、联络网址]
柜台信息:[柜台编号、柜台名称]
药品退订:[药品编号、制药上编号、药品数量、处理时间、退订方法]
药品售退:[药品编号、买药人编号、药品数量、处理时间、售退方法]
药品储存:[药品编号、柜台编号、药品数量]
2.2 子模块ER图
2.2.1存药子模块ER图
2.2.2售药子模块ER图
2.2.3购进药品子模块ER图
2.3 全局ER图
3.逻辑设计部分
3.1数据库关系模式定义描述
1. Drug(药品)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Dno
char(5)
药品编号
否
主键
Dname
char(20)
药品名称
否
Dclass
char(10)
药品分类
Dguige
char(10)
药品规格
Dbrang
char(10)
药品品牌
Dprice1
floar
进药单价
否
大于0
Dprice2
floar
买药单价
否
大于0
2.patient(买药人)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Pno
char(5)
买药人编号
否
主键
Pname
char(20)
买药人姓名
否
Psex
char(10)
性别
1-150
Page
int
年纪
nan、nv
Pphone
char(11)
联络号码
否
Paddress
char(20)
进住址
3.Maker(制药商)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Mno
char(5)
制药商编号
否
主键
Mname
char(20)
制药商名称
否
Mpalce
char(20)
企业地址
否
Mphone
char(11)
联络电话
否
Meail
char(20)
联络邮箱
否
4..Storage(存放位置)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Lno
char(5)
存放编号
否
主键
Lname
char(20)
存放位置
否
大于0
5, DOrder(订药)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Mno
char(5)
制药商编号
否
外键(主键之一)
Dno
char(5)
药品编号
否
外键(主键之一)
Quantity
int
药品数量
否
大于0
Time_SD
smalldatetime
处理时间
Supply
char(4)
订退方法
否
订购
6.Dback(药品退订)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Mno
char(5)
制药商编号
否
外键(主键之一)
Dno
char(5)
药品编号
否
外键(主键之一)
Quantity
int
药品数量
否
大于0
Time_SD
smalldatetime
处理时间
Supply
char(4)
订退方法
否
退订
7. Dbuy(买药)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Pno
char(5)
买药人编号
否
外键(主键之一)
Dno
char(5)
药品编号
否
外键(主键之一)
Quantity
int
药品数量
否
大于0
Time_SD
smalldatetime
买药时间
Deal
char(4)
售退方法
否
售出
8、BBack(退药)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Pno
char(5)
买药人编号
否
外键(主键之一)
Dno
char(5)
药品编号
否
外键(主键之一)
Quantity
int
药品数量
否
大于0
Time_SD
smalldatetime
买药时间
Deal
char(4)
售退方法
否
售出
9.Stored(库存)
属性名
数据类型
别名(注释)
可否为空
主键 / 外键
取值范围
Lno
char(5)
存放编号
否
外键(主键之一)
Dno
char(5)
药品编号
否
外键(主键之一)
大于0
Quantity
int
药品数量
否
3.2用户子模式——视图设计
1、DM_P(订药)
属性名
数据类型
别名(注释)
可否为空
取值范围
Dname
char(5)
药品名称
否
Dguige
char(5)
药品规格
否
DBrand
int
药品品牌
否
Mname
char(20)
制药商名称
Mpalace
char(4)
企业地点
Mphone
char)11)
否
Meamil
char(20)
否
Time_SD
smalldatetime
处理时间
否
Supply
char(4)
处理方法
否
订购
Qauntity
int
数量
否
大于0
2.DM_M(药品退订)
属性名
数据类型
别名(注释)
可否为空
取值范围
Dname
char(5)
药品名称
否
Dguige
char(5)
药品规格
否
Dpricel1
float
药品进价
否
大于0
Dpricel2
float
药品售价
否
大于0
DBrand
int
药品品牌
否
Mname
char(20)
制药商名称
Mpalace
char(4)
企业地点
Mphone
char)11)
否
Meamil
char(20)
否
Time_SD
smalldatetime
处理时间
否
Supply
char(4)
处理方法
否
退订
Qauntity
int
数量
否
大于0
3. PD_M(买药)
属性名
数据类型
别名(注释)
可否为空
取值范围
Pname
char(10)
买药人名字
否
Page
int
年纪
1-150
Pphone
char(11)
电话
否
Paddress
char(20)
地址
Dname
char(5)
药品名称
否
Dguige
char(5)
药品规格
否
Dpricel2
float
药品售价
否
大于0
Time_SD
smalldatetime
处理时间
否
Qauntity
int
数量
否
大于0
4、DS_M(药品存放)
属性名
数据类型
别名(注释)
可否为空
取值范围
Dno
char(5)
药品编号
否
Dname
char(5)
药品名称
否
Dpricel1
float
药品进价
否
大于0
Lname
char(20)
存放位置
否
Quantity
int
药品数量
否
大于0
4.物理设计部分
4.1目标和任务
1. 确定数据库物理结构,关键指存取方法和存放结构
2. 对物理结构进行评价,评价关键是时间和空间效率数据存取方法
4.2 数据存取方法
4.2.1基础表索引
1. 因为基础表Stored主码Dno,Lno常常在查询条件中出现,且它们更新平率较低,所以考虑在这组属性上建立作为唯一索引
2. 因为基础表DOrder主码Dno,Mno常常在查询条件和链接操作中出现,所以考虑在这组属性上建立作为唯一索引
3. 由表Dbuy主码Dno,Pno取值唯一,常常在查询条件中出现,且她们更新平率较低,所以考虑在这组属性上建立作为唯一索引
4.2.2 系统模块分析
1、 药品基础信息查询和更新(插入、删除、修改)操作
2、 制药商基础信息查询和更新(插入、删除、修改)操作
3、 买药人基础信息查询和更新(插入、删除、修改)操作
4、 药品存放信息查询和更新(插入、删除、修改)操作
5、 药品盈利情况统计查询
6、 买药人购置药品信息查询
7、 管理员对买药人购置药品和退回药品信息查询
8、 管理员对购药人员订购药品和退订药品信息查询
4.2.3 系统模块分析
四、程序源码和运行结果
1表和视图建立
1.1 创建购药统计表
create table DBuy
( Pno char(5 ) not null,
Dno char(5) not null,
Quantity int not null ,
Time_SD smalldatetime,
Deal char(4) not null,
create nonclustered index timeidx on DBuy(Time_SD DESC),
primary key(Pno,Dno),
foregin key(Pno) reference Parient(Pno),
forgrin key(Dno) reference Drug(Dno),
check(Quantity>'0'),
check(Deal='售出')
);
1.2 创建药品存放表
create table Stored
( Lno char(5 ) not null,
Dno char(5) not null,
Quantity int not null ,
primary key(Lno,Dno),
foregin key(Lno) reference Storage(Lno),
forgrin key(Dno) reference Drug(Dno),
check(Quantity>'0')
);
1.3 创建买药视图
create view DM_P
as
select Dname,Dguige,Drand,Mname,Mplace,Mphone,Memail
from Drug,Maker,Dorder
where Drug.Dno=Dorder.Dno and Maker.Mno=Dorder.Mno
with check option
1.4 创建退药视图
create view DM_M
as
select Dname,Dguige,Dbrand,Dprice1,Dpricel2,Mname,Mplace,Mphone,Memail
from Drug,Maker,DBack
where Drug.Dno=DBack.Dno and Maker.Mno=DBack.Mno
with check option
2 数据插入
2.1 向 Dorder表中插入一个订购统计
insert into Dorder values('M0001','D0009','150','-10-23','订购')
5.2.2 向Drug表插入一个新药品统计
insert into Drug values('D0024','维生素','维生素','125s*36粒','太极',1.50,2.00)
3数据查询
3.1 全药品存放位置及库存查询
3.2 查询在-8-21退订药品数量大于80药品具体信息
3.3查询在-8-05 前买药病人姓名和地址
4 数据统计
4.1 统计在-8-21卖出各药品数量
4.2 统计编号为"P0001"病人购置各药品总数量
5 数据修改
5.1 将Drug表中编号为D0001药品名称由666感冒灵更改为999感冒灵
5.2 修改存放在二层左位置全部药品库存数量为100
五、课程设计总结和感悟
在学习数据库这门课程时,感觉学到知识还是掌握了,而且认为自己已经了解了,但真正经过一个课程设计去应用这些知识时候才发觉,会碰到很多困难,而且学到知识自己其实并不能熟练应用,将知识应用到实际工作并没有很好完成。
在课程设计碰到了很多问题,比如:
插入数据时,提醒插入数据长度不符合要求,原因是未考虑到汉字占两个字节,char[]长度设置过小,处理措施是修改长度即可
无法插入数据到一个表中,总是提醒外键约束错误,原因是因为该表中有外键,而外键所在表未插入数据,所以无法插入数据到该表(插入外键值不存在)。处理方法是先将外键所在表数据插入,在插入该表数据。
数据库建立在一个账号上,只有一个人能够操作,显得不方便。能够经过授权GRANT给另一个账号,就能够两个账号进行操作,方便了很多。
问题和困难还碰到过很多,在这不一一列数。
在课程设计过程中,经历了很多相关设计工作,也学习到了很多书本上有和没有知识,更关键是,经过不停实践和自学,不停发觉问题,思索问题,进而处理问题,有效提升了我们动手能力,并加深了对知识了解和掌握,从一开始需求分析,到概念设计,到逻辑设计,再到物理设计,一直到上机建立数据库,一步步走来,经过我们自己亲自分析、设计、和动手,也让我们不停进步和成长。
这次数据库课程设计给我最大印象就是假如自己有了爱好,就动手去做,任何困难在勇气和毅力面前全部是"纸老虎"。从做这个数据库开始不管碰到什么困难,我们全部一直坚持,努力去处理,经过上网,和同学交流,向老师请教等等手段。
经过这次课程设计完成,使我们对所学知识有了深入掌握,同时也经过实践发觉了自己不足。所以在以后学习中,我们仍应该好好学习,不停完善自我。当然,本系统仍然存在了很多不足之处,如功效不够完善,安全性问题没有很好处理等,恳请老师谅解。
展开阅读全文