超市管理系统

本文详细描述了一个小型超市管理系统的设计过程,涵盖了数据库需求分析、E-R图设计、逻辑和物理结构设计,以及库存、销售管理和数据库实现的具体内容,包括存储过程、触发器和自定义函数的创建。
摘要由CSDN通过智能技术生成
  1. 根据老师提供修改的建议,之前设计的超市管理系统是大型超市系统,功能要求苛刻,系统涉及的基本表较多,不能很好驾驭,导致后面设计总存在一定问题。
  2. 现将此系统修改如下:与之前相比,此系统可能细节信息管理没有以前那个强大,但它体现了“超市管理系统的核心”,很好的展示了超市的运行系统,可以说该系统比之前的简练了,但“麻雀虽小,五脏俱全”,是超市管理系统的精华之处。另外一点,现系统实现起来,与本学期所学的知识更贴切,很好的将本学期的知识应用到这次设计中,所以此系统命名为“小型“。

小型超市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

数据库实现

一、每张表的五条记录:

  1. DEPART表中五条记录

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’)

  1. ASSISTANT表中的五条记录:

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)

  1. BILL表中的五条记录

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)

  1. RESERVR中的五条记录:

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

  1. 查询销售量前三的商品名,销售量,以及对应的收银员姓名及他来自哪个部门

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值