餐饮管理系统(1)界面图+源代码
餐饮管理系统
1、前言
在餐饮业务竞争越来越激烈的今天,如何提高服务质量,其管理能力显的越来越重要。尤其是对一些大的餐饮店,餐饮店内部服务项目越多,管理难度越大,既要处理前台又要处理后台的工作,所以一个好的管理系统可以提高酒店的管理水平也可以大幅度提高酒店服务水平。
目的
随着当今社会信息化的日新月异的发展,计算机应用已经渗透到日常工作的许多方面无论是其自身还是所发挥的作用,计算机都标志着一种高科技、高效率和高水平。为了企业创先进、争一流,为了企业的发展一套好的系统必不可少.现在餐饮业发展速度飞快,要想在激烈的社会竞争有一席之地,好的服务是最基本的保障,此次开发的餐饮管理系统就是针对现代化社会管理和要求,在服务上提高自己的效率,使自己的公司立于不败之地.
定义
餐饮管理系统,SQL,E-R图
参考资料
:
《数据库应用系统开发技术》朱如龙刘焰机械出版社2004年8月
《VC++与SQL2000开发技术》汪晓平钟军人民邮电出版社2004年8月2、系统设计
系统目标设计
餐饮管理系统的主要目标是实现对酒店内部各种管理的电子化、自动化,提高各个模块之间的办公效率,为高质量餐饮服务提供保证。
~
开发设计思想
餐厅系统是按照国内餐饮行业最新要求开发的全心概念的信息管理系统。该系统将餐厅收银、往来帐务结算及销售情况统计工作在单计算机或网络系统中完成。主要特点包括:*代码菜谱编制,方便统计,方便输入;
*开单、改单、结算、打印、用户界面方便友好;
*系统专设往来账、内部账,结算方式灵活多样,结算消息详尽;
*系统可同前台系统衔接,查询客人信贷情况,往前台客人帐户转账;
*报表真实,实用性强,如:收银报表汇总收银、支票、信用卡、转帐等情况;菜肴销
售报表汇总各种菜肴的日、月销售量;员工销售统计表,可打印值台人员销售业绩核实报表提供依据。
*账务系统共讷讷感的完整性。一旦该系统正式运行,餐厅每日的营业账和全部往来客户的账务操作结算都将依靠计算机,该系统面对当前餐厅餐饮业各种负复杂的结算要求应具有很强的应变能力。为此本系统为适应拥护的要求,设计了完整的转帐功能。
\
*帐务系统的可扩充性。由于餐厅业务的扩展,势必要求帐务结算系统随之扩展,在不修改程序的前提下,本系统可在相当可观的范围内,由用户扩展其营业项目和结算手段。
*帐务操作数据的可校验性。本系统提供了多种方便的查询,校核和统计功能,共帐务操作人员和专职人员自校对帐务数据。如当班收银员下班的时候直接统计当班期间的输单、收银情况。为餐饮企业管理人员提供及时准确的经营状况和帐务信贷系统情况。
餐厅系统需要完成的功能有以下几点:
*定餐管理:定餐修改、定餐取消、定金处理、定餐统计、定餐查询、定餐报表。
*收款管理:立帐、校费明细录入、特色菜自定义、追加消费、消费修改、消费取消、加位、更改台号、折扣设定、消费服务设定、帐单打印、现付结算和房帐转录。
*交班管理:统计当班数据、为下班操作做准备、当班帐务流水报表。
*系统报表:餐饮销售分析报表、每菜销售统计报表、营业收入报表、每菜销售统计日报表和当班特色菜报表。
*系统维护:餐厅代码设定、餐台号码以及贵宾房设定
》
特色分类设定、特色编码设定、折扣设定、货币设定、服务费率设定、营业统计项目设定、成本统计项目设定、使用者权限维护、系统备份、系统恢复。
*餐饮成本核算:成本统计项目设定、成本管理。
系统功能模块设计
在系统功能分析的基础上,考虑Visual C++的编程特点,得到如下面功能模块图。
图1-1为餐厅系统餐饮系统的功能模块图。
|
餐饮系统功能图
&
由上面的餐饮系统的功能分析,可以看出一个餐饮管理系统是一个复杂的系统工程,涉及到
系统的各个方面。由于篇幅的问题就不具体的介绍了 。
3、数据库设计
在数据库系统开始设计的时候应该尽量考虑全面,尤其应该仔细考虑用户的各种需求,避免浪费不必要的人力和物力。
数据库需求分析
在仔细调查餐饮日产管理过程的基础上,得到本系统所处理的数据流程图如图1-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
数据库逻辑结构设计
在上面的实体以及实际实体之间关系的基础上,形成数据库中表格以及各个表格之间的关系。
餐饮管理系统数据库中各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的一个表
表1-1为值班员ZSP
表1-1 值班员表ZSP
表1-2为菜谱信息表CP
表1-3 荣誉客户信息表KH
~
表1-4为定餐信息表
表1-4 定餐信息表
表1-5为结算信息表JS
表1-5 结算信息表JS
'
数据字典
数据项
数据项描述={数据项名,数据项含义说明,别名,数据类型,
长度,取值范围,取值含义,与其他数据项的逻辑关系}
.
值班员数据项描述
菜谱信息数据项描述
荣誉客户信息数据项描述
订餐信息数据项描述
结算信息数据项描述
用户数据结构描述
数据结构名用户
含义说明"
定义了一个用户的所有有关的信息
组成姓名、性别、客户号、年龄、联系电话、工作单位等
数据库物理结构设计
数据库物理设计指确定数据库在物理设备上的存储结构与存取方法。
确定数据库的物理结构:是否聚集存储,如何建立索引,数据的存放位置,确定系统配置等。介于本系统数据库的简单性,我们没有采用聚集存储之类的结构设计。
:
4、功能模块设计
设计登录和口令管理模块
在未登录时,主对话框中的按钮,除了“登录”“退出”“帮助”“关于”等项,全是不可用的。为达到这一效果,在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()的代码如下,它来处理登陆事务。若成功,则使所有的按钮变为可用,示意登录成功。
void CRMSDlg::OnBtnLogin()
{
{
CDlgLogin dlg;
try
{
CString sql_;
("SELECT ZBY_NAME FROM ZBY WHERE ZBY_NAME='%s' AND ZBY_PSWD='%s'", , ;
~
_bstr_t sql = sql_;
_RecordsetPtr pRst;
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());
return;
(
}
}
void CRMSDlg::OnBtnUpdpwd()
{
CDlgUpdPwd dlg;
();
.
{
MessageBox("两次输入新密码不一致!");
return;
}
下面是一段SQL语句:
sql_format(“SELECT ZBY NAME FORM ZBY WHERE ZBY NAME+’%s’”
;
“AND ZBY_PSWD=’%s’”,;
这里并没有取出ZBY表中的所有字段(ZBY_NAME和ZBY_PSWD),然后把密码字段和用户的输入作比较来决定登录的与否;而是只取出了值班员名字(ZBY_NAME),密码的校验放在数据库服务器端进行。这主要是基于安全考虑。如果没有确实的需要,就竟量不从数据库里取用户密码这种敏感数据。虽然这只是一个细节,但是很多安全漏洞都是又对这种细节的忽视应起的。
登录成功后可以单击“修改口令”按钮激活“修改口令”界面如图所示。
这部分事务的处理代码和登录处理类时,只是更为繁琐。所以只给代码,
void CRMSDlg::OnBtnUpdpwd()
{
CDlgUpdPwd dlg;
。
();
if !=
{
MessageBox("两次输入新密码不一致!");
return;
}
}
try
{
CString sql_;
("SELECT ZBY_NAME FROM ZBY WHERE ZBY_NAME='%s' AND ZBY_PSWD='%s'",
, ;
_bstr_t sql = sql_;
_RecordsetPtr pRst;
—
pRst = m_DBCnt->Execute(sql, NULL, adCmdText);
if (pRst->adoEOF)
{
MessageBox("密码错误!");
pRst->Close();
return;
}
pRst->Close();
{
("Update ZBY SET ZBY_PSWD='%s' WHERE ZBY_NAME='%s'",
, ;
sql = sql_;
m_DBCnt->Execute(sql, NULL, adCmdText);
MessageBox("修改密码成功!");
…
}
catch(_com_error& e)
{
AfxMessageBox());
return;
}
}
设计值班员管理模块
—
下面开始设计值班员表(ZBY0的管理界面。
在资源编辑器中加入一个对话框,用ClassWizard 为这个对话框生成一个类,名为CDlgViewZBY.在CRMSDlg 的按钮事件处理函数中加入这样的代码来激活这个对话框。
void CRMSDlg::OnBtnZby()
{
CDlgViewZBY dlg;
ShowWindow(SW_HIDE);
();
ShowWindow(SW_SHOW);
…
}
这个模块,我们采用ADO的ActiveX 控件来实现对数据库表格的管理。
设计菜谱管理模块
不同的用户需要不同界面每个窗口都需要和数据库连接,这一浪费了资源,也降低了系统性能,所以好的用户需要一个好的菜谱管理模块。此对话框设计如下图所示。
这里用一个列表控件显示读取的数据记录。在CDlgViewCP::OnInitDialog()中这个控件(m_list)进行初始化。
BOOL CDlgViewCP::OnInitDialog()
{
CDialog::OnInitDialog();
(0,"菜谱号");
(1,"菜名");
(2,"种类");
(3,"价格");
(4,"备注");
RECT rect;
(&rect);
int wid = - ;
(0,wid/5);
(1,wid/5);
(2,wid/5);
(3,wid/5);
(4,wid/5);
(LVS_EX_FULLROWSELECT);
return TRUE;
VC++ Extensions)
CCPRs rs;
try
{
_bstr_t strSQL("SELECT * FROM CP");
pRst = m_DBCnt->Execute(strSQL, NULL, adCmdText);
TESTHR(pRst->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs)); TESTHR(picRs->BindToRecordset(&rs));
int i = 0;
VC++ Extensions)
CCPRs rs;
= ;
CString sql_;
("SELECT * FROM CP WHERE cp_no='%s'", no);
_bstr_t strSQL = sql_;
pRst = m_DBCnt->Execute(strSQL, NULL, adCmdText);
if (pRst->adoEOF)
_com_issue_error(0x);
TESTHR(pRst->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs));
TESTHR(picRs->BindToRecordset(&rs));
picRs->Release();
pRst->Close();
return ;
}