酒店餐饮管理系统.doc_第1页
酒店餐饮管理系统.doc_第2页
酒店餐饮管理系统.doc_第3页
酒店餐饮管理系统.doc_第4页
酒店餐饮管理系统.doc_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

酒店餐饮管理系统摘 要:随着酒店业竞争的加剧,酒店之间客源的争夺越来越激烈,酒店需要使用更有效的信息化手段,拓展经营空间,降低运营成本,提高管理和决策效率。本课题正是为这一迫需解决的问题而产生的。该基于Visual C+开发的酒店餐饮管理系统综合运用了数据库技术、Visual C+开发技术、ADO数据库访问技术等。该系统功能较完备,是一套比较有推广价值的系统。本文简述了数据源的设置、基于ADO数据源的连接、MFC的消息映射机制、重点阐述了定餐管理模块、结算管理模块、财务管理模块等模块的具体实现过程。关键词:数据库;Visual C+;ADO;消息映射The dinner management system of hotelbased on the Visual C+Information Engineering Institute Computer Department, Xianning College, Xianning HuBei 437000Abstract:Its getting very competitive in hotel ,business has tended to become more competitive and profit margins have been reduced ,so a hotel need a more efficient management system that can energetically exploring the operational space, keep down the cost of operation ,increase efficiency management and decision, the happening of the project is to settle the problem .The hotel management information system based on the Visual C+ comprehensively applying database technical ,technology Development of Visual C+,ADO information storage technology of database ,this management information system is full of function and has much value to extension. This paper sketch describe the setting of data source, the connection of database based on ADO, the mechanism of message mapping to MFC, describe design and implementation of main units on module of meal management ,module of settlement management ,module of fund manager ,etc.Keywords:Database;Visual C+;ADO;Message mapping 1 前言1.1 课题的项目背景随着酒店业竞争的加剧,酒店之间客源的争夺越来越激烈,酒店需要使用更有效的信息化手段,拓展经营空间,降低运营成本,提高管理和决策效率。传统的酒店计算机管理系统主要包括前台管理系统和后台管理系统两大部分,基本包含了酒店主要业务部门,初步实现了对顾客服务和进行财务核算所需要的各个功能。但传统的酒店管理系统是基于财务管理为主线的设计理念,无法满足酒店全面信息化管理的需要。现代酒店业迅速发展,新的管理观念与模式层出不穷。酒店管理系统亦随着酒店管理理念的发展而发展。采用了先进的数据库理论、多媒体技术、软件工程理念等高新技术成果,结合自身软件开发经验,从基层、中层、高层三个管理者层次为切入点,以成本分析、预测、控制为主线,融合国际先进管理理念,形成一套上下贯通、功能强大、设计先进、操作便捷的酒店系统解决方案。科学地将酒店各种日常业务完美的结合在一起,为管理及决策提供了强有力的支持。1.2 课题的实现意义本系统适用于一般的小型酒店,其能实现客人个性化服务、全面彻底的信息化、使企业电算化管理水平升到一个新的更高的层次、软件各项功能亦相当完善。应用本系统后,电脑在酒店的使用已不单纯是减轻劳动强度、减少人员开支、提高核算精度以及减少财务错漏,更重要的是它能为整个企业的管理模式带入一种新的思维,一种新的理念,它能为高层管理人员提供大量丰富的基于企业管理经营过程中产生的实际的数据,供经营决策参考。具体的说它的实现有如下意义。1、设计合理融合了多年的行业实践经验,及自身开发经验,为客户提供强大的功能及丰富的管理模式,模块化开发、拆卸方便、高度集成。2、使用方便独特的基于列表框的浏览模式,层次分明,操作顺畅,丰富的视图显示,简单明了,所有数据输入均进行完整性、合法性校验,使操作错误减至最低,各种复杂强大的功能于指点间轻松掌握。3、强化管理使总台、餐饮前台、服务员、厨房、吧台、收银台、财务、管理部门、总经理决策机构之间通过网络互接到一起,各类销售数据、员工工作量、库房入库出库、菜品成本核算、菜品消费统计、挂帐、欠帐、结算、协议单位消费等等各类错综复杂的数据均会记录于数据库中,并提供精确查询、模糊查询、复合查询、多级查询等多种方式,可根据用户选择自动合成各类决策所需的图表,随时对管理各方面进行单项分析、阶段分析、复合分析、综合分析,为决策提供强力支持。4、开源节流各部门利用电脑协同工作,各类信息在网络上轻松传送、真正实现无纸化经营,完善的权限管理及保密机制,有效的维护商业秘密,彻底的电算化服务,极大的提高了工作效率,成熟的软件管理体制,杜绝日常运营中可能产生的人员、管理、经营、操作上的漏洞将各项失误减至最小。5、提高服务软件设计以人为本,其重点在于提高餐饮企业服务水平、档次及工作效率,进而实质性提高企业服务水准,酒店解决方案着眼于不同顾客的各种需要、从管理到服务各个方面方便满足顾客的合理需要,进而提高企业的核心竞争力。6、安全稳定通过选用优秀的开发工具、先进的开发模式、成熟的网络结构及安全稳定的数据库,使系统本身具有了极强的可靠性与容错性。通过软件权限管理、数据库权限管理、操作系统权限管理三方面,彻底保证了数据的安全性。2 数据库系统开发相关知识介绍2.1 MFC消息映射机制的具体实现过程在Windows中,不仅用户程序可以调用系统的API函数,返回来系统也会调用用户程序,这个调用是通过消息来进行1。由此可知Windows程序设计是一种完全不同于传统的DOS方式的程序设计方法。它是一种事件驱动方式的程序设计模式,主要是基于消息的。所以在使用Visual C+这种工具开发项目之前,我们要对其MFC的消息映射机制有所了解,下面将对其进行简单的介绍。MFC消息机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类对应的静态表中。当有消息需要处理时,程序只要检索该消息静态表,查看表中是否含有该消息,就可以知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。为了看清楚MFC消息映射机制的实际实现过程,先新建一个单文档类型的MFC AppWizard (exe)工程,取名为Draw。MFC在后台维护了一个窗口句柄与对应的C+对象指针的对照表。以CDrawView类为例,与CDrawViewd对象相关的有一个窗口,窗口当然有它的窗口句柄,该句柄与CDrawView对象的一个指针(即CDrawView*)存在着一一对应关系,在窗口与C+对象对照表中就维护了这种对应关系。当收到某一消息时,消息的第一个参数就指明该消息与哪个句柄相关,通过对照表,就可以找到与之相关的C+对象指针。然后把这个指针传递给应用程序框架窗口类的基类,后者会调用一个名为WindowProc的函数。该函数的定义位于WinCore.cpp文件。代码如下:LRESULT CWind:WindowProc(UINT message,WPARAM wParam,LPARAM lParam)/OnWndMsg does most of the work ,except for DefWindowProc callLRESULT lResult=0;if(!OnWndMsg(message,wParam,lParam,&lResult)lResult=DefWindowProc(message,wParam,lParam);return lResult;根据这个WindowProc函数的定义,我们发现它是一个虚函数。同时,也可以发现,CWind:WindowProc函数内部调用了一个OnWndMsg函数,真正的消息路由,也就是消息映射就是由此函数完成的。OnWndMsg函数的定义也位于WinCore.cpp文件中,部分代码如下:BOOLCWnd:OnWndMsg(UINTmessage,WPARAMwParam,LPARAM lParam,LRESULT*pResult)LRESULT lResult=0;/special cade for commandsif(message=WM_COMMAND) if(OnCommand(wParam,lParam) lResult=1;goto LReturnTrue;return FALSE;/special case for notifiesif(message=WM_NOTIFY) NMHDR*pNMHDR=(NMHDR*)lParam;If(pNMHDR-hwndFrom!=NULL&OnNotify(wParam,lParam,&lResult)Goto LReturnTrue;Ruturn FALSE;/special case for activationif(message=WM_ACTIVATE)_AfxHandleActivate(this,wParam,CWnd:FromHandle(HWND)lParam);/special case for set cursor HTERRORif(message=WM_SETCURSOR&_AfxHandleSetCursor(this,(short)LOWORD(lParam),HIWORD(lParam) lResult=1;goto LReturnTrue; return TRUE;OnWndMsg函数的处理过程是:首先判断是否有消息响应函数。判断方法是在相应窗口类中查找所需的消息响应函数。因为传递给WindowProc函数的是窗口子类指针,所以,OnWndMsg函数会到相应的子类头文件中查找,看看DECLARE_MAP( )宏之上,两个AFX_MSG注释之间是否有相应的消息响应函数原型的声明;再到子类的源文件中,看看BEGIN_MESSAGE_MAP和END_MESSAGE_MAP( )这两个宏之间是否有相应的消息映射宏。如果通过上述步骤,找到了消息响应函数,那么接着就会调用该响应函数,对消息进行处理。如果在子类中没有找到消息响应函数,那么就交由基类进行处理。通过以上步骤,MFC就实现了具体的消息映射,从而完成对消息的响应。2.2 关系型数据库的基本概念数据库这一概念提出后,先后出现了几种数据模型。其中基本的数据模型有三种:层次模型系统、网络模型系统、和关系模型系统。六十年代末期提出的关系模型具有数据结构简单灵活、易学易懂且具有雄厚的数学基础等特点,从七十年代开始流行,发展到现在已成为数据库的标准。目前广泛使用的数据库软件都是基于关系模型的关系数据库管理系统。2.2.1 关系模型(RM即Relational Model)关系模型把世界看作是由实体(Entity)和联系(Relationship)构成的13。所谓实体就是指现实世界中具有区分与其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。所谓联系就是指实体之间的关系,即实体之间的对应关系。联系可以分为三种:A. 一对一的联系。如:一个人只有一种性别,一个人性别为一对一的联系;B. 一对多的联系。如:相同性别的人有许多个,性别人为一对多的联系;C. 多对一的联系。如:很多人有同一个性别,人性别为多对一的联系。通过联系就可以用一个实体的信息来查找另一个实体的信息。关系模型把所有的数据都组织到表中。表是由行和列组成的,行表示数据的记录,列表示记录中的域。表反映了现实世界中的事实和值。2.2.2 关系数据库(RDB即Relational Database)所谓关系数据库就是基于关系模型的数据库,下面是与其有关的几个重要的概念:A. 关系数据库管理系统(RDBMS)B. 关系数据库管理系统就是管理关系数据库的计算机软件C. 关键字(Key)关键字是关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分。a. 侯选关键字(Candidate Key)如果一个属性集能惟一地标识表的一行而又不含多余的属性,那么这个属性集称为侯选关键字。b. 主关键字(Primary Key)主关键字是被挑选出来,作表的行的惟一标识的侯选关键字。一个表只有一个主关键字。主关键字又可以称为主键。c. 公共关键字(Common Key)在关系数据库中,关系之间的联系是通过相容或相同的属性或属性组来表示的。如果两个关系中具有相容或相同的属性或属性组,那么这个属性或属性组被称为这两个关系的公共关键字。d. 外关键字(Foreign Key)如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外关键字。由此可见,外关键字表示了两个关系之间的联系。以另一个关系的外关键字作主关键字的表被称为主表,具有此外关键字的表被称为主表的从表。外关键字又称作外键12。2.3 ADO访问数据库技术2.3.1 ADO简介ADO(ActiveX Data Object,称Active数据对象)是数据库应用程序开发的接口,它是建立在OLEDB之上的高层数据库访问技术。和以往的数据库访问技术(ODBC API、DAO、RDO等)相比,ADO的最大优点是使用简便、速度快、内存消耗少和占用磁盘空间少2。ADO的基本功能主要由ADO提供的七个对象完成,个对象间的关系如下图2.1所示。ConnectionErrorsErrorCommandParametersParameterRecordsetFieldsField图2.1 ADO各对象之间的关系2.3.2 在Visual C+中使用ADO下面将通过简单的几个步骤来演示,如何在Visual C+中使用ADO。A. 使用#import指令引入ADO库文件。在使用ADO之前,首先使用#import指令引入ADO库文件,以便编译器能正确编译。代码为:#import “c:Program FilesCommom FilesSystemADOmsado15.dll” no_namespace rename (“EOF”, “EndOfFile”);这行声明使用ADO,但不使用ADO的命名空间。为了避免冲突,将常数EOF改名为EndOfFile。这样不需要添加另外的报头文件,就可以使用ADO接口了。B. 初始化COM。ADO是一组COM动态链接库,所以应用程序在使用ADO之前,必须初始化OLE/COM库环境。我们使用CoInitialize函数来初始化COM。C. 初始化数据库链接对象和打开数据库连接。应用程序中,一般使用Connection对象来连接数据库对象。D. 使用Connection对象、Command对象或Recordset对象执行数据库操作,在大多数情况下使用的是Recordset对象执行查询操作,并访问返回到记录集中的查询结果。E. 关闭记录集和数据库连接。3 需求分析3.1 理解需求理解需求是在问题及其最终解决方案之间架设桥梁的第一步。开发者只有和客户充分理解了需求之后才能开始设计系统,否则,对需求定义的任何改进,设计上都必须大量的返工12。下面是双方调研后得到的需求规格说明。(1)系统对用户登录进行管理。使用各功能模块时,系统应验证用户身份的有效性,否则不容许用户登录。另外,容许用户对自己的密码进行修改。(2)系统在各功能模块的实现中,提供多级分类检索和组合搜索。(3)在服务器、数据库等多个层次上提供行之有效的安全防范措施,可以确保系统安全稳定的运行。(4)具有高度的灵活和良好的可扩充性,可随着酒店业务的发展在功能和规模两方面随时进行扩展和升级。(5)功能全面,覆盖酒店的全部业务,包刮预定、接待、收银、餐饮、客户管理、员工管理、值班信息管理和财务。(6)可提供与多种专用财务软件的接口,能轻松地接入财务系统。(7)系统界面友好、美观、支持鼠标和键盘操作。(8)从用户的角度出发,能高度智能。易用、简单、快捷地操作。3.2 需求分析分析需求是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,通过对用户业务问题的分析,规划出系统的功能模块,即定义用例13。这个步骤是对理解需求的升华,直接关系到该系统的质量。经过同客户的需求分析后,确定酒店管理系统的功能模块(用例)包括修改密码、增加用户、定餐管理、结算管理、值班信息管理、客户信息管理、菜谱信息管理、餐桌信息管理、财务管理九大功能模块。同时根据用户的要求将用户按权限分为两种:第一种是管理员,管理员可以使用该系统所有的功能。第二种是值班员,值班员只能以受限的权限使用该系统的部分功能。通对上述的功能进行集中、分块和分析,按照结构化程序设计的要求,得到如图3.1所示的系统功能模块图。酒店餐饮管理系统登录记录登录信息退出系统记录退出信息值班员管理员修改密码定餐管理结算管理修改密码定餐管理结算管理用户管理值班信息管理客户信息管理菜谱信息管理餐桌信息管理财务管理 图3.1系统功能模块图上述系统功能模块图中各个功能模块包含的具体功能如下面各图所示。查询定餐信息删除定餐信息修改定餐信息定餐定餐管理查询结算信息删除结算信息结算结算管理图3.2 定餐模块的具体功能图 3.3 结算模块的具体功能图修改用户信息添加用户信息用户管理查询用户信息删除用户信息查询值班信息删除值班信息值班信息管理图3.4 用户管理模块的具体功能图 3.5 值班信息管理模块的具体功能图删除菜谱信息修改菜谱信息添加菜谱信息菜谱信息管理查询菜谱信息删除客户信息修改客户信息添加客户信息客户信息管理查询客户信息 图3.6 客户信息管理模块的具体功能图 3.7 菜谱信息管理模块的具体功能图查询支出信息删除支出信息修改支出信息信息支出财务管理收支查询修改餐桌信息添加餐桌信息餐桌信息管理查询餐桌信息删除餐桌信息图3.8 餐桌信息管理模块的具体功能图 3.9 财务管理模块的具体功能图前台在考虑功能实现的同时,也考虑了操作的简洁和方便性。目的是让大多数客户能轻松地享受本系统给他们带来的便利。为了确保客户和酒店的信息具有更好的安全性,前台管理和后台管理是分离的。前台的某些管理模块需要经过权限才可以使用,为此设计了酒店管理员和前台服务员两个角色。其中:酒店管理员享有最高权限,可以使用酒店管理系统所提供的所有功能,包刮员工信息管理、餐桌信息管理、客户信息查询、经营状况统计、个人密码修改及注销功能。前台服务员的主要职能是负责定餐和结算,以及查询入坐的客户信息,所有该角色只能使用部分功能,包括:个人密码修改、定餐管理、结算管理功能。后台管理主要由数据库系统作为支持,后台管理的维护工作主要由系统管理员进行,包刮完成对各个数据表单的维护、数据库的备份及恢复等工作。本系统选用的数据库系统为Access。4 数据库分析和设计在数据库系统开始设计的时候应该尽量考虑全面,尤其应该仔细考虑用户的各种需求,避免浪费不必要的人力和物力。4.1 数据库需求分析在仔细调查酒店日常管理过程的基础上,针对本实例,通过对酒店餐饮管理内容的分析,设计的数据项和数据结构如下。(1)菜谱信息:包括的数据项有菜谱号、名称、所属种类、价格、描述等。(2)值班员信息:包括的数据项有值班员姓名和口令。(3)客户信息:包括客户号、姓名、性别、年龄、职务、联系电话等。 (4)定餐信息:包括的数据项有桌号、菜谱号、菜名、数量、价格和定餐日期。(5)结算信息:包括的数据项有客户号、桌号、结算日期、打折情况和总计等。(6)餐桌信息:包括餐桌号、餐桌位置、餐桌状态等。(7)值班信息:包括值班员名、值班开始时间、值班结束日期。(8)支出信息:包括支出类型、支出金额、支出日期。有了上面的数据结构、数据项和数据流程,就能进行下面的数据库设计。4.2 数据库概念结构设计本实例根据上面的设计规划出的实体有:菜谱实体、值班员实体、客户实体、定餐实体、结算实体、餐桌实体、值班实体和支出实体。各个实体具有的描述E-R图及其之间的关系描述如下。菜谱信息菜谱号、名称所属种类价格描述图4.1 菜谱实体及属性值班员信息值班员姓名密码描述图4.2 值班员实体及属性客户信息客户号、姓名性别、年龄职务、工作单位联系方式图4.3 客户实体及属性定餐信息桌号数量菜谱号、菜名称定餐日期定金图4.4 定餐实体及属性结算信息客户号、桌号定餐日期打折情况结算日期结算金额图4.5 结算实体及属性餐桌信息桌号餐桌状态餐桌的位置图4.6餐桌实体及属性值班信息值班员名下班日期上班日期图4.7 值班实体及属性支出信息支出种类支出日期金额图4.8 支出实体及属性实体和实体之间的关系E-R图如图4.9所示。菜谱管理支出管理员包括管理餐桌客户对应值班员负责定餐对应结算结帐消费1nnnnmmmmm11nnnnnnnnnnnn1nn11图4.9 实体之间关系E-R图43 数据库逻辑结构设计数据库包含值班员表(ZBY)、菜谱信息表(CP)、客户信息表(KH)、定餐信息表(DC)、结算信息表(JS)、餐桌状态表(CZ)、值班信息表(ZB)、支出信息表(ZC)共八个表。下面将分别介绍这些表的结构。(1)值班员表ZBY值班员表(ZBY)用来保存使用该系统的酒店员工的基本信息,表ZBY如表4.1所示。表4.1 值班员表(ZBY)编 号字段名称数据结构说明1ZBY_NAME文本用户姓名(主键)2ZBY_PSWD文本密码3ZBY_LIMIT文本权限(2)菜谱信息表CP菜谱信息表(CP)用来保存使用该系统的酒店能为顾客提供的菜肴种类的信息,表CP如表4.2所示。表4.2 菜谱信息表(CP)编 号字段名称数据结构说明1CP_NO文本菜谱号(主键)2CP_NAME文本菜名称3CP_KIND文本种类4CP_PRICE数字价格5CP_DETAIL文本描述(2)客户信息表KH客户信息表(KH)用来保存使用该系统的酒店对信誉较好的顾客所做的记录。表KH如表4.3所示。表4.3荣誉客户信息表(KH)编 号字段名称数据结构说明1KH_NO文本客户编号(主键)2KH_NAME文本客户姓名3KH_GENDER文本客户性别4KH_YEAR数字客户年龄5KH_JOB文本客户的工作6KH_TEL文本客户的电话7KH_COMPANY文本客户工作单位8KH_DZ数字打折(4)定餐信息表DC定餐信息表(DC)是用来保存使用该系统的酒店所有顾客的定餐信息。表DC如表4.4所示。表4.4 定餐信息表(DC)编 号字段名称数据结构说明1CZ_NO数字桌号(主键)(外码)2CP_NO数字菜谱号(主键)3CP_NAME文本菜名称(外码)4DC_NUMBER数字数量5DC_DJ数字定金6DC_DATE日期/时间定餐日期(主键)(5)结算信息表JS结算信息表(JS)是用来保存在该酒店消费过的所有顾客的消费信息。表JS如表4.5所识示。表4.5 结算信息表(JS)编 号字段名称数据结构说明1KH_NO文本客户号(主键)(外码)2CZ_NO文本桌号(主键)(外码)3KH_DZ数字打折情况4DC_DATE时间/日期总计5JS_DATA时间/日期日期(主键)6JS_TOTAL数字结算金额(6)餐桌信息表CZ餐桌信息表(CZ)是用来保存酒店的餐桌信息,包括餐桌的数量、位置、状态(是否被预定或正在被使用。表CZ如表4.6所示。表4.6 餐桌信息表(CZ)编 号字段名称数据结构说明1CZ_NO文本餐桌号(主键)2CZ_POSITION文本餐桌位置3CZ_STATES文本餐桌状态(7)值班表ZB值班信息表(ZB)是用来保存酒店值班员的值班信息的,它记录了值班员何时开始进入系统进行操作,何时退出系统。这个表记载的信息是很重要的,例如:如果某个值班员在值班期间不负责任,导致酒店出现损失,我们就可以根据这个表的记载,知道当时是谁在值班。表ZB如表4.7所示。表4.7 值班员表(ZB)编 号字段名称数据结构说明1ZB_NAME文本值班员名(主键)2ZB_INDATE时间/日期上班时间(主键)3ZB_OUTDATE时间/日期下班时间(8)支出信息表 ZC支出信息表(ZC)保存的是酒店的所有支出信息,表ZC如表4.8所示。表4.8 支出信息表(ZC)编 号字段名称数据结构说明1ZC_KIND文本支出类型(主键)2ZC_TOTAL时间/日期支出金额3ZC_DATE时间/日期支出时间(主键)(9)视图CX视图(CX)是根据定餐信息表和餐桌信息表建成的,它是为了让我们能方便的根据定餐信息而得到餐桌的位置信息,从而使程序的编写变的容易。视图CX如表4.9所示。表4.9 视图(CX)编 号字段名称数据结构说明1CZ_NO文本餐桌号2CP_NO时间/日期菜谱号3ZC_DATE时间/日期支出时间4CZ_POSITION文本餐桌位置4.4 设定表关系Access作为关系型数据库管理系统,指定表之间的关系是很重要的。MyDS数据库的所有表与字段创建完成后,就需要设定表关系了,Access将来会凭借表关系来连接两个表或查询中的数据。在关系型数据库中,表与表之间的联系是通过公共属性实现的,这个公共属性是一个表的主码和另一个表的外码。这句话的含义,可以通过菜谱信息表(CP)和定餐信息表(DC)来说明。在定餐信息表中,如果没有“菜谱号”,某条定餐信息所定的菜就没有确定;同样,在菜谱信息表(CP)中,我们也不知道某条菜谱信息的定餐信息有几条和他们具体是那几个。如果在定餐信息表(DC)表中,增加了“菜谱号”列(外码),那么这个问题就可以解决了。外码就象在两个表之间架设了一座“桥”一样,在一个表中找不到的数据,“通过桥”后,在另一个表中可以继续查找。在菜谱信息表(CP)中每一条菜谱信息可以对应定餐信息表(DC)中的n(n.=0)条信息,而在定餐信息表(DC)中每一条定餐信息只对应菜谱信息表(CP)中的一条信息,所以菜谱信息表(CP)与定餐信息表(DC)之间的关系为1:n,以同样的分析可以得出定餐信息表(DC)和结算信息表(JS)之间的关系为 n:1、定餐信息表(DC)和餐桌信息表(CZ)之间的关系为n:1。5 创建应用程序5.1 酒店餐饮管理系统应用程序的初步创建此酒店管理系统应用程序的创建步骤如下:(1)选择菜单“FileNew”中的“新建项目”选项卡中“MFC AppWizard(exe)”,设置合适的目录和项目名,比如“C:Projects”目录下的“MS”项目。(2)创建一个对话框应用程序(“Dialog Based”)。单击“Next”按钮。(3)由于在项目中将要使用ADO,所以在MFC AppWizard中的第二步,需要选中“Automation”选项,使应用程序能够支持自动化对象。(4)单击“Finish”按钮,结束项目的创建。至此一个基于对话框的应用程序框架就搭好了,主对话框名为CRMSDlg。(5)因为在Visual C+中进行数据库操作一定要引进ADO类,所以在项目创建完毕之后,在头文件stdafx.h中加入下面的代码:#import C:program filescommon filesSystemadomsado15.dll no_namespace rename(EOF,EndOfFile) rename(LockTypeEnum,newLockTypeEnum)rename(DataTypeEnum,newDataTypeEnum)rename(FieldAttributeEnum,newFieldAttributeEnum)rename(EditModeEnum,newEditModeEnum)rename(RecordStatusEnum,newRecordStatusEnum)rename(ParameterDirectionEnum,newParameterDirectionEnum)(6)在这个系统中,频繁地使用到了对数据库的访问、修改等操作,所以把对数据库的一些公共操作集中起来,可以使代码更加规范和容易维护。在Class View中用鼠标右键单击CMSApp,选择“Add Member Variable”选项,然后依次添加这个工程中要使用的变量,其作用如其注释所示:CString m_inDate;/保存值班员的登陆时间CString m_sCurrentUser;/保存当前的登陆用户名_RecordsetPtr m_pADOSet;/定义ADO记录集对象指针int m_iLoginCount;/保存当前用户试图登录的次数int m_state;/保存是否已经有用户登录了该系统_ConnectionPtr ADOConn;/定义ADO数据库连接对象指针选择Add Member Function添加函数bool ADOExecute(_RecordsetPtr &ADOSet, _variant_t &strSQL);其具体代码如下:bool CMSApp:ADOExecute(_RecordsetPtr &ADOSet,_variant_t &strSQL)if ( ADOSet-State = adStateOpen)ADOSet-Close();try ADOSet-Open(strSQL,ADOConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic, adCmdUnknown); return true;catch(_com_error &e) CString err; err.Format(ADO Error %s,(char*)e.Description(); AfxMessageBox(err); return false;可以说这个函数是这个系统的最大亮点之一,因为它对ADO的功能进行了封装,可以使我们程序的编写得到极大的简化。例如:我们每次对数据库进行操作时,都不需要再定义连接对象和记录集对象,在对数据库操作完毕之后不需要再关闭数据库的连接和记录集。当然再此之前我们还需要在CMSApp类的InitInstance()函数中添加如下代码用来创建ADO Connection、建立和数据库的连接、初始化ADO记录集,其具体代码如下:if(FAILED(:CoInitialize(NULL)AfxMessageBox(ADO Init failed);return false;tryADOConn.CreateInstance(_uuidof(Connection);ADOConn-ConnectionString = DSN=MyDS;ADOConn-Open(,-1);/Catch Exceptionscatch(_com_error &e)CString err;err.Format(%s, (char*)(e.Description() );AfxMessageBox(err);catch(.)AfxMessageBox(Unknown Error.);/Init ADO RecordSetm_pADOSet.CreateInstance(_uuidof(Recordset);最后添加关闭数据库连接的函数。选择Add Virtual Function添加一个虚函数,重载系统提供的ExitInstance()函数,填写代码如下:int CMSApp:ExitInstance() if( adStateOpen = ADOConn-State )ADOConn-Close();ADOConn.Release(); if(adStateOpen=m_pADOSet-State)m_pADOSet-Close();m_pADOSet.Release()CWinApp:ExitInstance();(7)编译运行,一切正常之后就可以正式开始工作了。先通过资源编辑器把主对话框设计成如图5.1所示。图5.1 主对话框的设计下面将逐步讲解这个系统的建立过程。5.2 主要功能模块的设计及其具体实现在开发本系统的过程中我一直是本着功能齐备、使用方便、设计合理这三条原则进行的。首先是在本系统中大量用到了列表框,这是因为列表框可以把我们需要了解的信息一目了然的显示出来;其次还用到了许多的组合框(而不是编辑框),这是因为组合框较编辑框有一个明显的优势,即操作方便,比如:当用户要进行输入操作的话,如果采用的是组合框的话只需要用鼠标轻轻的点击一下,进行选择即可,从而避免了采用键盘的繁琐输入。下面将逐一介绍该系统的几个主要的功能模块,以展示其功能齐备、设计合理的方面。5.2.1 设计登录和口令管理模块在未登录的时候,主对话框中的按钮,除了“登录”、“退出”等项,全是不可用的。为了达到这一效果,在CRMSDlg:OnoInitDialog( )中加入如下代码:GetDlgItem(IDC_BTN_UPDPWD)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_ZBYGL)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_DCGL)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_JSGL)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_CPGL)-EnableWindow(FALSE);GetDlgItem(IDOK)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_ZBGL)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_KHGL)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_CZGL)-EnableWindow(FALSE); 然后在资源编辑器中加入如图5.2所示的登录对话框。图5.2 登录对话框登录对话框的事件处理函数void CDlgLogin:OnOK()用来处理登录事务。若成功,则使所有的按钮变为可用,示意登录成功。其部分代码如下:_variant_t Holder, strQuery; strQuery =select ZBY_NAME,ZBY_LIMIT from ZBY where ZBY_NAME =+m_name+;theApp.ADOExecute(theApp.m_pADOSet, strQuery);int iCount = theApp.m_pADOSet-GetRecordCount();值得一提的是这段语句:strQuery =select ZBY_NAME,ZBY_LIMIT from ZBY where ZBY_NAME=+m_name+;这里并没有取出ZBY表中的所有字段(ZBY_NAM和ZBY_PSWD),然后把密码字段和用户的输入作比较来决定登录成功与否;而是只取出了值班员名字(ZBY_NAME),密码的校验放在数据库服务器端进行5。这主要是基于安全的考虑。如果没有确实的需要,就尽量不从数据库里取用户密码这种敏感的数据。虽然这只是一个细节,但很多安全漏洞都是由对这种细节的忽视引起的。该系统的这个登录模块不同于其它系统,每当值班员成功登录之后,在数据库中就会写入一条信息记录该用户登录的时间,当用户退出系统时,用户退出系统的时间也会写入数据库。这样做的好处就是,如果有值班员在值班期间不负责任造成酒店的损失(如:有客户没结帐就离开,值班员误操作等),我们就可以根据数据库中的信息得知当时是哪谁在值班。系统增加了这样的一个功能,可以增加值班员的责任感,有利于酒店的运行。其代码如下:/把登录的时间写入数据库COleDateTime today = COleDateTime:GetCurrentTime();theApp.m_inDate = today.Format(%Y-%m-%d %H:%M:%S); strQuery=insert into ZB (ZB_NAME, ZB_INDATE) values (+m_name+, +theApp.m_inDate+);theApp.ADOExecute(theApp.m_pADOSet, strQuery) ; CString sOutDate; /把用户退出系统的时间写入数据库 COleDateTime OutDate = COleDateTime:GetCurrentTime();sOutDate = OutDate.Format(%Y-%m-%d %H:%M:%S); strQuery = Update ZB set ZB_OUTDATE=+sOutDate+ where ZB_INDATE =#+theApp.m_inDate+#;theApp.ADOExecute(theApp.m_pADOSet, strQuery) ; 登录成功之后可以单击“修改口令”按钮激活“

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论