资源描述
洛 阳 理 工 学 院 课 程 设 计 报 告 课程名称 数据库课程设计 设计题目 药店管理系统 专 业 计算机科学与技术 班 级 学 号 姓 名 完成日期 2016.12.30 课 程 设 计 任 务 书 设计题目: 药店管理系统 设计内容与要求: 设计内容:设计实现药店管理系统。能够实现药品库存管理、销售信息管理 和查询功能: 库存管理:包括药品入库、出库管理,药品库存报警,药品有效期管理(过 期报警)。 销售管理:根据实际销售自动生成销售单据。如果是会员,则药品价格按 95 折计算。 查询及统计功能:对指定时间段内的出/入库进行查询/统计,对药品有效期 进行查询/统计,对药品过期进行查询/统计,对指定时间段内的药品销售进行查 询/统计以及利润查询/统计等。能帮顾客查询药品信息,能按品名、生产厂家、 药品类别、存货量进行查询。 设 计 要 求 : 1.完成数 据 库 概念结构设计、逻辑结构设计、物理结构设计; 2.创建数据库,完成表、存储过程、触发器等数据库对象设 计 ; 3.用 JAVA 语言,完成信息系统的部分程序界面设 计 与 调 试 运 行 。 指导教师: 2016 年 12 月 24 日 课 程 设 计 评 语 成绩: 指导教师:_ 2017 年 1 月 3 日 洛 阳 理 工 学 院 课 程 设 计 报 告 I 目录 1 概述 .1 1.1 本设计的背景和意义 .1 1.2 采用的数据开发工具及应用开发工具 .1 2 需求分析 .1 2.1 功能需求 .1 2.2 数据需求 .1 3 概念结构设计 .2 4 逻辑结构设计 .2 4.1 建立关系模式 .3 4.2 关系模式规范化处理 .3 5 物理结构设计 .3 5.1 建立数据库 .3 5.2 数据表创建 .3 5.2 存储过程创建 .6 5.3 数据触发器创建 .11 6 JAVA 对数据库系统的实现 .12 6.1 登录界面及系统主界面 .12 6.2 库存管理 .13 6.3 销售管理 .14 6.4 信息查询 .15 7 设计总结 .17 附录 .18 洛 阳 理 工 学 院 课 程 设 计 报 告 1 1 概述 1.1 本设计的背景和意义 了解到部分药店因为规模较小没有专业的药店管理系统,本设计能够适应于 规模较小的药店。通过运用数据库库技术,不仅可以使药店的管理更加方便,并 且还能提高数据的正确性。该药店管理系统以进货、存储、销售为主要业务,分 别实现其他具体功能。 1.2 采用的数据开发工具及应用开发工具 本设计采用的数据开发工具为 SQL Server 2008,应用开发工具为 Eclipse 2 需求分析 2.1 功能需求 药 店 管 理 系 统 能 够 实 现 药 品 库 存 、 销 售 信 息 管 理 和 查 询 功 能 , 根 据 实 际 销 售 自 动 生 成 销 售 单 据 。 能帮顾客查询药品信息,能按品名、生产厂家、药品类别、 存货量进行查询。 2.2 数据需求 经过对学校附近的药店的调研以及在网上查找的资料,药店药品管理系统的 处理对象主要包括:药品信息、供应商信息、顾客信息、药品销售信息、药品存 储信息等几个方面。根据市场需求需要的数据组成如下需要的数据有操作员、会 员、药品、订单、厂家、进货单这些实体的组成数据有,操作人员需要包括:账 号、密码、姓名、联系电话、邮箱、地址;会员表:账号、姓名、年龄、联系电 话、邮箱、地址;药品信息中含有:药品 ID、药品名、类别、生产日期、有效 期、进价、售价、生产厂家;订单详情中含有的有:订单编号、药品名、购买数 量、售价、购买人员、销售日期;厂家信息包括:厂家编号、厂家名、电话、地 址;进药表、药品 ID、操作员、进药日期、进药数量 洛 阳 理 工 学 院 课 程 设 计 报 告 2 3 概念结构设计 将需求分析阶段得到的用户需求抽象为信息结构即概念模型的过程就是 概念结构设计,它是整个数据库设计的关键,它通过对用户需求进行综合、 归纳、抽象,形成一个独立于具体 DBMS 的概念模型。 根据需求分析,在该系统中存在以下实体集:药品信息实体集、顾客信 息实体集、厂家信息实体集、销售信息实体集等等。 根据需求做出的 E-R 图如下图 2-1 总体 E-R 图 2-3-1 N N N 1 N 姓名 管理 1 N 存储 N 仓库 N 1 年龄 姓名 账号 电话 邮箱 编号 品名 数量 售价 买家 日期 账号 密码 姓名 电话 邮箱 地址 药品 操作员 订单 会员提交 参照 处理 厂家 生产 1 1 厂名 类别 ID 电话 地址 名称 编号 编号 数量 生产期有效期 进价 售价 批次 ID 洛 阳 理 工 学 院 课 程 设 计 报 告 3 4 逻辑结构设计 4.1 建立关系模式 操作人员(账号、密码、姓名、联系电话、邮箱、地址) 会员(账号、姓名、年龄、联系电话、邮箱、地址) 药品(药品 ID、药品名称、类别、生产厂家编号) 仓库(批次 ID、药品 ID、药品名、类别、生产日期、有效期、进价、售价、 生产厂家) 订单详情(订单编号、药品名、购买数量、售价、购买人员、销售日期、操 作员姓名) 厂家(厂家编号、厂家名、电话、地址) 进药(药品 ID、操作员姓名、进药日期、进药数量) 4.2 关系模式规范化处理 根据函数依赖关系,分析得每一个关系模式均满足 3NF。 5 物理结构设计 5.1 建立数据库 物理设计时为逻辑数据模型选取一个最合适应用环境的物理结构(包括存储 结构和存取方法) ,数据库的物理结构通常分为两步: (1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构; (2)对物理结构进行评价,评价的重点是时间和空间效率。 由于本次课程设计的数据库数据量不大,再加上数据库实施软件会自动建立 一些索引,所以这里没有必要特别建立索引。 需要创建一个数据库文件,命名为 DrugControl 创建数据库语句为 create database DrugControl 5.2 数据表创建 (1)创建 Drug 表,如图 5-1 create table Drug(-品名 Dno varchar(10) primary key,-药品编号 Dname varchar(20) not null,-药品名 洛 阳 理 工 学 院 课 程 设 计 报 告 4 Dclass varchar(20),-药品类别 Sname varchar(20)-生产厂家 ) 图 5-1 (2)创建供应商 Suppliter 表如图 5-2 create table Supplier(-供应商 Sno varchar(10) primary key, Sname varchar(20) not null, Sphone char(11), Semail varchar(20), Saddress varchar(50) 图 5-2 (3)创建管理员表 Opert 如图 5-3 create table Opert(-管理员 Mno varchar(10) primary key, Mpassw varchar(20), Mname varchar(20) not null Mphone char(11), Memail varchar(20), Maddress varchar(50) ) 图 5-3 (4)创建会员表 Customer 如图 5-4 create table Customer(-会员 Cno varchar(10) primary key, Cname varchar(20) not null, Cage int check(Cage0 or Cage is null), Cphone char(11), Cemail varchar(20), Caddress varchar(50) ) 洛 阳 理 工 学 院 课 程 设 计 报 告 5 图 5-4 (5)创建库存表 Dugstore 如图 5-5 create table Drugstore(-库存 Lno varchar(10) primary key,-入库编号 Dno varchar(10) ,-药品编号 Dname varchar(20) not null,-药品名 Dclass varchar(20),-药品类别 Pquantity int,-药品数量 Idate date,-入库时间 out_date date, Dbidd float, Dprice float, Sname varchar(20),-厂家名 Mname varchar(20),-操作员姓名 foreign key(Dno) references Drug(Dno), ) 图 5-5 (6)创建出售表 Sale 如图 5-6 create table Sale(-出售 Slno varchar(10), Dno varchar(10), Cno varchar(10), Ddprice float, Mquantity int,-销售数量 Amoney float, Idate date,-销售日期 foreign key(Dno) references Drug(Dno), ) 图 5-6 (7)创建缺货单 A 如图 5-7 create table Absence(-缺货单 Lno varchar(10) primary key, Dno varchar(10), Pquantity int, Pdade date, 洛 阳 理 工 学 院 课 程 设 计 报 告 6 Astate varchar(10), foreign key(Dno) references Drug(Dno) ) 图 5-7 (8)数据视图创建 根据需求仅需要创建一个视图就可以完成所需要的功能,需要创建的视图为“即将过期的药 品”如图 5-8 create view 即将过期药品单( Lno,Dname,Dclass,Pquantity,lessdate) as select Lno ,Dname,Dclass,Pquantity,DATEDIFF(day,GETDATE(),out_date) from Drugstore 图 5-8 5.2 存储过程创建 (1)创建增加会员存储过程 *增加会员*/ create procedure 增加会员 Cname varchar(20), Cage int, Cphone char(11), Ccemail varchar(20), Caddress varchar(50) as declare i int,n varchar(10) select i=max(cast(substring(Cno,2,len(Cno)-1)as int)+1 from Customer -获取最大值+1 select n=substring(C0000,1,5-len(i)+cast(i as varchar(5)-转 换成编号 insert into Customer values(n,Cname,Cage,Cphone,Ccemail,Caddress) 验证存储过程如图5-9 exec 增加会员 没, 12,111111,理工 图5-9 洛 阳 理 工 学 院 课 程 设 计 报 告 7 (2)创建增加操作人员存储过程 /*增加操作人员*/ create procedure 增加操作员 Mpassw varchar(20), Mname varchar(20), Mmphone char(11), Mmemail varchar(20), Mmaddress varchar(50) as declare i int,n varchar(10) select i=max(cast(substring(Mno,2,len(Mno)-1)as int)+1 from Opert -获取最大值 +1 select n=substring(C0000,1,5-len(i)+cast(i as varchar(5)-转 换成编号 insert into Opert values(n,Mpassw,Mname,Mmphone,Mmemail,Mmaddress) 验证存储过程如图5-10 exec 增加操作员 1,感冒 ,11111111,洛阳理工 图5-10 (3)创建增加品名存储过程 /*增加品名*/ create procedure 增加品名 Dname varchar(20), Dclass varchar(20), Sname varchar(20) as declare i int,n varchar(10) select i=max(cast(substring(Dno,2,len(Dno)-1)as int)+1 from Drug -获取最大值+1 select n=substring(D0000,1,5-len(i)+cast(i as varchar(5)-转 换成编号 insert into Drug values(n,Dname,Dclass,Sname) 验证存储过程如图5-11 洛 阳 理 工 学 院 课 程 设 计 报 告 8 exec 增加品名 感冒灵颗粒 ,感冒用药类, 蜀川 图 5-11 (4)创建增加入库存储过程 /*增加入库*/ create procedure 增加药品 Ddno varchar(10),-入库编号 Dname varchar(20), Dclass varchar(20), Pquantity int, Sname varchar(20), Out_date date, Dbidd float, Dprice float, Mname varchar(20) as declare i int,n varchar(10) select i=max(cast(substring(Lno,2,len(Lno)-1)as int)+1 from Drugstore -获取最大值+1 select n=substring(D0000,1,5-len(i)+cast(i as varchar(5)-转 换成编号 insert into Drugstore values(n,Ddno,Dname,Dclass,Pquantity,GETDATE(),Out_date,Dbi dd,Dprice,Sname,Mname) 验证存储过程如图5-12 exec 增加药品 D0002,感冒灵颗粒,感冒用药类,5 ,蜀川, 2017-11-11,1,2,ll 图5-12 洛 阳 理 工 学 院 课 程 设 计 报 告 9 (5)创建增加供应商存储过程 /*增加供应商*/ create procedure 增加供应商 Sname varchar(20), Sphone char(12), Saddress varchar(50), Semail varchar(20) as declare i int,n varchar(10) select i=max(cast(substring(Sno,2,len(Sno)-1)as int)+1 from Supplier -获取最大值+1 select n=substring(S0000,1,5-len(i)+cast(i as varchar(5)-转 换成编号 insert into Supplier values(n,Sname,Sphone,Semail,Saddress) 验证存储过程如图5-13 exec 增加供应商 111,222,洛阳理工, 图5-13 (6)创建增加销售存储过程 /*增加销售单*/ create procedure 增加订单 Dno varchar(20), Cno varchar(20), Ddprice float, Mquantity int as declare i int,n varchar(10) select i=max(cast(substring(Slno,2,len(Slno)-1)as int)+1 from Sale -获取最大值+1 select n=substring(M0000,1,5-len(i)+cast(i as varchar(5)-转 换成编号 insert into Sale values(n,Dno,Cno,Ddprice,Mquantity,getdate() update Drugstore set Pquantity=Pquantity-Mquantity where Lno=Dno 洛 阳 理 工 学 院 课 程 设 计 报 告 10 验证存储过程如图5-14 exec 增加订单 M0003,D0002,C0001,22,15,440 图5-14 (7)创建缺货单存储过程 /*更新缺货单*/ create procedure 更新缺货单 as declare Dno varchar(5),Pquantity int,i int,n varchar(5),Astate varchar(10),con int declare c cursor for select Dno,sum(Pquantity) from Drugstore group by Dno open c fetch c into Dno,Pquantity while(FETCH_STATUS=0) begin if(Pquantity19) 洛 阳 理 工 学 院 课 程 设 计 报 告 11 begin declare c3 cursor for select count(Astate),Astate from Absence group by Dno,Astate open c3 fetch c3 into con,Astate while(FETCH_STATUS=0) begin if(Astate=未处理 and con=1) begin update Absence set Astate=已处理 where Dno=Dno end fetch c3 into con,Astate end close c3 deallocate c3 end fetch c into Dno,Pquantity end close c deallocate c 5.3 数据触发器创建 根据数据要求在出售过程中会出现库存不足即需要创建触发器需要达到的功能为在库存 表中更新数据时执行存储过程缺货单 create trigger Drug_short on Drugstore after update as begin exec 更新缺货单; end; 验证触发器如图5-14 update Drugstore set Pquantity=1 where Dno=D0002 如图5-15原缺货单 洛 阳 理 工 学 院 课 程 设 计 报 告 12 图 5-15 执行过后 6 Java 对数据库系统的实现 6.1 登录界面及系统主界面 (1)药店登录界面如图6-1 图6-1 (2)药店主页面如图6-2 图6-2 洛 阳 理 工 学 院 课 程 设 计 报 告 13 6.2 库存管理 (1)入库管理界面如图6-3能够根据名称和药品类型进行搜索单击要入库的药品会在下 面文本框中显示出来防止药品入库错误 图6-3 (2)增加药品界面如图6-4,能够进行药品类型输入,增加药品类型扩充药品库 图6-4 洛 阳 理 工 学 院 课 程 设 计 报 告 14 (3)修改药品信息页面如图 6-5,能够对药品信息更改,用来修改和删除药品信息 图6-5 6.3 销售管理 销售管理页面如图 6-6,用来出售药品,能够实时获取购买数量和会员 ID 中 输入的信息,如果输入正确的会员 ID 后并且在数据库中检测到有这个会员信息 则会自动在后面的会员由否改为是,计算总价的时候打折,在提交订单后库中数 量减少并且插入销售表。 图6-6 洛 阳 理 工 学 院 课 程 设 计 报 告 15 6.4 信息查询 (1)进行利润查询如图 6-7,如果是匿名用户购买就显示为匿名,能够根据 销售中的出售时间来进行规定时间内的利润查询并且能够显示出来每笔订单和总 价 图 6-7 (2)缺货单查询如图 6-8,如果在售卖中数量低于 20,就会自动在缺货单 中显示出来,并且在添加药品后自动将状态改成已处理,缺货详情中不再出现, 除非售卖后的数量再次低于 20 图 6-8 洛 阳 理 工 学 院 课 程 设 计 报 告 16 (3)过期药品显示如图 6-9,并且支持销毁已过期药品。 图6-9 洛 阳 理 工 学 院 课 程 设 计 报 告 17 7 设计总结 通过这次课设,我对数据库的了解有了深一步的认识,从需求分析到数据库 运行和维护,每一部分都是不可省掉的,都需要我们认真地思考、设计,从中我 更加深刻的了解了关系模式、E-R 图等内容。这次课程设计我们使用的语言是 SQL SERVER 2008,让我再次的了解并掌握了 SQL SERVER 2008 的功能及存储 过程,也学习 Java 软件的操作,有两手的准备。实习中,遇到问题后才发现自 己的知识很有限,才发现基础的重要性,让我又拿起书本认认真真地学习了一遍。 生活也需要我们一步一步的规划,认认真真地做好每一件事,处理好遇到的每一 个问题,发现自己的不足,并加以修正。 这次的课程设计可以说看起来比较容易,真的做起来却困难重重,深刻体会 到要做好一个项目,真的不容易!在今后的学习中我们会加强理论的实践的结合, 通过不断练习、摸索来弥补自己的不足。不能因为困难就失去信心!人如果没有 自信,没有目标,就不可能把事情做好!相信可以,就会可以,一定可以! 洛 阳 理 工 学 院 课 程 设 计 报 告 18 附录 参考文献 1 郑阿奇 SQL Server 实用教程(第 2 版)M北京:电子工业出版社, 2005 2 王珊,萨师煊数据库系统概论(第四版)M北京:高等教育出版社, 2006 3.张桂珠 刘丽 陈爱国 Java 面向对象程序设计(第 2 版)北京邮电大学出版社 4毕广吉.Java 程序设计实例教程M. 北京:冶金工业出版社,2007 年 5.王保罗.Java 面向对象程序设计M. 北京:清华大学出版社,2003 年 6.高林,周海燕 .Jsp 网上书店系统与案例分析M. 北京:人民邮电出版社, 2004 年 7.刘腾红,孙细明 .信息系统分析与设计M. 北京:科学出版社,2003 年 8.林邦杰,彻底研究 java.北京:电子工业出版社,2002 年
展开阅读全文