赞
踩
小型超市POP管理系统
一.数据库需求分析
1)基本信息的维护
收银员信息的管理:基本信息的新建,删除和修改
超市基本信息的维护:基本信息的新建,删除和修改
2)库存管理
商品进货信息管理:商品进货信息包括商品进货数量、单价、供货商等。
更新库存:进货信息的变动直接关系到库存的变化。
3)销售管理
商品销售信息管理:商品销售信息包括商品销售数量、单价、总价等。商品销售管理功能完成销售信息登记、修改和删除等。
更新库存:销售信息的变动直接关系到库存的变化。
数据库实现的功能树:
二.数据库概念结构设计
(1)部门E-R图:
(2)收银员E-R图
:
(3)收银小票E-R图:
(4)商品库存E-R图
2 综合ER图
图2-1 超市管理ER图
三、逻辑设计
部门表(部门编号,部门名称,收银员),主键为部门编号。
收银员表(收银员编号,姓名,性别,工资),主键为收银员编号号。
收银小票表(小票编号,商品编号,收银员编号,商品名称,单价,个数,总价)主键
为小票编号。
商品库存表(商品编号,商品名称,单价,库存量,供货商名)主键为商品编号号。
四.物理结构设计
数据库名:POP
数据库物理文件初始大小:10MB
是否允许自动增长:是
自动增长方式:每次增加5MB
最大数据容量:不受限
是否自动收缩:是
是否是只读数据库:否
事务日志文件位置:e:\POP
事务日志文件初始大小:1MB
事务日志文件最大数据容量:20 MB
创建如下数据表:
表3-1 超市表DEPART
列名 | 含义 | 长度 | 类型 | NULL | DEFAULT |
DNO | 部门编号 | 10 | Char() | no | no |
DNAME | 部门名称 | 30 | Char() | no | no |
表3-2 收银员表ASSISTANT
列名 | 含义 | 长度 | 类型 | NULL | DEFAULT |
ANO | 收银员编号 | 10 | Char() | no | no |
ANAME | 姓名 | 6 | Char() | no | no |
DNO | 部门号 | 10 | Char() | no | no |
SEX | 性别 | 2 | Char() | no | no |
SALARY | 工资 | 8 | INT | no | no |
表3-3收银小票 表BILL
列名 | 含义 | 长度 | 类型 | NULL | DEFAULT |
BNO | 小票编号 | 20 | Char() | no | no |
CNO | 商品编号 | 8 | Char() | no | no |
ANO | 收银员编号 | 8 | Char() | no | no |
CNAME | 商品名称 | 8 | Char() | no | no |
PRICE | 销售单价 | 8 | Float() | no | no |
QUANTITY | 个数 | 4 | Int | no | no |
TOTAL | 总价 | 8 | Float () | no | no |
表3-4 商品库存表RESERVR
列名 | 含义 | 长度 | 类型 | NULL | DEFAULT |
CNO | 商品编号 | 8 | Char() | no | no |
CNAME | 商品名称 | 8 | Char() | no | no |
PRICE | 进货单价 | 8 | Float() | no | no |
CINPUT | 商品进货量 | 4 | Int | no | no |
LIST | 库存量 | 8 | Int | no | no |
PROFESSINAL | 供货商名 | 20 | Char() | yes | no |
数据库实现
一、每张表的五条记录:
Insert into DEPART
Values(‘001’,’食品部’,’0001’)
Insert into DEPART
Values(‘002’,’服装部’,’0002’)
Insert into DEPART
Values(‘003’,’饰品部’,’0003’)
Insert into DEPART
Values(‘004’,’家电部’,’0004’)
Insert into DEPART
Values(‘005’,’生活部’,’0005’)
Insert into ASSISTANT
Values(‘0001’,’张杰’,’男’,2000)
Insert into ASSISTANT
Values(‘0002’,’张含韵’,’女’,1500)
Insert into ASSISTANT
Values(‘0003’,’瑶瑶’,’女’,1800)
Insert into ASSISTANT
Values(‘0004’,’章子怡’,’女’,2500)
Insert into ASSISTANT
Values(‘0005’,’周瑞发’,’女’,1600)
Insert into BILL
Values(‘00’,’A01’,’0001’,’甜点’,5,0,0)
Insert into BILL
Values(‘01’,’A02’,’0002’,’冬装’,100,0,0)
Insert into BILL
Values(‘02’,’A03’,’0003’,’首饰’,300,0,0)
Insert into BILL
Values(‘03’,’A04’,’0004’,’冰箱’,1500,0,0)
Insert into BILL
Values(‘04’,’A05’,’0005’,’毛巾’,15,0,0)
Insert into RESERVR
Values(‘A01’ ,’甜点’,4,50,’伊利’ ,50)
Insert into RESERVR
Values(‘B01’ ,’冬装’,80,100,’上海服装’ ,100)
Insert into RESERVR
Values(‘C01’ ,’首饰’,240,20,’北京首饰’ ,20)
Insert into RESERVR
Values(‘D01’ ,’冰箱’,1200,30,’广州海尔’ ,30)
Insert into RESERVR
Values(‘E01’ ,’毛巾’,12,100,’温州生活’ ,100)
二、五个查询
1.查询收银员基本信息:(根据收银员编号)
select *
from ASSISTANT
where ANO=****(例如0002)
2.查询具体部门下有多少个收银员:
select count(*)
from ASSISTANT,DEPART
where (ASSISTANT.DNO=DEPART.DNO and DEPART.DNAME='****')(例如:食品部)
3.按收银员工资排序(显示收银员姓名,工资,来自哪个部门)
SELECT ANAME ,SALARY ,DNAME
FROM ASSISTANT INNER JOIN
DEPART ON ASSISTANT.DNO = DEPART.DNO
ORDER BY ASSISTANT.SALARY DESC
SELECT TOP 3 BILL.QUANTITY, ASSISTANT.ANAME, DEPART.DNAME, BILL.CNAME
FROM BILL INNER JOIN
ASSISTANT ON BILL.ANO = ASSISTANT.ANO INNER JOIN
DEPART ON ASSISTANT.DNO = DEPART.DNO
ORDER BY BILL.QUANTITY DESC
5.查询进货量最大的商品名称,进货量,以及由哪个供货商提供
SELECT TOP 1 CINPUT, PROFESSINAL, CNAME
FROM RESERVR
ORDER BY CINPUT DESC
三、四个视图
1.视图:男收银员的基本信息表
create view 男收银员信息表
as
select *
from ASSISTANT
where(SEX='男')
2.视图:生活部所有员工姓名列表
create view 生活部员工姓名列表
as
SELECT ANAME
FROM DEPART INNER JOIN
ASSISTANT ON DEPART.DNO = ASSISTANT.DNO
where DNAME='生活部'
3.销售额排行榜:
create view 销售额排行榜
as
SELECT top 5 ASSISTANT.ANAME, BILL.QUANTITY * BILL.PRICE AS 销售额
FROM BILL INNER JOIN
ASSISTANT ON BILL.ANO = ASSISTANT.ANO
ORDER BY BILL.QUANTITY * BILL.PRICE DESC
4.商品赢利一览表(前五)
create view 商品赢利一览表
as
SELECT top 5 BILL.CNAME, BILL.QUANTITY * (BILL.PRICE - RESERVR.PRICE) AS 赢利
FROM BILL INNER JOIN
RESERVR ON BILL.CNO = RESERVR.CNO
ORDER BY BILL.QUANTITY * (BILL.PRICE - RESERVR.PRICE) DESC
四、两个存储过程
1.利用存储过程来实现,当某商品卖出时,它的商品库存量相应的减少.
CREATE PROCEDURE SELL
@BCNO CHAR,
@QLIST INT
as
BEGIN
DECLARE @L INT
SELECT @L=LIST
FROM RESERVR
WHERE @BCNO =RESERVR.CNO
IF @L IS NULL
begin
ROLLBACK
RETURN
end
UPDATE RESERVR
SET LIST=LIST-@QLIST
WHERE @BCNO=RESERVR.CNO
end
2.利用输入的商品名称来显示该商品的盈利额:
CREATE PROCEDURE YINGLI
@cname char(8)
as
DECLARE @YL INT
SELECT @YL=BILL.QUANTITY * (BILL.PRICE - RESERVR.PRICE)
FROM RESERVR INNER JOIN
BILL ON RESERVR.CNO = BILL.CNO
WHERE (BILL.CNAME = @cname)
PRINT '商品'+rtrim(@cname)+'的赢利是:'
print @YL
五、两个触发器
1.定义一个触发器,当商品库存表中,供货商为空时,自动改为”本店制作”。
CREATE TRIGGER UDLIST ON RESERVR
For insert,update
AS
BEGIN
declare @pro char
select @pro=(select PROFESSINAL from inserted)
IF(@pro IS NULL)
begin
update RESERVR set PROFESSINAL='本店制作'
end
END
2.定义一个触发器,当在ASSISTANT表中插入一个收银员信息时,工资(SALARY)为空时,提示该收银员处在“试用期”。
CREATE TRIGGER shiyong ON ASSISTANT
For insert
AS
BEGIN
declare @SLA int
declare @name char(6)
select @name=(select ANAME from inserted)
select @SLA=(select SALARY from inserted)
IF(@SLA IS NULL)
begin
PRINT '收银员'+rtrim(@name)+'处在试用期'
end
END
六、两个函数
1.函数:输入供货商即商品名称,显示该超市在该商品上,在该供货商消耗的成本
create function chengben(@name as char(8),@pro as char(20))
returns int
begin
declare @result int
declare @price char(8)
declare @input int
select @price=PRICE
from RESERVR
where (@name=CNAME AND @pro=PROFESSINAL)
select @input=CINPUT
from RESERVR
where (@name=CNAME AND @pro=PROFESSINAL)
set @result=@price*@input
return @result
end
2.函数:查询某种商品的销售情况(假定:当销售比—(销售量与进货量之比)小于20%,显示销售情况一般,销售比大于20%小于50%,销售情况较好,销售比在50%以上,销售情况良好)
create function xiaoshou (@cname as char(8))
returns char(200)
begin
declare @result float
declare @tishi char(200)
declare @quanlity float
declare @input float
SELECT @input=RESERVR.CINPUT, @quanlity=BILL.QUANTITY
FROM RESERVR INNER JOIN
BILL ON RESERVR.CNO = BILL.CNO
WHERE (RESERVR.CNAME =@cname)
set @result= @quanlity/@input
if @result<0.2
set @tishi='商品'+rtrim(@cname)+'销售一般'
else if @result>0.2 and @result<0.5
set @tishi= '商品'+rtrim(@cname)+'销售较好'
else if @result>0.5
set @tishi='商品'+rtrim(@cname)+'销售良好'
return @tishi
end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。