1、数据库原理与应用课程设计题目:商店进销存管理系统 院系: 工学院 班级: * 姓名: * 学号: * 指导教师: * 1题目要求及说明 1.1 题目要求(1)根据题目要求调查分析一个具体的或模拟的实例;(2)描述该实例的业务信息和管理工作的要求;(3)列出实体、联系;(4)指出实体和联系的属性;(5)画出E-R图;(6)将E-R图转换成关系模式,并注明主码和外码;(7)建立数据字典;(8)创建数据库。1.2 题目:某商店进销存管理系统(1)实现商品类别、供货商、业务员信息管理;(2)实现商品信息、仓库信息管理、仓库商品管理;(3)实现商品验收入库、商品销售出库管理,入库和出库时自动修改对 应商
2、品的总库存和分库库存量(用触发器实现),另外验收或销售时一单可以验收或销售多种商品;(4)实现转仓管理,转仓时自动修改转出仓库和转入仓库对应商品的数量(用触发器实现);(5)创建存储过程统计指定时间段内各种商品的进货数量和销售数量;(6)设商品的单位只能是只、件、箱,创建规则进行限制;(7)创建表间关系。2. 需求分析:2.1 市场调查分析:通过对现流行在市场的软件的调查,发现,现在市场上软件多是针对大客户,比较复杂,开发的过程比较复杂,比较昂贵,也不容易操作与维护,不能被广大的小企业或是超市,还有商店等使用,所以,我们抓住市场的这个空白区,去开发商店的进销存管理系统。2.2 系统描述:该系统
3、主要是对中小型商店的进货、销售、库存管理等做出管理,基本实现了商店商品类别、供货商、业务员信息的管理;并用触发器和规则实现了系统的完整性和一致性的管理,在商品入库、出库和转库的过程中,能自动修改相应的数量,并用规则限制了商品的单位,只能是“只”、“件”、“箱”等功能。基本满足设计题目的要求。3. E-R图 3.1 实体与联系:实体:商品类别、供货商、业务员、商品、仓库联系:所属、供应、管理、库存、入库、出库、转库3.2 属性: 商品类别(商品类别号,商品类别名) 供货商(供货商号,供货商名,供货商地址,联系电话) 业务员(业务员号,业务员名,性别) 商品(商品号,商品名,商品类别号,商品单位,
4、商品价格,商品数量) 仓库(仓库号,仓库名,仓库地址) 库存(商品号,商品名,仓库号,仓库名,库存数量) 入库(商品号,商品名,仓库号,仓库名,入库数量,入库时间) 出库(商品号,商品名,仓库号,仓库名,出库数量,出库时间) 转库(商品号,商品名,原仓库号,目标仓库号,转库数量,转库时间)3.3 E-R图(1) 局部ER图:(2) 全局ER图:3.4 关系模式(1) 若实体间的联系是1:1联系,可以在两个实体类型转换成两个关系模式的任意一个关系式的属性中,加入另一个关系模式的主码和联系类型的属性。(2) 若实体间的联系是1:n联系,则在n端实体类型转换成的关系模式中,加入1端实体类型转换成的关
5、系模式的主码和联系类型的属性。(3) 若实体间的联系是m:n联系,则将联系类型也转换成关系模式,其属性为两端实体类型的主码加上联系类型的属性,而该主码为两端实体主码的组合。根据以上规则,本系统的E-R模型向关系模型转换如下(主码用下横线标出,外码用蓝色表示):具体图示如下:商品类别表(商品类别号,商品类别名)供货商表(供货商号,供货商名,供货商地址,联系电话)业务员表(业务员号,业务员名,性别)仓库表(仓库号,仓库名,仓库地址)商品表(商品号,商品名,商品类别号,商品单位,商品单价,商品数量)库存表(商品号,仓库号,商品名,仓库名,库存数量)入库表(商品号,仓库号,商品名,仓库名,入库数量,入
6、库时间,业务员号)出库表(商品号,仓库号,商品名,仓库名,出库数量,出库时间,业务员号)转库表(商品号,商品名,原仓库编号,目标仓库编号,转库数量,转库时间,业务员号)4. 数据字典表1 商品类别表列名数据类型数据长度为空否主键商品类别号Char 10商品类别名Char20表2 供货商表列名数据类型数据长度为空否主键供货商号Char10供货商名Char20供货商地址Char30联系电话char13表3 业务员表列名数据类型数据长度为空否主键业务员号char10业务员名Char8性别Char2表4 仓库表列名数据类型数据长度为空否主键仓库编号char10仓库名Char20仓库地址char30表5
7、 商品表列名数据类型数据长度为空否主键商品号Char10商品名Char20商品类别号Char10商品单位Char2商品价格float8商品数量int4表6 库存表列名数据类型数据长度为空否主键商品号Char10商品名Char20仓库号Char10库存数量int4表7 入库表列名数据类型数据长度为空否主键商品编号Char10商品名称Char20仓库号Char10仓库名char20入库数量Int4入库时间Datetime8业务员号char10表8 出库表列名数据类型数据长度为空否主键商品号Char10商品名称Char20仓库号Char10仓库名char20出库数量Int4出库时间Datetime8
8、业务员号char10表9 转库表列名数据类型数据长度为空否主键商品编号char10商品名称Char20原仓库编号Char10目标仓库编号Char10转库数量Int4转库时间datetime8业务员号char105. 程序实现5.1 程序/*创建数据库*/create database 商店进销存管理系统on( name=商店进销存管理系统_data, filename=d:SQL Server商店进销存管理系统_data.mdf, size= 1MB, maxsize= 5MB, filegrowth= 1MB)log on( name=商店进销存管理系统_log, filename=d:SQ
9、L Server商店进销存管理系统_log.ldf, size= 1MB, maxsize= 2MB, filegrowth= 1MB)/*创建商品类别表并插入数据*/use 商店进销存管理系统gocreate table 商品类别表( 商品类别号 char(10) primary key, 商品类别名 char(20)goinsert into 商品类别表 values (101,饮料类)insert into 商品类别表 values (102,笔类)insert into 商品类别表 values (103,酒类)insert into 商品类别表 values (104,玩具宠物类)i
10、nsert into 商品类别表 values (105,食品类)insert into 商品类别表 values (106,服装类)goselect * from 商品类别表go/*创建供货商表并插入数据*/use 商店进销存管理系统gocreate table 供货商表( 供货商号 char(10) primary key, 供货商名 char(20), 供货商地址 char(30), 供货商电话 char(13)goinsert into 供货商表 values (GHS101,家乐福,昆明,0871-3456177)insert into 供货商表 values (GHS102,沃尔玛
11、昆明,0871-3699703)insert into 供货商表 values (GHS103,福多多,北京,0870-2224177)insert into 供货商表 values (GHS104,天力,重庆,0870-5932703)insert into 供货商表 values (GHS105,华联,上海,0873-3694177)insert into 供货商表 values (GHS106,金方,深证,0873-3699703)goselect * from 供货商表go/*创建业务员表并插入数据*/use 商店进销存管理系统gocreate table 业务员表( 业务员号 ch
12、ar(10) primary key, 业务员名 char(8), 性别 char(2)goinsert into 业务员表 values (YWY101,李琴,女)insert into 业务员表 values (YWY102,王华,男)insert into 业务员表 values (YWY103,方芳,女)insert into 业务员表 values (YWY104,刘芳,女)insert into 业务员表 values (YWY105,思源,女)insert into 业务员表 values (YWY106,高竹,男)insert into 业务员表 values (YWY107,
13、张瑞,女)goselect * from 业务员表go/*创建仓库表并插入数据*/use 商店进销存管理系统gocreate table 仓库表( 仓库号 char(10) primary key, 仓库名 char(20),)goinsert into 仓库表 values (CKH101,仓库一号)insert into 仓库表 values (CKH102,仓库二号)insert into 仓库表 values (CKH103,仓库三号)insert into 仓库表 values (CKH104,仓库四号)insert into 仓库表 values (CKH105,仓库五号)inse
14、rt into 仓库表 values (CKH106,仓库六号)goselect * from 仓库表go/*创建商品表并插入数据*/use 商店进销存管理系统gocreate table 商品表( 商品号 char(10) primary key, 商品名 char(20), 商品类别号 char(10) foreign key references 商品类别表(商品类别号), 商品单位 char(2), 商品价格 float, 商品数量 int)gocreate rule 单位限制 as value in (只,件,箱)goexec sp_bindrule 单位限制,商品表.商品单位goi
15、nsert into 商品表 values (SP101,鲜橙多,101,箱,35.00,100)insert into 商品表 values (SP102,中性笔,102,只,2.00,100)insert into 商品表 values (SP103,青醇,103,箱,5.00,200)insert into 商品表 values (SP104,土豆片,105,箱,46.00,100)insert into 商品表 values (SP105,方便面,105,箱,36.00,100)insert into 商品表 values (SP106,衣服,106,件,46.00,100)inser
16、t into 商品表 values (SP107,玩具狗,104,只,40.00,100)goselect * from 商品表go/*创建库存表并插入数据*/use 商店进销存管理系统gocreate table 库存表( 商品号 char(10) foreign key references 商品表(商品号), 商品名 char(20), 仓库号 char(10) foreign key references 仓库表(仓库号), 库存数量 int, constraint 库存 primary key (商品号,仓库号)goinsert into 库存表 values (SP101,鲜橙多,
17、CKH101,70)insert into 库存表 values (SP101,鲜橙多,CKH102,30)insert into 库存表 values (SP102,中性笔,CKH102,50)insert into 库存表 values (SP102,中性笔,CKH103,50)insert into 库存表 values (SP105,方便面,CKH103,50)insert into 库存表 values (SP105,方便面,CKH104,50)insert into 库存表 values (SP107,玩具狗,CKH104,50)insert into 库存表 values (SP
18、107,玩具狗,CKH106,50)insert into 库存表 values (SP103,青醇,CKH105,67)insert into 库存表 values (SP103,青醇,CKH101,133)insert into 库存表 values (SP104,土豆片,CKH103,35)insert into 库存表 values (SP104,土豆片,CKH105,65)insert into 库存表 values (SP106,衣服,CKH106,30)insert into 库存表 values (SP106,衣服,CKH103,70)goselect * from 库存表go
19、/*创建入库表并插入数据*/use 商店进销存管理系统gocreate table 入库表( 商品号 char(10) foreign key references 商品表(商品号), 商品名 char(20), 仓库号 char(10) foreign key references 仓库表(仓库号), 仓库名 char(20), 入库数量 int, 入库时间 datetime, 业务员号 char(10), constraint 入库 primary key (商品号,仓库号)Go/*创建商品入库触发器*/create trigger T_入库 on 入库表 for insertasdecl
20、are 数量 intselect 数量=入库数量 from 入库表update 库存表 set 库存数量=库存数量+数量 where 库存表.商品号=(select 商品号 from inserted) and 库存表.仓库号=(select 仓库号 from inserted)update 商品表 set 商品数量=商品数量+数量 where 商品表.商品号=(select 商品号 from inserted)goselect * from 库存表goinsert into 入库表 values (SP101,鲜橙多,CKH101,仓库一号,10,2007-10-15,YWY101)inse
21、rt into 入库表 values (SP102,中性笔,CKH102,仓库二号,20,2007-10-19,YWY102)insert into 入库表 values (SP103,青醇,CKH105,仓库五号,20,2007-10-16,YWY103)insert into 入库表 values (SP104,土豆片,CKH103,仓库三号,30,2007-11-20,YWY104)insert into 入库表 values (SP105,方便面,CKH103,仓库三号,80,2007-9-28,YWY105)insert into 入库表 values (SP106,衣服,CKH10
22、6,仓库六号,30,2007-11-2,YWY106)insert into 入库表 values (SP107,玩具狗,CKH104,仓库四号,40,2007-11-6,YWY107)goselect * from 库存表go/*创建出库表*/use 商店进销存管理系统gocreate table 出库表( 商品号 char(10) foreign key references 商品表(商品号), 商品名 char(20), 仓库号 char(10) foreign key references 仓库表(仓库号), 仓库名 char(20), 出库数量 int, 出库时间 datetime,
23、 业务员号 char(10), constraint 出库 primary key (商品号,仓库号)Go/*创建商品出库触发器*/create trigger T_出库 on 出库表 for insertasdeclare 数量 intselect 数量=出库数量 from 出库表update 库存表 set 库存数量=库存数量-数量 where 库存表.商品号=(select 商品号 from inserted) and 库存表.仓库号=(select 仓库号 from inserted)update 商品表 set 商品数量=商品数量-数量 where 商品表.商品号=(select 商
24、品号 from inserted)goselect * from 库存表goinsert into 出库表 values (SP101,鲜橙多,CKH101,仓库一号,20,2007-10-26,YWY101)insert into 出库表 values (SP102,中性笔,CKH102,仓库二号,25,2007-10-29,YWY102)insert into 出库表 values (SP103,青醇,CKH105,仓库五号,30,2007-10-22,YWY103)insert into 出库表 values (SP104,土豆片,CKH103,仓库三号,60,2007-11-29,YW
25、Y104)insert into 出库表 values (SP105,方便面,CKH103,仓库三号,80,2007-10-10,YWY105)insert into 出库表 values (SP106,衣服,CKH106,仓库六号,25,2007-11-15,YWY106)insert into 出库表 values (SP107,玩具狗,CKH104,仓库四号,60,2007-11-26,YWY107)goselect * from 库存表go /*创建转库表*/use 商店进销存管理系统gocreate table 转库表( 商品号 char(10) primary key, 商品名 c
26、har(20), 原仓库号 char(10), 目标仓库号 char(10), 转库数量 int, 转库时间 datetime, 业务员号 char(10)go/*创建商品转库触发器*/create trigger T_转库 on 转库表 for insertasdeclare 转库数量 intselect 转库数量=转库数量 from 转库表update 库存表 set 库存数量=库存数量-转库数量 where 库存表.仓库号=(select 原仓库号 from inserted) and 库存表.商品号=(select 商品号 from inserted)update 库存表 set 库存
27、数量=库存数量+转库数量 where 库存表.仓库号=(select 目标仓库号 from inserted) and 库存表.商品号=(select 商品号 from inserted)goselect * from 库存表goinsert into 转库表 values (SP101,鲜橙多,CKH101,CKH102,12,2007-10-20,YWY101)insert into 转库表 values (SP102,中性笔,CKH102,CKH103,11,2007-10-19,YWY102)insert into 转库表 values (SP103,青醇,CKH105,CKH101,
28、5,2007-10-22,YWY103)insert into 转库表 values (SP104,土豆片,CKH103,CKH105,1,2007-11-13,YWY104)insert into 转库表 values (SP105,方便面,CKH103,CKH104,40,2007-10-1,YWY105)insert into 转库表 values (SP106,衣服,CKH106,CKH103,15,2007-11-10,YWY106)insert into 转库表 values (SP107,玩具狗,CKH104,CKH106,20,2007-11-15,YWY107)goselec
29、t * from 库存表go/*创建存储过程统计指定时间段内各种商品的进货数量和销售数量*/create proc U_slasselect 入库表.商品号,入库表.商品名,入库数量 AS 进货数量,入库时间 AS 进货时间,出库数量 AS 销售数量,出库时间 AS 销售时间from 入库表,出库表where 入库时间 between 2007-10-10 and 2007-11-1 and 出库时间 between 2007-10-10 and 2007-11-1order by 入库表.商品号goexec U_slgo5.2 结果 用入库触发器的数据变化如下: 用出库触发器的数据变化如下: 用转库触发器的数据变化如下:、存储过程统计2007-10-10到2007-11-1这段时间内,各种商品的进货数量和销售数量如下: