洛阳理工学院课程设计报告课程名称数据库课程设计设计题目药店管理系统专业计算机科学与技术班级学号姓名完成日期2016.12.30课程设计任务书设计题目:药店管理系统设计内容与要求:设计内容:设计实现药店管理系统。
能够实现药品库存管理、销售信息管理和查询功能:库存管理:包括药品入库、出库管理,药品库存报警,药品有效期管理(过期报警)。
销售管理:根据实际销售自动生成销售单据。
如果是会员,则药品价格按95折计算。
查询及统计功能:对指定时间段内的出/入库进行查询/统计,对药品有效期进行查询/统计,对药品过期进行查询/统计,对指定时间段内的药品销售进行查询/统计以及利润查询/统计等。
能帮顾客查询药品信息,能按品名、生产厂家、药品类别、存货量进行查询。
设计要求:1.完成数据库概念结构设计、逻辑结构设计、物理结构设计;2.创建数据库,完成表、存储过程、触发器等数据库对象设计;3.用JAVA语言,完成信息系统的部分程序界面设计与调试运行。
指导教师:2016年12 月24 日课程设计评语成绩:指导教师:_______________2017 年1 月3日目录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.2采用的数据开发工具及应用开发工具本设计采用的数据开发工具为SQL Server 2008,应用开发工具为Eclipse 2需求分析2.1功能需求药店管理系统能够实现药品库存、销售信息管理和查询功能,根据实际销售自动生成销售单据。
能帮顾客查询药品信息,能按品名、生产厂家、药品类别、存货量进行查询。
2.2数据需求经过对学校附近的药店的调研以及在网上查找的资料,药店药品管理系统的处理对象主要包括:药品信息、供应商信息、顾客信息、药品销售信息、药品存储信息等几个方面。
根据市场需求需要的数据组成如下需要的数据有操作员、会员、药品、订单、厂家、进货单这些实体的组成数据有,操作人员需要包括:账号、密码、姓名、联系电话、邮箱、地址;会员表:账号、姓名、年龄、联系电话、邮箱、地址;药品信息中含有:药品ID、药品名、类别、生产日期、有效期、进价、售价、生产厂家;订单详情中含有的有:订单编号、药品名、购买数量、售价、购买人员、销售日期;厂家信息包括:厂家编号、厂家名、电话、地址;进药表、药品ID、操作员、进药日期、进药数量3概念结构设计将需求分析阶段得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计,它是整个数据库设计的关键,它通过对用户需求进行综合、归纳、抽象,形成一个独立于具体DBMS的概念模型。
根据需求分析,在该系统中存在以下实体集:药品信息实体集、顾客信息实体集、厂家信息实体集、销售信息实体集等等。
4逻辑结构设计4.1建立关系模式操作人员(账号、密码、姓名、联系电话、邮箱、地址)会员(账号、姓名、年龄、联系电话、邮箱、地址)药品(药品ID、药品名称、类别、生产厂家编号)仓库(批次ID、药品ID、药品名、类别、生产日期、有效期、进价、售价、生产厂家)订单详情(订单编号、药品名、购买数量、售价、购买人员、销售日期、操作员姓名)厂家(厂家编号、厂家名、电话、地址)进药(药品ID、操作员姓名、进药日期、进药数量)4.2关系模式规范化处理根据函数依赖关系,分析得每一个关系模式均满足3NF。
5物理结构设计5.1建立数据库物理设计时为逻辑数据模型选取一个最合适应用环境的物理结构(包括存储结构和存取方法),数据库的物理结构通常分为两步:(1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构;(2)对物理结构进行评价,评价的重点是时间和空间效率。
由于本次课程设计的数据库数据量不大,再加上数据库实施软件会自动建立一些索引,所以这里没有必要特别建立索引。
需要创建一个数据库文件,命名为DrugControl创建数据库语句为create database DrugControl5.2数据表创建(1)创建Drug表,如图5-1create table Drug(--品名Dno varchar(10)primary key,--药品编号Dname varchar(20)not null,--药品名Dclass varchar(20),--药品类别Sname varchar(20)--生产厂家)图5-1(2)创建供应商Suppliter表如图5-2create 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-3create table Opert(--管理员Mno varchar(10)primary key,Mpassw varchar(20),Mname varchar(20)not nullMphone char(11),Memail varchar(20),Maddress varchar(50))图5-3(4)创建会员表Customer如图5-4create table Customer(--会员Cno varchar(10)primary key,Cname varchar(20)not null,Cage int check(Cage>0 or Cage is null), Cphone char(11),Cemail varchar(20),Caddress varchar(50))图5-4(5)创建库存表Dugstore如图5-5create 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-6create 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-7create table Absence(--缺货单Lno varchar(10)primary key,Dno varchar(10),Pquantity int,Pdade date,Astate varchar(10),foreign key(Dno)references Drug(Dno))图5-7(8)数据视图创建根据需求仅需要创建一个视图就可以完成所需要的功能,需要创建的视图为“即将过期的药品”如图5-8create view即将过期药品单(Lno,Dname,Dclass,Pquantity,lessdate)asselect Lno,Dname,Dclass,Pquantity,DATEDIFF(day,GETDATE(),out_date) from Drugstore图5-85.2存储过程创建(1)创建增加会员存储过程*增加会员*/create procedure增加会员@Cname varchar(20),@Cage int,@Cphone char(11),@Ccemail varchar(20),@Caddress varchar(50)asdeclare@i int,@n varchar(10)select@i=max(cast(substring(Cno,2,len(Cno)-1)as int))+1 fromCustomer--获取最大值+1select@n=substring('C0000',1,5-len(@i))+cast(@i as varchar(5))--转换成编号insert into Customervalues(@n,@Cname,@Cage,@Cphone,@Ccemail,@Caddress)验证存储过程如图5-9exec增加会员'没','12','111111','1@','理工'图5-9(2)创建增加操作人员存储过程/*增加操作人员*/create procedure增加操作员@Mpassw varchar(20),@Mname varchar(20),@Mmphone char(11),@Mmemail varchar(20),@Mmaddress varchar(50)asdeclare@i int,@n varchar(10)select@i=max(cast(substring(Mno,2,len(Mno)-1)as int))+1 from Opert --获取最大值+1select@n=substring('C0000',1,5-len(@i))+cast(@i as varchar(5))--转换成编号insert into Opertvalues(@n,@Mpassw,@Mname,@Mmphone,@Mmemail,@Mmaddress)验证存储过程如图5-10exec增加操作员'1','感冒','11111111','111111@','洛阳理工'图5-10(3)创建增加品名存储过程/*增加品名*/create procedure增加品名@Dname varchar(20),@Dclass varchar(20),@Sname varchar(20)asdeclare@i int,@n varchar(10)select@i=max(cast(substring(Dno,2,len(Dno)-1)as int))+1 from Drug--获取最大值+1select@n=substring('D0000',1,5-len(@i))+cast(@i as varchar(5))--转换成编号insert into Drug values(@n,@Dname,@Dclass,@Sname)验证存储过程如图5-11exec增加品名'感冒灵颗粒','感冒用药类','蜀川'图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)asdeclare@i int,@n varchar(10)select@i=max(cast(substring(Lno,2,len(Lno)-1)as int))+1 from Drugstore--获取最大值+1select@n=substring('D0000',1,5-len(@i))+cast(@i as varchar(5))--转换成编号insert into Drugstorevalues(@n,@Ddno,@Dname,@Dclass,@Pquantity,GETDATE(),@Out_date,@Dbi dd,@Dprice,@Sname,@Mname)验证存储过程如图5-12exec增加药品'D0002','感冒灵颗粒','感冒用药类',5,'蜀川','2017-11-11','1','2','ll'图5-12(5)创建增加供应商存储过程/*增加供应商*/create procedure增加供应商@Sname varchar(20),@Sphone char(12),@Saddress varchar(50),@Semail varchar(20)asdeclare@i int,@n varchar(10)select@i=max(cast(substring(Sno,2,len(Sno)-1)as int))+1 from Supplier--获取最大值+1select@n=substring('S0000',1,5-len(@i))+cast(@i as varchar(5))--转换成编号insert into Supplier values(@n,@Sname,@Sphone,@Semail,@Saddress)验证存储过程如图5-13exec增加供应商'111','222','洛阳理工','112@'图5-13(6)创建增加销售存储过程/*增加销售单*/create procedure增加订单@Dno varchar(20),@Cno varchar(20),@Ddprice float,@Mquantity intasdeclare@i int,@n varchar(10)select@i=max(cast(substring(Slno,2,len(Slno)-1)as int))+1 from Sale --获取最大值+1select@n=substring('M0000',1,5-len(@i))+cast(@i as varchar(5))--转换成编号insert into Sale values(@n,@Dno,@Cno,@Ddprice,@Mquantity,,getdate()) update Drugstoreset Pquantity=Pquantity-@Mquantitywhere Lno=@Dno验证存储过程如图5-14exec增加订单'M0003','D0002','C0001',22,15,440图5-14(7)创建缺货单存储过程/*更新缺货单*/create procedure更新缺货单asdeclare@Dno varchar(5),@Pquantity int,@i int,@n varchar(5),@Astate varchar(10),@con intdeclare c cursor for select Dno,sum(Pquantity)from Drugstore group by Dnoopen cfetch c into@Dno,@Pquantitywhile(@@FETCH_STATUS=0)beginif(@Pquantity<20)begindeclare c1cursor for select count(Astate),Astate from Absence group by Dno,Astateopen c1fetch c1into@con,@Astatewhile(@@FETCH_STATUS=0)beginif(@Astate='未处理'and@con=1)beginupdate Absence set Astate='已处理'where Dno=@Dnoendfetch c1into@con,@Astateendclose c1deallocate c1select@i=max(cast(substring(Lno,2,len(Lno)-1)as int))+1 from Absence /*获取最大值+1*/select@n=substring('L0000',1,5-len(@i))+cast(@i as varchar(5))/*转换成编号*/insert into Absence values(@n,@Dno,200-@Pquantity,getdate(),'未处理')endif(@Pquantity>19)begindeclare c3cursor for select count(Astate),Astate from Absence group by Dno,Astateopen c3fetch c3into@con,@Astatewhile(@@FETCH_STATUS=0)beginif(@Astate='未处理'and@con=1)beginupdate Absence set Astate='已处理'where Dno=@Dnoendfetch c3into@con,@Astateendclose c3deallocate c3endfetch c into@Dno,@Pquantityendclose cdeallocate c5.3数据触发器创建根据数据要求在出售过程中会出现库存不足即需要创建触发器需要达到的功能为在库存表中更新数据时执行存储过程缺货单create trigger Drug_short on Drugstoreafter updateasbeginexec更新缺货单;end;验证触发器如图5-14update Drugstore set Pquantity=1 where Dno='D0002'如图5-15原缺货单图5-15执行过后6 Java对数据库系统的实现6.1登录界面及系统主界面(1)药店登录界面如图6-1图6-1(2)药店主页面如图6-2图6-26.2库存管理(1)入库管理界面如图6-3能够根据名称和药品类型进行搜索单击要入库的药品会在下面文本框中显示出来防止药品入库错误图6-3(2)增加药品界面如图6-4,能够进行药品类型输入,增加药品类型扩充药品库图6-4(3)修改药品信息页面如图6-5,能够对药品信息更改,用来修改和删除药品信息图6-56.3销售管理销售管理页面如图6-6,用来出售药品,能够实时获取购买数量和会员ID中输入的信息,如果输入正确的会员ID后并且在数据库中检测到有这个会员信息则会自动在后面的会员由否改为是,计算总价的时候打折,在提交订单后库中数量减少并且插入销售表。