数据库课程设计报告 附存储过程和触发器模版+数据库脚本文档模版+分析及er图.docx
- 文档编号:8151268
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:38
- 大小:119.69KB
数据库课程设计报告 附存储过程和触发器模版+数据库脚本文档模版+分析及er图.docx
《数据库课程设计报告 附存储过程和触发器模版+数据库脚本文档模版+分析及er图.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告 附存储过程和触发器模版+数据库脚本文档模版+分析及er图.docx(38页珍藏版)》请在冰豆网上搜索。
数据库课程设计报告附存储过程和触发器模版+数据库脚本文档模版+分析及er图
1.概述
1.1项目背景
传统的商品销售管理在商品的统计和管理上不但麻烦,而且还十分的耗费人力和时间。
而商品销售管理系统对商品的进货、退货、存货和销售情况等进行了综合统计和管理,使管理人员能够更快的得到自己想要的信息。
1.2意义及目标
一个好的商品销售管理系统首先应具备的是基本的信息管理,而商品销售管理系统不但对商品信息信息、仓库信息、销售信息等都进行了系统的管理,而且管理人员可以直接登陆系统查看所有的信息,也可以根据自己的需要搜索相关的信息。
本文对系统开发中面临的问题及其解决方案进行详细的设计及合理安排,根据所掌握的技术对系统的各部分功能进行了实现。
2.数据库需求分析
2.1功能需求
功能分为以下四个方面:
1.基本信息管理:
✧对于销售情况、商品信息、库存等信息的录入、浏览、修改、撤销、删除
和查询等
2.商品销售管理
✧商品销售
✧商品退回
✧商品入库
3.基础信息管理
✧商品类别管理
✧仓库及系统操作人员管理
4.信息查询
✧商品信息查询
✧库存查询
✧销售统计信息查询
✧库存情况查询
2.2数据需求
商品(商品编号,商品名称,商品类型,商品产地)
仓库(仓库编号,仓库编号,仓库地址)
入库(顺序号,商品编号,仓库编号,入库数量,入库时间,入库原因)
库存(顺序号,仓库编号,商品编号,库存数量)
仓库管理员(员工编号,员工姓名,员工职称,仓库编号)
销售日志(顺序号,商品编号,销售数量,销售时间,销售金额)
用户(用户账号,用户密码)
2.3ER图分析
图1.ER图
3.物理设计
2.1数据表设计
图2.表结构图
2.2创建表脚本
2.2.1【用户表】
(1)创建表语句
createtableADMIN
(
ACCOUNTchar(20)notnull,
CIPHERchar(20),
primarykey(ACCOUNT)
);
(2)插入测试数据语句
insertintoadminvalues('12201504','12345');
2.2.2【商品表】
(1)创建表语句
createtableSP
(
SCODEchar(20)notnull,
SNAMEchar(20)notnull,
STAPEchar(20),
SPLACEchar(20),
primarykey(SCODE)
);
(2)插入测试数据语句
insertintospvalues('1','乐事薯片','食物','广东');
insertintospvalues('2','牛肉干','食物','广东');
insertintospvalues('3','瓜子','干果','广东');
insertintospvalues('4','可乐','饮料','广东');
insertintospvalues('5','雪碧','饮料','广东');
2.2.3【仓库表】
(1)创建表语句
createtableCK
(
CCODEchar(20)notnull,
CNAMEchar(20),
CADDRESSchar(20),
primarykey(CCODE)
);
(2)插入测试数据语句
insertintockvalues('1','南昌仓库','南昌');
insertintockvalues('2','长沙仓库','长沙');
insertintockvalues('3','武汉仓库','武汉');
2.2.4【入库表】
(1)创建表语句
createtableINPUT
(
Nintnotnull,
SCODEchar(20),
CCODEchar(20),
INNUMBERint,
INTIMEdatetime,
INREASONchar(20),
primarykey(N),
foreignkey(scode)referencessp(scode),
foreignkey(ccode)referencesck(ccode)
);
(2)插入测试数据语句
insertintoinputvalues('1','1','1','1000','2014-6-10','进货');
insertintoinputvalues('2','1','2','100','2014-6-10','进货');
insertintoinputvalues('3','4','3','100','2014-6-11','退货');
insertintoinputvalues('4','2','2','300','2014-6-11','进货');
insertintoinputvalues('5','5','3','200','2014-6-12','退货');
2.2.5【仓库管理员表】
(1)创建表语句
createtableWORKER
(
WCODEchar(20)notnull,
WNAMEchar(20),
WPOSITIONchar(20),
CCODEchar(20),
primarykey(WCODE),
foreignkey(ccode)referencesck(ccode)
);
(2)插入测试数据语句
insertintoworkervalues('11','奥巴马','员工','1');
insertintoworkervalues('12','奥特曼','仓库经理','1');
insertintoworkervalues('13','奥利奥','仓库副经理','1');
insertintoworkervalues('21','汤姆克鲁斯','员工','2');
insertintoworkervalues('22','小罗伯特唐尼','仓库经理','2');
insertintoworkervalues('23','尼古拉斯凯奇','仓库副经理','2');
insertintoworkervalues('31','大螺丝','员工','3');
insertintoworkervalues('32','伊瑟拉','仓库经理','3');
insertintoworkervalues('33','安东尼达斯','仓库副经理','3');
2.2.6【销售日志表】
(1)创建表语句
createtableSALE
(
Nintnotnull,
SCODEchar(20),
SNUMBERint,
SMONEYfloat(20),
STIMEdatetime,
primarykey(N),
foreignkey(scode)referencessp(scode)
);
(2)插入测试数据语句
insertintosalevalues('1','1','100','200','2014-6-10');
insertintosalevalues('2','2','100','250','2014-6-10');
insertintosalevalues('3','3','100','300','2014-6-10');
insertintosalevalues('4','4','100','500','2014-6-10');
2.2.7【库存表】
(1)创建表语句
createtableSTORENUM
(
Nintnotnull,
CCODEchar(20),
SCODEchar(20),
TOTALNUMint,
primarykey(N),
foreignkey(ccode)referencesck(ccode),
foreignkey(scode)referencessp(scode)
);
(2)插入测试数据语句
insertintostorenumvalues('1','1','1','5000');
insertintostorenumvalues('2','2','2','5000');
insertintostorenumvalues('3','3','3','5000');
4.功能实现
4.1查询及视图设计
4.1.1商品信息查询
(1)主要功能:
根据商品编号查询商品全部信息
(2)查询设计:
select*fromspwherescode=’1’;
4.1.2仓库信息查询
(1)主要功能:
根据仓库编号查询仓库全部信息
(2)查询设计:
select*fromckwhereccode=’2’;
4.1.3商品销售情况查询
(1)主要功能:
根据商品编号查询商品销售情况全部信息
(2)查询设计:
select*fromsalewherescode=’1’;
4.1.4仓库管理员信息查询
(1)主要功能:
根据管理员编号查询仓库管理员全部信息
(2)查询设计:
select*fromworkerwherewcode=’12’;
4.1.5入库信息根据编号查询
(1)主要功能:
根据入库时的顺序编号查询入库的全部信息
(2)查询设计:
select*frominputwheren=’1’;
4.1.6入库信息根据入库时间及商品编号查询
(1)主要功能:
根据入库时间及商品的编号查询入库的全部信息
(2)查询设计:
select*frominputwhereintime=’2014-6-11’,scode=’2’;
4.1.7仓库全部商品库存信息查询
(1)主要功能:
根据仓库编号查询该仓库的全部商品库存信息
(2)查询设计:
select*fromstorenumwhereccode=’1’;
4.1.8查询某地生产的商品在某地仓库中的库存信息
(1)主要功能:
查询南昌生产的商品在武汉仓库中的库存信息
(2)查询设计:
select*fromstorenum
whereccodein(selectccodefromckwherecaddress='武汉')
andscodein(selectscodefromspwheresplace='南昌');
4.1.9查询库存量超过制定数额的商品名称及仓库地址
(1)主要功能:
查询库存量超过1000的商品名称及仓库地址
(2)查询设计:
selectsname,caddressfromck,sp,storenum
whereck.ccode=storenum.ccodeandsp.scode=storenum.scodeandtotalnum>1000;
4.1.10查询存储某地生产的全部商品的仓库信息
(1)主要功能:
查询存储南昌生产的全部商品的仓库信息
(2)查询设计:
select*fromckwhere
notexists(select*fromspwheresplace='南昌'
andnotexists(select*fromstorenumwherestorenum.scode=sp.scode));
4.1.11查询某地仓库中的员工总数
(1)主要功能:
查询南昌仓库中的员工总数
(2)查询设计:
selectcount(*)fromworker
whereccodein(selectccodefromckwherecaddress='南昌');
4.1.12统计因进货而入库的的商品信息并按它们的进货数量升序排列
(1)主要功能:
统计因进货而入库的的商品信息并按它们的进货数量升序排列
(2)查询设计:
select*frominputwhereinreason='进货'orderbyinnumber;
4.2存储过程设计
4.2.1input_input
(1)主要功能:
商品退回或进货时,向入库表中插入信息
(2)参数说明:
序号
参数名称及数据类型(英文名称)
参数含义及说明
1
@nint
顺序号(主键)
2
@scodechar(20)
商品号
3
@ccodechar(20)
仓库号
4
@innumberint
入库数量
5
@intimedatetime
入库时间
6
@inreasonchar(20)
入库原因
(3)流程描述
声明变量接收数据并将全部数据插入入库表中
(4)代码及注释
createprocedureinput_input
(@nint,@scodechar(20),@ccodechar(20),@innumberint,@intimedatetime,@inreasonchar(20))
as
insertintoinputvalues
(@n,@scode,@ccode,@innumber,@intime,@inreason);
4.2.2drop_sale
(1)主要功能:
商品退货时,根据顺序号可删除销售日志中的记录
(2)参数说明:
序号
参数名称及数据类型(英文名称)
参数含义及说明
1
@nint
销售日志表中的顺序号(主键)
(3)流程描述
输入接收顺序号,并根据顺序号删除销售日志中的该行信息
(4)代码及注释
createproceduredrop_sale
(@nint)
as
deletefromsalewheren=@n;
4.2.3cipher_admin
(1)主要功能:
修改该系统用户的密码
(2)参数说明:
序号
参数名称及数据类型(英文名称)
参数含义及说明
1
@ACCOUNTchar(20)
用户账号
2
@CIPHERchar(20)
用户新密码
(3)流程描述
根据输入的用户账号,使用新密码更新该账号的旧密码
(4)代码及注释
createprocedurechange_admin
(@ACCOUNTchar(20),@CIPHERchar(20))
as
updateadminsetcipher=@cipherwhereaccount=@account;
4.2.4storenum_sp
(1)主要功能:
查询某地生产的商品在某地仓库中的库存信息
(2)参数说明:
序号
参数名称及数据类型(英文名称)
参数含义及说明
1
@splacechar(20)
商品产地
2
@caddresschar(20)
仓库地址
(3)流程描述
1.输入并接收商品产地和仓库地址
2.使用select语句根据商品产地和仓库地址找出商品号,仓库号并输出与商品号,库存号相同的全部库存信息
(4)代码及注释
createprocedurestorenum_sp
(@splacechar(20),@caddresschar(20))
as
select*fromstorenumwhereccodein(selectccodefromckwherecaddress=@caddress)
andscodein(selectscodefromspwheresplace=@splace);
4.2.5totalnum_caddress
(1)主要功能:
查询库存量超过3000的商品名称及仓库地址
(2)参数说明:
序号
参数名称及数据类型(英文名称)
参数含义及说明
1
无
无参数及返回值
(3)流程描述
将三张表进行连接,并筛选出库存量大于3000的条目,输出其·全部信息
(4)代码及注释
createproceduretotalnum_caddress
as
selectsname,caddressfromck,sp,storenum
whereck.ccode=storenum.ccodeandsp.scode=storenum.scodeandtotalnum>3000
4.2.6ck_splace
(1)主要功能:
查询存储某地生产的全部商品的仓库信息
(2)参数说明:
序号
参数名称及数据类型(英文名称)
参数含义及说明
1
@splacechar(20)
商品产地
(3)流程描述
使用select语句,根据输入的商品产地,找出某一个仓库,不存在一个商品的产地是该商品产地,这个商品没有被这个仓库储存,并输出这个仓库的全部信息
(4)代码及注释
createprocedureck_splace
(@splacechar(20))
as
select*fromckwherenotexists(select*fromspwheresplace=@splace
andnotexists(select*fromstorenumwherestorenum.scode=sp.scode));
4.3触发器设计
4.3.1触发器1
(1)简介
触发器名称:
in_storenum
监听的表名:
Storenum//库存
监听的操作类型:
Insert
功能描述:
商品入库时,更新该商品库存量,若库存中没有该商品,则添加其商品信息入库存表
(2)详细操作流程
【详细说明该存储过程的操作过程,可以用伪代码、流程图或自然语言】
1.声明标量接收inserted表中的商品号,仓库号,入库数量
2.找出库存表中最大的顺序号(主键),加一后用标量@n接收
3.用select语句找出库存表中是否存在需入库的该商品信息
4.判断若存在该商品,则库存量加上入库数量
5.若不存在,则插入该商品信息,库存量存储为入库数量
(3)代码及注释
createtriggerin_storenumoninput
forinsertas
declare@scodechar(20),@ccodechar(20),@innumberint,@aint,@max_nint
select@scode=scode,@ccode=ccode,@innumber=innumberfrominserted
select@a=count(*)fromstorenumwherescode=@scodeandccode=@ccode
if@a>0
updatestorenumsettotalnum=totalnum+@innumberwherescode=@scodeandccode=@ccode
else
begin
select@max_n=max(n)fromstorenum
insertintostorenumvalues(@max_n+1,@ccode,@scode,@innumber)
end;
4.3.2触发器2
(1)简介
触发器名称:
de_storenum
监听的表名:
Sale//销售日志
监听的操作类型:
Insert
功能描述:
商品售出而在销售日志中插入出售记录时,更新库存,使库存中的商品数量减少出售的数量
(2)详细操作流程
【详细说明该存储过程的操作过程,可以用伪代码、流程图或自然语言】
1.声明变量从inserted表中接收商品号,出售数量
2.更新库存表,使得该商品库存量减少出售数量
(3)代码及注释
createtriggerde_storenumonsale
forinsertas
declare@scodechar(20),@snumberint
select@scode=scode,@snumber=snumberfrominserted
updatestorenumsettotalnum=totalnum-@snumberwherescode=@scode;
4.3.3触发器1
(1)简介
触发器名称:
storenum_totalnum
监听的表名:
Storenum//库存表
监听的操作类型:
Update
功能描述:
当更新库存表时,监控商品的库存总量,若库存总量超过5000时,
提示'存入量超标,任意商品存储量应小于5000!
!
!
'并回滚操作
取消之前的更新操作
(2)详细操作流程
【详细说明该存储过程的操作过程,可以用伪代码、流程图或自然语言】
1.声明变量从inserted表中接收库存总量
2.判断该库存总量是否大于5000
3.若大于5000,则提示文字,并回滚操作
(3)代码及注释
createtriggerstorenum_totalnumonstorenum
forupdateas
declare@totalnumint
select@totalnum=totalnumfrominserted
if@totalnum>=5000
begin
print('存入量超标,任意商品存储量应小于5000!
!
!
')
rollbacktransaction
end;
4.3.4触发器1
(1)简介
触发器名称:
change_sale_n
监听的表名:
Sale//销售日志(该触发器也修改并使用在入库表和库存表中)
监听的操作类型:
Insert
功能描述:
当向销售日志表插入数据,顺序号(主键)与表中的末尾顺序号不连接时,自动修改成连接的数字(该触发器也修改并使用在入库表和库存表中)
(2)详细操作流程
【详细说明该存储过程的操作过程,可以用伪代码、流程图或自然语言】
1.声明变量接收inserted表中的需要插入顺序号
2.数出从销售日志中的总行数并赋值给变量@old_n
3.将总行数@old_n赋值给刚插入那一行的顺序号
(3)代码及注释
createtriggerchange_sale_nonsale
forinsertas
declare@new_nint,@old_nint
select@new_n=nfrominserted
select@old_n=coun
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库课程设计报告 附存储过程和触发器模版+数据库脚本文档模版+分析及er图 数据库 课程设计 报告 存储 过程 触发器 模版 脚本 文档 分析 er