小型餐饮管理系统数据库设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章设计任务与要求
目的及意义:
此小型餐饮业管理系统的设计主要是为了方便管理,对于各个进出账目,支出和收入的管理便于系统化,在每月汇总计算中分析运营趋势和餐馆的发展方向进行一定的规划。
通过各个月的盈利进行对比,分析那种方式更适合餐馆的有利运营和更好地服务顾客。
实现对餐馆部各种管理的电子化、自动化,提高各个模块之间的办公效率,为高质量餐馆服务提供保证。
任务:
1.能够实现对该系统进行管理的人员的权限限制;
2.使餐馆能够及时并灵活的对菜品品种其价位等进行管理;
3.为餐馆提供从客户点餐到结算等一系列操作的服务,使之能简单易行、方便、
清楚地进行管理
第二章系统功能分析
一.功能需求:餐饮管理系统中主要包括对以下几种管理:账单管理,财务管理,订餐管理,菜品管理,系统管理。
(1)系统管理:系统管理包括用户名和密码,主要用于用户登陆界面登陆和查询。
(2)账单管理:账单管理包括账单号和餐台,每一个餐台对应一个一个账单号,通过餐台号的记录来对对应的餐台进行记账管理,即就是记录每一个餐台的消费金额。
账单管理是财务管理的一个小分支,是服务于财务管理的。
(3)财务管理:包括账单号,时间和账目。
账目用于记录账单号的消费金额及时间,以便用于结算和汇总。
每日的结算要通过对每个餐台号的消费金额汇总来记录,然后由每日的结算汇总得出每月的结算。
帐务系统功能的完整性。
一旦该系统正式运行,餐厅每日营业帐和全部往来客户帐务的操作结算都将依靠计算机,该系统面对当前餐饮业各种复杂的结算要求应具有很强的应变能力。
(4)订餐管理:订餐管理仅包括单价。
订餐管理是便于顾客订餐和账单管理时对各个菜品消费金额的记录,这样便于账单管理和财务汇总。
(5)菜品管理:菜品管理包括菜名,菜品类别和菜品品种。
菜品管理便于顾客点菜和记录各个餐台的消费记账,菜品品种也便于餐馆的食材采购。
二. 数据需求:账单管理中账单号是主键,每一个餐台对应一个账单号。
财务管理中账单号是主键,每一个账单号都有对应的时间和账目记录。
订餐管理中单价就是主键。
菜品管理中菜名是主键。
系统管理中用户名是主键。
三. 性能需求:该餐饮系统操作简单方便可适应各类中小型餐馆。
第三章系统功能模块设计
一. 在该系统功能分析的基础上,考虑PowerBuilder程序编制的特点,得到如下功
能模块图。
图1 系统功能模块图
二. 数据库设计
1. 概念结构设计
2. 逻辑结构设计
3. 数据库实施
1) 数据库及表结构的创建
设本系统使用的数据库名为小型餐饮业管理系统,根据已设计的关系模式及各模式的完整性要求,现在就可以在SQL Server 6.x数据库系统中实现这些逻辑结构。
下面是创建基本表的SQL语句:
/* ============================================================ */
/* Table: CAIPINGL */
/* ============================================================ */
create table CAIPINGL
(
CPGL_NAME char(20) not null,
CPGL_LEIBIE char(8) null ,
CPGL_PINGZHONG char(8) null ,
CPGL_DIANCAI integer null ,
constraint PK_CAIPINGL primary key (CPGL_NAME, CPGL_DANJIA)
)
go
/* ============================================================ */ /* Table: XTGL */ /* ============================================================ */ create table XTGL
(
USERNAME char(20) not null,
PASSWORD char(8) not null,
constraint PK_XTGL primary key (USERNAME, PASSWORD)
)
go
/* ============================================================ */ /* Table: ZHANGDAGL */ /* ============================================================ */ create table ZHANGDAGL
(
ZHANGDAN_NUMBER numeric not null,
ZHANGDAN_CANTAI numeric null ,
CAI_ZHANGDAN_NUMBER numeric null ,
constraint PK_ZHANGDAGL primary key (ZHANGDAN_NUMBER)
)
go
/* ============================================================ */ /* Index: RELATION_383_FK */ /* ============================================================ */ create index RELATION_383_FK on ZHANGDAGL (CAI_ZHANGDAN_NUMBER)
go
/* ============================================================ */ /* Table: CAIWUGL */ /* ============================================================ */ create table CAIWUGL
(
ZHANGDAN_NUMBER numeric not null,
CAIWU_TIME timestamp null ,
CAIWU_AMOUNT char(10) null ,
constraint PK_CAIWUGL primary key (ZHANGDAN_NUMBER)
)
go
/* Table: DINGCANGL */
/* ============================================================ */
create table DINGCANGL
(
ZHANGDAN_NUMBER numeric not null,
DCGL_NAME char(20) not null,
DCGL_DANJIA int not null,
constraint PK_DINGCANGL primary key (ZHANGDAN_NUMBER, DCGL_NAME, DCGL_DANJIA)
)
go
/* ============================================================ */
/* Index: RELATION_451_FK */
/* ============================================================ */
create index RELATION_451_FK on DINGCANGL (ZHANGDAN_NUMBER)
go
建立相关触发器,执行级联删除
* ============================================================ */
/* Database name: MODEL_1 */
/* DBMS name: Microsoft SQL Server 6.x */
/* Created on: 2010-1-21 18:15 */
/* ============================================================ */
/* Insert trigger "ti_caiwugl" for table "CAIWUGL" */
create trigger ti_caiwugl on CAIWUGL for insert as
begin
declare
numrows int,
numnull int,
errno int,
errmsg varchar(255)
select numrows = rowcount
if numrows = 0
return
/* Parent "ZHANGDAGL" must exist when inserting a child in "CAIWUGL" */
if update(ZHANGDAN_NUMBER)
begin
if (select count(*)
from ZHANGDAGL t1, inserted t2
where t1.ZHANGDAN_NUMBER = t2.ZHANGDAN_NUMBER) != numrows
begin
select errno = 30002,
errmsg = 'Parent does not exist in "ZHANGDAGL". Cannot create child in "CAIWUGL ".'
end
return
/* Errors handling */
error:
raiserror errno errmsg
rollback transaction
end
go
/* Update trigger "tu_caiwugl" for table "CAIWUGL" */
create trigger tu_caiwugl on CAIWUGL for update as
begin
declare
numrows int,
numnull int,
errno int,
errmsg varchar(255)
select numrows = rowcount
if numrows = 0
return
/* Parent "ZHANGDAGL" must exist when updating a child in "CAIWUGL" */
if update(ZHANGDAN_NUMBER)
begin
if (select count(*)
from ZHANGDAGL t1, inserted t2
where t1.ZHANGDAN_NUMBER = t2.ZHANGDAN_NUMBER) != numrows
begin
select errno = 30003,
errmsg = '"ZHANGDAGL" does not exist. Cannot modify child in "CAIWUGL".' goto error
end
end
/* Modify parent code of "CAIWUGL" for all children in "ZHANGDAGL" */
if update(ZHANGDAN_NUMBER)
begin
update ZHANGDAGL
set CAI_ZHANGDAN_NUMBER = i1.ZHANGDAN_NUMBER
from ZHANGDAGL t2, inserted i1, deleted d1
where t2.CAI_ZHANGDAN_NUMBER = d1.ZHANGDAN_NUMBER
and (i1.ZHANGDAN_NUMBER != d1.ZHANGDAN_NUMBER)
end
/* Errors handling */
error:
raiserror errno errmsg
rollback transaction
end
go
/* Delete trigger "td_caiwugl" for table "CAIWUGL" */ create trigger td_caiwugl on CAIWUGL for delete as
begin
declare
numrows int,
errno int,
errmsg varchar(255)
select numrows = rowcount
if numrows = 0
return
/* Delete all children in "ZHANGDAGL" */
delete ZHANGDAGL
from ZHANGDAGL t2, deleted t1
where t2.CAI_ZHANGDAN_NUMBER = t1.ZHANGDAN_NUMBER
return
/* Errors handling */
error:
raiserror errno errmsg
rollback transaction
end
go
/* Insert trigger "ti_dingcangl" for table "DINGCANGL" */ create trigger ti_dingcangl on DINGCANGL for insert as begin
declare
numrows int,
numnull int,
errno int,
errmsg varchar(255)
select numrows = rowcount
if numrows = 0
return
/* Parent "ZHANGDAGL" must exist when inserting a child in "DINGCANGL" */
if update(ZHANGDAN_NUMBER)
begin
if (select count(*)
from ZHANGDAGL t1, inserted t2
where t1.ZHANGDAN_NUMBER = t2.ZHANGDAN_NUMBER) != numrows
begin
select errno = 30002,
errmsg = 'Parent does not exist in "ZHANGDAGL". Cannot create child in "DINGCAN GL".'
goto error
end
end
return
/* Errors handling */
error:
raiserror errno errmsg
rollback transaction
end
go
/* Update trigger "tu_dingcangl" for table "DINGCANGL" */
create trigger tu_dingcangl on DINGCANGL for update as
begin
declare
numrows int,
numnull int,
errno int,
errmsg varchar(255)
select numrows = rowcount
if numrows = 0
return
/* Parent "ZHANGDAGL" must exist when updating a child in "DINGCANGL" */
if update(ZHANGDAN_NUMBER)
begin
if (select count(*)
from ZHANGDAGL t1, inserted t2
where t1.ZHANGDAN_NUMBER = t2.ZHANGDAN_NUMBER) != numrows
begin
select errno = 30003,
errmsg = '"ZHANGDAGL" does not exist. Cannot modify child in "DINGCANGL".'
goto error
end
return
/* Errors handling */
error:
raiserror errno errmsg
rollback transaction
end
go
/* Insert trigger "ti_zhangdagl" for table "ZHANGDAGL" */
create trigger ti_zhangdagl on ZHANGDAGL for insert as
begin
declare
numrows int,
numnull int,
errno int,
errmsg varchar(255)
select numrows = rowcount
if numrows = 0
return
/* Parent "CAIWUGL" must exist when inserting a child in "ZHANGDAGL" */
if update(CAI_ZHANGDAN_NUMBER)
begin
select numnull = (select count(*)
from inserted
where CAI_ZHANGDAN_NUMBER is null)
if numnull != numrows
if (select count(*)
from CAIWUGL t1, inserted t2
where t1.ZHANGDAN_NUMBER = t2.CAI_ZHANGDAN_NUMBER) != numrows - numnull
begin
select errno = 30002,
errmsg = 'Parent does not exist in "CAIWUGL". Cannot create child in "ZHANGDAGL ".'
goto error
end
end
return
/* Errors handling */
error:
raiserror errno errmsg
end
go
/* Update trigger "tu_zhangdagl" for table "ZHANGDAGL" */
create trigger tu_zhangdagl on ZHANGDAGL for update as
begin
declare
numrows int,
numnull int,
errno int,
errmsg varchar(255)
select numrows = rowcount
if numrows = 0
return
/* Parent "CAIWUGL" must exist when updating a child in "ZHANGDAGL" */
if update(CAI_ZHANGDAN_NUMBER)
begin
select numnull = (select count(*)
from inserted
where CAI_ZHANGDAN_NUMBER is null)
if numnull != numrows
if (select count(*)
from CAIWUGL t1, inserted t2
where t1.ZHANGDAN_NUMBER = t2.CAI_ZHANGDAN_NUMBER) != numrows - numnull
begin
select errno = 30003,
errmsg = '"CAIWUGL" does not exist. Cannot modify child in "ZHANGDAGL".' goto error
end
end
/* Modify parent code of "ZHANGDAGL" for all children in "CAIWUGL" */
if update(ZHANGDAN_NUMBER)
begin
update CAIWUGL
set ZHANGDAN_NUMBER = i1.ZHANGDAN_NUMBER
from CAIWUGL t2, inserted i1, deleted d1
where t2.ZHANGDAN_NUMBER = d1.ZHANGDAN_NUMBER
and (i1.ZHANGDAN_NUMBER != d1.ZHANGDAN_NUMBER)
end
/* Modify parent code of "ZHANGDAGL" for all children in "DINGCANGL" */
if update(ZHANGDAN_NUMBER)
begin
update DINGCANGL
set ZHANGDAN_NUMBER = i1.ZHANGDAN_NUMBER
from DINGCANGL t2, inserted i1, deleted d1
where t2.ZHANGDAN_NUMBER = d1.ZHANGDAN_NUMBER
and (i1.ZHANGDAN_NUMBER != d1.ZHANGDAN_NUMBER)
end
return
/* Errors handling */
error:
raiserror errno errmsg
rollback transaction
end
go
/* Delete trigger "td_zhangdagl" for table "ZHANGDAGL" */
create trigger td_zhangdagl on ZHANGDAGL for delete as
begin
declare
numrows int,
errno int,
errmsg varchar(255)
select numrows = rowcount
if numrows = 0
return
/* Delete all children in "CAIWUGL" */
delete CAIWUGL
from CAIWUGL t2, deleted t1
where t2.ZHANGDAN_NUMBER = t1.ZHANGDAN_NUMBER
/* Delete all children in "DINGCANGL" */
delete DINGCANGL
from DINGCANGL t2, deleted t1
where t2.ZHANGDAN_NUMBER = t1.ZHANGDAN_NUMBER
return
/* Errors handling */
error:
raiserror errno errmsg
rollback transaction
end
go
2) 数据库前台的设计
根据数据库的设计,该餐饮业管理系统可以分成四个子模块:
▪订餐管理根据客户的点菜单,采用checkbox从已有菜品中选定菜品,并记录。
▪菜品管理用户可以根据餐馆现行情况动态管理菜品,可以对菜品进行品种、类别的分类,并可以即时调整菜价;对菜品的调整,如添加删除,会级联添加和删除订餐管理中菜单一栏中的容。
▪账单管理用户根据现餐馆的用餐情况对各餐台进行管理,同时可以查询客户的点餐情况。
▪财务管理记录餐馆的营业情况,按时间、账单号进行管理,同时可用于客户结账。
第四章运行结果与测试
一.系统运行
1. 系统登录界面
用户输入已注册过的用户名和密码,非法用户不得进入系统。
2. 总系统界面
用户根据需要对系统选择相应功能,进行模块化管理。
3. 账单管理系统界面
一个账单号对应一个客户,通过账单号对各个客户的消费进行管理,可进行添加删除操作,并可对各个客户的消费情况进行查询。
4. 订餐管理系统
用户依据客户的点菜单,以打勾方式,从右边的菜单框中选择菜品输入到左边订餐框中,从而对客户的消费进行记录。
5. 菜品管理管理系统
用户根据需要可即时调整菜品的菜名、品种、类别、单价,同时可以进行查询当前菜品情况。
6. 财务管理系统
记录各个客户的消费时间(结账时间)、账单号、账目,方便日后进行财务统计,和核对;可进行添加、删除、查询操作。
二.调试中出现的问题说明与解决
1. 在做订餐管理系统时,出现订餐结果无法输入到数据库的现象。
经检查发现是主键设置出现问题,修改后系统正常运行。
2. 做账目管理系统时,时间属性无法输入,经检查,是在概念模型设置时所选择的格式不当导致SQL语句生成出现问题,修改后系统正常运行。
参考资料:
《数据库原理与应用》作者:高荣芳
《PowerBuilder数据库开发技术》作者:佳友。