《餐厅管理系统.docx》由会员分享,可在线阅读,更多相关《餐厅管理系统.docx(38页珍藏版)》请在三一办公上搜索。
1、VC+课程设计餐厅管理系统目录摘要2Abstract21课题背景32 设计方案简述42.1 系统分析42.1.1 菜谱管理模块42.1.2 餐桌管理模块42.1.3 订菜管理模块52.1.4 结算管理模块52.2 数据库设计52.2.1 概念设计52.2.2 逻辑设计及表设计63 程序的详细设计与实现83.1 准备工作83.2 创建项目103.3 菜谱管理模块113.4 餐桌管理模块183.5 订菜管理模块213.6 结算管理模块243.7 主界面模块274 运行结果304.1 使用说明304.2 程序演示305 总结34参考文献35摘要近几年来,随着我国国民经济的稳定增长,餐饮业的竞争也越来
2、越激励,想在这样竞争激励的环境下生存,就必须运用科学的管理思想与先进的管理方法,使用点餐与管理一体化。这样不仅提高了工作效率,也避免了以前手工作业的麻烦,从而使得管理者能够准确,有效的管理餐饮。因此,餐饮业的管理者更需要一种综合实时的管理模式,希望从更科学的管理中取得竞争的优势,在竞争激烈的商业市场中取胜。结合管理信息系统的开发方法及步骤,以此为理论根据,开发出一个信息管理系统餐饮管理系统。它采用国际通用的先进餐饮管理模式,并结合中国的管理实际特点开发而成。通过本系统功能模块,可为各种大小不同的餐饮管理所使用。为管理者提供高效的管理手段,本系统有着人性理的设置理念,流程清晰、易懂。具有独特的功
3、能对于开台管理、点菜、菜谱设置等为管理人员带来很大的方便,减少人为因素的错误,提高服务水平,提升企业形象。关键词:餐饮管理系统;提高服务水平;提高工作效率AbstractIn recent years, along with our country national economy stabilizes growth, catering industry competition is becoming more and more excited, think in such a competitive environment to survive, you must use of scient
4、ific management and advanced management methods, the use of the order management and integration. It not only improves the work efficiency, but also avoids the previous manual operation of the trouble, so that managers can accurate, effective management of restaurant. Therefore, the food and beverag
5、e industry management are more likely to require a comprehensive real-time management mode, hope from scientific management to achieve competitive advantage, in the fierce competition in the market to win business.With the development of management information system method and the step, as a theore
6、tical basis, developed a management information system called - called the restaurant management system. It adopts the international advanced management mode, combined with Chinas actual management characteristics and development.Through the system function module, for a variety of different sizes o
7、f catering management use. For managers to provide efficient means of management this system has the humanity physical settings concept, process clear, easy to understand. With unique features for founding management, order, menu settings for management bring great convenience, reduce man-made error
8、s, improve service levels, enhance corporate image.Keywords:catering management system; improve service levels; improve work efficiency1课题背景伴随着计算机的发展及网络技术的运用,我们正在快速地向信息化社会迈进,信息自动化的作用变得越来越大。在餐饮行业中,餐厅的规模在不断地扩大,菜谱的数量在急剧地增加,有关餐厅的信息量也在成倍地增长。面对庞大的信息量,就需要有餐厅信息管理系统来提高餐厅管理工作的效率。通过这样的系统,可以方便地查询、统计和修改餐厅菜谱的基本情况
9、、餐桌的增减情况和规范管理订餐以及结算服务,从而减少管理方面的工作量,同时避免由于人为因素所造成的数据遗漏和误报等。通过本系统功能模块,可为各种大小不同的餐饮管理所使用。为管理者提供高效的管理手段,本系统有着人性理的设置理念,流程清晰、易懂。具有独特的功能对于开台管理、点菜、菜谱设置等为管理人员带来很大的方便,减少人为因素的错误,提高服务水平,提升企业形象 1 。2 设计方案简述2.1 系统分析本系统主要划分为以下四个模块:菜谱信息管理,餐桌信息管理,订菜信息管理和结算信息管理。如图2-1所示。下面对四这个模块进行介绍3。菜谱管理餐桌管理订菜管理结算管理餐厅管理系统图2-1 系统功能模块2.1
10、.1 菜谱管理模块工作人员通过此模块来管理菜谱信息,包括浏览,查询,添加,修改和删除功能。在添加时,系统会自动检测到所加的菜谱信息的菜谱号在菜谱表中是否存在,若存在,会提示用户已经存在。在删除时,要先弹出提示窗口,让用户确认是否删除,只有确认后才会进行菜谱信息的删除。在修改时,是不允许修改菜谱号的,菜谱号作为数据库中菜谱表的主键是不同菜谱的唯一标识,不准修改菜谱号科防止不经意将菜谱号改错。若要修改菜谱号只能通过数据库管理来实现3。2.1.2 餐桌管理模块工作人员通过此模块来管理餐桌信息,包括浏览,查询,添加,修改和删除功能。在添加时,系统会自动检测到所加的餐桌信息的餐桌号在餐桌表中是否已经存在
11、,若存在会提示用户已经存在。在删除时,要先弹出提示窗口,让用户确认是否删除,只有确认后才会进行餐桌信息的删除。在修改时,不准用户修改餐桌号3。2.1.3 订菜管理模块工作人员通过此模块来管理订菜信息,包括浏览,查询,添加,修改和删除功能。在添加时,系统会自动检测到所加的餐桌订菜信息的菜谱号在菜谱表中是否已经存在,若存在会提示用户已经存在,只要有一个不存在,就会提示用户输入错误;同时检测所加菜谱号和餐桌号的组合在订单表中同一时间是否已经存在,若存在,会提示用户该订单在订单表中已经存在。在删除时,要先弹出提示窗口,让用户确认是否删除,只有确认后才会进行订单信息的删除。在修改时,不准用户修改餐桌号和
12、菜谱号3。2.1.4 结算管理模块工作人员通过此模块来结算订单。选择相应的订单,系统会根据菜谱价格,自动计算出应付金额,结算后,此订单信息将显示已付费3。2.2 数据库设计根据系统功能需求,数据库采用Microsoft Access 2003建立。Microsoft Access 2003是一个桌面级的数据库管理系统,简单易用,功能强大。支持的数据类型较丰富,操作简单,维护费用比较低。2.2.1 概念设计餐厅管理系统概念设计描述如下。菜谱和订单之间是多对多选择的关系,一个订单能够选择多个菜谱,同时一个菜谱也能拥有多个订单。概念模型在数据库设计中是十分重要的。选择适宜的模型来表示数据和功能,对数
13、据库设计和功能分析有重大影响8。概念模型如图2-2所示。dishPK Dish_code Dish_name Dish_kind Dish_price Dish_detailorderFK1,I1Desk_codeFK2,I2Dish_codeI3 Dish_num AppendDate PayFordeskPK,I1 Desk_codeI2 Desk_num Desk_detail Desk_full图2-2 概念模型2.2.2 逻辑设计及表设计逻辑设计阶段的任务是把概念结构转换为选用DBMS(数据库管理系统)所支持的模式。根据模块的设计,以及根据规范化的设计要求,该系统的数据库设计表如表2
14、-1,表2-2,表2-3所示4。表2-1 菜谱信息表(dish)字段名称数据类型字段属性字段大小描 述必填字段索 引是否主键Dish_code文本50菜谱号是有(无重复)是Dish_name文本50菜谱名是无否Dish_kind文本50菜谱特点否无否Dish_price数字单精度菜谱价格是无否Dish_detail文本50菜谱细节否无否表2-2 餐桌信息表(desk)字段名称数据类型字段属性字段大小描 述必填字段索 引是否主键Desk_code文本50餐桌号是有(无重复)是Desk_num数字整型餐桌容量是无否Desk_detail文本50餐桌细节否无否Desk_full数字整型是否空闲是无否
15、表2-3 订单信息表(order)字段名称数据类型字段属性字段大小描 述必填字段索 引是否主键Desk_code文本50餐桌号是无否Dish_code文本50菜谱号是无否Dish_num数字整型菜份数是无否AppendDate日期_订菜时间是无否PayFor数字整型是否付款否无否3 程序的详细设计与实现3.1 准备工作我们通过数据库设计获得一个Access数据库文档:RMS.mdb。为了使程序能访问数据库,需要把数据库注册到ODBC驱动程序管理器。ODBC管理程序把数据库访问的请求传递给正确的驱动程序,驱动程序再使用SQL语句提示DBMS(数据库管理系统)完成数据库的访问工作2。(1) 打开如
16、图3-1所示的ODBC数据源管理器。图3-1 ODBC数据源管理器(2) 在【用户DSN】选项卡中单击【添加】按钮,弹出【创建新数据库源】对话框,如图3-2所示。选择Access数据库对应的驱动程序“Microsoft Access Driver(*.mdb)”,并单击【完成】按钮。图3-2 选择Acess驱动程序(3) 此时弹出【ODBC Microsoft Access安装】对话框,如图3-3所示。单击【选择】按钮,选择要配置打数据库文件RMS.mdb,并输入数据源名称“RMS”。单击【确定】按钮。图3-3 【ODBC Microsoft Access安装】对话框返回到数据源管理器对话框中
17、,【用户数据源】列表中已经多了一项RMS,这就是刚刚配置成功的数据源。3.2 创建项目根据需求分析系统的功能,本系统使用VC+6.0创建一个基于对话框的MFC AppWizard(exe)项目,项目名为RMS(Restaurant Manager System)。使用AppWizard配置得到的项目信息如图3-4所示5。图3-4 由AppWizard配置得到的项目信息注意:单文档程序向导提供数据库支持这一项,而对话框程序没有。为了让使我们能在对话框中用ODBC编写数据库,需要在stdafx.h中手动添加支持:#include 3.3 菜谱管理模块(1) 模块的功能菜谱管理模块主要完成菜谱信息管
18、理的功能,包括浏览、查找、添加、删除和修改。(2) 界面设计菜谱管理模块设计界面如图3-5所示。图3-5 菜谱管理模块设计界面根据要求把对话框和主要控件的属性进行设置即可得到该界面,具体属性设置要求这里不做详细说明。按要求设置完属性后,再双击对话框,打开类向导,为对话框添加CDishPage类,基类为CPropertyPage,再按要求为该类添加成员变量,各成员变量的变量名和数据类型这里不做详细说明。(3) 添加CDishSet类(与dish表连接)打开类向导,选择Add Class-new创建一个新类,出现如图3-6所示的New Class对话框。输入新类名,在Base Class 中选择C
19、Recordset,单击OK按钮。接下来弹出Database Options对话框,如图3-7所示,选择ODBC作为数据源,在下拉框中选择已注册的某个数据源,Recordset type选择“Snapshot”,然后单击OK按钮4。图3-6 New Class对话框图3-7 Database Options对话框接下来弹出来的是Select Database Tables对话框,见图3-8,在其中选择想要绑定的表后单击OK按钮结束。这样,一个CRecordSet类的派生类CDishSet就创建好了。图3-8 Select Database Tables对话框在CDishPage中定义数据库操纵
20、变量(注意包含头文件):CDishSet m_rsDataSet;(4)代码编写a.功能函数RefreshData:从数据库获取菜谱信息,加入ListControl中。定义如下:private:void RefreshData()实现如下:void CDishPage:RefreshData()if(m_rsDataSet.IsBOF()return;m_listDisp.DeleteAllItems();m_listDisp.SetRedraw(FALSE); m_rsDataSet.MoveFirst();int i=0;CString strPrice;while(!m_rsDataSe
21、t.IsEOF()strPrice.Format(%.2f,m_rsDataSet.m_Dish_price);m_listDisp.InsertItem(i, m_rsDataSet.m_Dish_code);m_listDisp.SetItemText(i, 1,m_rsDataSet.m_Dish_name);m_listDisp.SetItemText(i, 2,m_rsDataSet.m_Dish_kind);m_listDisp.SetItemText(i, 3, strPrice);m_listDisp.SetItemText(i, 4, m_rsDataSet.m_Dish_d
22、etail);m_rsDataSet.MoveNext();i+;m_listDisp.SetRedraw(TRUE);b.初始化对话框。BOOL CDishPage:OnInitDialog() CPropertyPage:OnInitDialog();if (!m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE)AfxMessageBox(数据打开失败!);m_listDisp.InsertColumn(0,菜谱号);m_listDisp.InsertColumn(1,菜名);m_listDisp.InsertColumn(2,种类);m_listDisp.I
23、nsertColumn(3,价格);m_listDisp.InsertColumn(4,备注);RECT rect;m_listDisp.GetWindowRect(&rect);int wid = rect.right - rect.left;m_listDisp.SetColumnWidth(0,wid/5);m_listDisp.SetColumnWidth(1,wid/5);m_listDisp.SetColumnWidth(2,wid/5);m_listDisp.SetColumnWidth(3,wid/5);m_listDisp.SetColumnWidth(4,wid/5);m_
24、listDisp.SetExtendedStyle(LVS_EX_FULLROWSELECT);RefreshData();/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEc.列表控件。void CDishPage:OnClickListDisp(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add yo
25、ur control notification handler code hereint i = m_listDisp.GetSelectionMark();m_strCode = m_listDisp.GetItemText(i,0);m_strName= m_listDisp.GetItemText(i,1);m_strKind = m_listDisp.GetItemText(i,2);m_strPrice = m_listDisp.GetItemText(i,3);m_strDesc = m_listDisp.GetItemText(i,4);UpdateData(FALSE);*pR
26、esult = 0;d.按钮控件。“增加”按钮:void CDishPage:OnButtonAdd() UpdateData();if (m_strCode.IsEmpty() | m_strName.IsEmpty()AfxMessageBox(请输入菜谱!);return;float fPrice=(float)atof(LPCTSTR)m_strPrice);m_rsDataSet.AddNew();m_rsDataSet.m_Dish_code=m_strCode;m_rsDataSet.m_Dish_name=m_strName;m_rsDataSet.m_Dish_kind=m_
27、strKind;m_rsDataSet.m_Dish_price=fPrice;m_rsDataSet.m_Dish_detail=m_strDesc;m_rsDataSet.Update();m_rsDataSet.Requery();RefreshData();/ TODO: Add your control notification handler code here“修改”按钮:void CDishPage:OnButtonModify() UpdateData();m_rsDataSet.m_strFilter=Dish_code=+m_strCode;m_rsDataSet.m_s
28、trFilter+=;m_rsDataSet.Requery();m_rsDataSet.Edit();float fPrice=(float)atof(LPCTSTR)m_strPrice);m_rsDataSet.m_Dish_code=m_strCode;m_rsDataSet.m_Dish_name=m_strName;m_rsDataSet.m_Dish_kind=m_strKind;m_rsDataSet.m_Dish_price=fPrice;m_rsDataSet.m_Dish_detail=m_strDesc;m_rsDataSet.Update();m_rsDataSet.
29、m_strFilter=;m_rsDataSet.Requery();RefreshData();/ TODO: Add your control notification handler code here“删除”按钮:void CDishPage:OnButtonDel() UpdateData();if(m_strCode=)AfxMessageBox(请选择一个菜进行删除!);m_rsDataSet.m_strFilter=Dish_code=+m_strCode;m_rsDataSet.m_strFilter+=;m_rsDataSet.Requery();m_rsDataSet.D
30、elete();m_strCode=;m_strName=;m_strKind=;m_strPrice=;m_strDesc=;m_rsDataSet.m_strFilter=;m_rsDataSet.Requery();RefreshData();UpdateData(false);/ TODO: Add your control notification handler code here“清空”按钮:void CDishPage:OnButtonClear() m_strCode=;m_strName=;m_strKind=;m_strPrice=;m_strDesc=;UpdateDa
31、ta(false);/ TODO: Add your control notification handler code here3.4 餐桌管理模块(1) 模块的功能餐桌管理模块主要完成餐桌信息管理的功能,包括浏览、查找、添加、删除和修改。(2) 界面设计餐桌管理模块设计界面如图3-9所示。图3-9 餐桌管理模块设计界面根据要求把对话框和主要控件的属性进行设置即可得到该界面,具体属性设置要求这里不做详细说明。按要求设置完属性后,再双击对话框,打开类向导,为对话框添加CDeskPage类,基类为CPropertyPage,再按要求为该类添加成员变量,各成员变量的变量名和数据类型这里不做详细说明
32、。(3) 添加CDeskSet类(与desk表连接)打开类向导,选择Add Class-new创建一个新类,出现如图3-10所示的New Class对话框。输入新类名,在Base Class 中选择CRecordset,单击OK按钮。接下来弹出Database Options对话框,如图3-11所示,选择ODBC作为数据源,在下拉框中选择已注册的某个数据源,Recordset type选择“Snapshot”,然后单击OK按钮4。图3-10 New Class对话框图3-11 Database Options对话框接下来弹出来的是Select Database Tables对话框,见图3-12
33、,在其中选择想要绑定的表后单击OK按钮结束。这样,一个CRecordSet类的派生类CDeskSet就创建好了。图3-12 Select Database Tables对话框在CDeskPage中定义数据库操纵变量(注意包含头文件):CDeskSet m_rsDataSet;(4) 代码编写与3.3的(4)类似,只需将代码中相应变量改动一下即可,这里不再做介绍。3.5 订菜管理模块(1) 模块的功能订菜管理模块主要完成订菜信息管理的功能,包括浏览、查找、添加、删除和修改。(2) 界面设计订菜管理模块设计界面如图3-13所示。图3-13 订菜管理模块设计界面根据要求把对话框和主要控件的属性进行设
34、置即可得到该界面,具体属性设置要求这里不做详细说明。按要求设置完属性后,再双击对话框,打开类向导,为对话框添加COrderPage类,基类为CPropertyPage,再按要求为该类添加成员变量,各成员变量的变量名和数据类型这里不做详细说明。(3) 添加COrderSet类(与order表连接)打开类向导,选择Add Class-new创建一个新类,出现如图3-14所示的New Class对话框。输入新类名,在Base Class 中选择CRecordset,单击OK按钮。接下来弹出Database Options对话框,如图3-15所示,选择ODBC作为数据源,在下拉框中选择已注册的某个数据
35、源,Recordset type选择“Snapshot”,然后单击OK按钮7。图3-14 New Class对话框图3-15 Database Options对话框接下来弹出来的是Select Database Tables对话框,见图3-16,在其中选择想要绑定的表后单击OK按钮结束。这样,一个CRecordSet类的派生类COrderSet就创建好了。图3-16 Select Database Tables对话框在COrderPage中定义数据库操纵变量(注意包含头文件):COrderSet m_rsDataSet;(4) 代码编写与3.3的(4)类似,只需将代码中相应变量改动一下即可,这
36、里不再做介绍。3.6 结算管理模块(1) 模块的功能工作人员通过此模块来结算订单。选择相应订单,系统根据菜谱价格,自动计算出应付金额,结算后,此订单将显示已付费。(2) 界面设计结算管理模块设计界面如图3-17所示。图3-17 结算管理模块设计界面根据要求把对话框和主要控件的属性进行设置即可得到该界面,具体属性设置要求这里不做详细说明。按要求设置完属性后,再双击对话框,打开类向导,为对话框添加CPayPage类,基类为CPropertyPage,再按要求为该类添加成员变量,各成员变量的变量名和数据类型这里不做详细说明。(3) 添加CPaySet类(与dish和order表连接)打开类向导,选择
37、Add Class-new创建一个新类,出现如图3-18所示的New Class对话框。输入新类名,在Base Class 中选择CRecordset,单击OK按钮。接下来弹出Database Options对话框,如图3-19所示,选择ODBC作为数据源,在下拉框中选择已注册的某个数据源,Recordset type选择“Snapshot”,然后单击OK按钮4。图3-18 New Class对话框图3-19 Database Options对话框接下来弹出来的是Select Database Tables对话框,见图3-20,在其中选择想要绑定的表(dish,order)后单击OK按钮结束。
38、这样,一个CRecordSet类的派生类CPaySet就创建好了。图3-20 Select Database Tables对话框在CPayPage中定义数据库操纵变量(注意包含头文件):CPaySet m_rsDataSet;CDishSet m_rsDataSet;(4) 代码编写a和b和c与3.3的(4)类似,只需将代码中相应变量改动一下即可,这里不再做介绍。d.按钮控件。“结算”按钮(修改订单信息为“已付款”):void CPayPage:OnButtonPay() UpdateData();m_rsDataSetEx.m_strFilter=Desk_code=+m_strDeskCo
39、de;m_rsDataSetEx.m_strFilter+=;m_rsDataSetEx.Requery();m_rsDataSetEx.Edit();m_rsDataSetEx.m_PayFor=1;m_rsDataSetEx.Update();m_rsDataSetEx.m_strFilter=;m_rsDataSetEx.Requery();RefreshData();AfxMessageBox(结算完毕!);/ TODO: Add your control notification handler code here3.7 主界面模块(1) 模块的功能因为主界面模块需要集合其他各个模块
40、,所以放到最后进行介绍。通过主界面可以进入每个模块,它是各个模块切换和联系的桥梁。这里的主界面采用类CPropertySheet做的分页页面。(2) 界面设计餐厅管理系统设计界面如图3-21所示。图3-21 餐厅管理系统设计界面其中主要控件的属性以及功能这里不做详细介绍。(3)代码编写a.建立各个模块对象,声明功能函数,这里是在头文件RMSDlg.h中完成的。代码如下:#include DeskPage.h#include DishPage.h#include OrderPage.h#include PayPage.hclass CRMSDlg : public CDialog/ Constr
41、uctionpublic:CDishPage m_Page1;CDeskPage m_Page2;COrderPage m_Page3;CPayPage m_Page4;CPropertySheet m_Sheet;CRMSDlg(CWnd* pParent = NULL);/AFX_MSG(CRMSDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();/AFX_MSGD
42、ECLARE_MESSAGE_MAP();b.初始化对话框,装载页面:BOOL CRMSDlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization herem_Sheet.AddPage(&m_Page1); / 加第1页m_Sheet.AddPage(&m_Page2); / 加第2页m_Sheet.AddPage(&m_Page3); / 加第3页m_Sheet.AddPage(&m_Page4);/加第4页m_Sheet.Create(this, WS_CHILD | WS_VISIBLE, 0);
43、/ 创建窗口m_Sheet.ModifyStyleEx (0, WS_EX_CONTROLPARENT); / 修改风格m_Sheet.ModifyStyle( 0, WS_TABSTOP ); / 修改风格/ 设置窗口位置m_Sheet.SetWindowPos( NULL, 0, 100, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );return TRUE; / return TRUE unless you set the focus to a control4 运行结果4.1 使用说明(1) 复制数据库RMS.mdb到任意位置。(2) 为RMS.mdb建一个系统ODBC数据源:RMS。(3) 运行程序的Debug版Release版。(4)参考本章的内容操作。4.2 程序演示运行本例程序,主界面如图4-1所示。图4-1 程序运行的主界面主界面采用分页显示的方式