数据库课程设计仓库管理系统.docx
《数据库课程设计仓库管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计仓库管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
![数据库课程设计仓库管理系统.docx](https://file1.bdocx.com/fileroot1/2023-3/19/760a0054-e3c8-4c0e-a67d-8ebaacdf4020/760a0054-e3c8-4c0e-a67d-8ebaacdf40201.gif)
数据库课程设计仓库管理系统
福建工程学院
课程设计
课程:
数据库系统概论
题目:
仓库管理系统
专业:
计算机科学与技术
班级:
座号:
姓名:
2012年6月12日
一、系统定义
随着各个公司经营的范围慢慢扩大,业务流量比较大,需要处理的数据比较多,为了能对公司的业务进行有效的管理,减少手工操作的繁琐,同时可以根据公司业务的运营情况,分析出公司发展的潜在信息,顺应时代的发展变化,使管理更加简单化。
二、需求分析
1、最终仓库管理系统功能如下:
(1)资料管理功能
人员信息:
用于登记公司的员工信息资料、客户信息资料、和供应商信息资料,对员工信息资料支持员工信息的录入、修改和删除。
最高权限的管理员能录入和删除工作人员,普通权限的工作人员只能修改自己的密码
产品信息:
支持产品信息的录入、修改和删除,可以对各个产品进行查询。
(2)业务管理功能
进出仓库明细:
用于查看进货明细、进货退货、销售明细、销售退货、实现录入、修改和删除。
退货时,需要指定相应的退货单,可以查询进出仓库明细。
盘库:
通过人工清点当前库存物品,与理论上仓库内物品数量对比,分析盘盈、盘亏问题
(3)统计分析功能
物品分析:
用于对物品进行分析,主要是销售分析,包括对利润、进货、退货、库存等进行分析,可以通过报表显示。
人员分析:
由于需求加大,需要各种职务的工作人员,分析职务需求,可供人才参考
利润分析:
对产品销售的利润进行分析,可以看出货物的供求关系
(4)系统帮助功能:
制作人员介绍
使用帮助
2、给出系统的逻辑模型:
数据流程图、数据字典
数据流图例子(可根据需要用多层数据流图表示):
采购货物数据流图:
数据字典:
数据项:
仓库:
{仓库编号,仓库名,仓库类型,管理员,员工编号};
供应商:
{供应商编号,姓名,联系方式,地址};
供应商供应的货物存入仓库
数据结构:
供应商提供货物,存入相应的仓库
数据流:
需求的货物进入相应的仓库
数据存储:
产品描述,应付款
处理过程:
需求货物->送订单号->订单处理->付款->货物入库
管理数据流图:
数据字典:
数据项:
员工:
{员工编号,姓名,登录密码,性别,生日,联系方式,职称,家庭住址};
货物:
{货物编号,名称,类型,数量,单位,进价,售价,订单号};
管理员管理仓库和资料库
数据结构:
管理员进行相关的操作,显示相应的信息,或存储相应的物品、资料
数据流:
操作信息,操作数据,相关信息表
数据存储:
查询时将数据信息显示出来,入出库数据进行存储处理等等
处理过程:
管理员操作->获得操作信息->实行相应的处理
三、系统设计
1、概念结构设计
画出系统E-R图。
2、逻辑结构设计
将E-R图(或其他概念设计图)转换为具体的DBMS对应的关系模式。
员工:
{员工编号,姓名,登录密码,性别,生日,联系方式,职称,家庭住址};
货物:
{货物编号,名称,类型,单位,进价,售价};
仓库:
{仓库编号,仓库名,仓库类型,员工编号};
供应商:
{供应商编号,姓名,联系方式,地址};
客户:
{客户编号,货物编号,姓名,联系方式,地址,订单号};
库存:
{仓库编号,货物编号,数量}
进仓:
{入单号,进仓时间,入库数量,所付金额}
出仓:
{出单号,出仓时间,出库数量,所付金额}
盘库:
{盘库号,盘库时间,盘库数量}
数据库设计:
员工表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
staff_no
可变字符
10
否
是
员工编号
2
staff_password
可变字符
10
否
否
登录密码
3
staff_name
可变字符
10
否
否
员工姓名
4
staff_sex
字符
2
否
否
性别
5
staff_birthday
日期
可
否
出生日期
6
staff_phone
字符
15
否
否
联系方式
7
staff_rank
字符
10
否
否
职称
8
staff_family_address
可变字符
50
可
否
家庭住址
仓库表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
cangku_no
可变字符
10
否
是
仓库编号
2
cangku_name
可变字符
10
否
否
仓库名
3
cangku_type
可变字符
10
否
否
仓库类型
4
staff_no
可变字符
10
否
否
员工编号
货物表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
material_no
可变字符
10
否
是
货物编号
2
material_name
可变字符
10
否
否
货物名
3
material_type
可变字符
10
否
否
货物类型
4
material_in_price
可变字符
10
否
否
进价
5
material_out_price
可变字符
10
否
否
出价
6
material_unit
字符
4
否
否
单位
供应商表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
supplier_no
可变字符
10
否
是
供应商编号
2
material_no
可变字符
10
否
是
货物编号
3
supplier_name
可变字符
10
否
否
供应商姓名
4
supplier_phone
字符
15
否
否
联系方式
5
supplier_address
可变字符
50
可
否
住址
客户表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
kehu_no
可变字符
10
否
是
客户编号
2
kehu_name
可变字符
10
否
否
客户姓名
3
kehu_password
可变字符
10
否
否
登录密码
4
kehu_phone
字符
15
否
否
联系方式
5
kehu_address
可变字符
50
可
否
住址
进仓表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
rudan_no
整形
否
否
入单号
2
supplier_no
可变字符
10
否
否
供应商编号
3
material_no
可变字符
10
否
否
货物编号
4
in_data
日期
否
否
进仓时间
5
ru_qty
长整形
否
否
进仓数量
6
supp_pay
长整形
否
否
所付金额
7
staff_no
员工编号
10
否
否
员工编号
出仓表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
chudan_no
整形
否
否
出单号
2
kehu_no
可变字符
10
否
否
客户编号
3
material_no
可变字符
10
否
否
货物编号
4
out_data
日期
否
否
出仓时间
5
chu_qty
长整形
否
否
出仓数量
6
kehu_pay
长整形
否
否
所付金额
7
staff_no
员工编号
10
否
否
员工编号
库存表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
cangku_no
可变字符
10
否
是
仓库号
2
material_no
可变字符
10
否
是
货物编号
3
qty
长整形
否
否
数量
盘库表
序号
字段名称
数据类型
大小
可否为空
主键
说明
1
panku_no
可变字符
10
否
否
盘库号
2
staff_no
可变字符
10
否
否
员工编号
3
panku_date
日期
否
否
盘库日期
4
material_no
可变字符
10
否
否
货物编号
5
panku_qty
长整形
否
否
盘库数量
3、系统功能模块图
画出系统功能模块图,并对子模块功能进行详细说明。
四、详细设计
主要的SQL语句
--数据库的建立
CREATEDATABASEckgl
ONPRIMARY
(NAME='ckgl_data',
FILENAME='f:
\cg\ckgl_data.mdf',
SIZE=5mb,
FILEGROWTH=15%
)
LOGON
(NAME='ckgl_log',
FILENAME='f:
\cg\ckgl_log.ldf',
SIZE=2mb,
MAXSIZE=100mb,
FILEGROWTH=1MB
)
GO
--员工表
createtablestaff
(
staff_novarchar(10)primarykey,
staff_passwordvarchar(10)notnull,
staff_namevarchar(10)notnull,
staff_sexchar
(2)notnull,
staff_birthdaydatetime,
staff_phonechar(15)notnull,
staff_rankchar(10)notnull,
staff_family_addressvarchar(50),
)
go
--货物表
createtablematerial
(
material_novarchar(10)primarykey,
material_namevarchar(10)notnull,
material_typevarchar(10)notnull,
material_in_pricevarchar(10)notnull,
material_out_pricevarchar(10)notnull,
material_unitchar(4)notnull,
)
go
--仓库表
createtablecangku
(
cangku_novarchar(10)primarykey,
cangku_namevarchar(10)notnull,
cangku_typevarchar(10)notnull,
staff_novarchar(10)notnull,
foreignkey(staff_no)referencesstaff(staff_no),
)
Go
--库存表
createtablecunhuo
(
cangku_novarchar(10),
material_novarchar(10),
qtybigint,
primarykey(cangku_no,material_no),
foreignkey(cangku_no)referencescangku(cangku_no),
foreignkey(material_no)referencesmaterial(material_no),
)
--供应商表
createtablesupplier
(
supplier_novarchar(10),
material_novarchar(10),
supplier_namevarchar(10)notnull,
supplier_phonechar(15)notnull,
supplier_addressvarchar(50),
primarykey(supplier_no,material_no),
foreignkey(material_no)referencesmaterial(material_no),
)
--进仓表
createtablematerial_in
(
rudan_nointnotnull,
supplier_novarchar(10)notnull,
material_novarchar(10)notnull,
in_datadatetimenotnull,
ru_qtybigintnotnull,
supp_paybigintnotnull,
staff_novarchar(10)notnull,
foreignkey(supplier_no,material_no)referencessupplier(supplier_no,material_no),
foreignkey(staff_no)referencesstaff(staff_no),
)
--客户表
createtablekehu
(
kehu_novarchar(10)primarykey,
kehu_namevarchar(10)notnull,
kehu_passwordvarchar(10)notnull,
kehu_phonechar(15)notnull,
kehu_addressvarchar(50),
)
--出仓表
createtablematerial_out
(
chudan_nointnotnull,
kehu_novarchar(10)notnull,
material_novarchar(10)notnull,
out_datadatetimenotnull,
chu_qtybigintnotnull,
kehu_paybigintnotnull,
staff_novarchar(10)notnull,
foreignkey(kehu_no)referenceskehu(kehu_no),
foreignkey(material_no)referencesmaterial(material_no),
foreignkey(staff_no)referencesstaff(staff_no),
)
--盘库表
createtablepanku
(
panku_novarchar(10)notnull,
staff_novarchar(10)notnull,
panku_datedatetime,
material_novarchar(10)notnull,
panku_qtybigint,
foreignkey(material_no)referencesmaterial(material_no),
foreignkey(staff_no)referencesstaff(staff_no),
)
Go
建立进出仓的存储过程
入仓:
createprocedurematerial_in_pro
@rudan_noint,
@supplier_novarchar(10),
@material_novarchar(10),
@in_datadatetime,
@ru_qtybigint,
@supp_paybigint,
@staff_novarchar(10),
@outvarchar(20)='0'output
as
DECLARE@n1int
select@n1=count(material_no)frommaterial
wherematerial_no=@material_no
if(@n1=0)
begin
select@out='此物料不存在,如果要进仓,请先登记新物料信息!
!
'
return
end
else
begin
insertintomaterial_invalues(@rudan_no,@supplier_no,@material_no,@in_data,@ru_qty,@supp_pay,@staff_no)
updatecunhuosetqty=qty+@ru_qtywherematerial_no=@material_no
select@out='操作成功!
!
'
return
end
go
出仓:
createprocmaterial_out_pro
@chudan_noint,
@kehu_novarchar(10),
@material_novarchar(10),
@out_datadatetime,
@chu_qtybigint,
@kehu_paybigint,
@staff_novarchar(10),
@outvarchar(20)='0'output
as
DECLARE@n1int
select@n1=count(material_no)frommaterial
wherematerial_no=@material_no
if(@n1=0)
begin
select@out='此物料不存在!
'
return
end
else
begin
if@chu_qty>(selectqtyfromcunhuowherematerial_no=@material_no)
begin
select@out='库存数量不足!
!
'
return
end
else
begin
insertintomaterial_outvalues(@chudan_no,@kehu_no,@material_no,@out_data,@chu_qty,@kehu_pay,@staff_no)
updatecunhuosetqty=qty-@chu_qtywherematerial_no=@material_no
select@out='操作成功!
!
'
return
end
end
盘库:
procedureTForm4.Button8Click(Sender:
TObject);
begin
//insertintopanku(panku_no,staff_no,panku_date,material_no,panku_qty)
//select1,1001,'2012-4-1',material_no,qtyfromcunhuo
//将盘库结果插入到盘库表中
withdatamodule2.pankudo
begin
sql.clear;
sql.add('insertintopanku(panku_no,staff_no,panku_date,material_no,panku_qty)');
sql.add('select'''+edit4.text+''','''+combobox11.text+''','''+datetostr(datetimepicker4.datetime)+''',material_no,qtyfromcunhuo');
close;
execsql;
showmessage('盘库成功!
!
');
button8.enabled:
=false;
//一次登录不允许重复盘库,以免多占空间资源
end;
//显示本次盘库结果
withdatamodule2.panku1do
begin
sql.clear;
sql.add('select*frompanku,materialwherepanku.material_no=material.material_noandpanku_no='''+edit4.text+'''');
close;
open;
end;
end;
//盘库后盘库单号自动加1,便于下次盘库
procedureTForm4.FormCreate(Sender:
TObject);
varmax:
integer;
begin
withDataModule2.ADOQuery1do
begin
sql.Clear;
sql.Add('selectmax(panku_no)asmaxfrompanku');
close;
open;
max:
=DataModule2.ADOQuery1.fieldbyname('max').AsInteger;
edit4.Text:
=inttostr(max+1);
end;
End;
主要模块的程序流程图。
1、
2、
3、
4、
五、系统实现与测试
1、开发平台和工具选择
Deiphi7
SQL2005
2、系统测试
登录界面:
可以看到字体为动态形式,下面的诗为闪烁状态
主界面:
业务管理:
进仓开单后单号自动加1
盘库:
信息管理:
其中添加员工和删除员工只有人事管理员才能操作,如果是其他员工,则
客户资料:
供应商:
员工需求分析:
系统帮助:
客户登录进来购买:
客户改密:
六、课程设计总结
1、说明设计心得、想法建议等。
通过本次课程设计,我们了解到总体把握的重要性。
编写软件的前期准备非常重要,首先要进行需求分析,确定我们要完成什么功能。
紧接着,以需求为前提建立数据库,需要什么表,每个表里面要有那些元素,这个表在运用的时候具体会在哪个功能上使用到等等。
其次,前台入手,先将要实现的功能建立菜单放入主窗口,再将各个功能细分,分配到各个form窗口中去实现。
在与老师的交流沟通中,我们受益匪浅,明白了数据库后台设计的重要性。
依然记得老师给我们举得例子:
建立一个权限表,这样的话当员工的权限有变动的话就不需要去前台修改程序,而只要在后台把权限表做一定的修改,这样就可以省去了修改代码的麻烦。
还有触发器和储存过程的使用的优点,也是在老师的举例下获得更深刻的了解。
通过本次设计,我们明白了,对于数据库的学习,最主要的是实践,只有多上机练习,才能找到自己在哪方面欠缺,才能更好