广西大学数学与信息科学学院
数据库课程设计
题目:西大易乐多超市管理系统
专 业:
班 级:
小 组 号:
姓 名:
姓 名:
姓 名:
姓 名:
目录
第 1 章 系统需求分析 ...........................................................................................1
系统开发背景 .....................................................................................................1
系统开发意义 .....................................................................................................1
定义 ....................................................................................................................1
需求分析 ............................................................................................................2
销售管理模块 ..........................................................................................2
基本信息管理模块 ..................................................................................3
仓库管理模块 ..........................................................................................4
进货管理模块 ..........................................................................................4
系统管理模块 ..........................................................................................5
第 2 章 系统功能结构图 .........................................................................................6
第 3 章 数据库的设计 .............................................................................................8
系统实体的 E-R 图.............................................................................................8
系统总体的 E-R 图...........................................................................................10
关系模式 ...........................................................................................................12
第 4 章 数据字典 ...................................................................................................12
数据项 ...............................................................................................................12
数据结构 ...........................................................................................................20
数据存储 ...........................................................................................................23
第 5 章 数据库的实现 .........................................................................................27
数据库的建立 ...................................................................................................27
数据表的建立与实现 .......................................................................................27
数据备份 ..........................................................................................................79
权限设置 ..........................................................................................................80
第 6 章 课程设计总结 ...........................................................................................81
第 1 章 系统需求分析
系统开发背景
21 世纪,超市的竞争也进入到了一个全新的领域,竞争已不再是规模的竞
争,而是技术的竞争、管理的竞争、人才的竞争。技术的提升和管理的升级是超
市业的竞争核心。零售领域目前呈多元发展趋势,多种业态:超市、仓库店、便
利店、特许加盟店、专卖店、货仓等相互并存。如何在激烈的竞争中扩大销售额、
降低经营成本、扩大经营规模,成为超市营业者努力追求的目标。因此,我们很
有必要制定一套合理、有效、规范和实用的超市管理系统,对超市的日常业务进
行集中统一的管理。另一方面,IT 产业和 Internet 获得了飞速发展,计算机应用
已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了
处理的及时性和正确性。
针对超市的特点,为了帮助超市解决现在面临的问题,提高小型超市的竞争
力,我们设计了一个超市管理系统。
系统开发意义
超市管理作为计算机应用的一个分支,有着手工管理无法比拟的优点。该系
统的三大好处:
①大大提高超市的运作效率;
①通过全面的信息采集和处理,辅助提高超市的决策水平;
①使用本系统,可以迅速提升超市的管理水平,为降低经营成本,提高效益,
增强超市扩张力,提供有效的技术保障。
因此,开发一套能够为消费者及超市工作人员提供方便的超市管理系统,将是非
常必要的,也是十分及时的。
定义
① 商品条形码:每个商品具有唯一的条形码,对于某些价格一样的商品,可
以使用自定义条形码。
①交易清单:包括交易的流水账号、每类商品的商品名、数量、该类商品的
总金额、交易的时间、负责本次收银的员工号。
① 促销:在一定时期内,某些商品会按低于原价的促销价格销售。
① 库存告警提示:当商品的库存数量低于库存报警数量时发出提示。
① 手工盘点:计算出库存、销售额、盈利等经营指标。
需求分析
销售管理模块
销售管理系统见图 1-1。
图 销售管理模块图
销售管理模块的功能:
①商品销售:录入销售商品的信息包括商品销售数量、单价、统计日期等,
提供收银业务系统能计算交易总额,打印交易清单,并根据会员卡积分。
①销售查询:可以根据商品的信息来查看某种商品的销售情况
①销售分析:列出当前销售量最多的前几项商品和销售量最少的前几项商品,
可以查询各种销售明细记录,打印商品销售(日、月、年)报表和各个收银员收
银记录以及交结账情况等。按多种方式统计生成销售排行榜。
销
售
控
制
销
售
查
询
销
售
分
析
销售管理
基本信息管理模块
基本信息管理系统见图 1-2。
图 1-2 基本信息管理模块图
基本信息管理的功能:
①商品信息管理:实现对商品信息进行查询、更新、删除等操作。
①员工信息管理:实现对员工的统一管理,可以进行查询、更新、删除等操
作
①会员信息管理:实现对持有会员卡的顾客信息进行查询、更新、删除等操
作,以及对会员卡积分的管理。
①供货商信息管理:实现对供应商信息的查询、更新、删除等操作。
①货架管理:实现对货架信息的查询、更新、删除等操作,提供货架的存放
位置和存放的商品信息。
员
工
信
息
管
理
商
品
信
息
管
理
货
架
信
息
管
理
供
货
商
信
息
管
理
会
员
信
息
管
理
基本信息管理
仓库管理模块
仓库管理系统见图 1-3。
图 1-3 仓库管理模块图
仓库管理模块的功能:
①仓库管理模块可帮组超市的仓库管理人员对仓库商品的入库、出库、盘点
等操作进行全面的控制和管理。
①入库登记:记录入库商品的入库日期、入库数量、供货商信息及商品的基
本信息等,及更新库存信息。
①出库登记:记录出库商品的出库日期、出库数量、供货商信息及商品的基
本信息等,及更新库存信息。
①手工盘点:商品盘存要求能够对系统中所有商品信息进行整理,修正与实
际信息由差错的信息,以保证系统中数据的实时性和有效性。
①库存报警:当某商品的库存数量低于系统设定的最低库存数量时,系统自
动报警提醒库存管理人员该商品已缺货。
进货管理模块
进货管理系统见图 1-4。
入
库
登
记
出
库
登
记
手
工
盘
点
库
存
报
警
仓库管理
图 1-4 进货管理模块图
进货管理模块的功能:
①进货计划制定:通过对库存商品的分析,列出需要购买的商品的相关信息
及购买数量即制定具体的进货计划单,实现对进货情况的查询。
① 采 购 进 货 : 按 照 进 货 计 划 , 采 购 人 员 购 买 商 品 , 并 将 购 买 到
商品的基本信息登记成入库单,以便采购商品的入库。
系统管理模块
系统管理系统见图 1-5。
采
购
进
货
进
货
计
划
制
定
进货管理
系统管理
权
限
管
理
数
据
备
份
与
修
复
系
统
维
护
图 1-5 系统管理模块图
系统管理模块的功能:
①权限管理:在超市管理系统中,因涉及大量企业内部数据安全问题尤为重
要,我们通过用户权限管理来是实现数据库系统的安全,即通过用户登录进行数
据认证,授予用户不同的身份来限制其访问的控制业务,保证系统的安全。
①数据备份与修复:为了防止系统出现操作失误或系统故障导致数据丢失而
进行数据备份与修复。
①系统维护:对数据库系统进行定期地检查、维护。
第 2 章 系统功能结构图
系统总体结构功能示意图见图 2-1。
图 2-1 系统功能结构图
易乐多超市零售管理
系统
进
货
管
理
员
工
信
息
管
理
商
品
信
息
管
理
货
架
信
息
管
理
供
货
商
信
息
管
理
会
员
信
息
管
理
制
定
进
货
计
划
采
购
进
货
销
售
管
理
商
品
销
售
销
售
查
询
销
售
分
析
仓
库
管
理
基
本
信
息
管
理
入
库
登
记
出
库
登
记
手
工
盘
点
库
存
报
警
系
统
管
理
权
限
设
置
数
据
备
份
与
修
复
系
统
维
护
第 3 章 数据库的设计
系统实体的 E-R 图
商品实体的 E-R 图见图 3-1。
图 3-1 商品实体 E-R 图
员工实体 E-R 图见图 3-2。
图 3-2 员工实体 E-R 图
条形码实体 E-R 图见图 3-3。
商品
商品编号 商品名称 单价 商品单位 商品数量
员工
员 工 姓
名
员工性别 联 系 电
话
员工职位员 工 编
号
商品类型
图 3-3 条形码实体 E-R 图
会员实体 E-R 图见图 3-4。
图 3-4 会员实体 E-R 图
货架实体 E-R 图见 3-5。
条形码
码号 商品编号
会员
会员卡
号
会员姓
名
累计积
分
注册日
期
货架
货架号 层数 货架位置
图 3-5 货架实体 E-R 图
供货商实体 E-R 图见图 3-6。
图 3-6 供货商实体 E-R 图
系统用户实体 E-R 图见图 3-7。
图 3-7 系统用户实体 E-R 图
系统总体的 E-R 图
系统总体 E-R 图见图 3-8。
系统用户
员工编号 员工姓名 登录密码
供货商
供货商名称 供货商地址 银行账号负责人供货商号 供货商电话
商品 供应商
出
库
入
库
仓库
供 货
应
条形码
顾客
员工
货架
摆
放
管
理
识
别
购
买
类型
单位
单价
数量
编号
名称
入 库 日
期
入库量
出 库 日
期
出库量
员 工 编
号
员 工 编
号
供 货 日
期
供 货 数
量
供 货 价
格
员 工 编
号
供商号
供名称
供地址
电话
银 行 账
号
商 品 编
号
码号
流 水 账
号
销 售 数
量
会 员 卡
号
员 工 编
号
员 工 姓
名
密码
员编号
员 工 姓
名
员 工 性
别
联 系 电
话
员 工 职
位
货架号 层数 货 架 位
置
摆 放 数
目
摆 放 位
置
11
nn
nm
1
1
n
m
n
m
1
n
图 3-8 系统总体 E-R 图
关系模式
说明:主码用下划线“____”标出,外键用“~~~”标出。
①商品(Commodity)(商品编号,商品名称,商品数量,单价,商品单位,商品
类型)
①条形码(Idenfy)(码号,商品编号)
①销售记录(Sell)(流水帐号,商品编号,销售数量,会员卡号,,员工编号)
①会员(Member)(会员卡号,会员姓名,累计积分,注册日期)
①摆放(Put)(商品编号,货架号,摆放数量,摆放位置)
①员工(Employee)(员工编号,员工姓名,员工性别,联系电话,员工职位)
①货架(Shelf)(货架号,层数,货架位置)
①入库单(Store)(商品编号,入库日期,入库量,员工编号)
①出库单(Out)(商品编号,出库日期,出库量,员工编号)
①供货商(Provider)(供货商号,供货商名称,供货商地址,供货商电话,负责
人,供货商银行账号)
①进货单(Purchase)(供货商号,供货日期,商品编号,供货数量,供货价格,员
工编号)
①系统用户表(Yonghu)(员工编号,员工姓名,登陆密码)
①库存表(Kucun)(商品编号,库存量,最小库存量)
第 4 章 数据字典
数据项
名字:cno 编号:1—01
说明:商品编号,为记录的快速查询提供索引
类型:char
长度:5
有关数据结构:Commodity 表 、Idenfy 表、Sell 表、Put 表、Store 表、
Out 表、Purchase 表
名字:cname 编号:1—02
说明:商品名称,为顾客识别各类商品提供依据
类型:varchar
长度:40
有关数据结构:Commodity 表 、Department 表
名字:cnum 编号:1—03
说明:商品数量,记录商品的个数。
类型:float
长度:8
有关数据结构:Commodity 表 、Department 表
名字:cprice 编号:1—04
说明:单价,记录每单位商品的价格。
类型:smallmoney
长度:4
有关数据结构:Commodity 表 、Department 表
名字:cunit 编号:1—05
说明:商品单位,商品的计量单位。
类型:varchar
长度:4
有关数据结构:Commodity 表 、Department 表
名字:type 编号:1—06
说明:商品类型,描述商品所属类型。
类型:varchar
长度:16
有关数据结构:Commodity 表 、Department 表
名字:sno 编号:1—07
说明:流水账号,为销售记录的快速查询提供索引
类型:char
长度:12
有关数据结构:Sell 表
名字:snum 编号:1—08
说明:销售数量,用于计量售出商品数。
类型:float
长度:8
有关数据结构:Sell 表
名字:ino 编号:1—09
说明:码号,产品销售包装上加印供电子扫描用的符号条码,用于识别
每个商品。
类型:char
长度:13
有关数据结构:Idenfy 表
名字:mno 编号:1—10
说明:会员卡号,会员所持有的会员卡的编号,并为记录的快速查询提
供索引
类型:char
长度:6
有关数据结构:Sell 表 、Menber 表
名字:mname 编号:1—11
说明:会员姓名,记录成为超市会员顾客的姓名
类型:varchar
长度:20
有关数据结构:Member 表
名字:pnum 编号:1—14
说明:摆放数量,记录某一类型商品摆放在货架上的数量
类型:int
长度:4
有关数据结构:Put 表
名字:padd 编号:1—15
说明:摆放位置,记录某一类型商品摆放在货架的第几层
类型:char
长度:1
有关数据结构:Put 表
名字:mint 编号:1—12
说明:累计积分,记录会员购买商品所获得的总积分,一元对应一个积分
类型:float
长度:8
有关数据结构:Member 表
名字:mdate 编号:1—13
说明:注册日期,记录非会员顾客注册成为会员当天的日期
类型:smalldatatime
长度:4
有关数据结构:Member 表
名字:eno 编号:1—16
说明: 员工编号,标识超市员工身份的号码,并为快速查询提供索引
类型:char
长度:3
有关数据结构:Employee 表、Sell 表、Store 表、Out 表、Purchase 表、Yonghu
表
名字:sid 编号:1—21
说明:货架号,为找寻商品提供线索节省时间
类型:int
长度:4
有关数据结构:Shelf 表,Put 表
名字:ename 编号:1—17
说明:员工姓名,记录超市员工的姓名
类型:varchar
长度:20
有关数据结构:Employee 表、Yonghu 表
名字:esex 编号:1—18
说明:员工性别,记录超市员工的性别是男或是女
类型:char
长度:2
有关数据结构:Employee 表
名字:etel 编号:1—19
说明:联系电话,记录超市员工的手机号码
类型:char
长度:11
有关数据结构:Employee 表
名字:epos 编号:1—20
说明:员工职位,记录超市员工在超市中担任的岗位
类型:varchar
长度:10
有关数据结构:Employee 表
名字:layer 编号:1—22
说明:货架的层数,为找寻商品提供线索节省时间
类型:int
长度:4
有关数据结构:shelf 表
名字:place 编号:1—23
说明:货架位置,为记录的快速查询提供索引
类型:char
长度:8
有关数据结构:shelf 表
名字:idate 编号:1—24
说明:入库日期,记录商品放入仓库的时间。
类型:smalldatetime
长度:4
有关数据结构:Store 表
名字:inum 编号:1—25
说明:入库量,记录商品放入仓库的数量。
类型:float
长度:8
有关数据结构:Store 表
名字:odtae 编号:1—26
说明:出库时间,记录商品拿出仓库的时间。
类型:smalldatetime
长度:4
有关数据结构:Out 表
名字:onum 编号:1—27
说明:出库量,记录商品出库的数量。
类型:float
长度:8
有关数据结构:Out 表
名字:gno(供货商号) 编号:1—28
说明:供货商编号,为超市提供唯一标识的供应商,为快速查询提供索引
类型:char
长度:7
有关数据结构:Provider 表 、Purchase 表
名字:name(供货商名称) 编号:1—29
说明:供货商名称,为超市识别各种不同的供货商
类型:varchar
长度:40
有关数据结构:Provider 表
名字:gadd(供货商地址) 编号:1—30
说明:供货商的地址,可帮助确定货源的远近
类型:varchar
长度:50
有关数据结构:Provider 表
名字:tel(供货商电话) 编号:1—31
说明:供货商电话,超市人员可以通过电话来联系供货商
类型:char
长度:11
有关数据结构:Provider 表
名字:bankno(供货商银行账号) 编号:1— 33
说明:在供货商与超市成功交易后,超市可以把钱打进该供货商银行账号
类型:char
长度:18
有关数据结构:Provider 表
名字:amount(供货数量) 编号:1— 35
说明:提供供货商提供的商品的数量,便于进行超市的成本计算和库存管理
类型:float
长度:8
有关数据结构:Purchase 表
名字:respon(负责人) 编号:1—32
说明:供货商供货负责人编号,方便超市联系供应商及获取商品的信息
类型:varchar
长度:10
有关数据结构:Purchase 表
名字:gdate(供货日期) 编号:1— 34
说明:供货日期是超市采购员去订货的当天或者供应商送货的当天,便于进行
库存管理
类型:smalldatetime
长度:4
有关数据结构:Purchase 表
有关数据结构:Purchase 表
数据结构
名字:gprice(供货价格) 编号:1— 36
说明:供货商提供的每单位商品的价格,即是超市每单位商品的进价
类型:smallmoney
长度:4
有关数据结构:Purchase 表
名字:code(登陆密码) 编号:1— 37
说明:根据用户名与登录密码的组合,合法的用户可以进入超市的数据库系统
类型:char
长度:6
有关数据结构:Yonghu 表
名字:minkc(最小库存量) 编号:1— 39
说明:是各类商品的最小库存量情况,设置这一最低水平,当某商品的库存量
小于最小库存量时就自动报警提醒超市制定进货的计划。
类型:float
长度:8
有关数据结构:Kucun 表
名字:kc(库存量) 编号:1— 38
说明:是各类商品的库存情况,并根据入库出库的情况,定期更新库存的情况,
便于超市管理商品和制定进货的计划。
类型:float
长度:8
有关数据结构:Kucun 表
名称:Commodity(商品表) 编号:2—01
说明:商品基本信息表,供记录商品的基本信息以及商品基本信息的查询。
组成:cno(商品编号)
cname(商品名称)
cprice(单价)
cunit(商品单位)
cnum(商品数量)
ctype(商品类型)
名称:Put(摆放)表 编号:2—05
说明:摆放基本信息表,记录商品摆放的基本信息以及供商品摆放信息的查询。
组成:cno(商品编号)
sid(货架号)
pnum(摆放数量)
padd(摆放位置)
名称:Menber(会员)表 编号:2—04
说明:会员基本信息表,记录会员的基本信息以及供会员基本信息的查询。
组成:mno(会员卡号)
mname(会员姓名)
mint(累计积分)
mdate(注册日期)
名称:idenfy (条形码表) 编号:2—03
说明:条形码基本信息表,记录商品的基本信息以及识别各商品。
组成:ino(码号)
cno(商品编号)
名称:Sell (销售记录表) 编号:2—02
说明:购买基本信息表,记录顾客购买的商品的基本信息以及商品基本信息的
询。
组成:sno(流水账号)
snum(销售数量)
cno(商品编号)
eno(员工编号)
mno(会员卡号)
名称:Provider(供货商表) 编号:2—10
说明:供货商基本信息表,在超市需要采购商品时可以查询供货商信息。
组成:gno(供货商号)
name(供货商名称)
gadd(供货商地址)
tel(供货商电话)
bankno(供货商银行账号)
名称:Employee(员工)表 编号:2—06
说明:员工基本信息表,记录超市员工的基本信息以及供员工基本信息的查询。
组成:eno(员工编号)
ename(员工姓名)
esex(员工性别)
etel(联系电话)
epos(员工职位)
名称:Out(出库表) 编号:2—09
说明:商品出库基本信息表,提供记录出库单的基本信息以及出库单基本信息的
查询。
组成:cno(商品编号)
odate(出库日期)
onum(出库量)
eno(员工编号)
名称:Store(入库单)表 编号:2—08
说明:入库单基本信息表,提供记录入库单的基本信息以及入库单基本信息的查
询。
组成:cno(商品编号)
idate(入库日期)
inum(入库量)
eno(员工编号)
名称:Shelf(货)架表 编号:2—07
说明:货架基本信息表,提供记录货架的基本信息以及货架基本信息的查询。
组成:sid(货架号)
slayer(层数)
splace(货架位置)
数据存储
名称:Commodity(商品表) 数据存储编号:3—01
描述:商品基本信息表,超市相关人员想了解商品信息时时,可查询商品的基本
信息
数据来源:商品信息管理系统
数据流向:商品信息管理系统,,货架信息管理系统,供货商信息管理系统
数据流组成:Commodity= cno +name+ cprice+ cunit+ cnum+ ctype
组织方式:索引文件,以 cno( 商品编号)为关键字
存取方式:随机存储
查询要求:要求实现快速查询以及对数据的插入、删除、更新等操作
名称:Kucun(库存表) 编号:2—13
说明:存放商品的库存量,便于对库存的管理和商品进货计划的制定
组成:cno(商品编号)
kc(库存量)
minkc(最小库存量)
名称:Yonghu(系统用户表) 编号:2—12
说明:存放系统的用户账号及密码,便于对系统权限的设置安排
组成:eno(员工编号)
ename(员工姓名)
code (登录密码)
名称:Purchase(进货单表) 编号:2—11
说明:进货单提供超市进货的具体信息,可以查询供货商、供货日期、供货价格
及采购人员等信息。
组成:gno(供货商号)
gdate(供货日期)
amount(供货数量)
price(供货价格)
cno(商品编号)
eno(员工编号)
名称:Put(摆放)表 数据存储编号:3—05
描述:摆放基本信息表,超市相关人员想了解商品摆放次序时,可查询商品摆放
的基本信息
数据来源:货架信息管理系统、商品信息管理系统
数据流向:商品信息管理系统
数据流组成:Put=cno+sid+pnum+padd
组织方式:索引文件,以 cno( 商品编号)+sid(货架号)为关键字
存取方式:随机存储
查询要求:要求实现快速查询以及对数据的插入、删除、更新等操作
名称:Idenfy(销售记录表) 数据存储编号:3—03
描述:条形码的基本信息表,标识各个商品,可供查询
数据来源:商品信息管理系统
数据流向:商品信息管理系统
数据流组成:Idenfy = ino+ cno
组织方式:索引文件,以 ino(码号)为关键字
存取方式:随机存储
查询要求:要求实现快速查询以及对数据的插入、删除、更新等操作
名称:Menber(会员)表 数据存储编号:3—04
描述:会员基本信息表,记录成为本超市会员的顾客基本信息,可供查询
数据来源:顾客信息管理系统
数据流向:顾客信息管理系统
数据流组成:Menber=mno+mname+mint+mdate
组织方式:索引文件,以 mno( 会员卡号)为关键字
存取方式:随机存储
查询要求:要求实现快速查询以及对数据的插入、删除、更新等操作
名称:Sell(销售记录表) 数据存储编号:3—02
描述:销售记录的基本信息表,记录售出商品的基本信息,可供查询
数据来源:商品信息管理系统
数据流向:商品信息管理系统
数据流组成:Sell = sno + snum + cno + mno+ eno
组织方式:索引文件,以 sno(流水账号)为关键字
存取方式:随机存储
查询要求:要求实现快速查询以及对数据的插入、删除、更新等操作
数据存储名称:Shelf(货架表) 数据存储编号:3—07
描述:货架基本信息表,记录货架的基本信息,根据货架信息查找商品可以更快
数据流来源: 货架信息管理系统
数据流流向:货架信息管理系统
数据流组成:Shelf= sid+slayer+splace
组织方式: 索引文件,以(sid)货架号为关键字
存取方式:随即存储
查询要求:要求能实现快速查询和插入、修改等操作
名称:Employee(员工)表 数据存储编号:3—06
描述:员工基本信息表,记录超市员工的基本信息以及供员工基本信息的查询。
数据来源:员工信息管理系统
数据流向:员工信息管理系统
数据流组成:Employee=eno+ename+esex+etel+epos
组织方式:索引文件,以 eno( 员工编号)为关键字
存取方式:随机存储
查询要求:要求实现快速查询以及对数据的插入、删除、更新等操作
数据存储名称:Store(入库单表) 数据存储编号:3—08
描述:入库单基本信息表,记录商品存入仓库的信息
数据流来源:入库登记系统
数据流流向:入库登记系统
数据流组成:In = cno+idate+inum+eno
组织方式: 索引文件,以(cno+idate)商品编号和入库日期为关键字
存取方式:随即存储
查询要求:要求能实现快速查询和插入、修改等操作
数据存储名称:Out(出库单表) 数据存储编号:3—09
描述:出库单基本信息表,记录商品拿出仓库的信息
数据流来源:出库登记系统
数据流流向:出库登记系统
数据流组成:Out = cno+odate+onum+eno
组织方式: 索引文件,以(cno+odate)商品编号和入库日期为关键字
存取方式:随即存储
查询要求:要求能实现快速查询和插入、修改等操作
数据存储名称:Provider(供货商表) 数据存储编号:3—10
描述:供货商基本信息表,在超市需要采购商品时可以查询供货商信息。
数据流来源:供货商信息管理系统
数据流流向:供货商信息管理系统
数据流组成:Provider=gno+name+gadd+tel+respon+bankno
组织方式:索引文件,以(gno)供货商号为关键字
存取方式:随机存储
查询要求:要求能实现快速查询和插入、修改等操作
数据存储名称:Purchase(进货单表) 数据存储编号:3—11
描述:进货单提供超市进货的具体信息,可以查询供货商、供货日期、供货价格
及采购人员等信息。
数据流来源:进货管理系统
数据流流向:进货管理系统
数据流组成:Purchase=gno+gdate+amount+price+cno+eno
组织方式:索引文件,以(gno,gdate,cno)(供货商号、供货日期和商品编号)为关键
字
存取方式:随机存储
查询要求:要求能实现快速查询
数据存储名称:Yonghu(系统用户表) 数据存储编号:3—12
描述:存放系统的用户账号及密码,便于对系统权限的设置安排
数据流来源:权限管理系统
数据流去向:权限管理系统
数据流组成:Yonghu=eno+ename+code
组织方式:索引文件,以 eno(员工编号)为关键字
存取方式:随机存储
查询要求:要求能实现快速查询、修改和删除等操作
数据存储名称:Kucun(库存表) 数据存储编号:3—13
描述:存放商品的库存量,便于对库存的管理和商品进货计划的制定
数据流来源:进货管理系统
数据流去向:进货管理系统
数据流组成:Kucun=cno+kc+minkc
组织方式:索引文件,以 cno(员工编号)为关键字
存取方式:随机存储
查询要求:要求能实现快速查询操作和生成进货提醒
第 5 章 数据库的实现
数据库的建立
建立数据库代码:Create database 西大易乐多超市数据库
数据表的建立与实现
(1) Commodity(商品表)
Commodity(商品表)见表 5-1。
表 5-1 Commodity
字段名 存储代码 字段类型 长度 字段值约束 数据举例
商品编号 cno char 5 Primary key
商品名称 cname varchar 40 unique 心心相印纸巾
单价 cprice smallmoney 4 大于 0 元/件
商品单位 cunit varchar 4 Not null 件、条
商品数量 cnum float 8 null
商品类型 ctype varchar 16 Not null 食品类
1.建立商品信息表(Commodity)
Create table Commodity
(cno char(5) primary key,
cname varchar(40) unique,
cprice smallmoney,
cunit varchar(4),
cnum float,
ctype varchar(16),
)
2.建立一个名为 sy_cno 的索引
Commodity 按商品号(cno)升序建唯一索引。
Create unique index sy_cno on Commodity (cno)
3.建立与商品信息表(Commodity)有关的存储过程:
①在商品信息表里插入新记录
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Commodity_insert' and type='P')
drop procedure Commodity_insert;
go
create procedure Commodity_insert
(@cno char(5),
@cname varchar(40),
@cprice smallmoney,
@cunit varchar(4),
@cnum float,
@ctype varchar(16))
AS
BEGIN
begin
if exists (select * from Commodity where cno=@cno )
begin
print'该商品编号已经存在!'
return
end
begin transaction
insert into Commodity
(
cno,cname , cprice ,cunit, cnum ,ctype
)
Values
(
@cno,@cname , @cprice ,@cunit, @cnum ,@ctype
)
commit transaction
print '添加成功'
return
if @@ERROR <> 0
begin
print '添加失败!'
return
end
end
END
GO
测试是否成功:
declare @cno char(5),
@cname varchar(40),
@cprice smallmoney,
@cunit varchar(4),
@cnum float,
@ctype varchar(16)
execute Commodity_insert '50001','苹果',4,'斤',50,'水果类'
①删除某条记录
①按商品编号删除某条记录
use 西大易乐多超市数据库
go
create procedure Commodity_del
(@cno char(5))
as
delete from Commodity where cno=@cno
go
测试是否成功:
declare @cno char(5)
execute Commodity_del '00001'
①按商品名称
use 西大易乐多超市数据库
go
create procedure Commodity_delcname
(@cname varchar(40))
as
delete from Commodity where cname =@cname
go
测试是否成功:
declare @cname varchar(40)
execute Commodity_del '苹果'
①更新单价
①按商品编号进行特定商品单价的更新
Use 西大易乐多超市数据库
if exists(select name from sysobjects
where name=' Commodity_update ' and type='P')
drop procedure Commodity_update;
go
CREATE PROCEDURE Commodity_update
(
@cno char(5),@cprice smallmoney
)
AS
BEGIN
begin
if not exists (select * from Commodity where cno=@cno)
begin
print'不存在该商品信息!'
return
end
begin transaction
update Commodity
set cprice=@cprice where cno=@cno
commit transaction
print'更新成功'
return
if @@ERROR <> 0
begin
print'更新失败!'
return
end
end
END
GO
测试是否成功:
declare @cno char(5),@cprice smallmoney
execute Commodity_update '00001',5
①按商品名称进行特定商品单价的更新
Use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Commodity_updatename' and type='P')
drop procedure Commodity_updatename;
go
CREATE PROCEDURE Commodity_updatename
(
@cname varchar(40),@cprice smallmoney
)
AS
BEGIN
begin
if not exists (select * from Commodity where cname =@cname)
begin
print'不存在该商品信息!'
return
end
begin transaction
update Commodity
set cprice=@cprice where cname =@cname
commit transaction
print'更新成功'
return
if @@ERROR <> 0
begin
print'更新失败!'
return
end
end
END
GO
测试是否成功:
declare @cno char(5),@cprice smallmoney
execute Commodity_updatename '苹果',5
①查询商品信息
①按商品编号查询
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_Commodity ' and type='P')
drop procedure select_Commodity
go
CREATE PROCEDURE select_Commodity
(@cno char(5))
AS
BEGIN
select * from Commodity where cno=@cno
END
GO
测试是否成功:
declare @cno char(5)
exec select_Commodity '50001'
①按商品名称查询
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_Commodityname ' and type='P')
drop procedure select_Commodityname
go
CREATE PROCEDURE select_Commodityname
(@cname varchar(40))
AS
BEGIN
select * from Commodity where cname=@cname
END
GO
测试是否成功:
declare @cno char(5)
exec select_Commodity '苹果’
①统计
①商品种类统计
USE 西大易乐多超市数据库
if exists (select name from sysobjects
where name='count_Commodity ' and type='P')
drop procedure count_Commodity
go
CREATE PROCEDURE count_Commodity
AS
BEGIN
SELECT COUNT(distinct cno)
FROM Commodity
END
GO
Return
测试是否成功:
exec count_Commodity
①商品类型统计
USE 西大易乐多超市数据库
if exists (select name from sysobjects
where name='countctype_Commodity ' and type='P')
drop procedure countctype_Commodity
go
CREATE PROCEDURE countctype_Commodity
AS
BEGIN
SELECT COUNT(distinct ctype)
FROM Commodity
END
GO
Return
测试是否成功
exec countctype_Commodity
4.创建与 Commodity 相关的触发器
对主属性(cno)修改时,激活触发器
use 西大易乐多超市数据库
go
create trigger Commodity_cno on Commodity
For update
As
If update(cno)
Begin
Raiserror('不能修改商品编号',20,10)
Rollback transaction
End
(2)Sell(销售记录表)
Sell(销售记录表)见表 5-2。
表 5-2 Sell
字段名 存储代码 字段类型 长度 字段值约束 数据举例
流水账号 sno char 12 Primary key
销售数量 snum float 8 Not null 心心相印纸巾
商品编号 cno char 5 Foreign key 元/件
会员卡号 mno char 6 Foreign key
员工编号 eno char 3 Foreign key
1.建立销售记录信息表(Sell)表:
Create table Sell
(sno char(12),
snum float,
cno char(5),
Mno char(6),
eno char(3),
primary key(sno,cno),
foreign key(mno) references Member(mno),
foreign key(eno) references Employee(eno)
)
2.建立一个名为 sy_snocno 的索引
Sell 按商品号(cno)升序和流水号(sno)降序建唯一索引。
Create unique index sy_snocno on Sell(sno asc,cno desc)
3.建立与 Sell 表有关的存储过程:
①在销售记录信息表里插入新记录
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name=' Sell_insert' and type='P')
drop procedure Sell_insert;
go
create procedure Sell_insert
(
@sno char(12),
@snum float,
@cno char(5),
@mno char(6),
@eno char(3))
AS
BEGIN
begin
if exists (select * from Sell where cno=@cno and sno=@sno )
begin
print'商品编号和流水账号已经存在!'
return
end
begin transaction
insert into Sell
(sno,snum,cno,mno,eno)
Values
(
@sno,
@snum,
@cno,
@mno,
@eno
)
commit transaction
print'添加成功'
return
if @@ERROR <> 0
begin
print'添加失败!'
return
end
end
END
GO
测试是否成功
declare @sno char(12),
@snum float,
@cno char(5),
@mno char(6),
@eno char(3)
execute Sell_insert '201112160012',2, '20001', '682000', '205'
①删除某条销售记录
按流水账号和商品编号删除某条销售记录(因某个商品质量问题使顾客退货时使
用)
use 西大易乐多超市数据库
go
create procedure Sell_del
(@sno char(12),@cno char(5))
as
delete from Sell where sno=@sno and cno=@cno
go
测试是否成功:
declare @sno char(12),@cno char(5)
execute Sell_del ' 201111111111',' 00001'
①查询特定商品的销售数量(按商品编号查询)
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_Sell ' and type='P')
drop procedure select_Sell
go
CREATE PROCEDURE select_Sell
(@cno char(5))
AS
BEGIN
select cno,sum(snum)from Sell group by cno having cno=@cno
END
GO
测试是否成功:
declare @cno char(5)
execute select_Sell '00001'
4.创建与 Sell 相关的触发器
①对主属性修改时,激活触发器
use 西大易乐多超市数据库
go
create trigger Sell_cno on Sell
For update
As
If update(cno) or update(sno)
Begin
Raiserror('不能修改商品编号',20,10)
Rollback transaction
end
①插入新记录时,激活触发器,使得商品信息表对应的商品数量减少。
use 西大易乐多超市数据库
go
create trigger Sell_mm on Sell
For insert
As
Begin
update Commodity set cnum=cnum-snum from Commodity,interted where
=
end
(3) Idenfy(销售记录表)
Idenfy(销售记录表)见表 5-3。
表 5-3 Idenfy
字段名 存储代码 字段类型 长度 字段值约束 数据举例
码号 ino char 13 Primary key
商品编号 cno char 5 Foreign key
1.建一个 Idenfy 表:
Create table Idenfy
(ino char(13) primary key,
cno char(5),
foreign key(cno) references Commodity(cno)
)
2.建立一个名为 sy_ino 的索引
Idenfy 按码号(ino)升序建唯一索引。
Create unique index sy_ino on Idenfy(ino)
3.建立与 Identy 表有关的存储过程:
① 在条形码信息表里插入新记录
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name=' Idenfy_insert' and type='P')
drop procedure Idenfy_insert;
go
create procedure Idenfy_insert
(@ino char(13),@cno char(5))
AS
BEGIN
begin
if exists (select * from Idenfy where ino=@ino)
begin
print'该码号已经存在!'
return
end
begin transaction
insert into Idenfy
(
ino, cno)
Values
(
@ino,@cno)
commit transaction
print '添加成功'
return
if @@ERROR <> 0
begin
print '添加失败!'
return
end
end
END
GO
测试是否成功
declare @ino char(13),@cno char(5)
execute Idenfy_insert '7854458609610','20003'
①删除某条记录
①按码号删除某条记录
use 西大易乐多超市数据库
go
create procedure Idenfy_del
(@ino char(13))
as
delete from Idenfy where ino=@ino
go
测试是否成功
execute Idenfy_del '7854458609610'
①按商品编号删除某条记录
use 西大易乐多超市数据库
go
create procedure Idenfy_delicno
(@cno char(5))
as
delete from Idenfy where cno=@cno
go
测试是否成功
execute Idenfy_delicno ‘00001’
4.创建与 Idenfy 相关的触发器
①对主属性修改时,激活触发器
use 西大易乐多超市数据库
go
create trigger Idenfy_ino on Idenfy
For update
As
If update(ino)
Begin
Raiserror('不能修改商品编号',20,10)
Rollback transaction
end
5.建视图:
①针对收银员建立相关视图,供收银员收银时浏览商品信息。
①建立视图名为 countprice,统计每个客户购买每种商品的总价钱。
Create view countprice
as
select sno,,cost = cprice* snum from Sell , Commodity where
=
①在视图 countprice 和 Commodity、Sell 基本表上,建立名为 countcost3 的视图,
主要为收银员及顾客了解销售商品的相关信息
create view countcost3
as
select as 流水账号, as 商品名称,
as 商品单价, as 销售数量, as 总计
from Commodity, countprice,Sell where = and
=
①在视图 countprice 基础上,建立名为 countcost2 的视图,为收银员计算每个顾
客总费用提供参考。
Create view countcost2
as
select sno as 流水账号,总价=sum(cost) from countprice group by sno
①针对中、高层管理者建立相关视图,供中高层管理者了解商品销售情况及销售排
行。
①建立视图名为 countsnum1,统计销售表中各商品的销售数量
Create view countsnum1
as
select cno,num=sum(snum)from Sell group by cno
①在视图 countsnum1 和 Sell 表基础上,建立新视图 mm,供中、高层管理者了解
商品销售情况。
Create view mm
as
select as 商 品 编 号 , as 商 品 名 称 ,
as 商品单价,
as 商品剩余数量, as 销售数量,
as 商品单位, as 商品类别
from countsnum1,Commodity where =
①在视图 mm 基础上,建立存储过程 mm_select,供中、高层管理者了解销售排行。
use 西大易乐多超市数据库
go
create procedure mm_select
as
select * from mm order by 销售数量 desc
go
测试是否成功
execute mm_select
(4) Member(会员表)
Member(会员表)见表 5-4。
表 5-4 Member
字段名 存储代码 字段类型 长度 字段值约束 数据举例
会员卡号 mno char 6 Primary key
会员姓名 mname char 20 Not null
累计积分 mint float 8 大于等于 0 分
注册日期 mdate smalldatetime 4 Not null
1.创建会员表(Member)源代码
Create table Member
(mno char(6) primary key,
mname varchar(20),
mint float ,
mdate smalldatetime
)
2.会员表(Member)中存储过程源代码
①在会员表(Member)中插入信息
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' memberadd ' and type='P')
drop procedure memberadd
go
create procedure memberadd
(@mno char(6),@nname char(20),@mint float,@mdate smalldatetime)
As
Insert into Member
Values(@mno, @nname, @mint, @mdate)
Return
Go
①按照会员卡号查询会员信息
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' memberselect ' and type='P')
drop procedure memberselect
go
create procedure memberselect
(@mno char(6))
As
Select * from Member where mno=@mno
Go
① 更新会员积分
说明:当会员的会员卡积分达到一定分数时,会员可根据自己的积分兑换相应的
奖品,兑换奖品之后,会员积分减少
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='member_up ' and type='P')
drop procedure member_up
go
create procedure member_up
(@mno char(6),@mint float )
As
Begin
begin
if not exists (select * from Member where mno=@mno)
begin
print'没有该会员信息!'
return
end
begin transaction
update Member set mint=mint-@mint where mno=@mno
commit transaction
print'更新成功'
return
if @@ERROR <> 0
begin
print'更新失败!'
return
end
end
END
go
①按照会员卡号删除会员信息
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' memberdelete ' and type='P')
drop procedure memberdelete
go
create procedure memberdelete
(@mno char(6))
As
Delete from Member where mno=@mno
Go
3.会员表(Member)中触发器源代码
说明:当会员在收银台为自己购买的商品成功付款后,她(他)所购买商品的总
金额折算成会员卡积分,累加到她(他)的会员卡积分上。
Use 西大易乐多超市数据库
if exists(select name from sysobjects
Where name ='updater_pnum' and type='TR')
Drop trigger updater_pnum
Go
Create trigger updater_pnum
On Member
For update
As
If update(mint)
Begin
Update Member set mint=mint+snum*cprice from Member as m inner join
Sell as s on = inner join Commodity as c on = where snum
is not null
end
go
.创建用于查询会员购买信息的视图
Create view v_menber
As
Select as 会员卡号,
as 会员姓名,
as 商品名称,
as 单价,
as 购买量,
Sell .sno as 流水帐号,
Sell .eno as 收银员
From Member , Commodity ,Sell
Where Member .mno= and =
Go
(5) Put(摆放表):
Put(摆放表)见表 5-5。
表 5-5 Put
字段名 存储代码 字段类型 长度 字段值约束 数据举例
商品编号 cno char 5 Primary key
货架号 sid char 2 Primary key
摆放数量 pnum int 4 Not null 17(包)
摆放位置 padd char 1 Not null 1(货架第一层)
1.创建摆放表(Put)源代码
Create table Put
(cno char(5),
sid int,
pnum int,
padd char(1),
primary key(cno,sid),
Foreign key (cno) references card (Commodity),
Foreign key (sid) references card (Shelf)
)
2.摆放表(Put)中存储过程源代码
①在摆放表(Put)中插入信息
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' putadd ' and type='P')
drop procedure putadd
go
create procedure putadd
(@cno char(5),@sid char(2),@pnum int,@padd char(1))
As
Insert into Put
Values(@cno, @sid, @pnum, @padd)
Return
Go
①按照商品编号查询商品摆放信息
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' putselect ' and type='P')
drop procedure putselect
go
create procedure putselect
(@cno char(5))
as
select Put.* , from Put inner join Commodity on
=
where =@cno
go
①按照商品编号删除商品摆放信息
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' putdelete ' and type='P')
drop procedure putdelete
go
create procedure putdelete
(@cno char(5))
as
delete from Put where cno=@cno
go
3.摆放表(Put)中触发器代码
说明:当顾客购买了某种商品时,货架上该种商品的数量会发生改变
Use 西大易乐多超市数据库
if exists(select name from sysobjects
Where name ='updater_pnum' and type='TR')
Drop trigger updater_pnum
Go
Create trigger updater_pnum
On Put
For update
As
If update(pnum)
Begin
Update Put set pnum=pnum+snum from Put as p inner join Sell as s on
= where snum is not null
end
go
4.创建用于查询商品摆放情况的视图
Create view v_put
As
Select as 商品编号,
as 商品名称,
as 单价,
Put .sid as 货架号,
Put .padd as 货架层,
Put .pnum as 数量
From Put , Commodity
Where Put .cno=
go
(6) Employee(员工表)
Employee(员工表)见表 5-6。
表 5-6 Employee
字段名 存储代码 字段类型 长度 字段值约束 数据举例
员工编号 eno char 3 Primary key
员工姓名 ename char 20 Not null
员工性别 esex char 2 Not null
联系电话 etel char 11 Not null
员工职位 epos char 10 Not null 收银员
1.创建员工表(Employee)源代码
Create table Employee
(eno char(3) primary key,
ename varchar(20) ,
esex char(2) check(esex in('男','女')),
etel char(11),
epos varchar(10)
)
2.员工表(Employee)中存储过程源代码
①在员工表(Employee)中插入信息
在员工表(Employee)中插入信息
use 西大易乐多超市数据库 if exists (select name from sysobjects
where name=' empl_add ' and type='P')
drop procedure empl_add
go
create procedure empl_add
(@eno char(3),@ename char(20),@esex char(2),@etel char(11),@epos char(10))
As
Insert into Employee
Values(@eno, @ename, @esex, @etel,@epos)
Return
Go
① 按照员工编号查询员工信息
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' em_select ' and type='P')
drop procedure em_select
go
create procedure em_select
(@eno char(3))
as
select * from Employee where eno=@eno
go
① 按照员工编号删除员工信息
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' em_delete ' and type='P')
drop procedure em_delete
go
create procedure em_delete
(@eno char(3))
as
delete from Employee where eno=@eno
go
①员工更换电话号码时,更改员工的电话号码
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' etel_update ' and type='P')
drop procedure etel_update
go
create procedure etel_update
(@eno char(3),@etel char(11))
As
Begin
begin
if not exists (select * from Employee where eno=@eno)
begin
print'没有该员工信息!'
return
end
begin transaction
update Employee set etel=@etel where eno=@eno
commit transaction
print'更新成功'
return
if @@ERROR <> 0
begin
print'更新失败!'
return
end
end
END
go
①员工职位变动时,更新员工的职位
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name=' epos_update ' and type='P')
drop procedure epos_update
go
create procedure epos_update
(@eno char(3),@epos varchar(10))
As
Begin
begin
if not exists (select * from Employee where eno=@eno)
begin
print'没有该员工信息!'
return
end
begin transaction
update Employee set epos=@epos where eno=@eno
commit transaction
print'更新成功'
return
if @@ERROR <> 0
begin
print'更新失败!'
return
end
end
END
go
(7) Shelf(货架表)
Shelf(货架表)见表 5-7。
表5-7 Shelf
字段名 存储代码 字段类型 长度 字段值约束 数据举例
货架号 sid int 4 非空,主码 01
层数 slayer int 4 Not null 3
货架位置 splace char 8 Not null 食品区
1.创建Shelf(货架表):
Create table Shelf
( sid int PRIMARY KEY,
slayer int,
splace char(8),
FOREIGN KEY(sid) REFERENCES Put(sid)
)
2.存储过程
①插入:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Shelfadd' and type='P')
drop procedure Shelfadd
go
create procedure Shelfadd
(@sid int, @slayer int, @splace char(8))
as
insert into Shelf
values(@sid,@slayer,@splace)
return
go
①查询:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Shelf_query' and type='P')
drop procedure Shelf_query
go
create procedure Shelf_query
(
@sid int, @slayer int, @splace char(8)
)
as
select * from Shelf where sid=@sid
go
①删除
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Shelf_Del' and type='P')
drop procedure Shelf_Del
go
create procedure Shelf_Del
(@sid int, @slayer int, @splace char(8))
as
DELETE FROM Shelf
Where sid=@sid
go
①更新
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Shelf_Update' and type='P')
drop procedure Shelf_Update
go
create procedure Shelf_Update
(
@sid int, @slayer int, @splace char(8)
)
As
Begin
Begin
If not exists (select * from Shelf where sid=@sid)
Begin
Print'不存在该货架的信息!'
return
end
begin transaction
update Shelf
set slayer=@slayer,splace=@splace
print'更新成功!'
return
if @@ERROR<>0
begin
print'更新失败!'
return
end
end
end
go
①视图
Use 西大易乐多超市数据库
go
create view Shelf_view
as
select * from Shelf
(8) Store(入库单表)
Store(入库单表)见表5-8.
表5-8 Store
字段名 存储代码 字段类型 长度 字段值约束 数据举例
商品编号 cno char 5 非空,主码
入库日期 idate smalldatetime 4 非空,主码 2011-12-1
入库量 inum float 8 Not null 200 件
员工编号 eno char 3 外码
1.创建入库单表
Create table Store
( cno char(5),
idate smalldatetime,
inum float,
eno char(3),
PRIMARY KEY(cno,idate)
)
2.存储过程
①插入
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Storefadd' and type='P')
drop procedure Storeadd
go
create procedure Storeadd
(@cno char(5), @idate smalldatetime, @inum float, @eno char(3))
as
Insert into Store
values(@cno,@idate,@inum,@eno)
return
go
①查询:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Store_query' and type='P')
drop procedure Store_query
go
create procedure Store_query
(@cno char(5),@idate smalldatetime,@inum float,@eno char(3))
as
select * from Store
where cno=@cno and idate=@idate
go
①删除
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Store_Del' and type='P')
drop procedure Store_Del
go
create procedure Store_Del
(@cno char(5), @idate smalldatetime, @inum float,@eno char(3))
as
DELETE FROM Store
Where cno=@cno and idate=@idate
Go
①更新
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Store_Update' and type='P')
drop procedure Store_Update
go
create procedure Store_Update
(@cno char(5), @idate smalldatetime, @inum float,@eno char(3))
As
Begin
Begin
If not exists(select * from Store where cno=@cno)
Begin
Print'没有该商品的入库信息!'
Return
End
Begin transaction
update Store
set idate=@idate,inum=@inum,eno=@eno where cno=@cno
commit transaction
print'更新成功!'
return
if @@ERROR<>0
begin
print'更新失败!'
return
end
end
end
go
①视图
Use 西大易乐多超市数据库
go
create view Store_view
as
select * from Store
where inum>=’150’
3.触发器:
当入库单表的入库量变化时,触发触发器,改变库存表的库存量。
Use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_kc' and type='tr')
drop trigger update_kc
go
create trigger update_kc
on Store
for update
as if update(inum)
begin
update Kucun set kc=kc+inum from Store as i inner join Kucun as j on
= where inum is not null
end
go
(9)Out(出库单表)
Out(出库单表)见表5-9。
表5-9 Out
属性名 存储代码 类型 长度 字段约束条件 数据举例
商品编号 cno char 5 非空,主码
出库日期 odate smalldatetime 4 非空,主码 2011-12-1
出库量 onum float 8 Not NULL
员工编号 eno char 3 外码
1.创建出库单表:
Create table Out
( cno char(5),
odate smalldatetime,
onum float,
eno char(3),
PRIMARY KEY(cno,odate)
)
2. 存储过程
①插入
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Outadd' and type='P')
drop procedure Outadd
go
create procedure Outadd
(@cno char(5),@odate smalldatetime,@onum float,@eno char(3))
As
Insert into Out
Values(@cno ,@odate,@onum,@eno)
Return
go
①查询:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Out_query' and type='P')
drop procedure Out_query
go
create procedure Out_query
(@cno char(5),@odate smalldatetime,@onum float,@eno char(3))
as
select * from Out where cno=@cno and odate=@odate
go
①删除
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name=' Out_Del' and type='P')
drop procedure Out_Del
go
create procedure Out_Del
(@cno char(5), @odate smalldatetime, @onum float,@eno char(3))
as
DELETE FROM Out
Where cno=@cno and odate=@odate
Go
①更新
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name=' Out_Update' and type='P')
drop procedure Out_Update
go
create procedure Out_Update
(
@cno char(5),
@odate smalldatetime,
@onum float,
@eno char(3)
)
As
Begin
Begin
If not exists(select * from Out where cno=@cno)
Begin
Print'不存在该商品的出库信息!'
Return
End
Begin transaction
update Out
set odate=@odate, onum = @onum , eno=@eno where cno=@cno
commit transaction
print'更新成功!'
return
if @@ERROR<>0
begin
print '更新失败!'
return
end
end
go
①视图
Use 西大易乐多超市数据库
go
create view Out_view
as
select * from Out
where onum>=’100’
3.触发器
①当出库单表的出库量变化时 触发触发器,改变对应的商品表的商品数量。
Use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_cnum' and type='tr')
drop trigger update_cnum
go
create trigger update_cnum
on Out
for update
as if update(onum)
begin
update Commodity set cnum=cnum+onum from Out as a inner join Commodity as
b on = where onum is not null
end
go
①当出库单表的出库量变化时,触发触发器,改变摆放表的摆放数量。
Use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_pnum' and type='tr')
drop trigger update_pnum
go
create trigger update_pnum
on Out
for update
as if update(onum)
begin
update Put set pnum=pnum+onum from Out as c inner join Put as d on
= where onum is not null
end
go
①当出库单表的出库量变化时,触发触发器,改变库存表的库存量。
Use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_kc1' and type='tr')
drop trigger update_kc1
go
create trigger update_kc1
on Out
for update
as if update(onum)
begin
update Kucun set kc=kc-onum from Out as e inner join Kucun as f on =
where onum is not null
end
go
(10) Provider(供货商表)
Provider(供货商表)见表 5-10。
表 5-10 供货商(Provider)
说明 字段名 数据类型及长度 码 字段约束条件
供货商号 gno Char(7) PK Not NULL
供货商名称 name Varchar(40) Not NULL
供货商地址 gadd Varchar(50) Not NULL
供货商电话 tel Char(11) Not NULL
负责人 respon Varchar(10) Not NULL
供货商银行账号 bankno Char(18) Not NULL
1. 建立一个 Provider(供货商)表
create table Provider
( gno char(7) primary key,
name varchar(40) unique,
gadd varchar(50) not null,
tel char(11) not null,
respon varchar(10) not null,
bankno char(18) not null
);
2. 在 Provider(供货商)表 中建立 gno(供货商号)的索引
Create index sy_gno on Provider(gno);
3.对供货商插入一行记录的存储过程代码:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Provider_insert' and type='P')
drop procedure Provider_insert;
go
CREATE PROCEDURE Provider_insert
( @gno char(7),
@name varchar(40),
@gadd varchar(50),
@tel char(11),
@respon varchar(10),
@bankno char(18)
)
AS
BEGIN
if exists (select * from Provider where gno=@gno )
begin
print'该供应商编号已存在,请重新输入'
return
end
begin transaction
insert into Provider
values (@gno,@name,@gadd,@tel,@respon,@bankno)
commit transaction
print'添加成功! '
return
END
GO
执行语句:
例 如 execute Provider_insert'2012111',' 数 信 学 院 ',' 广 西 大 学 东 门
','18798787898',' 杨阳','138102145235842152'
Go
4.查询供货商信息的存储过程:
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_provider' and type='P')
drop procedure select_provider
go
create procedure select_provider
As select * from provider
Go
执行语句:
USE 西大易乐多超市数据库
exec select_provider
5.修改供货商信息的存储过程:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_provider' and type='P')
drop procedure update_provider;
go
CREATE PROCEDURE update_provider
(
@gno char(7),
@name varchar(40),
@gadd varchar(50),
@tel char(11),
@respon varchar(10),
@bankno char(18)
)
AS
BEGIN
if not exists (select * from provider where gno=@gno)
begin
print'要更新的供货商信息不存在!'
end
else
begin
begin transaction
update provider set name=@name,
gadd=@gadd,
tel=@tel,
respon=@respon,
bankno=@bankno
where gno=@gno
commit transaction
print'该供货商信息更新成功!'
end
END
执行语句: exec update_provider '2012121', '数信学院',
'广西大学西门', '15240653265', '王熙', '148546598741253012'
6.修改 provider 表中某指定一供货商的联系电话的存储过程
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_provider_tel' and type='P')
drop procedure update_provider_tel;
go
CREATE PROCEDURE update_provider_tel
(@gno char(7),
@tel char(13)
)
AS
Begin
if not exists (select * from provider where gno=@gno)
begin
print'该供货商不存在,请重新输入!'
end
else
begin
begin transaction
update provider set tel=@tel where gno=@gno
print'该供货商的联系电话更新成功!'
commit transaction
end
end
7.修改 provider 表中某指定一供货商的负责人的存储过程
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_provider_respon' and type='P')
drop procedure update_provider_respon;
go
CREATE PROCEDURE update_provider_respon(
@gno char(7), @respon varchar(10) )
AS
Begin
if not exists (select * from provider where gno=@gno)
begin
print'该供货商不存在!'
End
Else
begin
begin transaction
update provider set respon=@respon
where gno=@gno
print'该供货商的负责人信息更新成功!'
commit transaction
end
End
8.修改 provider(供货商)表中某指定一供货商的银行账号的存储过程
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_provider_bankno' and type='P')
drop procedure update_provider_bankno;
go
CREATE PROCEDURE update_provider_bankno (
@gno char(7), @bankno char(18) )
AS
Begin
if not exists (select * from provider where gno=@gno)
begin
print'该供货商不存在,请重新输入!'
End
Else
begin
begin transaction
update provider set bankno=@bankno where gno=@gno
Print'该供货商的银行账号更新成功!'
commit transaction
end
End
执行语句为:
execute update_provider_bankno '2012001','091120021019910919'
9.删除 provider(供货商)表的信息的存储过程
① 按供货商名称删除:
use 西大易乐多超市数据库
Go
create procedure del_provider1
(@name char(26))
As delete from Provider
Where name=@name
Go
执行语句: Execute del_provider '盼盼'
① 按供货商号删除:
use 西大易乐多超市数据库
Go
create procedure del_provider2
(@gno char( 7))
As delete from Provider
Where gno=@gno
Go
执行语句: Execute del_provider '2012224'
10.用于统计供货商的个数的存储过程
USE 西大易乐多超市数据库
if exists (select name from sysobjects
where name='count_Provider' and type='P')
drop procedure count_Provider
go
CREATE PROCEDURE count_Provider
AS
BEGIN select count(*) From Provider
END
GO
return
11.如果查询供货商表信息时,不小心修改到供货商编号信息,则会出现错误。
因此,对供货商表建立不能修改供货商编号的触发器。
use 西大易乐多超市数据库
go
create trigger gno_update on Provider
For update
As
If update(gno)
Begin
Raiserror('不能修改供货编号',30,10)
Rollback transaction
End
(11) Purchase(进货单表)
Purchase(进货单表)见表 5-11。
表 5-11 进货单(Purchase)
说明 字段名 数据类型及长度 码 字段约束条件
供货商号 gno Char(7) PK Not NULL
进货日期 gdate Smalldatetime(4) PK Not NULL
商品编号 cno Char(5) PK Not NULL
进货数量 amount Float(8) Not NULL
进货价格 price Smallmoney(4) Not NULL
员工编号 eno Char(3) FK Not NULL
1 .建立一个 Purchase(进货单)表
create table Purchase
( gno char(7) not null,
gdate smalldatetime ,
amount float not null,
price smallmoney not null,
cno char(5) not null,
eno char(3) not null,
primary key(gno,gdate,cno),
Foreign key(cno) references Commodity(cno),
Foreign key(eno) references Employee(eno)
);
2. 在进货日期属性上进立索引,方便查询某日期进货情况
Create index sy_d on Purchase(gdate);
3. 对进货单插入一行记录的存储过程代码:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Purchase_insert' and type='P')
drop procedure Purchase_insert;
go
CREATE PROCEDURE Purchase_insert
( @gno char(7),
@gdate smalldatetime ,
@amount float ,
@ price smallmoney ,
@ cno char(5),
@ eno char(3) )
AS
BEGIN
if exists (select * from Purchase where gno=@gno and gdate=@gdate
and cno=@cno)
begin
print'该进货信息已存在,请重新输入'
return
end
begin transaction
insert into Purchase
values (@gno,@gdate,@gamount,@price,@cno,@eno)
commit transaction
print'该进货记录添加成功! '
return
END
GO
4. 查询供货商信息的存储过程:
① 查询全部进货情况的存储过程:
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_Purchase' and type='P')
drop procedure select_Purchase
go
create procedure select_Purchase
As select * from Purchase order by gdate desc
Go
执行语句:
USE 西大易乐多超市数据库
exec select_Purchase
①查询某日期的进货情况
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_Purchase_gdate' and type='P')
drop procedure select_Purchase_gdate
go
create procedure select_Purchase_gdate
(@gdate smalldatetime)
As select * from Purchase_gdate where gdate=@gdate
Go
执行语句: Execute select_Purchase_gdate '2011-9-1'
①查询某供货商供货的情况
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_Purchase_gno' and type='P')
drop procedure select_Purchase_gno
go
create procedure select_Purchase_gno
As select * from Purchase_gno where gno=@gno
Go
执行语句: Execute select_Purchase_gno '2012001'
5. 用于统计某日期进货的经费的存储过程
USE 西大易乐多超市数据库
if exists (select name from sysobjects
where name='count_sum' and type='P')
drop procedure count_sum
go
CREATE PROCEDURE count_sum
AS
BEGIN
select amount*price as money From Purchase where gdate=@gdate
END
GO
return
(12)Yonghu(系统用户表)
Yonghu(系统用户表)见表 5-12。
表 5-12Yonghu(系统用户表)
说明 存储代码 数据类型及长度 码 字段约束条件
员工编号 eno Char(3) PK Not NULL
员工姓名 ename Varchar(20) Not NULL
登陆密码 code Char(6) Not NULL
1. 建立系统用户表
create table Yonghu
( eno char(3) primary key,
ename varchar(20) unique not null,
code char(6) not null
);
2. 在员工编号上建立索引
Create index sy_yheco on Yonghu(eno);
3. 建立查询用户表信息的存储过程
① 查询某用户信息的存储过程:
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_Yonghu' and type='P')
drop procedure select_Yonghu
go
create procedure select_Yonghu
(@eno char(3))
As select * from Yonghu where eno=@eno
Go
① 查询全部用户信息的存储过程
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_Yonghu' and type='P')
drop procedure select_Yonghu
go
create procedure select_Yonghu
As select * from Yonghu
Go
4.修改 Yonghu(系统用户表)的信息的存储过程
① 修改用户的姓名的存储过程:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_Yonghu_ename' and type='P')
drop procedure update_Yonghu_ename;
go
CREATE PROCEDURE update_Yonghu_ename (
@eno char(3), @ename varchar(20) )
AS
Begin
if not exists (select * from Yonghu where eno=@eno)
begin
print'该职工信息不存在,请重新输入!'
End
Else
begin
begin transaction
update Yonghu set ename=@ename where eno=@eno
Print'该职工姓名更新成功!'
commit transaction
end
End
① 修改用户的密码的存储过程:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_Yonghu_code' and type='P')
drop procedure update_Yonghu_code;
go
CREATE PROCEDURE update_Yonghu_code (
@eno char(3), @code char(6) )
AS
Begin
if not exists (select * from Yonghu where eno=@eno)
begin
print'该职工信息不存在,请重新输入!'
End
Else
begin
begin transaction
update Yonghu set code=@code where eno=@eno
Print'该职工的密码更新成功!'
commit transaction
end
End
5. 删除 Yonghu(系统用户表)的信息的存储过程
按员工编号删除:
use 西大易乐多超市数据库
Go
create procedure del_Yonghu
(@eno char(3))
As delete from Yonghu
Where eno=@eno
Go
执行语句: Execute del_Yonghu '201'
6. 建立经理查询供货商信息表的视图,经理只看供货商的名称和电话还有地址:
Create view provider_info
As
Select name,gadd,tel from Provider
7. 建立系统管理员的关于用户登录密码的视图:
Create view Yonghu_info
As
Select eno,code from Yonghu
(13)Kucun(库存表)
Kucun(库存表)见表 5-13。
表 5-13 库存(Kucun)
说明 字段名 数据类型及长度 码 字段约束条件
商品编号 cno char(5) PK Not NULL
库存量 kc float Not NULL
最小库存量 minkc float Not NULL
1. 建立一个 Kucun(库存)表
create table Kucun
( cno char(5) primary key,
kc float not null,
minkc float not null
);
2. 在 Kucun(库存)表中建立 cno(商品编号)的索引
Create index sy_kccno on Kucun(cno);
3. 对 Kucun(库存)表插入一行记录的存储过程代码:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='Kucun_insert' and type='P')
drop procedure Kucun_insert;
go
CREATE PROCEDURE Kucun_insert
( @cno char(5),
@kc float ,
@minkc float
)
AS
BEGIN
if exists (select * from Kucun where cno=@cno )
begin
print'该商品编号已存在,请重新输入'
return
end
begin transaction
insert into Kucun
values (@cno,@kc,@minkc)
commit transaction
print'该商品存储信息添加成功! '
return
END
GO
4. 查询某商品存储信息的存储过程:
use 西大易乐多超市数据库
if exists (select name from sysobjects
where name='select_kc' and type='P')
drop procedure select_kc
go
create procedure select_kc
As select * from Kucun
Go
执行语句:
USE 西大易乐多超市数据库
exec select_kc
5. 修改某商品存储信息的存储过程:
use 西大易乐多超市数据库
if exists(select name from sysobjects
where name='update_kc' and type='P')
drop procedure update_kc;
go
CREATE PROCEDURE update_kc
(
@cno char(5), @kc float ,@minkc float )
AS
BEGIN
if not exists (select * from Kucun where cno=@cno)
begin
print'要更新的某商品存储信息不存在!'
end
else
begin
begin transaction
update Kucun set kc=@kc
where cno=@cno
commit transaction
print'该商品库存信息更新成功!'
end
END
6. 建立触发器,当某商品的库存量小于最小库存量时,自动生动报警提示要供货。
use 西大易乐多超市数据库
go
create trigger kc_trip on Kucun
for update
as
declare @cno char(5)
select cno from Kucun where kc<minkc
print'该商品库存不足,请及时补货'
return
go
数据备份
1.完全备份
代码如下:
use 西大易乐多超市数据库
DECLARE @strPath NVARCHAR(200)
set @strPath = convert(NVARCHAR(19),getdate(),120)
set @strPath = REPLACE(@strPath, ':' , '.')
set @strPath = 'E:\数据库课程设计\西大易乐多超市数据库备份.bak' + '西大
易乐多超市'+@strPath + '.bak'
backup database 西大易乐多超市数据库 to disk='E:\数据库课程设计\西大
易乐多超市数据库备份.ba'
2.差异备份
代码如下:
use 西大易乐多超市数据库
DECLARE @strPath NVARCHAR(200)
set @strPath = convert(NVARCHAR(19),getdate(),24)
set @strPath = REPLACE(@strPath, ':' , '.')
set @strPath = 'E:\数据库课程设计\西大易乐多超市数据库备份.bak' + '西大易
乐多超市'+@strPath + '.bak'
backup database 西大易乐多超市数据库 to disk='E:\数据库课程设计\西大易乐
多超市数据库备份.bak'With Differential
权限设置
1.创建角色
exec sp_addrole '销售管理'
exec sp_addrole '基本信息管理'
exec sp_addrole '系统管理'
exec sp_addrole '仓库管理'
exec sp_addrole '进货管理'
2.对角色授权
grant all on Idenfy to 销售管理
grant all on Shelf to 销售管理
grant all on Commodity to 基本信息管理
grant all on Employee to 基本信息管理
grant all on Provider to 基本信息管理
grant all on Shelf to 基本信息管理
grant all on Member to 基本信息管理
grant all on Store to 仓库管理
grant all on Out to 仓库管理
grant all on Kucun to 仓库管理
grant all on Purchase to 进货管理
3.创建用户
exec sp_addlogin 登录名,密码
exec sp_adduser 登录名,用户名
exec sp_addlogin 系统管理,123
exec sp_adduser 系统管理,王一
exec sp_addlogin 仓库管理,123
exec sp_adduser 仓库管理,张三
exec sp_addlogin 基本信息管理,123
exec sp_adduser 基本信息管理,李四
exec sp_addlogin 进货管理,123
exec sp_adduser 进货管理,王五
exec sp_addlogin 销售管理,123
exec sp_adduser 销售管理,李丽
4.把用户放到角色中
exec sp_addrolemember '系统管理','王一'
exec sp_addrolemember '仓库管理','张三'
exec sp_addrolemember '基本信息管理','李四'
exec sp_addrolemember '进货管理','王五'
exec sp_addrolemember '销售管理','李丽'
第 6 章 课程设计总结
经过此次课程设计,我们小组共同研究对超市管理系统的开发与设计方法,
把学习与实践相结合,对数据库的应用有了更深的理解,从中受益匪浅。
首先,让我们再次熟悉了数据库 SQL Server 2000 的运用环境,并把之前所
学的有关数据库的知识都运用到了这次设计中,使得原本不甚了解的知识得到进
一步的巩固和提高。其次,在设计过程中,我们小组遇到了各种各样的问题。由
于对超市信息系统的不熟悉,考虑的不全面,导致在数据库的概念设计和逻辑设
计上出现很多漏洞,例如很多实体属性遗漏、系统功能设计不切实际等,在老师
耐心地指导和小组成员不断讨论与修改之后,数据库的设计得以改善。让我们学
习到考虑事情要深入,要与实际相结合。再者,就是在完成数据库设计文档的过
程中,我们深刻意识到了认真的必要性,不能轻视文档格式和内容的编排,要严
格按照论文的标准格式来写,不能马马虎虎草率应对。最后,总结这次课程设计,
我们收获了很多宝贵经验,学会了团队合作,学会了在实践中运用知识。