您的当前位置:易达范文网 > 专题范文 > 公文范文 >

数据库课程设计餐饮下单管理系统

时间:2023-03-01 08:50:02 浏览次数:
导读: 目录1 课题名称及目标12 需求分析12 1数据需求12 2事务需求22 3数据流32 4数据字典5

目 录 1.课题名称及目标 1 2.需求分析 1 2.1 数据需求 1 2.2事务需求 2 2.3数据流 3 2.4数据字典 5 3.数据库结构设计 8 3.1概念设计 8 3.1.1分E-R图的建立 8 3.1.2整体E-R图 9 3.2逻辑设计 10 3.2.1 E-R图向关系模型的转换 10 3.2.2优化处理 11 3.2.3 用户子模式建立 12 4.数据库物理设计 12 4.1存储过程 13 4.2 触发器 13 5.数据库的实施 13 5.1在SQL中数据库实施 13 5.1.1数据库及数据库对象的建立 13 5.1.2数据入库 15 5.2 数据库测试 15 5.2.1对建立的数据库及数据库对象进行测试 15 6. 总结 29 7. 附录 30 1.课题名称及目标 本次实训要设计的数据库课题名称是餐厅管理系统。

餐厅管理系统的功能主要包括顾客点菜、结账、对员工资料进行管理、对餐桌信息进行统一设置、对消费情况进行查询等功能。基本功能如下:
(1)菜谱信息管理:对菜谱进行增、查、改、删操作。即可查询当前餐厅所推出的菜品,增加菜品,修改菜品的价格,删除菜品。

(2)餐桌信息管理:能查询当前餐厅中所有餐桌的座位数以及使用情况,客人可以对位实现的餐桌进行使用申请。

(3)顾客信息管理:可以查询顾客的相关信息,如性别,年龄,联系方式等。当有新顾客时,可添加新顾客的信息。

(4)顾客下订单功能:实现下订单,具有唯一的订单号,可用于结账。可根据顾客的人数选择相应的餐桌号,并且能够指定服务员。

(6)顾客点菜:实现顾客点菜功能。顾客可以对所下的订单进行修改,即可删除所点的菜品或是修改数量。同时可以查询某位顾客的订单。

(7)顾客结账:根据订单号进行结账(防止有相同姓名的顾客,以致结错帐)。能够根据消费金额进行对应的折扣,并把消费信息存档到消费记录中去。

2.需求分析 通过了解餐饮行业的特点和实际情况,从分析饭店的基本情况入手,结合要实现的功能,对系统的可行性进行分析,为提高其可行性,故做了以下数据分析。

2.1 数据需求 餐桌数据包括餐桌号、座位数、状态(空/有人)
餐厅存储有顾客信息,员工信息。

菜品信息有菜品编号、名称、类别、价格等 v 具体数据需求如下:
◎下订单阶段需要的数据 l 顾客信息:包括顾客编号。

l 订单信息:包括订单编号、消费时间。

l 餐桌信息:包括编号、可容人数、使用状态等 l 员工信息:包括员工工号。

◎点菜阶段需要的数据 l 订单信息:订单编号 l 菜品信息:包括菜品编号、菜品名称、菜品数量等。

◎结账阶段需要的数据:
l 订单信息:包括订单编号、顾客编号 l 菜品信息:包括菜品编号、菜品名称、菜品数量等。

l 员工信息:包括员工工号 l 折扣信息:包括消费金额、折扣数 ◎员工管理需要的数据:
l 员工档案:包括工号、姓名、性别、工资 ◎顾客管理需要的数据:
l 顾客档案:包括编号、姓名、性别等。

◎消费记录管理需要的数据有:
l 消费信息:订单编号、消费金额、折扣后金额、结账时间 2.2事务需求 v 数据录入 l 录入顾客信息 l 录入餐桌信息 l 录入员工信息 l 录入菜品信息 v 数据更新/删除 l 更新/删除餐桌信息 l 更新/删除菜谱菜品信息 l 更新/删除员工信息 l 更新/删除顾客信息 l 更新/删除订单菜品信息 v 数据查询 l 查询可用餐桌信息 l 查询在售菜品信息 l 查询订单信息 l 查询顾客点菜信息 l 查询员工信息 l 查询顾客消费信息 2.3数据流 (1)顶层数据流 P1 订单处理 E2 服务员 E1 顾客 负责 F1 变更信息 (2)
第一层数据流 P2.2 点菜处理 F2.1 折扣 菜谱 P2.1 直接下单 E2.1 顾客 E2.3 服务员 P2.3 结账 E2.2 订单 就位 生成 账单 (3)第二层数据流 点菜业务 申请变更 P3.1.2 点菜处理 反馈变更 查看菜谱 P3.1.5 判断变更方式 P3.1.4 变更处理 加菜、减菜 P3.1.1 直接下单 F3.1.2 存储账单 E3.1.2 订单 E3.1.1 顾客 就位 生成 账单 P3.1.3 后台处理 F3.1.1 存储订单 点菜业务 2.4数据字典 1) 数据项 Foodtable(餐桌)数据项 属性 存储代码 类型 长度 餐桌号 Foodtableno varchar 10 座位数 seatingno int 使用状态 Foodtablestate varchar 10 Menus(菜谱)数据项 属性 存储代码 类型 长度 编号 Dishno varchar 10 名称 Dishname varchar 10 类别 Dishclass varchar 10 价格 Dishprice float Worker(员工)数据项 属性 存储代码 类型 长度 工号 Workerno varchar 10 姓名 Workername varchar 10 性别 Workersex varchar 4 年龄 Workerage int 工资 Workersalary int Customer(顾客)数据项 属性 存储代码 类型 长度 编号 Customerno varchar 10 姓名 Customername varchar 10 性别 Customersex varchar 4 联系方式 Customerphoneno varchar 20 Oder(订单)数据项 属性 存储代码 类型 长度 订单编号 Oderno varchar 10 顾客编号 Customerno varchar 10 消费时间 consumetime datetime 餐桌编号 Foodtableno varchar 10 服务员编号 Workerno varchar 10 Menus_Oder(点菜)数据项 属性 存储代码 类型 长度 订单编号 Oderno varchar 10 菜品编号 Dishno varchar 10 菜品名称 Disnname varchar 10 菜品数量 Dish_amount int Discount_rules(折扣规则)数据项 属性 存储代码 类型 长度 消费金额 Consumption float 折扣 Discount float Sales_bill(消费账单)数据项 属性 存储代码 类型 长度 订单编号 Oderno varchar 10 消费金额 Consumption float 折扣后金额 after_discount float 账单时间 Billtime int 2) 数据结构 编号 数据结构名 属性 1 餐桌信息 餐桌号、座位数、使用状态 2 菜谱 编号、名称、类别、价格 3 员工信息 工号、姓名、性别、年龄、工资 4 顾客信息 编号、姓名、性别、联系方式 5 订单信息 订单编号、顾客编号、消费时间、餐桌编号、服务员编号 6 点菜 订单编号、菜品编号、菜品名称、菜品数量 7 折扣规则 消费金额、折扣 8 消费账单 订单编号、消费金额、折扣后金额、账单时间 3) 数据流 编号 数据流名 输入 输出 1 菜品信息 修改菜品 菜谱 2 空闲餐桌 选择餐桌 订单 3 点菜信息 加菜退菜 点菜 4 记入账单 订单 结账 5 结账 折扣方式 结账 4) 数据存储 编号 数据存储名 输入 输出 1 顾客信息更新 顾客新信息 顾客信息 2 菜谱更新 新增菜品 菜谱 3 订单储存 订单 订单信息 4 餐桌更新 新增餐桌 餐桌 5 账单存储 消费信息 账单记录 5) 处理过程 编号 处理过程名 输入数据流 输出数据流 1 顾客点菜 菜谱 订单 2 结账 订单 账单记录 3.数据库结构设计 3.1概念设计 3.1.1分E-R图的建立 (1)
订单形成过程1 n 1 1 1 n n n 1 n 负责 包含 菜品 选择 菜谱 顾客 查看 生成 订单 服务员 (2)结账形成过程 消费金额 包含 支付 顾客 订单 对应 折扣规则 对应 3.1.2整体E-R图 1 1 1 对应 1 1 1 1 1 1 1 对应 1 1 1 1 1 1 1 n n n n n 工资 对应 员工 折扣 销售记录 账单 支付 保存 位置 餐桌 负责 订单 下单 包含 菜品 选择 查看 顾客 菜谱 3.2逻辑设计 3.2.1 E-R图向关系模型的转换 A. 转换规则 一个实体型转换成一个关系模型。实体的属性就是关系的属性,实体的码就是关系的码。

实体型间的联系常有如下不同的情况:
a. 一个1:1联系可以转换为一个独立的关系模式,也可以任意一端对应的关系模式合并。

b. 一个1:n联系可以转换成一个独立的关系模式,也可以与n端对应的关系模式合并。

c. 一个m:n联系转换成一个关系模式。

d. 3或3个以上实体间的一个多联系可以转换成一个关系模式。

e. 具有相同码的关系模式可合并。

B.根据以上规则得到如下关系模型(下划线的属性为主码)
菜谱(菜品编号,菜品名称,菜品类别,菜品价格)
顾客(顾客编号,姓名,性别,年龄,联系方式)
餐桌(餐桌号,座位数,使用状态)
员工(工号,姓名,性别,年龄,工资)
订单(订单编号,顾客编号,消费时间,餐桌编号,服务员编号)
菜谱_订单(订单编号,菜品编号,菜品名称,菜品数量)
消费记录(订单号,消费金额,折扣后金额,账单时间)
折扣规则(消费金额,折扣)
3.2.2优化处理 1) 确定数据依赖。

2) 对各个关系模式间的数据依赖进行极小化分析,减小冗余。

3) 按照数据依赖的理论对关系模式进行分析,看是否存在部分函数依赖或函数传递或多值依赖等,确保各关系模式满足第三范式。

4) 按照需求分析阶段得到的处理要求,分析对于这样的应用环境这些模式是否合适,确定是否要对某些模式进行合并或分解。

5) 对关系模式进行必要的分解,分析对于这样的应用环境这些模式是否合适,确定是否要对某些模式进行合并或分解。

3.2.3 用户子模式建立 名称 描述 插入新顾客信息 若是新顾客,则插入顾客的信息,姓名,性别等 下单就位 顾客来餐,下订单,分配餐桌 点菜 存储顾客所点的菜品 删除菜品 删除顾客所点的某菜品 修改菜品数量 修改顾客所点的某菜品的数量 查询顾客点菜信息 查询顾客所点的菜品 消费总额 计算顾客本次消费的总额。顾客支付完账单时,把消费信息存档到消费记录中 结账后更改餐桌状态 当顾客结账后,把餐桌状态改为“空” 删除菜谱中菜品 删除菜谱中存在的某菜品 修改菜品价格 修改菜谱中某菜品的价格 向菜谱添加菜品 向菜谱添加新菜品 trig_discount 触发器,顾客进行结账时,消费金额在不同的区间会有不同的折扣。

trig_Sales_bill 触发器,当消费金额达到一定额数时,会送相应优惠券 trig_Menus 触发器,当向菜谱添加新菜品,若该菜品名称含有“红”字,会发出“此后生意必定红红火火”的祝福语。

4.数据库物理设计 数据库在物理设备上的存储结构与存取方法就是数据库的物理结构,它依赖于选定的数据库管理系统,为一个给定的逻辑数据模型选取一个最合适的应用环境的物理结构过程,就是数据库的物理设计。这一阶段主要任务时确定数据库的物理结构,并不断的进行优化处理,主要建立索引,触发器,存储过程。

4.1存储过程 存储过程可以实现数据库操作的增删改功能,在执行时需要调用。御用像函数一样,也可以有参数的参与。定义存储过程提供了过程封装的效果,执行只需要调用,在更大程度上简化了数据处理过程。

餐饮管理具体存储过程名称和作用详见3.2.3,具体代码详见第5.2.1部分 4.2 触发器 餐饮管理具体触发器的名称和作用详见3.2.3,具体代码详见第5.2.1部分 5.数据库的实施 5.1在SQL中数据库实施 5.1.1数据库及数据库对象的建立 create database Restaurant_Management ---------建表-------------------------------------------------- create table Menus --菜谱 (Dishno varchar(10) primary key, Dishname varchar(10), Dishclass varchar(10), Dishprice float, ) create table Customer --顾客 (Customerno varchar(10) primary key, Customername varchar(10) not null, Customersex varchar(4) check (Customersex='男'or Customersex='女') not null, Customerphoneno varchar(20) unique not null, ) create table Foodtable --餐桌 (Foodtableno varchar(10) primary key, seatingno int not null, Foodtablestate varchar(6)check(Foodtablestate='空' or Foodtablestate='有人'), ) drop table Oder create table Oder --订单 (Oderno varchar(10) primary key, Customerno varchar(10) not null, consumetime datetime not null, Foodtableno varchar(10) not null, Workerno varchar(10) not null, foreign key(Customerno) references Customer(Customerno), foreign key(Foodtableno)references Foodtable(Foodtableno), foreign key(Workerno) references Worker(Workerno), ) create table Worker --员工 (Workerno varchar(10) primary key, Workername varchar(10), Workersex varchar(4) check(Workersex='男' or Workersex='女'), Workerage int, Workersalary int, ) drop table Menus_Oder create table Menus_Oder --点菜 (Oderno varchar(10), Dishno varchar(10), Disnname varchar(10), Dish_amount int not null, Primary key(Dishno,Oderno), foreign key(Dishno) references Menus(Dishno), foreign key(Oderno) references Oder(Oderno), ) drop table Sales_bill create table Sales_bill --销售账单 ( Oderno varchar(10) primary key , Consumption float, after_discount float, Billtime datetime, foreign key(Oderno) references Oder(Oderno) ) drop table Discount_rules create table Discount_rules --折扣规则 (Consumption float primary key, Discount float, ) 5.1.2数据入库 本系统采用将数据逐条录入的方法。

