文档库 最新最全的文档下载
当前位置:文档库 › 数据库课程设计报告21041

数据库课程设计报告21041

数据库课程设计报告21041
数据库课程设计报告21041

洛阳理工学院

课程设计报告

课程名称数据库课程设计

设计题目药店管理系统

专业计算机科学与技术

班级

学号

姓名

完成日期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 DrugControl

5.2数据表创建

(1)创建Drug表,如图5-1

create table Drug(--品名

Dno varchar(10)primary key,--药品编号

Dname varchar(20)not null,--药品名

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(Cage>0 or Cage is null), Cphone char(11),

Cemail varchar(20),

Caddress varchar(50)

)

图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,

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','1@https://www.wendangku.net/doc/417277703.html,','理工'

图5-9

(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','111111@https://www.wendangku.net/doc/417277703.html,','洛阳理工'

图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

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

(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','洛阳理工','112@https://www.wendangku.net/doc/417277703.html,'

图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

验证存储过程如图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(@Pquantity<20)

begin

declare c1cursor for select count(Astate),Astate from Absence group by Dno,Astate

open c1

fetch c1into@con,@Astate

while(@@FETCH_STATUS=0)

begin

if(@Astate='未处理'and@con=1)

begin

update Absence set Astate='已处理'where Dno=@Dno

end

fetch c1into@con,@Astate

end

close c1

deallocate c1

select@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(),'未处理')

end

if(@Pquantity>19)

begin

declare c3cursor for select count(Astate),Astate from Absence group by Dno,Astate

open c3

fetch c3into@con,@Astate

while(@@FETCH_STATUS=0)

begin

if(@Astate='未处理'and@con=1)

begin

update Absence set Astate='已处理'where Dno=@Dno

end

fetch c3into@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原缺货单

图5-15执行过后

6 Java对数据库系统的实现

6.1登录界面及系统主界面

(1)药店登录界面如图6-1

图6-1

(2)药店主页面如图6-2

图6-2

6.2库存管理

(1)入库管理界面如图6-3能够根据名称和药品类型进行搜索单击要入库的药品会在下面文本框中显示出来防止药品入库错误

图6-3

(2)增加药品界面如图6-4,能够进行药品类型输入,增加药品类型扩充药品库

图6-4

(3)修改药品信息页面如图6-5,能够对药品信息更改,用来修改和删除药品信息

图6-5

6.3销售管理

销售管理页面如图6-6,用来出售药品,能够实时获取购买数量和会员ID中输入的信息,如果输入正确的会员ID后并且在数据库中检测到有这个会员信息则会自动在后面的会员由否改为是,计算总价的时候打折,在提交订单后库中数量减少并且插入销售表。

图6-6

6.4信息查询

(1)进行利润查询如图6-7,如果是匿名用户购买就显示为匿名,能够根据销售中的出售时间来进行规定时间内的利润查询并且能够显示出来每笔订单和总价

图6-7

(2)缺货单查询如图6-8,如果在售卖中数量低于20,就会自动在缺货单中显示出来,并且在添加药品后自动将状态改成已处理,缺货详情中不再出现,除非售卖后的数量再次低于20

图6-8

(3)过期药品显示如图6-9,并且支持销毁已过期药品。

图6-9

7设计总结

通过这次课设,我对数据库的了解有了深一步的认识,从需求分析到数据库运行和维护,每一部分都是不可省掉的,都需要我们认真地思考、设计,从中我更加深刻的了解了关系模式、E-R图等内容。这次课程设计我们使用的语言是SQL SERVER 2008,让我再次的了解并掌握了SQL SERVER 2008的功能及存储过程,也学习Java软件的操作,有两手的准备。实习中,遇到问题后才发现自己的知识很有限,才发现基础的重要性,让我又拿起书本认认真真地学习了一遍。生活也需要我们一步一步的规划,认认真真地做好每一件事,处理好遇到的每一个问题,发现自己的不足,并加以修正。

这次的课程设计可以说看起来比较容易,真的做起来却困难重重,深刻体会到要做好一个项目,真的不容易!在今后的学习中我们会加强理论的实践的结合,通过不断练习、摸索来弥补自己的不足。不能因为困难就失去信心!人如果没有自信,没有目标,就不可能把事情做好!相信可以,就会可以,一定可以!

相关文档