《数据库课程设计》论文
题 目:网上订餐系统数据库设计
学 号: 2010013048 专业班级: 信管102班 姓 名: 张 妙 指导老师: 英 明 完成日期: 2012-7-6
《数据库课程设计》论文 ................................................................................................................ 1 1.需求分析 ...................................................................................................................................... 3
1.1总体需求 ............................................................................................................................. 4 1.2数据需求 ............................................................................................................................. 4 1.3事务需求 ............................................................................................................................. 5 1.4数据流程图 ......................................................................................................................... 5 1.5数据字典 ............................................................................................................................. 5 2.数据库结构设计 .......................................................................................................................... 6
2.1 概念设计 ............................................................................................................................ 6
2.1.1 分E-R图建立 .......................................................................................................... 6 2.1.2 全局/整体E-R图 ..................................................................................................... 8 2.2 逻辑设计 ............................................................................................................................ 8
2.2.1 建立关系模式........................................................................................................... 8 2.2.2 关系模式规范化处理 ............................................................................................... 9 2.2.3 用户子模式建立 ..................................................................................................... 10
3.数据库物理设计 ........................................................................................................................... 10 4.数据库实施与测试 .................................................................................................................... 10
4.1 在SQL Server中数据库实施 ......................................................................................... 11
4.1.1 数据库及数据库对象建立 ..................................................................................... 11 4.1.2 数据入库 ................................................................................................................ 14 4.2 数据库测试 ....................................................................................................................... 14 4.3 在Oracle中数据库实施 .................................................................................................... 20
4.3.1数据库及数据库对象建立 ...................................................................................... 20
5.总结 ........................................................................................................................................... 20 6.附录 ........................................................................................................................................... 21
附录1 ....................................................................................................................................... 21 附录2 ....................................................................................................................................... 24 附录3 ....................................................................................................................................... 27
**级**专业**班数据库应用系统课程设计课程论文
网上订餐系统数据库设计
张妙
(信息工程学院信管10级2班)
摘 要: 近年来,随着人民的生活水平的不断提高,餐饮业在服务业中的地位越来越重要,
如何从激烈的竞争中脱颖而出,已成为每位餐饮经营者思考的问题。随着21世纪的进步,网络迅速崛起,进过多年的发展,网络逐步进入传统领域。然而,传统餐饮企业的日常运作还是靠人工管理,从原材料入库到客人点餐再到结账基本上由人工完成记录,这样做不仅耗费人力资源而且容易导致记录丢失或重复等错误,造成管理水平低下。将餐饮业与计算机网络结合起来,就形成了网上订餐系统。顾客能足不出户就能享受美食,有能力的餐饮企业提供网上订餐服务,不仅可以提高服务质量,扩大知名度,也极大程度地方便了顾客。
经过分析,本系统运用了Microsoft SQL Server2008和Oracle为数据库,系统实现了菜单维护、顾客订单管理、点菜、结账、送餐人员查询、营业额查询、消费额查询等功能。
关键字:网上订餐系统,SQL Server,Oracle 引言 1.开发背景
随着21世纪的进步,生活节奏越来越快,传统的餐饮业面临这巨大的挑战。 网上订餐主要针对白领和大学生这些特定群体,一些白领在中午时间或者晚上高峰时间就餐,许多顾客由于高峰拥挤根本没有时间享受美味,这样既可以提前订餐而不浪费午休时间,也可以和同事加深感情,更可以每天更换各种各样的菜式,保证每天的工作效率和身体健康。这些问题就产生了快捷订餐的要求。最方便的莫过于利用计算机网络,将餐饮业和计算机网络结合起来,就形成了网上订餐系统。
2
**级**专业**班数据库应用系统课程设计课程论文
2.研究意义
随着人民生活水平的不断提高,餐饮业在服务业中的地位越来越重要,竞争也越来越激烈。经过多年的发展,对餐饮企业的管理以逐步由简单的人工管理,进入规范的科学管理阶段。
在科学管理阶段的具体实现中,最有效的就是运用管理软件进行管理。将计算机网络应用于现代化的餐饮业,解决了传统的记账、统计、结算等不便之处,操作容易、错误率低,提高了餐饮业管理水平。
餐饮业是一种个性化、多样化的服务产业。随着网络技术的发展和普及,形成了方便、快捷的网上订餐系统。通过网上订餐,顾客不必亲临现场,便可以吃到计营养又实惠的美食,并解决了传统就餐高峰期排队拥挤、信息不能及时更新的现象,既节省了时间,也为广大用户提供了更多选择。 3.任务目标
本系统主要涉及餐厅的日常运营,包括点菜、结算、销售统计、员工管理等功能。 (1)后台服务:实现顾客点菜/加菜/退菜(只有未签单的菜品可以退订)、预订、
签单、结账(打折)功能(所有菜品都签单后才能结账)。
(2)后台管理:菜品管理、会员管理,送餐人员管理、留言管理。需要保证对于
以上各种信息的管理能够同步反应到前台服务界面,防止出现点已删除菜品等情况。
(3)销售统计:统计某一时间段的营业额。
1.需求分析
从分析饭店的基本情况入手,根据餐饮行业的特点和实际情况,充分了解饭店的工作概况,明确用户各种需求,在此基础上进行系统的可行性分析,了解的管理特点和存在的问题,网上订餐系统应以餐饮业务为基础,在此基础上,进行详细分析,得出系统功能结构图。本系统主要是用于后台管理,重视营业数据分析等功能,从专业角度出发,努力为餐饮管理者提供科学有效地管理模式和数据分析功能。
3
**级**专业**班数据库应用系统课程设计课程论文
1.1总体需求
本系统主要涉及餐厅的订餐功能,包括顾客点菜、送餐员安排、结算、销售统计、留言等功能。
预订
后台服务 点菜/加菜/退菜
结算(打折)
菜品管理 订单管理
后台管理 送餐人员管理
留言管理
1.2数据需求
酒店储存有会员信息,包括折扣信息等。 菜品信息有菜品编号,名称,价格和简介等。 送餐人员信息,包括电话、是否在送餐等。 供应商信息,包括电话、地址等。 原料信息,包括价格,质量等。
具体数据需求如下: 点菜阶段需要的数据有:
(1)菜品信息,包括其名称、价格、额外要求等。 (2)会员信息,包括会员编号、折扣、历史消费总额等。 (3)预订信息,包括预订菜品、菜品数量、用餐时间等。 送餐人员管理需要数据有:编号、电话、是否送餐标记等。 会员管理需要的数据有:会员编号、对应折扣等。
4
**级**专业**班数据库应用系统课程设计课程论文
1.3事务需求
数据录入: (1)录入公告信息 (3)录入会员信息 (5)录入供应商信息 数据更新/删除: (1)更新/删除公告信息 (3)更新/删除会员信息 (5)更新/删除供应商信息 数据查询: (1)查询菜品信息 (3)查询会员折扣信息 (5)查询某时间段的营业额
(2)查询订单信息 (4)查询送餐人员信息 (6)查询原料信息 (2)更新/删除菜品信息 (4)更新/删除人员信息 (6)更新/删除原料信息 (2)录入菜品信息 (4)录入送餐人员信息 (6)录入原料信息
1.4数据流程图
从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。处理功能可分解为若干个子功能,每个子功能还可以继续分解,直到把系统工作过程表示清楚为止。在处理子功能分解的同时,他们所用的数据也逐级分解,形成若干层次的数据流程图。数据流程图表达了数据和处理之间的关系。 在这个网上订餐系统中,数据流程图分为三层:顶层数据流程图、第一层数据流程图、第二层数据流程图;其中,第二层数据流程图又可分为:预定流程图、订单处理流程图、结账流程图。各个流程图反应了系统的功能。具体流程图见附录1。
1.5数据字典
数据字典是系统中各类数据描述的集合,是进行数据收集和数据分析所获
5
**级**专业**班数据库应用系统课程设计课程论文
得的主要成果。数据项通常包括数据项、数据结构、数据流、数据存储和处理过程这5个部分。具体数据字典见附录2。
2.数据库结构设计
主要包括概念设计和逻辑设计两个部分。
2.1 概念设计
这一阶段的主要任务是将需求分析得到的用户需求抽象为信息结构。 2.1.1 分E-R图建立
选择中层数据流程图作为设计分ER图的依据,各个分ER图如下: (1)供应商
(2)原料
(3)菜品
名称价格编号菜品简介 6
**级**专业**班数据库应用系统课程设计课程论文
(4)顾客
(5)送餐人员
(6)店内公告
(7)留言板
7
**级**专业**班数据库应用系统课程设计课程论文
(8)折扣规则
2.1.2 全局/整体E-R图
将上述分ER图进行合并,并且修改与重构,得到全局ER图。全局ER图如下:
2.2 逻辑设计
逻辑结构设计的任务是把概念结构设计阶段设计好的基本ER图转换为关系数据库所支持的关系模式。基于3NF对关系模式进行优化,确定模式内容,并且设计用户子模式。
2.2.1 建立关系模式
8
**级**专业**班数据库应用系统课程设计课程论文
ER图转换成关系模式如下(下划线的属性为主码): 供应商(供应商号、供应商名、电话、地址) 原料(原料号、原料名、价格、品质) 供应(原料号、供应商编号、供应数量)
送餐人员(送餐员号、姓名、电话、送餐标记) 配料单(菜品号、原料号、使用数量) 菜品(菜品号、菜品名、价格、简介)
留言板(留言号、顾客号、留言内容、回复内容) 店内公告(公告号、内容)
顾客(顾客号、姓名、电话、地址、历史消费总额、VIP等级) 折扣规则(VIP等级、折扣)
订单(订单号、顾客号、用餐时间)
顾客菜单(订单号、菜品号、数量、要求) 送餐单(订单号、送餐员号)
2.2.2 关系模式规范化处理
关系模式优化分析如下: (1)供应商关系模式:
供应商号——>供应商名 供应商号——>供应商电话 供应商号——>供应商地址 (2)原料关系模式:
原料号——原料名 原料号——价格 原料号——品质 (3)供应关系模式:
(原料号,供应商号)——>供应数量 (4)菜品关系模式:
菜品号——>菜品名 菜品号——>菜品价格 菜品号——>菜品简介 (5)配料单关系模式:
(菜品号、原料号)——>使用数量 (6)顾客关系模式:
顾客号——>顾客姓名 顾客号——>电话 顾客号——>地址 顾客号——>历史消费总额 顾客号——> VIP等级 (7)订单关系模式:
订单号——>顾客号 订单号——>用餐时间 (8)顾客菜单关系模式:
(订单号、菜品号)——>额外要求 (订单号、菜品号)——>数量 (9)留言板关系模式:
(留言号、顾客号)——>留言内容 (留言号、顾客号)——>回复内容 (10)送餐员关系模式:
送餐员号——>送餐员姓名 送餐员号——>送餐员电话
9
**级**专业**班数据库应用系统课程设计课程论文
送餐员号——>送餐标记
(11)店内公告关系模式:公告号——>内容 (12)折扣规则关系模式:VIP等级——>折扣
经过以上分析,上述关系模式不存在部分函数依赖和传递函数依赖,已达到3NF要求。
2.2.3 用户子模式建立
以下是建立的用户子模式,其功能和运用如描述:
名称 F_Consumer1 F_Consumer2 F_Changer1 F_Changger2
描述 供顾客查询菜品及其简介 供顾客查询菜品及其所用的主原料 管理员查询各个顾客点菜数量 管理员查询顾客的消费额 3.数据库物理设计
数据库在物理设备上的存储结构与存取方法就是数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最合适的应用环境的物理结构的过程,就是数据库的物理设计。这一阶段主要的任务是确定数据库的物理结构,并不断的进行优化处理,主要建立索引。 以下是建立的索引,其功能和运用如描述:
名字 Selete_on_Dishname allow_der 描述 建立在菜品名上的索引 建立在送餐员名字和送餐标记上的索引 4.数据库实施与测试
主要包括数据库实施和测试两个部分。
10
**级**专业**班数据库应用系统课程设计课程论文
4.1 在SQL Server中数据库实施 4.1.1 数据库及数据库对象建立
建立数据库,命名为Order_Menu_Online,在其中建立数据库对象,主要包括:基本表、视图、索引、触发器以及存储过程。 (1)基本表
create table Supplier( Sno varchar(10)primary key, Sname varchar(20)not null, Sph varchar(15)not null, Sadd varchar(20))
create table Good(
Gno varchar(10) primary key, Gname varchar(20) not null, Gprice float,
Gquatity varchar(10))
create table Supply( Gno varchar(10), Sno varchar(10), Snum int, Sdate date,
primary key(Gno,Sno),
foreign key(Sno)references Supplier(Sno), foreign key(Gno)references Good(Gno))
create table Dish(
Dno varchar(10) primary key, Dname varchar(20) not null, Dprice float,
Dintro varchar(100))
create table GforD( Dno varchar(10), Gno varchar(10), Usenum float,
primary key(Dno,Gno),
11
**级**专业**班数据库应用系统课程设计课程论文
foreign key(Dno)references Dish(Dno), foreign key(Dno)references Dish(Dno))
create table DeliverPer(
Deliverno varchar(10) primary key, Delivername varchar(20) not null, Deliverph char(15) not null, isDeliver int)
create table Discount_ruler( Vgrade int primary key,
discount float not null unique ) create table Consumer(
Cno varchar(10) primary key, Cname varchar(20) not null, Cph varchar(15)not null, Cadd varchar(20) not null, Cmon float, Vgrade int,
foreign key(Vgrade)references Discount_ruler(Vgrade))
create table OrderMenu(
Orderno varchar(10) primary key, Cno varchar(10) not null, eatTime datetime not null,
foreign key(Cno) references Consumer(Cno))
create table DishMenu( Orderno varchar(10), Dno varchar(10), Dishnum int not null, Exquest varchar(50), primary key(Orderno,Dno),
foreign key(Orderno)references OrderMenu(Orderno), foreign key(Dno)references Dish(Dno))
create table DeliverMenu( Orderno varchar(10), Deliverno varchar(10),
primary key(Orderno,Deliverno),
12
**级**专业**班数据库应用系统课程设计课程论文
foreign key(Orderno)references OrderMenu(Orderno), foreign key(Deliverno)references DeliverPer(Deliverno))
create table Notice(
Nno varchar(10) primary key, Ncontent varchar(100) not null)
create table Board( Bno varchar(10), Cno varchar(10),
Content varchar(100) not null, ReplyContent varchar(100), primary key(Bno,Cno),
foreign key (Cno) references Consumer(Cno))
(2)视图:
create view F_Consumer1(菜名,所用原料) as
select Dname,Gname from Dish,Good,GforD
where Dish.Dno=GforD.Dno and Good.Gno=GforD.Gno;
create view F_Consumer2(菜名,简介) as
select Dname,Dintro from Dish
create view F_Changer1(顾客名,总点菜数) as
select Cname,COUNT(Dno)
from Consumer,OrderMenu,DishMenu
where Consumer.Cno=OrderMenu.Cno and OrderMenu.Orderno=DishMenu.Orderno group by Consumer.Cname;
create view F_changer2(顾客名,本次消费额) as
select Cname,SUM(Dprice*Dishnum) from Consumer,Dish,OrderMenu,DishMenu where Consumer.Cno=OrderMenu.Cno
and Dish.Dno=DishMenu.Dno and DishMenu.Orderno=OrderMenu.Orderno group by Consumer.Cname;
13
**级**专业**班数据库应用系统课程设计课程论文
(3)索引
create unique index Selete_on_Dishname on Dish(Dname)
create unique index allow_der on DeliverPer(Delivername,isDeliver)
4.1.2 数据入库
对各个主要数据表要录入20条以上的记录,方法可用EXCEL批量导入,也可以逐条录入。
4.2 数据库测试
(1)存储过程测试
create procedure 查询预订 @Consumerno varchar(10),
@Delivername varchar(20) output, @Deliverph varchar(15) output as begin
if exists(select* from OrderMenu where Cno=@Consumerno) begin
print '已预订'
select @Delivername=Delivername,@Deliverph=Deliverph from DeliverMenu ,DeliverPer
where DeliverMenu.Deliverno=DeliverPer.Deliverno print '送餐员姓名为:'+@Delivername print '送餐员电话为:'+@Deliverph end
else print '未预定' end
declare @name varchar(20),@ph varchar(15) exec 查询预订 '022',@name output,@ph output
14
**级**专业**班数据库应用系统课程设计课程论文
declare @name varchar(20),@ph varchar(15) exec 查询预订 '008',@name output,@ph output
create procedure 预订 @Orderno varchar(10), @Cname varchar(20), @eatTime datetime as
declare @Cno varchar(100)
if exists(select * from Consumer where Cname=@Cname) begin
print('欢迎您再次光临本店,请预订')
select @Cno=Cno from Consumer where Cname=@Cname insert into OrderMenu values(@Orderno,@Cno,@eatTime) end else
print('欢迎光临本店,请先注册')
exec 预订 '022','杨小绿','2012-6-30 12:00'
exec 预订 '022','吕叶馨','2012-6-30 12:00'
create procedure 点菜 @Orderno varchar(10), @Dname varchar(10), @Dishnum int,
@Exquest varchar(50) as
declare @no varchar(10)
select @no=Dno from Dish where Dname=@Dname
15
**级**专业**班数据库应用系统课程设计课程论文
if exists (select * from OrderMenu where Orderno=@Orderno) insert into DishMenu values(@Orderno,@no,@Dishnum,@Exquest) else
print('没有预订信息,请预订后再点餐')
exec 点菜 '023','南芥草莓饼',1,''
exec 点菜 '022','九转大肠',1,'' exec 点菜 '022','滑藕片小炒',2,'' exec 点菜 '022','白斩鸡',1,'记得送佐料' exec 点菜 '022','冬瓜盅',1,'' exec 点菜 '022','小黄鱼炒年糕',1,''
create procedure 修改菜单 @Orderno varchar(10), @Dno varchar(10) as delete from DishMenu
where Orderno=@Orderno and Dno=@Dno
exec 修改菜单 '022','D4'
输入顾客号,计算本次应付金额 create procedure 实际消费金额 @Cno varchar(10), @Expend float output as
select @Expend=本次消费额
16
**级**专业**班数据库应用系统课程设计课程论文
from F_changer2,Consumer
where Consumer.Cname=F_changer2.顾客名 and Consumer.Cno=@Cno
declare @Consumerno varchar(10)='002',@expendnum float exec 实际消费金额 @Consumerno,@expendnum output select Cname,@expendnum from Consumer
where Consumer.Cno=@Consumerno
create procedure 开消费单 @Cno varchar(10), @totalpay float as
declare @Cname varchar(20),@actualpay float,@getTime date
select @Cname=Cname from Consumer where Cno=@Cno--根据顾客号找出顾客姓名
select @actualpay=(本次消费额*(discount*0.1))--计算顾客打折后应付实际金额 from F_changer2,Consumer,Discount_ruler
where F_changer2.顾客名=Consumer.Cname and Consumer.Cno=@Cno and Consumer.Vgrade=Discount_ruler.Vgrade
select @getTime=eatTime--获取顾客要求送饭时间,作为开发票的时间 from OrderMenu
where OrderMenu.Cno=@Cno
print'用户名:'+' '+@Cname
print'实付:'+str(@totalpay,10,2) print'应付:'+str(@actualpay,10,2)
print'找零:'+str(@totalpay-@actualpay,10,2) print'时间:'+' '+cast(@getTime as varchar(10)) print'谢谢您的光临,欢迎下次再来!'
17
**级**专业**班数据库应用系统课程设计课程论文
declare @consumerno varchar(10)='002',@consumerpay float=200 exec 开消费单 @consumerno ,@consumerpay
create proc 查询营业额 @begintime datetime, @endtime datetime,
@sum_of_turnover float output As
select @sum_of_turnover=SUM(本次消费额*(discount*0.1)) from F_changer2,Consumer,OrderMenu,Discount_ruler where eatTime>=@begintime and eatTime<@endtime and F_changer2.顾客名=Consumer.Cname and Consumer.Cno=OrderMenu.Cno
and Consumer.Vgrade=Discount_ruler.Vgrade
print '从时间:'+ cast( @begintime as varchar(20))+' 到时间:'+ cast( @endtime as varchar(20))+
' 的营业总额为:'+str(@sum_of_turnover, 10, 2)
declare @sum float
exec 查询营业额 '2012-6-25','2012-7-1',@sum output select @sum
create procedure 查询顾客订餐 @time datetime as
declare @Cname varchar(20),@Caddress varchar(50),@Cph varchar(10) declare c1 cursor for select Cname,Cadd,Cph
18
**级**专业**班数据库应用系统课程设计课程论文
from Consumer,OrderMenu
where Consumer.Cno=OrderMenu.Cno and eatTime=@time print cast(@time as varchar(10))+'订餐的顾客有:' open c1
fetch next from c1 into @Cname,@Caddress,@Cph while(@@fetch_status=0) begin
print'顾客姓名:'+' '+@Cname print'顾客地址:'+' '+@Caddress print'顾客电话:'+' '+@Cph
fetch next from c1 into @Cname,@Caddress,@Cph end close c1 deallocate c1
(1)触发器测试
create trigger trig_Upgrade_of_VIPgrade on Consumer after update as
declare @no varchar(20),
@totalexpend float, @grade int from inserted
select @no = Cno, @totalexpend=Cmon, @grade = Vgrade if(@totalexpend < 100)
set @grade = 0 set @grade = 1 set @grade = 2 set @grade = 3
else if(@totalexpend >= 100 and @totalexpend < 200) else if(@totalexpend >= 200 and @totalexpend < 300) else if(@totalexpend >= 300 and @totalexpend < 400)
else if(@totalexpend >= 400 and @totalexpend< 500)
set @grade = 4 set @grade = 5 set @grade = 6 set @grade = 7
else if(@totalexpend >= 500 and @totalexpend < 600) else if(@totalexpend >= 600 and @totalexpend < 700) else if(@totalexpend >= 700 and @totalexpend < 800)
19
**级**专业**班数据库应用系统课程设计课程论文
else if(@totalexpend >= 800 and @totalexpend < 900)
set @grade = 8 set @grade = 9
else if(@totalexpend >= 900 and @totalexpend < 1000) else
set @grade=10
update Consumer set Vgrade = @grade where Cno = @no
update Consumer set Cmon=200 where Cname='玄冰' update Consumer set Cmon=228 where Cname='吕叶馨'
4.3 在Oracle中数据库实施 4.3.1数据库及数据库对象建立
见附录3
5.总结
本次数据库课程设计为期15天。在这15天中虽然要兼顾考试和实习,显得忙碌,但在整个实习过程中,感觉挺有收获。
虽然上课很认真的听讲,平时实验课内容觉得简单,但在这次实习中还是遇到不少问题。例如,从数据流程图中抽取数据项和数据处理时,觉得有点乱;刚开始ER图画的不到位,导致关系模式反复返工。
这次实习让我初步了解了了解如何开发数据库,为以后的职业生涯肯定会有帮助。此外,在这次实习中,我了解并比较熟悉了如何运用SQL Server2008 数
20
**级**专业**班数据库应用系统课程设计课程论文
据库开发数据库系统,并且初步接触了ORACLE ,运用ORACLE 进行基本的操作,虽然在将数据库移植到oracle中时,困难重重,但我一一解决,让我感觉收获很大。
在此还要感谢辅导老师对我热情的指导,感谢许多同学的帮助,是他们在程序调试中帮我改正错误,提出合理化的建议,增强程序的功能,借阅各种书籍,在你们的帮助下,我及时纠正自己的错误,修改方案,才完成了这次实习,否则这三周就白白浪费了。
6.附录
附录1
数据流程图
(1)顶层数据流程图
21
**级**专业**班数据库应用系统课程设计课程论文
(2)第一层数据流程图:
(3)第二层数据流程图
①预订流程图
22
**级**专业**班数据库应用系统课程设计课程论文
②订单处理流程图
③结账流程图
23
**级**专业**班数据库应用系统课程设计课程论文
附录2 (1)数据项: 数据项编号 数据项名 DI-1 Dishno DI-2 Dishname DI-3 Dishprice DI-4 Dishintro DI-5 Cno DI-6 Cname DI-7 Cad DI-8 Cmon DI-9 Cph DI-10 Vgrade DI-11 Oderno DI-12 Time
DI-13 Exrequest DI-14 Sno DI-15 Sname DI-16 Sph
DI-17 Saddress DI-18 Goodno DI-19 Goodname DI-20 Goodprice DI-21 Qutity DI-22 Boardno
DI-23 Boardcontent DI-24 Boardreply DI-25 Delierno DI-26 Delivername DI-27 Deliverph DI-28 Noticeno
DI-29 Noticecontent DI-30
discount
数据项含义 菜品编号 菜品的名称 菜品的价格
菜品的介绍及原料 顾客编号 顾客姓名 顾客地址
顾客历史消费总额 顾客电话
顾客VIP等级 订单编号 用餐时间
顾客的额外要求 供应商编号 供应商名称 供应商电话 供应商地址 原料的编号 原料的名称 原料的价格 原料的品质 留言编号 留言内容 回复内容 送餐员编号 送餐员名字 送餐员电话 店内公告编号 店内公告内容 折扣
24
数据类型 char char float nvarchar char char
nvarchar float char int char char
nvarchar char char char
nvarchar char char float char char
nvarchar nvarchar char char char char char float
长度 5 10 100 5 10 20 6 15 3 5 10 50 5 10 15 20 5 10 10 5 200 200 5 10 15 5 100
**级**专业**班数据库应用系统课程设计课程论文
(2)数据结构:
数据结构编号 数据结构名 数据结构含义 组成
DT-1 Dishes 菜品 Dishno、Dishname、Dishprice、Dishintro
OrderFor
DT-2 订单 Oderno、Cno、Time
m
DT-3 Consumer 顾客 Cno、Cname、Cad、Cph、Cmon、Vgrade DT-4 Supplier 供应商 Sno、Sname、Sph、Saddress
DeliverPDelierno、Deliername、Delierph、
DT-5 送餐人员
er isDeliver
DT-6 Good 原料 Goodno、Goodname、Goodprice、Quality DT-7 BuyForm 采购单 Sno、Goodno、Num DT-8 Board 留言板 Boardno、Boardcontent、Boardreply DT-9 Notice 店内公告 Noticeno、Noticecontent DT-10 Discount 折扣规则 Vgrade、Disnum DT-11 Dform 配送单 Oderno、Deliverno DT-12 GforD 配料单 Orderno、Goodno、num DT-13 DishMenu 顾客菜单 Orderno、Dishno、Dishnum、quest
(3)数据处理: 处理编号
处理名称
简述
输入数
据流
处理 根据清单确认采购原料 确定退货
输出数据流 处理频率
1
采购人员采
盘存采购
购原料
检验原料不合格退货
原料清单 订货单 30次/ 月
2 退货 不合格单 顾客预定的菜品信息 菜单 菜单
退货单 2次/月 30000 次/月 27000 次/月 27000 次/月
3 预定菜单 顾客下订单 确认订单 分配送餐人员 处理账单
菜单
4 5
菜单处理 分配送餐人员 结账
统计顾客消费总额
配送单 消费单
25
(4)数据存储: 数据存储编号
1 2 3 4 5
(5)数据流: 数据流 数据流编号
名称
1
采购单
3
退货单 4 顾客订单
5
配送单 6 退订单
**级**专业**班数据库应用系统课程设计课程论文
数据存储名称
简述 数据存储组成 菜品单 改变菜品单 菜品的所有信息 顾客信息 顾客信息更新 顾客的基本信息 送餐员信息 判断送餐员忙闲 送餐员的基本信息
和送餐标记 订单存储 存储用户订单 订餐的各项要求 配送单
顾客的消费信息
订单号+送餐员号
简述
数据流 数据流数据流数据 高峰 来源
去向
组成
流量
流量
原料号采购人员采购
原料的单据
供应商
采购人员 +供应
商号+30次/月 60次/月
进货量 原料号采购人员发
出的退货单
采购员
供应商 +供应
商号+2次/月 5次/月
退货量 订单号顾客给酒店酒店管+菜品
的订单
顾客
理员 号+用
30000 50000
餐时间次/月 次/月
+要求 酒店安排送餐
订单号
并返回给顾客
酒店
顾客 +送餐
27000 46000
的消费单
员 次/月 次/月
订单号顾客给酒店+菜品
的退订单
顾客
酒店 编号+300次/月 400次/月
用餐日期
26
**级**专业**班数据库应用系统课程设计课程论文
附录3
(1)基本表:
create table Supplier(
Sno varchar(10)primary key, Sname varchar(20)not null, Sph varchar(15)not null, Sadd varchar(20))
create table Good(
Gno varchar(10) primary key, Gname varchar(20) not null, Gprice number, Gquatity varchar(10))
create table Supply( Gno varchar(10), Sno varchar(10), Snum number, Sdate date,
primary key(Gno,Sno),
foreign key(Sno)references Supplier(Sno), foreign key(Gno)references Good(Gno))
create table Dish(
Dno varchar(10) primary key, Dname varchar(20) not null, Dprice number, Dintro varchar(100))
create table GforD( Dno varchar(10), Gno varchar(10), Usenum number, primary key(Dno,Gno),
foreign key(Dno)references Dish(Dno), foreign key(Dno)references Dish(Dno))
create table DeliverPer(
27
**级**专业**班数据库应用系统课程设计课程论文
Deliverno varchar(10) primary key, Delivername varchar(20) not null, Deliverph char(15) not null,
isDeliver number check(IsDeliver in(0,1)))
create table Discount_ruler( Vgrade int primary key, discount float not null unique ) create table Consumer( Cno varchar(10) primary key, Cname varchar(20) not null, Cph varchar(15)not null, Cadd varchar(20) not null, Cmon number, Vgrade number,
foreign key(Vgrade)references Discount_ruler(Vgrade))
create table OrderMenu(
Orderno varchar(10) primary key, Cno varchar(10) not null, eatTime datetime not null,
foreign key(Cno) references Consumer(Cno))
create table DishMenu( Orderno varchar(10), Dno varchar(10), Dishnum number not null, Exquest varchar(50), primary key(Orderno,Dno),
foreign key(Orderno)references OrderMenu(Orderno), foreign key(Dno)references Dish(Dno))
create table DeliverMenu( Orderno varchar(10), Deliverno varchar(10),
primary key(Orderno,Deliverno),
foreign key(Orderno)references OrderMenu(Orderno), foreign key(Deliverno)references DeliverPer(Deliverno))
create table Notice(
28
**级**专业**班数据库应用系统课程设计课程论文
Nno varchar(10) primary key, Ncontent varchar(100) not null)
create table Board( Bno varchar(10), Cno varchar(10),
Content varchar(100) not null, ReplyContent varchar(100), primary key(Bno,Cno),
foreign key (Cno) references Consumer(Cno))
(2)视图:
create view F_Consumer1(菜名,所用原料) as
select Dname,Gname from Dish,Good,GforD
where Dish.Dno=GforD.Dno and Good.Gno=GforD.Gno;
create view F_Consumer2(菜名,简介) as
select Dname,Dintro from Dish
create or replace view F_Changer1(顾客名,总点菜数) as
select Cname,COUNT(Dno)
from Consumer,OrderMenu,DishMenu
where Consumer.Cno=OrderMenu.Cno and OrderMenu.Orderno=DishMenu.Orderno group by Consumer.Cname;
create or replace view F_changer2(顾客名,本次消费额) as
select Cname,SUM(Dprice)
from Consumer,Dish,OrderMenu,DishMenu where Consumer.Cno=OrderMenu.Cno
and Dish.Dno=DishMenu.Dno and DishMenu.Orderno=OrderMenu.Orderno group by Consumer.Cname;
(3)索引:
create unique index Selete_on_Dishname on Dish(Dname)
29
**级**专业**班数据库应用系统课程设计课程论文
(4)触发器
create or replace trigger trig_Upgrade_of_VIPgrade after update on Consumer for each row declare
no varchar2(20);
totalexpend number; grade number;
begin
no:=:new.Cno;
totalexpend:=:new.Cmon; grade:=:new.Vgrade; if(totalexpend < 100)then grade:= 0;
elsif(totalexpend >= 100 and totalexpend < 200)then grade := 1;
elsif(totalexpend >= 200 and totalexpend < 300)then grade := 2;
elsif(totalexpend >= 300 and totalexpend < 400)then grade := 3;
elsif(totalexpend >= 400 and totalexpend< 500)then grade := 4;
elsif(totalexpend >= 500 and totalexpend < 600)then grade := 5;
elsif(totalexpend >= 600 and totalexpend < 700)then grade := 6;
elsif(totalexpend >= 700 and totalexpend < 800)then grade := 7;
elsif(totalexpend >= 800 and totalexpend < 900)then elsif(totalexpend >= 900 and totalexpend < 1000)then else grade := 10;
update Consumer set Vgrade = grade where Cno = no; grade := 8; grade := 9; end if; end ;
(5)存储过程:
create or replace procedure 查询预订(Consumerno in Consumer.Cno%type,DPname out DeliverPer.Delivername%type,DPph out DeliverPer.Deliverph%type) is no varchar2(10);
30
**级**专业**班数据库应用系统课程设计课程论文
begin
select Cno into no from OrderMenu where Cno=Consumerno; if (no>0)then
dbms_output.put_line('--已预订--');
select Delivername,Deliverph into DPname,DPph from DeliverMenu ,DeliverPer where DeliverMenu.Deliverno=DeliverPer.Deliverno; dbms_output.put_line( '送餐员姓名为:'||' '||DPname);
dbms_output.put_line( '送餐员电话为:'||' '||DPph);
else
dbms_output.put_line('--未预订--'); end if; end;
create or replace procedure 预订(Orno in OrderMenu.Orderno%type,costomerno Consumer.Cno%type,etime in OrderMenu.Eattime%type) is no varchar2(10); begin
select Cno into no from Consumer where Cno=costomerno; if(no>0)then
dbms_output.put_line('欢迎您再次光临本店,请预订'); insert into OrderMenu values(Orno,costomerno,eTime); else
dbms_output.put_line('欢迎光临本店,请先注册'); end if; end ;
create or
replace
procedure
点菜(no
in OrderMenu.Orderno%type,Dishname
Dish.Dname%type,num number,quest varchar2) is Dishno Dish.Dno%type;
Orno OrderMenu.Orderno%type; begin
select Dno into Dishno from Dish where Dname=Dishname; select Orderno into Orno from OrderMenu where Cno=no; if(Orno>0) then
insert into DishMenu values(no,Dishno,num,quest); end if;
end; create or replace procedure 点菜(no in OrderMenu.Orderno%type,Dishname Dish.Dname%type,num number,quest varchar2) is Dishno Dish.Dno%type;
31
in in
in **级**专业**班数据库应用系统课程设计课程论文
Orno OrderMenu.Orderno%type; begin
select Dno into Dishno from Dish where Dname=Dishname; select Orderno into Orno from OrderMenu where Cno=no; if(Orno>0) then
insert into DishMenu values(no,Dishno,num,quest); end if; end;
create or replace procedure 修改菜单(Orno in OrderMenu.Orderno%type,Dishno in Dish.Dno%type) is begin
delete from DishMenu where Orderno=Orno and Dno=Dishno; dbms_output.put_line('修改成功经验!'); commit; end ;
create or replace procedure 实际消费金额(no in Consumer.Cno%type) is expendsum number;
Consumername Consumer.Cname%type; begin
select sum(Dprice*Dishnum) into expendsum from OrderMenu,Dish,DishMenu where OrderMenu.Cno=no
and DishMenu.Dno=Dish.Dno and OrderMenu.Orderno=DishMenu.Dno; select Cname into Consumername from Consumer where Cno=no; dbms_output.put_line(Consumername+'---'+expendsum); end ;
create or replace procedure 计算营业额 (begintime in date, endtime in date) is turnover number; begin
select SUM(本次消费额*(discount*0.1)) into turnover from F_changer2,Consumer,OrderMenu,Discount_ruler where eatTime>=begintime and eatTime and Consumer.Vgrade=Discount_ruler.Vgrade; dbms_output.put_line('从'||begintime||'到'||endtime||'的营业额为:'||turnover); end ; 32 **级**专业**班数据库应用系统课程设计课程论文 create or replace procedure 开消费单(no in Consumer.Cno%type,totalpay in number) is Consumername Consumer.Cname%type; actualpay number; gettime date; begin select Cname into Consumername from Consumer where Cno=no; select 本次消费额*(discount*0.1) into actualpay from F_changer2,Consumer,Discount_ruler where F_changer2.顾客名=Consumer.Cname and Consumer.Cno=no and Consumer.Vgrade=Discount_ruler.Vgrade; select eatTime into gettime from DishMenu,OrderMenu where OrderMenu.Cno=no and DishMenu.Orderno=OrderMenu.Orderno; dbms_output.put_line('用户名:'||' '||Consumername); dbms_output.put_line('实付:'||totalpay); dbms_output.put_line('应付:'||actualpay); dbms_output.put_line('找零:'||(totalpay-actualpay)); dbms_output.put_line('时间:'||' '||getTime); dbms_output.put_line('谢谢您的光临,欢迎下次再来!'); end ; create or replace procedure 查询顾客订餐(time in OrderMenu.Eattime%type) is Cname varchar(20); Caddress varchar(50); Cph varchar(10); cursor c1 is select Cname,Cadd,Cph from Consumer,OrderMenu where Consumer.Cno=OrderMenu.Cno and eatTime=time; begin open c1; loop fetch c1 into Cname,Caddress,Cph; exit when c1%notfound; dbms_output.put_line(Cname||'---'||Caddress||'---'||Cph); end loop; close c1; end; 33
因篇幅问题不能全部显示,请点此查看更多更全内容