5.2 数据库测试 5.2.1对建立的数据库及数据库对象进行测试 (1)存储过程 ------------------------插入新顾客信息--------------- drop procedure 插入新顾客信息 create procedure 插入新顾客信息 (@Customerno varchar(10), @Customername varchar(10), @Customersex varchar(4), @Customerphoneno varchar(20) ) as insert into Customer values(@Customerno,@Customername,@Customersex,@Customerphoneno) select * from Customer ----------------验证----------------------------------- execute 插入新顾客信息'112699','李阳','男','' ----------------下单就位----------- drop procedure 下单就位 create procedure 下单就位 (@Oderno varchar(10) , @Customerno varchar(10), @consumetime datetime, @Foodtableno varchar(10), @Wokerno varchar(10) ) as begin transaction --开始事务 insert into Oder values(@Oderno,@Customerno,@consumetime,@Foodtableno,@Wokerno ) if ((select Foodtablestate from Foodtable where Foodtableno=@Foodtableno)<>'空') begin print '该餐桌有人,请重选餐桌。' Rollback tran return end else begin update Foodtable set Foodtablestate ='有人' where Foodtableno=@Foodtableno print '下单成功,请就位开始点菜' end commit tran ---------------验证---------------- execute 下单就位'O_001','112699','2013-12-26','TB_005','W_002' execute 下单就位'O_002','112698','2013-12-26','TB_004','W_003' 当餐桌有人时,则显示 成功下单时,则显示 ----------查看下单情况---------- select * from Oder select * from Foodtable ---------------菜谱的查询--------- select * from Menus ----------------------删除菜谱中菜品----------- create procedure 删除菜谱中菜品 @Dishno varchar(10) as delete from Menus Where Dishno=@Dishno select * from Menus ------------------验证---------------- execute 删除菜谱中菜品 'D_112' -------修改菜品价格---------- create procedure 修改菜品价格 ( @Dishno varchar(10), @Dishprice float ) as update Menus set Dishprice=@Dishprice Where Dishno=@Dishno select * from Menus ----------------验证-------------------- execute 修改菜品价格 'D_113','30' ---------------向菜谱增加菜品-------------- create procedure 向菜谱增加菜品 (@Dishno varchar(10), @Dishname varchar(10), @Dishclass varchar(10), @Dishprice float ) as insert into Menus values(@Dishno,@Dishname,@Dishclass,@Dishprice) select * from Menus -----------------验证-------------------- execute 向菜谱增加菜品'D_112','时蔬','小炒类','20' ---------------------------------------------点菜的增加、查询、删除、修改-------------------------- ---------------点菜------------- create procedure 点菜 (@Oderno varchar(10), @Dishno varchar(10), @Disnname varchar(10), @Dish_amount int ) as insert into Menus_Oder values(@Oderno,@Dishno,@Disnname,@Dish_amount) select * from Menus_Oder where Oderno=@Oderno -------------验证----------- execute 点菜'O_001','D_111','小炒河虾','2' execute 点菜'O_001','D_114','鸡蛋炒芹菜','1' execute 点菜'O_001','D_115','三鲜汤','3' ----------------查询客户点菜信息--------------- create procedure 查询顾客点菜信息 @Customerno varchar(10) as select Customerno=@Customerno,Menus.Dishno,Dishname,Dish_amount from Menus,Menus_Oder,Oder where Oder.Customerno=@Customerno and Menus.Dishno=Menus_Oder.Dishno and Oder.Oderno=Menus_Oder.Oderno ---------------验证--------------------- execute 查询顾客点菜信息 '112699' --------------删除菜品-------------------- create procedure 删除菜品 (@Oderno varchar(10), @Dishno varchar(10) ) as delete from Menus_Oder Where Oderno=@Oderno and Dishno=@Dishno select * from Menus_Oder where Oderno=@Oderno ------------------验证---------------- execute 删除菜品 'O_001','D_111' ------------------修改菜品数量--------------- create procedure 修改菜品数量 (@Oderno varchar(10), @Dishno varchar(10), @Dish_amount int ) as update Menus_Oder set Dish_amount=@Dish_amount Where Oderno=@Oderno and Dishno=@Dishno select * from Menus_Oder where Oderno=@Oderno ----------------验证-------------------- execute 修改菜品数量 'O_001','D_111','3' , ---------------计算总消费额----------- DROP procedure 消费总额 create procedure 消费总额 (@Oderno varchar(10), @Consumption float output, @discount float output ) as select @Consumption=SUM(Dishprice*Dish_amount) from Menus_Oder,Menus,Oder where Menus.Dishno=Menus_Oder.Dishno and Oder.Oderno=Menus_Oder.Oderno and Oder.Oderno=@Oderno begin tran ----启用事务 if exists (select Consumption from Discount_rules where Consumption=@Consumption) --判断Discount_rules中是否有对应折扣 begin select @discount=Discount from Discount_rules where Consumption=@Consumption end ELSE begin INSERT into Discount_rules(Consumption) VALUES(@Consumption) --将@Consumption插入到Discount_rules select @discount=Discount from Discount_rules where Consumption=@Consumption --获取对应折扣 end if exists(select Oderno from Sales_bill where Oderno=@Oderno)--判断消费账单是否已有该消费记录 begin print '消费记录已插入消费账单,别重复插入' end else begin insert into Sales_bill(Oderno,Consumption,after_discount,Billtime) values(@Oderno,@Consumption,@Consumption*@discount,GETDATE()) print '成功将消费记录插入到消费账单' end commit tran --提交事务 -------------验证---------------- declare @Consumption float,@discount float,@Oderno varchar(10)='O_001' execute 消费总额 'O_001',@Consumption output,@discount output select Oderno,Customername,@Consumption 总消费,@discount 折扣 from Oder,Customer where Customer.Customerno=Oder.Customerno and Oderno=@Oderno 并把消费信息插入到消费记录中 若已经结账,则提示 ----------------结账后餐桌状态------------ create procedure 结账后更改信息 @Oderno varchar(10) as update Foodtable ----修改餐桌状态 set Foodtablestate='空' where Foodtableno=(select Foodtableno from Oder where Oderno=@Oderno) ------------验证------------- execute 结账后更改信息 'O_001' -----------------------------------------对菜谱的操作------------------------ ---------------查询菜谱--------- select * from Menus -------------删除菜谱中菜品----------- create procedure 删除菜谱中菜品 @Dishno varchar(10) as delete from Menus Where Dishno=@Dishno select * from Menus ------------------验证---------------- execute 删除菜谱中菜品 'D_112' 执行前:
执行后:
-------修改菜品价格---------- create procedure 修改菜品价格 ( @Dishno varchar(10), @Dishprice float ) as update Menus set Dishprice=@Dishprice Where Dishno=@Dishno select * from Menus ----------------验证-------------------- execute 修改菜品价格 'D_113','40' 执行后:
---------------向菜谱增加菜品-------------- create procedure 向菜谱增加菜品 (@Dishno varchar(10), @Dishname varchar(10), @Dishclass varchar(10), @Dishprice float ) as insert into Menus values(@Dishno,@Dishname,@Dishclass,@Dishprice) select * from Menus -----------------验证-------------------- execute 向菜谱增加菜品'D_112','时蔬','小炒类','20' 执行后:
(2)触发器 -----------------------折扣----------------------- DROP trigger trig_discount create trigger trig_discount on Discount_rules for insert as begin declare @expand float select @expand=Consumption From inserted if(@expand<50) begin update Discount_rules set Discount=1 where Consumption=@expand end else if(@expand>=50and @expand<100) begin update Discount_rules set discount=0.95 where Consumption=@expand end else if(@expand>=100and @expand<150) begin update Discount_rules set discount=0.90 where Consumption=@expand end else if(@expand>=150and @expand<200) begin update Discount_rules set discount=0.85 where Consumption=@expand end else begin update Discount_rules set discount=0.80 where Consumption=@expand end end ---验证----- insert into Discount_rules(Consumption) values('250') select Discount from Discount_rules WHERE Consumption='250' -----------送优惠券-------- drop trigger trig_Sales_bill create trigger trig_Sales_bill on Sales_bill for insert as begin declare @expand float select @expand=Consumption From inserted if(@expand>=150and @expand<200) begin print '送您5元优惠券' end else if(@expand>=200) begin print '送您10元优惠券' end end -----------祝福语-------------------- drop trigger trig_Menus create trigger trig_Menus on Menus for insert as begin declare @dishname varchar(10) select @dishname=dishname From inserted if (@dishname like '%红%') begin print '此后生意必定红红火火' end end 6. 总结 这次课程设计中遇到一个最严重的问题就是时间太短,太少了。本来是有一个星期的,但除去考试、上课的时间,以及构思、整理思路,画E-R图的时间,真正动手开始做课程设计的时间就所剩不多了。不过经过几个晚上的熬夜、拼命,最后还是完成了。不过有点遗憾的是,在构思时,我本想使这个系统更完善,具备更多的功能,但却由于时间问题,最终只能放弃了,甚至我自己本身很清楚,现在完成的这个系统还是存有缺陷的,无法完全满足实际生活所需。在这次实训中,遇到的问题也有关于知识方面的,不过在老师的悉心指导以及同学们的帮助下,最终都一一解决了。

在这个课程设计中,我学到的东西还是很多的,感受颇多。第一,这次课程设计巩固了之前学习到的知识,并将学到的知识进行了串联。第二,我初略学到了设计一个数据库的几个步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计,运行,实现,运行和维护。第三,学会熟练使用存储过程以及触发器。之前并没有做过有关存储过程的实验,触发器方面的实验也很少。不过借此机会,我已把它们掌握了。

这一学期的数据库就以这次实训落幕了。感觉挺不舍的。虽然之后也没有相关的课程了,但我觉得我对数据库的学习并不会就此止步。接下来的想法就是把所学到的知识强化,达到能运用自如,并且想要学会C++或是JAVA跟数据库的连接。

7. 附录 附录1 数据库各表截图 (1)Customer表 (2)Discount_rules表 (3)Foodtable表 (4)Menus表 (5)Menus_Oder表 (6)Oder表 (7)Sales_bill表 (8)Worker表 附录2 视图截图 (1)点菜视图 (2)
结账视图 (3)整体视图 附录3 存储过程

本文链接:https://www.gxcjt.com/zhuantifanwen/gongwenfanwen/37418.html(转载请注明文章来源)
Copyright © 2024 易达范文网 版权所有 备案号:桂ICP备20004951号-1
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
Top