1、数据库原理与设计课程设计实验报告药店药品管理系统数据库专 业 计算机科学与技术 班 级 4班 学 号 20132080 20132085 20132086 学生姓名 周雪峰 李毓磊 张凯峰 任课教师 朱焱老师 辅导教师 谭洁帆, 林钊 2015年 12 月 14 日一、课程设计目的 (1)加深理解数据库的基本概念与原理,提高数据库设计能力(2)掌握数据流图、ER图,关系模式的设计方法(3)熟练掌握SQL定义子语言,操纵子语句命令语句(4)掌握关系模型上的完整性约束机智(5)熟悉SQL Server数据库开发方法,与一定的数据库管理技术(6)提高数据库设计标准化文档书写能力二、课程设计实验环境
2、Windows XP Microsoft SQL Server2000三、课程设计内容1、需求分析阶段1。1系统分析一、系统处理对象分析(1)药店药品信息:主要包括 药品编号 药品名称 药品分类 药品规格 药品品牌 进药单价 买药单价等 利用这些信息可以方便查询药品基本信息以及了解药品盈利情况(2)制药商信息:制药商名称 制药商编号 公司地点 联系电话 联系网址 利用这些信息便于进药部门 查找药品产地,联系药品退订情况(3)买药人信息:买药人编号 买药人姓名 心别 年龄 电话 住址 利用这些信息便于药品出现问题时及时与当事人联系,同时便于退药时确认买药信息(4)药品存储信息:药品编号 柜台编号
3、(5)柜台信息:柜台名称 柜台编号(6)药品退订信息:药品编号 制药商编号 处理时间 药品数量 (7)药品售退信息: 药品编号 买药人编号 药品数量 柜台编号 二、系统功能要求分析药品管理系统应具备以下几个基本功能:(1) 药品购进和退订信息查询(2) 买药人员信息查询与统计(3) 药品存储信息查询与更新(4) 药品销售情况统计与药品售退情况查询(5) 盈利查询与统计(6) 药品剩余数量查询与缺货药品查询及统计三、总体安全要求(1) 保密性。机密或敏感数据在存储处理传输过程中应保密,并用户只有在授权后才可以访问.不同的用户只能访问系统收授权的视图,这取决于其授权级别(2) 完整性.保证系统中的
4、信息处于一种完整和未受损害的状态,防止因未授权访问,部件故障或其他错误而引起的信息篡改,破坏或丢失.药品管理系统的信息对不同用户应有不同访问权限,购药人员只能查询库存信息,而库存的更新应只能库存管理员进行等等。(3) 可靠性:保障系统在复杂的网络环境下提供可持续、可靠的服务1。2业务分析药品管理系统的业务应有以下3个:(1) 药品购进(退订)业务:购药人员根据售药处对药品的需求以及库存信息,制定药品的需求单并从制药商处购进药品,并将合格药品单送往 库存管理员进行药物存储,将不合格药品单送往制药商处进行退货.(2) 存药业务:库存管理员负责药品的出入库。根据合格购货药品单,对新购进的药品进行分类
5、并将药品入库;根据取药单(退药单)将药品出库(入库)并修改库存信息和流水账目,若药品缺货,将缺货药品信息单传给购药人员。(3) 售药业务:买药人将取药单(退药单)交给售药处,确认后,将药品售出(退回),并将取药单(退药单)交给库存管理员业务流程图如下: (1)药品购进业务流程图合格不合格库存信息购药人员填写药品取货单药品缺货单制药商药品取货单检查药名单药品单库存管理员药品入库单存档退货单(2)存药业务流程图买药人退药单取药单售药处库存帐目取药单据库存管理员存档售药处确认退药单(3)售药业务流程图售药处取药单取药单库存管理员登记流水账流水账改账库存帐目药品入库单购药员1。3数据流程图系统全局数据
6、流图 数据流程图是一种能全面地描述信息系统逻辑模型的主要工具,他可以用少数几种符号综合地反映出信息在系统中的流动、处理和存储情况,它有抽象性、概括性、层次性三大特点。经过对药店中药品的销售业务调查、数据的收集处理和信息流程分析,明确了该系统的主要功能,分别为(1)药品购进和药品退订信息查询;(2)买药人员信息查询与统计;(3)药品存储信息查询与更新;(4)药品销售情况统计和药品被退情况查询;(5)盈利查询与统计;(6)药品剩余数量查询与缺货药品查询及统计。如图,即为药品销售系统的全局数据流图,即第一层数据流程图。药品发货单不 符 合存 储 清 单符合库存药品清单返回重新清点决定退药退 药 单出
7、 库 单退药单据取药单取药单据退货单商品不合格单入库单制药商1.1检验药品1库存台账1.3退货2流水账2.3退药2.1售药买药人员2.2决定退药库存管理3.1确认药品3.2药品进库药品订货单药品合格单1.2药品进库系统局部数据流图全局数据流图从整体上描述了系统的数据流向和加工处理过程,为了清楚地描述系统数据的流向和加工处理的每个细节,在全局DFD基础上,对全局DFD中的某些局部进行单独放大,进一步细化,过程如下:药品销售过程主要分为三个业务,第一个业务为药品购进业务,第二个业务为存药业务,第三个业务为售药业务。针对三个业务得到第二层数据流程图如下:(1)药品购进业务流程图退货单入库单药品合格单
8、药品订货单药品发货单商品不合格单流水账库存台账制药商1.1检验药品1.2药品进库11.3退货2(2)存药业务流程图决定退药退药单据退药单出库单取药单取药单据流水账库存台账买药人员2.1售药122.3退药2.2决定退药(3)售药业务流程图不符合返回重新清点存储清单符合库存药品清单库存台账库存管理3.1确认药品3.2药品进库12.3退药1。4数据字典由于数据流程图表达不够准确、具体,只有当数据流程图中出现的每一个成分都给出定义之后,才能完整、准确地描述一个系统,因此,有必要建立数据字典来对数据流程图中的各个元素作出详细的说明。数据字典通常包括数据项、数据结构、数据存储和处理过程5个部分,其中数据项
9、是数据的最小组成单位,若干个数据项可以组成一个数据结构,数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。(1) 数据项该系统设计的数据项共有24个,如下表:数据项编号数据项名存储结构别名取值约束DI1Dnochar(5)药品编号DI-2Dnamechar(20)药品名称DI3Dclasschar(8)药品分类DI4Dguigechar(10)药品规格DI5Dbrandchar(10)药品品牌DI6Dprice1float进药单价DI7Dprice2float卖药单价大于零DI8Pnochar(5)买药人编号大于零DI-9Pnamechar(10)买药人姓名DI10Page
10、int年龄1255DI-11Psexchar(2)性别男女DI12Pphonechar(11)联系电话DI-13Paddresschar(20)住址DI-14Mnochar(5)制药商编号DI15Mnamechar(20)制药商名称DI-16Mplacechar(20)公司地点DI-17Mphonechar(11)联系电话DI-18Memailchar(15)联系网址DI19Lnamechar(20)柜台名称DI20Lnochar(5)柜台编号DI21Quantityint药品数量大于零DI22Time_SDsmalldatetime处理时间DI23Supplychar(4)订退方式订购、退订
11、DI-24Dealchar(4)售退方式售出、退回数据结构该系统的数据结构共有7个,具体见下表:数据结构编号数据结构名含义说明组成DS-1Drug药品信息Dno Dname Dclass Dbrand Dprice1 Dprice2DS-2Patient买药人信息Pno Pname Page Psex Pphone PaddressDS-3Maker制药商信息Mno Mname MplaceMphoneMemailDS4Storage柜台信息Lno LnameDS5Order_Back药品退订信息Mno Dno Time_SD Quantity SupplyDS-6Buy_Back药品退售信息
12、Pno Dno Time_SDQuantity DealDS-7Stored药品存储信息Dno Lno Quantity2.概念设计部分2。1 分析过程根据之前的数据流图和数据字典,我们提取出实体、实体的属性、标识实体的码、确认实体之间的联系及其类型。定义如下: 药品:药品编号、药品名称、药品分类、药品规格、药品品牌、进药单价买药单价 买药人员:买药人编号、买药人性命、性别、年龄、联系电话、住址 制药商:制药商编号、制药商名称、公司地位、联系电话、联系网址 柜台信息:柜台编号、柜台名称 药品退订:药品编号、制药上编号、药品数量、处理时间、退订方式 药品售退:药品编号、买药人编号、药品数量、处理
13、时间、售退方式 药品储存:药品编号、柜台编号、药品数量2.2 子模块ER图 2.2.1存药子模块ER图 2。2。2售药子模块ER图2.2。3购进药品子模块ER图2。3 全局ER图 3。逻辑设计部分3。1数据库关系模式定义描述1. Drug(药品)属性名数据类型别名(注释)可否为空主键 / 外键取值范围Dnochar(5)药品编号否主键Dnamechar(20)药品名称否Dclasschar(10)药品分类Dguigechar(10)药品规格Dbrangchar(10)药品品牌Dprice1floar进药单价否大于0Dprice2floar买药单价否大于02。patient(买药人)属性名数据类
14、型别名(注释)可否为空主键 / 外键取值范围Pnochar(5)买药人编号否主键Pnamechar(20)买药人姓名否Psexchar(10)性别1-150Pageint年龄nan、nvPphonechar(11)联系号码否Paddresschar(20)进住址3.Maker(制药商)属性名数据类型别名(注释)可否为空主键 / 外键取值范围Mnochar(5)制药商编号否主键Mnamechar(20)制药商名称否Mpalcechar(20)公司地址否Mphonechar(11)联系电话否Meailchar(20)联系邮箱否4.。Storage(存储位置)属性名数据类型别名(注释)可否为空主键
15、/ 外键取值范围Lnochar(5)存储编号否主键Lnamechar(20)存储位置否不小于05, DOrder(订药)属性名数据类型别名(注释)可否为空主键 / 外键取值范围Mnochar(5)制药商编号否外键(主键之一)Dnochar(5)药品编号否外键(主键之一)Quantityint药品数量否大于0Time_SDsmalldatetime处理时间Supplychar(4)订退方式否订购6。Dback(药品退订)属性名数据类型别名(注释)可否为空主键 / 外键取值范围Mnochar(5)制药商编号否外键(主键之一)Dnochar(5)药品编号否外键(主键之一)Quantityint药品数
16、量否大于0Time_SDsmalldatetime处理时间Supplychar(4)订退方式否退订7。 Dbuy(买药)属性名数据类型别名(注释)可否为空主键 / 外键取值范围Pnochar(5)买药人编号否外键(主键之一)Dnochar(5)药品编号否外键(主键之一)Quantityint药品数量否大于0Time_SDsmalldatetime买药时间Dealchar(4)售退方式否售出8、BBack(退药)属性名数据类型别名(注释)可否为空主键 / 外键取值范围Pnochar(5)买药人编号否外键(主键之一)Dnochar(5)药品编号否外键(主键之一)Quantityint药品数量否大于
17、0Time_SDsmalldatetime买药时间Dealchar(4)售退方式否售出9.Stored(库存)属性名数据类型别名(注释)可否为空主键 / 外键取值范围Lnochar(5)存储编号否外键(主键之一)Dnochar(5)药品编号否外键(主键之一)不小于0Quantityint药品数量否3.2用户子模式视图设计1、DM_P(订药)属性名数据类型别名(注释)可否为空取值范围Dnamechar(5)药品名称否Dguigechar(5)药品规格否DBrandint药品品牌否Mnamechar(20)制药商名称Mpalacechar(4)公司地点Mphonechar)11)否Meamilch
18、ar(20)否Time_SDsmalldatetime处理时间否Supplychar(4)处理方式否订购Qauntityint数量否大于02.DM_M(药品退订)属性名数据类型别名(注释)可否为空取值范围Dnamechar(5)药品名称否Dguigechar(5)药品规格否Dpricel1float药品进价否大于0Dpricel2float药品售价否大于0DBrandint药品品牌否Mnamechar(20)制药商名称Mpalacechar(4)公司地点Mphonechar)11)否Meamilchar(20)否Time_SDsmalldatetime处理时间否Supplychar(4)处理方
19、式否退订Qauntityint数量否大于03. PD_M(买药)属性名数据类型别名(注释)可否为空取值范围Pnamechar(10)买药人名字否Pageint年龄1-150Pphonechar(11)电话否Paddresschar(20)地址Dnamechar(5)药品名称否Dguigechar(5)药品规格否Dpricel2float药品售价否大于0Time_SDsmalldatetime处理时间否Qauntityint数量否大于04、DS_M(药品存储)属性名数据类型别名(注释)可否为空取值范围Dnochar(5)药品编号否Dnamechar(5)药品名称否Dpricel1float药品进
20、价否大于0Lnamechar(20)存储位置否Quantityint药品数量否大于04.物理设计部分4.1目标与任务1. 确认数据库的物理结构,主要指存取方式和存储结构2。 对物理结构进行评价,评价重点是时间和空间效率数据存取方法 4。2 数据存取方法4。2。1基本表索引1. 由于基本表Stored的主码Dno,Lno经常在查询条件中出现,且它们更新平率较低,所以考虑在这组属性上建立作为唯一索引2. 由于基本表DOrder的主码Dno,Mno经常在查询条件和链接操作中出现,所以考虑在这组属性上建立作为唯一索引3. 由表Dbuy的主码Dno,Pno取值唯一,经常在查询条件中出现,且她们更新平率较
21、低,所以考虑在这组属性上建立作为唯一索引4。2.2 系统模块分析1、 药品基本信息的查询与更新(插入、删除、修改)操作2、 制药商基本信息的查询与更新(插入、删除、修改)操作3、 买药人基本信息的查询与更新(插入、删除、修改)操作4、 药品存储信息的查询与更新(插入、删除、修改)操作5、 药品盈利情况统计查询6、 买药人购买药品信息的查询7、 管理员对买药人购买药品和退回药品信息的查询8、 管理员对购药人员订购药品和退订药品信息的查询4。2.3 系统模块分析四、程序源码与运行结果 1表和视图的建立1.1 创建购药记录表create table DBuy( Pno char(5 ) not nu
22、ll,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(Quantity0),check(Deal=售出);1.2 创建药品存储表create table
23、 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(Quantity0));1.3 创建买药视图create view DM_P as select Dname,Dguige,Drand,Mname,Mplace,Mphone,Memail from Drug,Maker,Dorder whe
24、re 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 Dord
25、er values(M0001,D0009,150,20141023,订购)5.2。2 向Drug表插入一个新的药品记录insert into Drug values(D0024,维生素,维生素,125s*36粒,太极,1。50,2。00)3数据查询 3.1 全药品存储位置及库存查询 3。2 查询在20048-21退订的药品数量大于80的药品的详细信息3.3查询在20048-05 前买药的病人的姓名和地址4 数据统计4.1 统计在2014-821卖出的各药品数量4.2 统计编号为P0001”的病人购买各药品的总数量5 数据修改5。1 将Drug表中编号为D0001的药品的名称由666感冒灵更改
26、为999感冒灵5。2 修改存储在二层左位置的所有药品的库存数量为100五、课程设计总结与感悟 在学习数据库这门课程时,感觉学到的知识还是掌握了的,并且以为自己已经理解了,但真正通过一个课程设计去应用这些知识的时候才发现,会遇到很多困难,并且学到的知识自己其实并不能熟练的应用,将知识应用到实际的工作并没有很好的完成。在课程设计遇到了许多问题,例如:插入数据时,提示插入的数据长度不符合要求,原因是未考虑到汉字占两个字节,char的长度设置过小,解决办法是修改长度即可无法插入数据到一个表中,总是提示外键约束错误,原因是因为该表中有外键,而外键所在的表未插入数据,所以无法插入数据到该表(插入的外键值不
27、存在)。解决方法是先将外键所在表的数据插入,在插入该表的数据。数据库建立在一个账号上,只有一个人可以操作,显得不方便。可以通过授权GRANT给另一个账号,就可以两个账号进行操作,方便了许多. 问题和困难还遇到过许多,在这不一一列数.在课程设计的过程中,经历了许多的相关设计工作,也学习到了许多书本上有和没有的知识,更重要的是,通过不断的实践和自学,不断发现问题,思考问题,进而解决问题,有效的提升了我们的动手能力,并加深了对知识的理解和掌握,从一开始的需求分析,到概念设计,到逻辑设计,再到物理设计,一直到上机建立数据库,一步步走来,通过我们自己亲自分析、设计、和动手,也让我们不断进步和成长。这次数据库课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,任何困难在勇气和毅力面前都是”纸老虎”。从做这个数据库开始无论遇到什么困难,我们都一直坚持,努力去解决,通过上网,与同学交流,向老师请教等等手段。 通过这次课程设计的完成,使我们对所学的知识有了进一步掌握,同时也通过实践发现了自己的不足。所以在今后的学习中,我们仍应该好好学习,不断完善自我.当然,本系统仍然存在了许多的不足之处,如功能不够完善,安全性问题没有很好解决等,恳请老师谅解。