餐饮管理系统1界面图+源代码.docx
《餐饮管理系统1界面图+源代码.docx》由会员分享,可在线阅读,更多相关《餐饮管理系统1界面图+源代码.docx(36页珍藏版)》请在冰豆网上搜索。
餐饮管理系统1界面图+源代码
餐饮管理系统
1、前言
在餐饮业务竞争越来越激烈的今天,如何提高服务质量,其管理能力显的越来越重要。
尤其是对一些大的餐饮店,餐饮店内部服务项目越多,管理难度越大,既要处理前台又要处理后台的工作,所以一个好的管理系统可以提高酒店的管理水平也可以大幅度提高酒店服务水平。
1.1目的
随着当今社会信息化的日新月异的发展,计算机应用已经渗透到日常工作的许多方面无论是其自身还是所发挥的作用,计算机都标志着一种高科技、高效率和高水平。
为了企业创先进、争一流,为了企业的发展一套好的系统必不可少.现在餐饮业发展速度飞快,要想在激烈的社会竞争有一席之地,好的服务是最基本的保障,此次开发的餐饮管理系统就是针对现代化社会管理和要求,在服务上提高自己的效率,使自己的公司立于不败之地.
1.2定义
餐饮管理系统,SQL,E-R图
1.3参考资料
《数据库应用系统开发技术》朱如龙刘焰机械出版社2004年8月
《VC++与SQL2000开发技术》汪晓平钟军人民邮电出版社2004年8月
2、系统设计
2.1系统目标设计
餐饮管理系统的主要目标是实现对酒店内部各种管理的电子化、自动化,提高各个模块之间的办公效率,为高质量餐饮服务提供保证。
2.2开发设计思想
餐厅系统是按照国内餐饮行业最新要求开发的全心概念的信息管理系统。
该系统将餐厅收银、往来帐务结算及销售情况统计工作在单计算机或网络系统中完成。
主要特点包括:
*代码菜谱编制,方便统计,方便输入;
*开单、改单、结算、打印、用户界面方便友好;
*系统专设往来账、内部账,结算方式灵活多样,结算消息详尽;
*系统可同前台系统衔接,查询客人信贷情况,往前台客人帐户转账;
*报表真实,实用性强,如:
收银报表汇总收银、支票、信用卡、转帐等情况;菜肴销售报表汇总各种菜肴的日、月销售量;员工销售统计表,可打印值台人员销售业绩核实报表提供依据。
*账务系统共讷讷感的完整性。
一旦该系统正式运行,餐厅每日的营业账和全部往来客户的账务操作结算都将依靠计算机,该系统面对当前餐厅餐饮业各种负复杂的结算要求应具有很强的应变能力。
为此本系统为适应拥护的要求,设计了完整的转帐功能。
*帐务系统的可扩充性。
由于餐厅业务的扩展,势必要求帐务结算系统随之扩展,在不修改程序的前提下,本系统可在相当可观的范围内,由用户扩展其营业项目和结算手段。
*帐务操作数据的可校验性。
本系统提供了多种方便的查询,校核和统计功能,共帐务操作人员和专职人员自校对帐务数据。
如当班收银员下班的时候直接统计当班期间的输单、收银情况。
为餐饮企业管理人员提供及时准确的经营状况和帐务信贷系统情况。
餐厅系统需要完成的功能有以下几点:
*定餐管理:
定餐修改、定餐取消、定金处理、定餐统计、定餐查询、定餐报表。
*收款管理:
立帐、校费明细录入、特色菜自定义、追加消费、消费修改、消费取消、加位、更改台号、折扣设定、消费服务设定、帐单打印、现付结算和房帐转录。
*交班管理:
统计当班数据、为下班操作做准备、当班帐务流水报表。
*系统报表:
餐饮销售分析报表、每菜销售统计报表、营业收入报表、每菜销售统计日报表和当班特色菜报表。
*系统维护:
餐厅代码设定、餐台号码以及贵宾房设定
特色分类设定、特色编码设定、折扣设定、货币设定、服务费率设定、营业统计项目设定、成本统计项目设定、使用者权限维护、系统备份、系统恢复。
*餐饮成本核算:
成本统计项目设定、成本管理。
2.3系统功能模块设计
在系统功能分析的基础上,考虑VisualC++的编程特点,得到如下面功能模块图。
图1-1为餐厅系统餐饮系统的功能模块图。
餐饮系统功能图
由上面的餐饮系统的功能分析,可以看出一个餐饮管理系统是一个复杂的系统工程,涉及到系统的各个方面。
由于篇幅的问题就不具体的介绍了。
3、数据库设计
在数据库系统开始设计的时候应该尽量考虑全面,尤其应该仔细考虑用户的各种需求,避免浪费不必要的人力和物力。
3.1数据库需求分析
在仔细调查餐饮日产管理过程的基础上,得到本系统所处理的数据流程图如图1-2所示。
餐饮管理数据流程图
针对本市里,通过对餐饮系统管理系统的内容和数据流程分析,设计的数据项和数据结构如下。
*菜谱信息。
包括的数据项有菜谱号、名称、所属价格、种类、描述等。
*值班员信息。
包括数据项有值班员的姓名和口令。
*荣誉客户信息。
包括的数据项有客户号、客户姓名、年龄、性别、职称、联系电话、工作单位等。
*定餐信息。
包括的数据项有客户号、桌号、结算日期、打折情况和总计等。
有了上面的数据结构、数据项和数据流程,就能进行下面的数据库设计。
3.2数据库概念设计
本实例根据上面的设计规划出的实体有:
菜谱实体、值班员实体、客户实体、定餐实体和结算实体。
各个实体具体的描叙E-R图及其之间的关系描述如下。
图1-3为菜谱实体E-R图。
菜谱实体E-R图
图1-4为值班员实体E-R图
值班员实体E-R图
图1-5为客户实体E-R图
客户实体E-R图
图1-6为订餐信息实体E-R图
订餐信息实体E-R图
图1-7为结算信息实体E-R图
实体和实体之间的关系E-R图如图1-8所示
实体之间的关系E-R
3.3数据库逻辑结构设计
在上面的实体以及实际实体之间关系的基础上,形成数据库中表格以及各个表格之间的关系。
餐饮管理系统数据库中各个表格的设计结果如下面的几个表格所示。
每个表格表示在数据库中的一个表
表1-1为值班员ZSP
表1-1值班员表ZSP
列名
数据类型
可否为空
说明
ZSP_NAME
VARCHAR2(20)
NOTNULL
值班员(主键)
ZSP_PSWD
VARCHAR2(10)
NOTNULL
口令
表1-2为菜谱信息表CP
表1-2菜谱信息表CP
列名
数据类型
可否为空
说明
CP_NO
VARCHAR2(10)
NOTNULL
菜谱号(主键)
CP_NAME
VARCHAR2(20)
NULL
菜名称
CP_KIND
VARCHAR2(20)
NULL
种类
CP_PRICE
NUMBER(10)
NULL
价格
CP_DETAIL
VARCHAR2(50)
NULL
描述
表1-3为荣誉客户信息表KH
表1-3荣誉客户信息表KH
列名
数据类型
可否为空
说明
KH_NO
VARCHAR2(10)
NOTNULL
客户号(主键)
KH_NAME
VARCHAR2(20)
NULL
姓名
KH_GENDER
VARCHAR2
(2)
NULL
性别
KH_YEAR
NUMBER(3)
NULL
年龄
KH_JOB
VARCHAR2(20)
NULL
职务
KH_TEL
VARCHAR2(20)
NULL
联系电话
KH_COMPANY
VARCHAR2(20)
NULL
工作单位
表1-4为定餐信息表
表1-4定餐信息表
列名
数据类型
可否为空
说明
DC_DESK
VARCHAR2(20)
NOTNULL
桌号(主键)
CP_NO
VARCHAR2(10)
NOTNULL
菜名号(主键)
CP_NAME
VARCHAR2(20)
NULL
菜名称
DC_NUMBER
NUMBER(3)
NULL
数量
DC_DATE
DATE
NULL
定餐日期末(主键
表1-5为结算信息表JS
表1-5结算信息表JS
列名
数据类型
可否为空
说明
KH_NO
VARCHAR2(20)
NOTNULL
客户号(主键)
DC_DESK
VARCHAR2(20)
NULL
桌号
JS_DZ
NUMBER(3
NULL
打折情况
TOTAL
NUMBER(5)
NULL
总计
JS_DATE
DATE
NOTNULL
日期
usemaster
GO%droptheexistdatabase
ifexists(select*fromdbo.sysdatabaseswherename='RMS')
dropdatabaseRMS
GO
createdatabaseRMS%createdatabase
GO
useRMS
GO%dropexisttables
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'READERS')
andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptableCP
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'POPEDOM')
andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptableZBY
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'BOOKS')
andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptableKH
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'BOOKREADERS')
andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptableDC
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'MANAGERS')
andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptableJS
GO
CREATETABLE“JD”.CP
(
CP_NOVARCHAR2(10)NOTNULL,
CP_NAMEVARCHAR2(20)NULL,
CP_KINDVARCHAR(10)NULL,
CP_PRICENUMBER(10)NULL,
CP_DETAILVARCHAR2(50)NULL,
CONSTRAINTCP_NO_PKPRIMARYKEY(CP_NO)
)
TABLESPACE”USER_DATA”;
CREATETABLE“JD”.ZBY
(
ZBY_NAMEVARCHAR2(20)NULL,
ZBY_PSWDVARCHAR2(10)NULL,
CONSTRAINTZBY_NAME_PKPRIMARYKEY(ZBY_NAME)
)
TABLESPACE”USER_DATA”;
CREATETABLE“JD”.KH
(
KH_NOVARCHAR2(10)NOTNULL,
KH_NAMEVARCHAR2(20)NULL,
KH_GENDERVARCHAR2
(2)NULL,
KH_YEARVARCHAR(3)NULL,
KH_JOBVARCHAR2(20)NULL,
KH_TELVARCHAR2(20)NULL,
KH_COMPANYVARCHAR2(20)NULL,
CONSTRAINTKH_NO_PKPRIMARYKEY(KH_NO)
)
TABLESPACE”USER_DATA”;
CREATETABLE“JD”.DC
(
DC_DESKVARCHAR2(10)NOTNULL,
CP_NOVARCHAR2(10)NOTNULL,
CP_NAMEVARCHAR2(20)NULL,
DC_NUMBERNUMBER(3)NULL,
DC_DATEDATENOTNULL,
CONSTRAINTDC_PK
PRIMARYKEY(DC_DESK,CP_NO,DC_DATE)
)
TABLESPACE”USER_DATA”;
CREATETABLE“JD”.JS
(
KH_NOVARCHAR2(20)NOTNULL,
DC_DESKVARCHAR2(20)NULL,
JS_DZNUMBER(3)NULL,
TOTALNUMBER(5)NULL,
JS_DATEDATENOTNULL,
CONSTRAINTJS_PK
PRIMARYKEY(KH_NO,JS_DATE)
)
TABLESPACE”USER_DATA”;
3.4数据字典
数据项
数据项描述={数据项名,数据项含义说明,别名,数据类型,
长度,取值范围,取值含义,与其他数据项的逻辑关系}
值班员数据项描述
数据项
含义说明
别名
类型
长度
可否为空
取值含义
与其它数据项的逻辑关系
用户名
唯一标识
名字
Char
20
NOTNULL
密码
varChar
10
NOTNULL
权限
管理权力
Varchar
50
NOTNULL
菜谱信息数据项描述
数据项
含义说明
别名
数据类型
长度
可否为空
取值含义
与其它数据项
的逻辑关系
菜谱编号
唯一标识
名字
Varchar
20
NOTNULL
菜名称
varChar
20
NOTNULL
种类
Varchar
20
NULL
价格
Number
10
NULL
描述
Varchar
50
NULL
荣誉客户信息数据项描述
数据项
含义说明
别名
数据类型
长度
可否为空
取值含义
与其它数据项
的逻辑关系
客户号
唯一标识
名字
Varchar
10
NOTNULL
姓名
Varchar
20
NULL
性别
Varchar
2
NULL
年龄
Number
3
NULL
职务
Vachar
0
NULL
联系电话
Vachar
20
NULL
工作单位
Vachar
20
NULL
订餐信息数据项描述
数据项
含义说明
别名
数据类型
长度
可否为空
取值含义
与其它数据项
的逻辑关系
桌号
唯一标识
Varchar
20
NOTNULL
菜谱号
唯一标识
varChar
10
NOTNULL
菜名称
Varchar
20
NULL
数量
Number
3
NULL
订餐日期
唯一标识
Date
NULL
结算信息数据项描述
数据项
含义说明
别名
数据类型
长度
可否为空
取值含义
与其它数据项
的逻辑关系
客户号
唯一标识
Varchar
20
NOTNULL
桌号
varChar
20
NULL
打折情况
Varchar
3
NULL
总计
Number
5
NULL
日期
Date
NOTNULL
用户数据结构描述
数据结构名
用户
含义说明
定义了一个用户的所有有关的信息
组成
姓名、性别、客户号、年龄、联系电话、工作单位等
3.5数据库物理结构设计
数据库物理设计指确定数据库在物理设备上的存储结构与存取方法。
确定数据库的物理结构:
是否聚集存储,如何建立索引,数据的存放位置,确定系统配置等。
介于本系统数据库的简单性,我们没有采用聚集存储之类的结构设计。
4、功能模块设计
4.1设计登录和口令管理模块
在未登录时,主对话框中的按钮,除了“登录”“退出”“帮助”“关于”等项,全是不可用的。
为达到这一效果,在CRMSDlg:
:
OnInitDialog()中加入如下代码:
GetDlgItem(IDC_BTN_UPDPWD)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_DC)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_JS)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_KH)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_CP)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_ZBY)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_VIEWDC)->EnableWindow(FALSE);
然后在资源编辑器加入如图所示的登录对话框。
主对话框的事件处理函数CRMSDlg:
:
OnBtnLogin()的代码如下,它来处理登陆事务。
若成功,则使所有的按钮变为可用,示意登录成功。
voidCRMSDlg:
:
OnBtnLogin()
{
CDlgLogindlg;
dlg.DoModal();
try
{
CStringsql_;
sql_.Format("SELECTZBY_NAMEFROMZBYWHEREZBY_NAME='%s'ANDZBY_PSWD='%s'",
dlg.m_name,dlg.m_pswd);
_bstr_tsql=sql_;
_RecordsetPtrpRst;
pRst=m_DBCnt->Execute(sql,NULL,adCmdText);
if(!
pRst->adoEOF)
{
MessageBox("登录成功!
");
GetDlgItem(IDC_BTN_UPDPWD)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_DC)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_JS)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_KH)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_CP)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_ZBY)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_VIEWDC)->EnableWindow(TRUE);
}else
{
MessageBox("登录失败!
");
}
pRst->Close();
}
catch(_com_error&e)
{
AfxMessageBox(e.ErrorMessage());
return;
}
}
voidCRMSDlg:
:
OnBtnUpdpwd()
{
CDlgUpdPwddlg;
dlg.DoModal();
if(dlg.m_newpswd!
=dlg.m_newpswd2)
{
MessageBox("两次输入新密码不一致!
");
return;
}
下面是一段SQL语句:
sql_format(“SELECTZBYNAMEFORMZBYWHEREZBYNAME+’%s’”
“ANDZBY_PSWD=’%s’”dlg.m_name,dlg.m_pswd);
这里并没有取出ZBY表中的所有字段(ZBY_NAME和ZBY_PSWD),然后把密码字段和用户的输入作比较来决定登录的与否;而是只取出了值班员名字(ZBY_NAME),密码的校验放在数据库服务器端进行。
这主要是基于安全考虑。
如果没有确实的需要,就竟量不从数据库里取用户密码这种敏感数据。
虽然这只是一个细节,但是很多安全漏洞都是又对这种细节的忽视应起的。
登录成功后可以单击“修改口令”按钮激活“修改口令”界面如图所示。
这部分事务的处理代码和登录处理类时,只是更为繁琐。
所以只给代码,
voidCRMSDlg:
:
OnBtnUpdpwd()
{
CDlgUpdPwddlg;
dlg.DoModal();
if(dlg.m_newpswd!
=dlg.m_newpswd2)
{
MessageBox("两次输入新密码不一致!
");
return;
}
try
{
CStringsql_;
sql_.Format("SELECTZBY_NAMEFROMZBYWHEREZBY_NAME='%s'ANDZBY_PSWD='%s'",
dlg.m_name,dlg.m_oldpswd);
_bstr_tsql=sql_;
_RecordsetPtrpRst;
pRst=m_DBCnt->Execute(sql,NULL,adCmdText);
if(pRst->adoEOF)
{
MessageBox("密码错误!
");
pRst->Close();
return;
}
pRst->Close();
sql_.Format("UpdateZBYSETZBY_PSWD='%s'WHEREZBY_NAME='%s'",
dlg.m_newpswd,dlg.m_name);
sql=sql_;
m_DBCnt->Execute(sql,NULL,adCmdText);
MessageBox("修改密码成功!
");
}
catch(_com_error&e)
{
AfxMessageBox(e.ErrorMessage());
return;
}
}
4.2设计值班员管理模块
下面开始设计值班员表(ZBY0的管理界面。
在资源编辑器中加入一个对话框,用ClassWizard为这个对话框生成一个类,名为CDlgViewZBY.在CRMSDlg的按钮事件处理函数中加入这样的代码来激活这个对话框。
voidCRMSDlg:
:
OnBtnZby()
{
CDlgViewZBYdlg;
ShowWindow(SW_HIDE);
dlg.DoModal();
ShowWindow(SW_SHOW);
}
这个模块,我们采用ADO的ActiveX控件来实现对数据库表格的管理。
4.3设计菜谱管理模块
不同的用户需要不同界面每个窗口都需要和数据库连接,这一浪费了资源,也降低了系统性能,所以好的用户需要一个好的菜谱管理模块。
此对话框设计如下图所示。
这里用一个列表控件显示读取的数据记录。
在C