第1章 系统概述
数据库系统设计是指对于一个给定的应用环境,构造优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据库操作要求。数据库设计的基本步骤包括需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库运行和维护。
1.1 系统概述
1.1.1 实验目的与要求
1、通过实验加深对数据完整性的理解,学会创建和使用触发器。
2、通过实验加深对数据安全性的理解,并掌握SQL Server中有关用户,角色及操作权限的管理方法。
3、通过实验了解SQL Server的数据备份和恢复机制,掌握SQL Server中数据库备份和恢复的方法。
4、根据数据库系统设计的基本步骤,完成某一具体数据库系统的需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库运行维护等功能。
1.1.2设计背景及意义
当前,我国社会稳定、人民生活水平不断提高,而餐饮服务行业也因此而发展迅猛,消费持续增长。但餐饮企业具有货品繁多、菜品多样、价格多变、折扣灵活、现金量大以及报表需求复杂多样等行业特点;这就迫切需要标准的、高效率的管理方式引导餐饮行业的发展。随着时代的发展,人们对于美食的热情日益高涨,对于各个菜系都有不同的需求,我们饭店把顾客的要求放在第一位,高新聘请几位名厨带着他们的拿手名菜,给顾客不同的美食享受。实行电子化的餐馆管理,可以让主管人员从繁重琐碎的案头工作解脱出来,去完成更重要的工作。餐馆管理信息系统的实现可以减轻比较繁琐的手工管理。本文主要为那些餐饮小企业规划,为了使他们在激烈的市场竞争中生意兴隆,也为了改善和保证广大消费者的切身利益而出谋划策。
第2章 系统分析
2.1 系统分析
2.1.1了解系统需求
餐厅管理涉及的实体有:
客人 属性有客人编号、桌号、人数、到达时间、客人类型
菜单 属性有菜单编号、菜肴编号、份数、口味
菜肴 属性有菜名、菜肴种类
收银单 属性有收银单编号、应收金额、折扣、实收金额、收银时间
账目 属性有帐目编号、消费金额、用餐持续时间、客户类型
这些实体之间的联系如下:
一桌客人对应一个菜单,多桌客人可以使用相同的菜单,因此客人与菜单有多对一的联系。
客人、收银单、账目之间存在一对一的关系,即一桌客人只对应一个收银单,一个收银单只对应一条账目记录,一个收银单只对应一桌客人。
菜肴和菜单之间存在一对一联系,一个菜肴编号对应一个菜名,用菜价来表示菜肴的价格。
2.1.2关系模型
客人(客人编号,桌号,人数,客人类型)
菜单(菜单编号,菜肴编号,份数,口味)
收银单(收银单编号,应收金额,折扣,实收金额)
账目(账目编号,客户类型,消费金额)
菜肴(菜肴,菜肴种类)
第3章 数据库设计
3.1数据库设计
3.1.1 概念结构设计
E-R图:
客人 |
客人编号 |
桌号 |
人数 |
客人类型 |
菜单 |
口味 |
份数 |
菜肴编号 |
菜单编号 |
点菜 |
收银单 |
收银单编号 |
应收金额 |
折扣 |
实收金额 |
账目 |
账目编号 |
消费金额 |
客户类型 |
对应 |
菜肴 |
菜肴 |
菜肴种类 |
价格 |
菜价 |
1 |
1 |
1 |
n |
1 |
1 |
1 |
客人 |
客人编号 |
桌号 |
人数 |
客人类型 |
菜单 |
口味 |
份数 |
菜肴编号 |
菜单编号 |
账目 |
账目编号 |
消费金额 |
客户类型 |
菜肴 |
菜肴 |
菜肴种类 |
收银单 |
收银单编号 |
应收金额 |
折扣 |
实收金额 |
3.1.2逻辑结构设计:
总体表预览
表名称 | 表信息描述 |
CustomerInfo | 客人信息表 |
FoodList | 菜单信息表 |
FoodInfo2 | 菜肴信息表 |
ChargeInfo | 收银信息表 |
AccountInfo | 账目信息表 |
OrderInfo | 点菜信息表 |
C_C_A | 客人、收银单、账目对应关系 |
PriceInfo | 价格信息表 |
客人信息表CustomerInfo
描述 | 字段 | 类型 |
客人编号 | Cusno | Int |
桌号 | Tableno | shortint |
人数 | Cusnum | shortint |
客人类型 | Ctype | char(4) |
菜单信息表FoodList
描述 | 字段 | 类型 |
菜单编号 | Mno | Int |
菜肴编号 | Fno | smallint |
份数 | Fnum | smalltint |
口味 | Ftaste | Char(4) |
菜肴信息表FoodInfo2
描述 | 字段 | 类型 |
菜名 | Fname | varchar(20) |
菜肴种类 | Fkind | char(4) |
收银信息表ChargeInfo
描述 | 字段 | 类型 |
收银单编号 | Chargeno | Int |
应收金额 | Spay | int |
折扣 | Discount | int |
实收金额 | Rpay | int |
账目信息表AccountInfo
描述 | 字段 | 类型 |
账目编号 | Accountno | Int |
消费金额 | Pay | Int |
客户类型 | Ctype | char(4) |
点菜信息表OrderInfo
描述 | 字段 | 类型 |
客人编号 | Cusno | Int |
菜单编号 | Mno | Int |
客人、收银单、账目对应关系表C_C_A
描述 | 字段 | 类型 |
客人编号 | Cusno | Int |
收银单编号 | Chargeno | Int |
账目编号 | Acountno | Int |
价格信息表PriceInfo
描述 | 字段 | 类型 |
菜名 | Fname | varchar(20) |
菜肴编号 | Fno | smallint |
价格 | Price | smallint |
3.1.3表的设计
创建数据库:
create database inn;
创建表:
创建表CustomerInfo:
create table CustomerInfo (
Cusno int primary key,
Tableno smallint not null,
Cusnum smallint not null,
Custype char(4) not null,
check(Custype='普通' or Custype='VIP')
);
创建表FoodInfo2:
create table FoodInfo2(
Fname char(50) UNIQUE,
Fkind char(10) not null
);
创建表ChargeInfo:
create table ChargeInfo (
Chargeno int primary key,
Spay int,
Discount int,
Rpay int
);
创建表AccountInfo:
create table AccountInfo (
Accountno int primary key,
Pay int,
Ctype char(4)
);
创建表C_C_A:
create table C_C_A (
Cusno int primary key,
Chargeno int not null,
Accountno int not null
);
创建表PriceInfo:
create table PriceInfo(
Fno int primary key,
Fname char(20) not null,
Price int not null
);
创建表FoodList:
create table FoodList (
Mno int,
Fno int,
Fnum int not null,
Ftaste char(4),
primary key(Mno,Fno),
foreign key (Fno) references PriceInfo(Fno)
);
创建表OrderInfo:
create table OrderInfo (
Cusno int,
Mno int,
primary key (Cusno,Mno),
foreign key (Cusno) references CustomerInfo(Cusno)
);
3.1.4物理结构设计
创建索引:
create index index_PriceInfo on PriceInfo(Fno);
create index index_FoodList on FoodList(Mno);
create index index_OrderInfo on OrderInfo(Mno);
create index index_FoodInfo2 on FoodInfo2(Fname);
create index index_CustomerInfo on CustomerInfo(Cusno);
create index index_ChargeInfo on ChargeInfo(Chargeno);
create index index_C_C_A on C_C_A(Cusno);
create index index_AccountInfo on AccountInfo(Accountno);
创建视图:
create view Kitchen
as
select Mno,Fname,Fnum,Ftaste
from FoodList,PriceInfo;
create view Delivery
as
select Tableno,Fname,Fnum,Cusnum
from FoodList,CustomerInfo,OrderInfo,PriceInfo
where FoodList.Mno=OrderInfo.Mno and OrderInfo.Cusno=
CustomerInfo.Cusno and PriceInfo.Fno=FoodList.Fno;
3.1.5数据库实施
1、 插入数据:
插入数据到表FoodInfo:
insert into FoodInfo2 values('干锅千页豆腐','推荐');
insert into FoodInfo2 values('手撕包菜','素菜');
insert into FoodInfo2 values('水煮鱼片','荤菜');
insert into FoodInfo2 values('香干回锅肉','荤菜');
insert into FoodInfo2 values('油淋茄子','素菜');
插入数据到表PriceInfo:
insert into PriceInfo values(001,'干锅千页豆腐',16);
insert into PriceInfo values(002,'手撕包菜',6);
insert into PriceInfo values(003,'水煮鱼片',15);
insert into PriceInfo values(004,'香干回锅肉',10);
insert into PriceInfo values(005,'油淋茄子',6);
插入数据到顾客表:
insert into customerinfo values('01','1','5','vip');
insert into customerinfo values('02','2','4','普通');
insert into customerinfo values('04','1','5','vip');
insert into customerinfo values('04','1','5','vip');
insert into customerinfo values('05','1','5','vip');
insert into customerinfo values('06','1','5','vip');
insert into foodlist values('01','02','2','微辣');
insert into foodlist values('01','03','1','微辣');
insert into foodlist values('01','05','1','微辣');
insert into foodlist values('01','01','1','微辣');
insert into foodlist values('02','01','1','微辣');
insert into foodlist values('02','02','1','微辣');
insert into foodlist values('02','04','1','微辣');
创建触发器:
delimiter $$
create trigger DELETE_FOODINFO2 after delete
on FoodInfo2 for each row
begin
delete from PriceInfo where PriceInfo.Fname=Fname;
end$$
delimiter ;
创建存储:
create procedure p_s()
reads sql data
begin select * from priceinfo;
end$$
create procedure p_s2()
reads sql data
begin select * from foodinfo;
end$$
第4章 结束语
餐馆管理系统基本开发完毕。本系统所用到的知识中的大部分来自于《数据库系统概论》这本书。进行测试运行时,基本达到了目的。但由于时间仓促以及编程经验的不足和知识水平有限,系统存在的问题比较多,系统的功能太简单,可进行的操作太少,一些功能在实现起来也不太理想。
在本项目开发的过程中,我全面实践一个面向数据库的应用系统的开发过程,学习了很多有关的知识。一些以前没有学得很杂实的课程的内容,,经过一段时间的钻研,对与这些知识点的相关的背景,学习起来也越来越有兴趣。
由于我的经验不足及阅历颇浅,因此,在该系统的设计方面还有很多不足,我会在学习过程中,根据设计的具体要求不断的完善,争取使该系统慢慢趋向完美。
补充:E-R图(上边图被转码转成鬼样子了只能截图放这里了)