仓库管理系统数据库设计课程设计delphisqlserver精编版.docx
《仓库管理系统数据库设计课程设计delphisqlserver精编版.docx》由会员分享,可在线阅读,更多相关《仓库管理系统数据库设计课程设计delphisqlserver精编版.docx(34页珍藏版)》请在冰豆网上搜索。
仓库管理系统数据库设计课程设计delphisqlserver精编版
福建工程学院
课程设计
课程:
数据库系统原理及应用
题目:
仓库管理系统
专业:
计算机科学与技术
班级:
计算机1002班
座号:
3100305126/3100301225
姓名:
王文杰/黄涛
2012年6月26日
一、系统定义
为了管理现代化的要求,建立一个经营、资金、成本与物资的动态数据收集、处理与控制的信息系统。
该系统为商品批发商仓库提供各种单项及综合的报表和计划,并实现对当前仓库和货物监控与处理,进行多功能查询。
用户可通过网络访问数据库,但需要具备不同等级权限,也需要客户端软件支持。
二、需求分析
调查用户需求
本系统的最终用户为仓库管理员和客户。
根据我们日常生活中的经验,结合对仓库管理员及客户的调查,得出用户的下列实际要求:
1)仓库的基本情况
仓库管理员管理客户、供应商、商品及仓库的信息。
(1)客户的基本信息
客户可以自己进行注册,也可以由管理员分配。
商场中的每个客户都分配有唯一的编号、名字、地址、电话号码,每个用户可以进行仓库货物信息的查询,但不可以进行修改。
(2)供应商的基本信息
每个供应商拥有唯一的编号、名称、地址、供应货物及电话号码。
(3)货物的基本信息
每种货物有一个编号,用供应商编号+仓库号+学号组成,会存放在一个仓库中,货物有唯一的名称,属于一个类型,拥有一定货物存储量,管理员可以对其信息进行修改。
(4)仓库的基本信息
每个仓库有一个编号,同样有一个名称,一个地址,也拥有一定的容量,可以扩充容量,管理员可以对其信息进行修改。
(5)货物查询的基本信息
管理员和客户都拥有对货物、仓库查询的权力,而货物查询又分为三种:
所有货物、货号查询、货名查询,给出相对应的条件,就可以查询到相关的货物编号、仓库编号、货物名称、类型名称、货物存储量,仓库查询只有所有仓库,给出相应的条件则可以查询到相关仓库编号、仓库名字、仓库地址、仓库容量。
(6)出入库的基本信息
供应商和客户的每次提供、购买货物都会造成仓库相关货物信息的改变,货物入库时更新货物编号、货物名称、入库时间、货物类型、供应商编号、收购单价、入库总量、仓库编号、客户编号,货物出库时更新货物编号、货物名称、出库时间、货物类型、供应商编号、收购单价、出库总量、仓库编号、客户编号信息。
2)用户对系统的要求
通过需求分析,对商品库存进行有效的管理,使之形成完善的应用系统。
数据库设计中要合理设置商品信息和库存信息等,用来实现商品信息的新增,修改、删除等功能,使得商家有较详细的数据统计与分析。
基本功能:
(1)登录认证
作为一个企业实际应用项目,登录认证是必不可少的。
本项目的用户登录管理比较简单,分为管理员和客户登录,管理员和客户有不同的权限。
(2)统计报表
统计报表模块包括客户统计、供货商统计、货物统计、仓库统计。
各个统计都可以按照各个关键字进行统计查询。
(3)入库管理
入库管理主要是管理员对仓库进行进货入库的操作,管理人员通过改功能模块把每天的入库商品明细输入数据库并对商品信息进行修改和删除。
该模块支持按货物编号和货物名称、所有货物等关键字查询货物编号、仓库编号、货物名称、类型名称、货物存储量。
(4)出库管理
出库管理模块与入货管理模块相似,主要是对货物出库信息进行管理。
管理员员通过该功能模块对出库商品进行出库操作。
(5)库存管理
库存管理模块主要是对已库存的商品进行操作,包括对商品的仓库信息进行修改。
另外,可以按货物编号和货物名称、所有货物对所有货物进行盘点。
1.数据流图
2.数据项
1.客户数据字典
属性名
存储代码
类型
长度
备注
编号
Cno
char
5
客户编号
姓名
Cname
char
20
客户姓名
地址
Caddr
char
40
客户地址
电话
Ctel
char
11
客户电话
密码
Cpw
char
10
客户密码
2.货物数据字典
属性名
存储代码
类型
长度
备注
货物编号
Gno
char
5
货物名称
Gname
char
20
仓库编号
Tno
char
5
3.管理员数据字典
属性名
存储代码
类型
长度
备注
编号
M01
char
5
管理员编号
姓名
Mname
char
20
管理员姓名
密码
PW
char
10
管理员密码
4.供应商数据字典
属性名
存储代码
类型
长度
备注
编号
Pno
char
5
供应商编号
姓名
Pname
char
20
供应商姓名
地址
Paddr
char
40
供应商地址
货物
Pgoods
char
6
供商供应货物
电话
Ptel
char
11
供应商电话
5.仓库存储数据字典
属性名
存储代码
类型
长度
备注
货物编号
Gno
char
5
仓库编号
Sno
char
5
货物名称
Gname
char
10
类型名称
Tname
char
20
货物存储量
Gnum
int
4
仓库货物存储量
6.货物入库数据字典
属性名
存储代码
类型
长度
备注
供应商编号
Pno
char
5
货物名称
Gname
char
10
货物类型
Tname
char
20
仓库编号
Sno
real
4
入库总量
Innum
int
4
货物入库总量
收购单价
Inprice
real
4
货物收购单价
入库时间
Indata
char
20
货物入库时间
7.货物出库数据字典
属性名
存储代码
类型
长度
备注
货物编号
Gno
char
5
客户编号
Cno
char
5
货物名称
Gname
char
10
货物类型
Tname
char
20
出库编号
Sno
real
4
货物出库编号
出库总量
Outnum
int
4
货物仓库总量
售出单价
Outprice
real
4
货物出库单价
出库时间
Outdata
char
20
货物出库时间
8.仓库数据字典
属性名
存储代码
类型
长度
备注
仓库编号
Sno
char
5
仓库名称
Sname
char
20
仓库地址
Saddr
char
40
仓库容量
Ssize
int
4
9.货物类型数据字典
属性名
存储代码
类型
长度
备注
类型编号
Tno
char
5
类型名称
Tname
char
20
类型描述
Tdescription
char
50
3.数据结构
数据结构名
组成
管理员
管理员编号,管理员姓名,密码
客户
客户编号,客户名称,地址,联系电话,密码
供应商
供应商编号,供应商名称,供应商地址,货物,联系方式
货物
物品编号,物品编号,类型编号
仓库
仓库编号,仓库名称,仓库地址,仓库面积
货物类型
类型编号,类型名称,类型描述
入库
货物编号,供应商编,货物名称,货物类型,入库总量,收购单价,仓库编号,入库时间
出库
货物编号,客户编号,货物名称,货物类型,出库总量,售出单价,仓库编号,出库时间
库存
货物编号,仓库编号,货物名称,货物类型,货物总量
4.数据流
数据流名
数据流来源
数据流去向
组成
注册管理员信息
管理员
管理员信息表
管理员注册信息
注册客户信息
客户
客户信息表
客户注册信息
注册供应商信息
供应商
供应商信息表
供应商注册信息
查询客户信息
客户
管理员
客户注册信息
查询供应商信息
供应商
管理员
供应商注册信息
注销客户信息
客户信息表
管理员
客户注销信息
注销供应商信息
供应商信息表
管理员
供应商注销信息
修改客户信息
客户信息表
管理员
客户修改信息
修改供应商信息
供应商信息表
管理员
供应商修改信息
查询货物信息
货物信息表
管理员
货物查询信息
货物入库信息
客户
货物信息表
货物入库信息
货物出库信息
货物信息表
客户
货物出库信息
扩建仓库信息
管理员
仓库信息表
仓库扩建信息
修改货物信息
货物信息表
管理员
货物修改信息
5.数据存储
数据存储名
输入的数据流
输出的数据流
组成
客户信息表
客户注册信息
客户修改信息
客户注册信息
客户注册信息
客户修改信息
货物信息表
货物入库信息
货物出库信息
货物入库信息
货物出库信息
供应商信息表
供应商注册信息
供应商修改信息
供应商注册信息
供应商注册信息
供应商修改信息
管理员信息表
管理员注册信息
管理员注册信息
管理员注册信息
库存信息表
入库信息
出库信息
入库信息
出库信息
入库信息表
入库信息
货物修改信息
入库信息
货物修改信息
仓库信息表
仓库扩建信息
仓库删除信息
仓库扩建信息
仓库删除信息
6.处理过程
处理过程名
输入数据流
输出数据流
注册客户
客户注册信息
客户注册信息
注册供应商
供应商注册信息
供应商注册信息
注销客户信息
客户注册信息
客户注册信息
注销供应商信息
供应商注册信息
供应商注册信息
修改客户信息
客户注册信息
客户注册信息
修改供应商信息
供应商注册信息
供应商注册信息
查询客户信息
客户注册信息
客户注册信息
查询供应商信息
供应商注册信息
供应商注册信息
货物查询
货物信息
货物信息
货物入库
货物信息
货物信息
货物出库
货物信息
货物信息
仓库扩建
仓库信息
仓库信息
货物修改
货物信息
货物信息
三、系统设计
1、概念结构设计
1)总E-R图
2)货物类型E-R图
3)库存实体E-R图
3)入库实体E-R图
4)出库实体E-R图
2、逻辑结构设计
客户(编号,姓名,联系方式,地址)
管理员(编号,姓名,联系方式,密码)
货物(货物编号,货物名称,仓库编号)
货物类型(类型编号,类型名称,类型描述)
供应商(编号,名称,地址,货物,电话)
仓库存储(货物编号,仓库编号,货物名称,类型名称,货物存储量)
货物入库(货物编号,供应商编号,货物名称,货物类型,仓库编号,入库总量,收购单价,入库时间)
货物出库(货物编号,客户编号,货物名称,货物类型,仓库编号,出库总量,售出单价,出库时间)
仓库(仓库编号,仓库名称,仓库地址,仓库容量)
3、系统功能模块图
4、其它设计图形工具
亿图专业流程图、网络图制作工具V1.6.2(试用版)
四、详细设计
数据库中的表、视图、存储过程如下图所示:
存储过程、视图、触发器主要sql语句:
----------------------------------------------
--创建存储过程
----------------------------------------------
---客户登陆 存储过程
alterprocproc_Clogin
@cnoint,
@pwdvarchar(20),
@statusintoutput
as
select@status=count(*)fromcustomerwherecno=rtrim(ltrim(@cno))andcpw=rtrim(ltrim(@pwd))
if@status=1set@status=0------0登陆成功
else
begin
select@status=count(*)fromcustomerwherecno=rtrim(ltrim(@cno))
if@status=0set@status=1--------1账户不存在
elseset@status=2---------------2密码错误
end
--客户注册存储过程
createprocproc_Creg
@Cnamevarchar(20),
@Caddrvarchar(40),
@Ctelchar(11),
@pwdvarchar(10),
@Cnointoutput
as
insertintocustomervalues(@Cname,@Caddr,@Ctel,@pwd)
select@Cno=Max(Cno)fromcustomer
--添加客户存储过程
alterprocproc_AddCustm
@Cnamevarchar(20),
@Caddrvarchar(40),
@Ctelchar(11),
@pwdvarchar(10)
as
insertintocustomer(cname,caddr,ctel,cpw)values(@Cname,@Caddr,@Ctel,@pwd)
--客户修改存储过程
createprocproc_Cupd
@cnoint,
@Cnamevarchar(20),
@Caddrvarchar(40),
@Ctelchar(11),
@pwdvarchar(10)
as
updatecustomer
setcname=@Cname,caddr=@Caddr,ctel=@Ctel,cpw=@pwd
wherecno=@cno
---管理登陆 存储过程
alterprocproc_Mlogin
@mnoint,
@pwdvarchar(20),
@statusintoutput
as
select@status=count(*)frommanagerwheremno=@mnoandmpw=rtrim(ltrim(@pwd))
if@status=1set@status=0------0登陆成功
else
begin
select@status=count(*)frommanagerwheremno=@mno
if@status=0set@status=1--------1用户名不存在
elseset@status=2---------------2密码错误
end
--管理注册存储过程
createprocproc_Mreg
@Mnamevarchar(20),
@pwdvarchar(20),
@Mnointoutput
as
insertintomanagervalues(@Mname,@pwd)
select@Mno=Max(Mno)frommanager
--添加供应商存储过程
alterprocproc_AddProv
@Pnamevarchar(20),
@Paddrvarchar(40),
@Ptelchar(11),
@Pgoodschar(11)
as
insertintoprovidervalues(@Pname,@Paddr,@Pgoods,@Ptel)
--修改供应商存储过程
createprocproc_UpdProv
@pnoint,
@Pnamevarchar(20),
@Paddrvarchar(40),
@Ptelchar(11)
as
updateprovider
setpname=@pname,paddr=@paddr,ptel=@ptel
wherepno=@pno
--注销客户存储过程
createprocproc_Cdel
@Cnoint
as
deletefromcustomerwherecno=@cno
--注销供应商存储过程
createprocproc_Pdel
@Pnoint
as
deletefromproviderwherepno=@Pno
--注销管理员存储过程
createprocproc_Mdel
@Mnoint
as
deletefrommanagerwheremno=@mno
execproc_Mdel112
---调用存储过程
declare@aint
execproc_Mlogin100,'110',@aoutput
print@a
--货物入库存储过程
alterprocproc_goodsin
@pnoint,
@gnamechar(10),
@Tnamechar(20),
@snoint,
@innumint,
@inpricemoney
as
insertintogoods_in(pno,gname,tname,sno,innum,inprice)
values(@pno,@gname,@tname,@sno,@innum,@inprice)
--货物出库存储过程
createprocproc_goodsout
@gnoint,
@cnoint,
@gnamechar(10),
@Tnamechar(20),
@snoint,
@outnumint,
@outpricemoney
as
insertintogoods_out(gno,cno,gname,tname,sno,outnum,outprice)
values(@gno,@cno,@gname,@tname,@sno,@outnum,@outprice)
----------------------------------------------
-- 创建视图
----------------------------------------------
--货物视图
alterviewview_goods
as
selecta.gno货物编号,a.gname货物名称,d.tname类型编号,isnull(sum(Innum)-sum(outnum),sum(Innum))数量
fromgooda,goods_inbleftouterjoingoods_outconb.gname=c.gname,typegoodd
wherea.gname=b.gnameandd.tno=a.tno
groupbya.gno,a.gname,d.tname
--客户视图
alterviewview_customer
as
selectcno客户编号,cname客户名称,caddr客户地址,ctel联系方式
fromcustomer
--仓库视图
alterviewview_storage
as
selecta.sno仓库编号,sname仓库名称,saddr仓库地址,ssize仓库容量,ssize-isnull(sum(b.innum),0)+isnull(sum(c.outnum),0)仓库余量
fromstoragealeftouterjoingoods_inbona.sno=b.snoleftouterjoingoods_outconb.sno=c.sno
groupbya.sno,sname,saddr,ssize
--供应商视图
alterviewview_provider
as
selectpno供应商编号,pname供应商名,paddr地址,pgoods供应货物,ptel联系方式
fromprovider
----------------------------------------------
-- 创建触发器
----------------------------------------------
--禁止删除初始化管理员
createtriggertrig_manager100
onmanager
fordelete
as
declare@cntint
select@cnt=count(mno)fromdeletedwheremno=100
if@cnt<>0
begin
raiserror('无法删除初始化管理员!
',16,1)
rollbacktransaction
end
go
select*fromprovider
--进货时如果没有过这种货物或者货物类型,则新建
altertriggertrig_newgoodAndtype
ongoods_in
forinsert
as
declare@cnt1int,@gtypechar(20),@cntint,@gnamechar(20),@gtint
select@cnt1=count(*)frominsertedwheretnamein(selecttnamefromtypegood)
if@cnt1=0
begin
select@gtype=tnamefrominserted
insertintotypegood(tname)values(@gtype)
end
select@cnt=count(*)frominsertedwheregnamein(selectgnamefromgood)
if@cnt=0
begin
select@gname=gnamefrominserted
select@gt=tnofromtypegoodwheretname=(selecttnamefrominserted)
insertintogood(gname,tno)values(@gname,@gt)
end
go
--货物不能小于
createtriggertrig_gooderror
ongoods_out
forinsert
as
declare@sumint,@gnamechar(20)
select@gname=gnamefrominserted
sel