资源描述
餐饮管理系统1、前言在餐饮业务竞争越来越激烈的今天,如何提高服务质量,其管理能力显的越来越重要。尤其是对一些大的餐饮店,餐饮店内部服务项目越多,管理难度越大,既要处理前台又要处理后台的工作,所以一个好的管理系统可以提高酒店的管理水平也可以大幅度提高酒店服务水平。1.1目的随着当今社会信息化的日新月异的发展,计算机应用已经渗透到日常工作的许多方面无论是其自身还是所发挥的作用,计算机都标志着一种高科技、高效率和高水平。为了企业创先进、争一流,为了企业的发展一套好的系统必不可少.现在餐饮业发展速度飞快,要想在激烈的社会竞争有一席之地,好的服务是最基本的保障,此次开发的餐饮管理系统就是针对现代化社会管理和要求, 在服务上提高自己的效率,使自己的公司立于不败之地.1.2定义餐饮管理系统,SQL,E-R图1.3 参考资料数据库应用系统开发技术 朱如龙 刘焰 机械出版社 2004年8月VC+与SQL2000开发技术汪晓平 钟军 人民邮电出版社 2004年8月2、系统设计2.1系统目标设计餐饮管理系统的主要目标是实现对酒店内部各种管理的电子化、自动化,提高各个模块之间的办公效率,为高质量餐饮服务提供保证。2.2开发设计思想餐厅系统是按照国内餐饮行业最新要求开发的全心概念的信息管理系统。该系统将餐厅收银、往来帐务结算及销售情况统计工作在单计算机或网络系统中完成。主要特点包括:*代码菜谱编制,方便统计,方便输入;*开单、改单、结算、打印、用户界面方便友好;*系统专设往来账、内部账,结算方式灵活多样,结算消息详尽;*系统可同前台系统衔接,查询客人信贷情况,往前台客人帐户转账;*报表真实,实用性强,如:收银报表汇总收银、支票、信用卡、转帐等情况;菜肴销售报表汇总各种菜肴的日、月销售量;员工销售统计表,可打印值台人员销售业绩核实报表提供依据。*账务系统共讷讷感的完整性。一旦该系统正式运行,餐厅每日的营业账和全部往来客户的账务操作结算都将依靠计算机,该系统面对当前餐厅餐饮业各种负复杂的结算要求应具有很强的应变能力。为此本系统为适应拥护的要求,设计了完整的转帐功能。*帐务系统的可扩充性。由于餐厅业务的扩展,势必要求帐务结算系统随之扩展,在不修改程序的前提下,本系统可在相当可观的范围内,由用户扩展其营业项目和结算手段。*帐务操作数据的可校验性。本系统提供了多种方便的查询,校核和统计功能,共帐务操作人员和专职人员自校对帐务数据。如当班收银员下班的时候直接统计当班期间的输单、收银情况。为餐饮企业管理人员提供及时准确的经营状况和帐务信贷系统情况。餐厅系统需要完成的功能有以下几点:*定餐管理:定餐修改、定餐取消、定金处理、定餐统计、定餐查询、定餐报表。*收款管理:立帐、校费明细录入、特色菜自定义、追加消费、消费修改、消费取消、加位、更改台号、折扣设定、消费服务设定、帐单打印、现付结算和房帐转录。*交班管理:统计当班数据、为下班操作做准备、当班帐务流水报表。*系统报表:餐饮销售分析报表、每菜销售统计报表、营业收入报表、每菜销售统计日报表和当班特色菜报表。*系统维护:餐厅代码设定、餐台号码以及贵宾房设定特色分类设定、特色编码设定、折扣设定、货币设定、服务费率设定、营业统计项目设定、成本统计项目设定、使用者权限维护、系统备份、系统恢复。*餐饮成本核算:成本统计项目设定、成本管理。2.3系统功能模块设计在系统功能分析的基础上,考虑Visual C+的编程特点,得到如下面功能模块图。图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所示M:N M:N 定餐1:1客户M:N结算M:N菜谱实体之间的关系E-R3.3数据库逻辑结构设计在 上面的实体以及实际实体之间关系的基础上,形成数据库中表格以及各个表格之间的关系。餐饮管理系统数据库中各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的一个表表1-1为值班员ZSP表1-1 值班员表ZSP列名数据类型可否为空说明ZSP_NAMEVARCHAR2(20)NOT NULL值班员(主键)ZSP_PSWDVARCHAR2(10)NOT NULL口令表1-2为菜谱信息表CP表1-2 菜谱信息表CP列名数据类型可否为空说明CP_NOVARCHAR2(10)NOT NULL菜谱号(主键)CP_NAMEVARCHAR2(20)NULL菜名称CP_KINDVARCHAR2(20)NULL种类CP_PRICENUMBER(10)NULL价格CP_DETAILVARCHAR2(50)NULL描述表1-3为荣誉客户信息表KH表1-3 荣誉客户信息表KH列名数据类型可否为空说明KH_NOVARCHAR2(10)NOT NULL客户号(主键)KH_NAMEVARCHAR2(20)NULL姓名KH_GENDERVARCHAR2(2)NULL性别KH_YEARNUMBER(3)NULL年龄KH_JOBVARCHAR2(20)NULL职务KH_TELVARCHAR2(20)NULL联系电话KH_COMPANYVARCHAR2(20)NULL工作单位表1-4为定餐信息表表1-4 定餐信息表列名数据类型可否为空说明DC_DESKVARCHAR2(20)NOT NULL桌号(主键)CP_NOVARCHAR2(10)NOT NULL菜名号(主键)CP_NAMEVARCHAR2(20)NULL菜名称DC_NUMBERNUMBER(3)NULL数量DC_DATEDATENULL定餐日期末(主键表1-5为结算信息表JS表1-5 结算信息表JS列名数据类型可否为空说明KH_NOVARCHAR2(20)NOT NULL客户号(主键)DC_DESKVARCHAR2(20)NULL桌号JS_DZNUMBER(3NULL打折情况TOTALNUMBER(5)NULL总计JS_DATEDATENOT NULL日期use masterGO % drop the exist databaseif exists (select * from dbo.sysdatabases where name = RMS) drop database RMS GOcreate database RMS %create database GOuse RMSGO % drop exist tablesif exists (select * from dbo.sysobjects where id = object_id(NREADERS) and OBJECTPROPERTY(id, NIsUserTable) = 1)drop table CPGOif exists (select * from dbo.sysobjects where id = object_id(NPOPEDOM) and OBJECTPROPERTY(id, NIsUserTable) = 1)drop table ZBYGOif exists (select * from dbo.sysobjects where id = object_id(NBOOKS) and OBJECTPROPERTY(id, NIsUserTable) = 1)drop table KHGOif exists (select * from dbo.sysobjects where id = object_id(NBOOKREADERS) and OBJECTPROPERTY(id, NIsUserTable) = 1)drop table DCGOif exists (select * from dbo.sysobjects where id = object_id(NMANAGERS) and OBJECTPROPERTY(id, NIsUserTable) = 1)drop table JS GOCREATE TABLE “JD”.CP(CP_NO VARCHAR2(10) NOT NULL,CP_NAME VARCHAR2(20) NULL,CP_KIND VARCHAR(10) NULL,CP_PRICE NUMBER(10) NULL,CP_DETAIL VARCHAR2(50) NULL,CONSTRAINT CP_NO_PK PRIMARY KEY(CP_NO)TABLESPACE”USER_DATA”;CREATE TABLE “JD” .ZBY(ZBY_NAME VARCHAR2(20) NULL,ZBY_PSWD VARCHAR2(10) NULL,CONSTRAINT ZBY_NAME_PK PRIMARY KEY(ZBY_NAME)TABLESPACE”USER_DATA”;CREATE TABLE “JD” .KH(KH_NO VARCHAR2(10) NOT NULL,KH_NAME VARCHAR2(20) NULL,KH_GENDER VARCHAR2(2) NULL,KH_YEAR VARCHAR (3) NULL,KH_JOB VARCHAR2(20) NULL,KH_TEL VARCHAR2(20) NULL,KH_COMPANY VARCHAR2(20) NULL,CONSTRAINT KH_NO_PK PRIMARY KEY (KH_NO)TABLESPACE”USER_DATA”;CREATE TABLE “JD” .DC(DC_DESK VARCHAR2(10) NOT NULL,CP_NO VARCHAR2(10) NOT NULL,CP_NAME VARCHAR2(20) NULL,DC_NUMBER NUMBER(3) NULL,DC_DATE DATE NOT NULL,CONSTRAINT DC_PKPRIMARY KEY(DC_DESK,CP_NO,DC_DATE)TABLESPACE”USER_DATA”;CREATE TABLE “JD” .JS(KH_NO VARCHAR2(20) NOT NULL,DC_DESK VARCHAR2(20) NULL,JS_DZ NUMBER(3) NULL,TOTAL NUMBER(5) NULL,JS_DATE DATE NOT NULL,CONSTRAINT JS_PKPRIMARY KEY(KH_NO,JS_DATE)TABLESPACE”USER_DATA”;3.4数据字典数据项数据项描述=数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系值班员数据项描述数据项含义说明别名类型长度可否为空取值含义与其它数据项的逻辑关系用户名唯一标识名字Char20NOT NULL密码varChar10NOT NULL权限管理权力Varchar50NOT NULL菜谱信息数据项描述数据项含义说明别名数据类型长度可否为空取值含义与其它数据项的逻辑关系菜谱编号唯一标识名字Varchar20NOT NULL菜名称varChar20NOT NULL种类Varchar20NULL价格Number10NULL描述Varchar50NULL荣誉客户信息数据项描述数据项含义说明别名数据类型长度可否为空取值含义与其它数据项的逻辑关系客户号唯一标识名字Varchar10NOT NULL姓名Varchar20NULL性别Varchar2NULL年龄Number3NULL职务Vachar0NULL联系电话Vachar20NULL工作单位Vachar20NULL订餐信息数据项描述数据项含义说明别名数据类型长度可否为空取值含义与其它数据项的逻辑关系桌号唯一标识Varchar20NOT NULL菜谱号唯一标识varChar10NOT NULL菜名称Varchar20NULL数量Number3NULL订餐日期唯一标识DateNULL结算信息数据项描述数据项含义说明别名数据类型长度可否为空取值含义与其它数据项的逻辑关系客户号唯一标识Varchar20NOT NULL桌号varChar20NULL打折情况Varchar3NULL总计Number5NULL日期DateNOT NULL用户数据结构描述数据结构名用户含义说明定义了一个用户的所有有关的信息组成姓名、性别、客户号、年龄、联系电话、工作单位等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()的代码如下,它来处理登陆事务。若成功,则使所有的按钮变为可用,示意登录成功。void CRMSDlg:OnBtnLogin()CDlgLogin dlg;dlg.DoModal();tryCString sql_;sql_.Format(SELECT ZBY_NAME FROM ZBY WHERE ZBY_NAME=%s AND ZBY_PSWD=%s,dlg.m_name, dlg.m_pswd);_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); elseMessageBox(登录失败!);pRst-Close();catch(_com_error& e)AfxMessageBox(e.ErrorMessage();return;void CRMSDlg:OnBtnUpdpwd()CDlgUpdPwd dlg;dlg.DoModal();if (dlg.m_newpswd!=dlg.m_newpswd2)MessageBox(两次输入新密码不一致!);return;下面是一段SQL语句:sql_format(“SELECT ZBY NAME FORM ZBY WHERE ZBYNAME+%s”“AND ZBY_PSWD=%s”dlg.m_name,dlg.m_pswd);这里并没有取出ZBY表中的所有字段(ZBY_NAME和ZBY_PSWD),然后把密码字段和用户的输入作比较来决定登录的与否;而是只取出了值班员名字(ZBY_NAME),密码的校验放在数据库服务器端进行。这主要是基于安全考虑。如果没有确实的需要,就竟量不从数据库里取用户密码这种敏感数据。虽然这只是一个细节,但是很多安全漏洞都是又对这种细节的忽视应起的。登录成功后可以单击“修改口令”按钮激活“修改口令”界面如图所示。这部分事务的处理代码和登录处理类时,只是更为繁琐。所以只给代码,void CRMSDlg:OnBtnUpdpwd()CDlgUpdPwd dlg;dlg.DoModal();if (dlg.m_newpswd!=dlg.m_newpswd2)MessageBox(两次输入新密码不一致!);return;tryCString sql_;sql_.Format(SELECT ZBY_NAME FROM ZBY WHERE ZBY_NAME=%s AND ZBY_PSWD=%s,dlg.m_name, dlg.m_oldpswd);_bstr_t sql = sql_;_RecordsetPtr pRst;pRst = m_DBCnt-Execute(sql, NULL, adCmdText);if (pRst-adoEOF)MessageBox(密码错误!);pRst-Close();return;pRst-Close();sql_.Format(Update ZBY SET ZBY_PSWD=%s WHERE ZBY_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 的按钮事件处理函数中加入这样的代码来激活这个对话框。void CRMSDlg:OnBtnZby()CDlgViewZBY dlg;ShowWindow(SW_HIDE);dlg.DoModal();ShowWindow(SW_SHOW);这个模块,我们采用ADO的ActiveX 控件来实现对数据库表格的管理。4.3设计菜谱管理模块不同的用户需要不同界面每个窗口都需要和数据库连接,这一浪费了 资源,也降低了系统性能,所以好的用户需要一个好的菜谱管理模块。此对话框设计如下图所示。这里用一个列表控件显示读取的数据记录。在 CDlgViewCP:OnInitDialog()中 这个控件(m_list)进行初始化。BOOL CDlgViewCP:OnInitDialog()CDialog:OnInitDialog();m_list.InsertColumn(0,菜谱号);m_list.InsertColumn(1,菜名);m_list.InsertColumn(2,种类);m_list.InsertColumn(3,价格);m_list.InsertColumn(4,备注);RECT rect;m_list.GetWindowRect(&rect);int wid = rect.right - rect.left;m_list.SetColumnWidth(0,wid/5);m_list.SetColumnWidth(1,wid/5);m_list.SetColumnWidth(2,wid/5);m_list.SetColumnWidth(3,wid/5);m_list.SetColumnWidth(4,wid/5);m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);return TRUE; / return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSE使其中m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);一行,这一行使单击列表框时,使整行被选中而不是其中的某一格。在单机到某一行的时候,程序处理这个单击事件(NM_CLICK),把这一行的数据在下面的各个编辑框中显示出来。这是一个很常用的方法,所以把这部分代码列在下表:void CDlgViewCP:OnClickListCp(NMHDR* pNMHDR, LRESULT* pResult)int i = m_list.GetSelectionMark();m_no = m_list.GetItemText(i,0);m_name = m_list.GetItemText(i,1);m_kind = m_list.GetItemText(i,2);m_price = (float)atof(m_list.GetItemText(i,3);m_detail = m_list.GetItemText(i,4);UpdateData(FALSE);*pResult = 0;这里程序将要实现查询菜谱功能:由用户选择查询的目标,然后填入查询内容,就能查到符合条件的菜谱。如果没有任何输入查询条件,则列出所有菜谱。使用ClassWizard添加响应“查询”按钮的事件处理函数。void CDlgViewCP:OnBtnVcqry()CString qry;CString col;GetDlgItemText(IDC_EDIT_VCQRY, qry);GetDlgItemText(IDC_COMBO_VCCOL, col);if (qry.GetLength()=0) | (col.GetLength()=0)RefreshData(SELECT * FROM CP); elseCString sql;sql.Format(SELECT * FROM CP WHERE %s=%s,col, qry);RefreshData(sql);4.4设计订餐模块订餐管理模块里,客户可以逐项输入想订制的菜肴,并随时可对已经作出的选择进行删除和修改。待最终决定后 单击“提交”按钮,用户输入才会保存到数据库中 。用户先要在“桌号”编辑对话框中输入桌号,然后在“菜谱号”组合框中选择菜肴,为使这个组合框包含所有的菜肴号,在CDlgDC:OnInitDialog()添加代码如下:BOOL CDlgDC:OnInitDialog()CDialog:OnInitDialog();m_list.InsertColumn(0,桌号);m_list.InsertColumn(1,菜谱号);m_list.InsertColumn(2,菜名);m_list.InsertColumn(3,数量);m_list.InsertColumn(4,日期);RECT rect;m_list.GetWindowRect(&rect);int wid = rect.right - rect.left;m_list.SetColumnWidth(0,wid/5);m_list.SetColumnWidth(1,wid/5);m_list.SetColumnWidth(2,wid/5);m_list.SetColumnWidth(3,wid/5);m_list.SetColumnWidth(4,wid/5);m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);m_date = CTime:GetCurrentTime();UpdateData(FALSE);_RecordsetPtr pRst = NULL;IADORecordBinding *picRs = NULL; /Interface Pointer declared.(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;/ 清空cpmapcpmap.clear();while (!pRst-adoEOF)m_nos.AddString(rs.m_sz_no);/ 向cpmap中添加一个菜谱号菜名映射cpmap.insert(CPMap:value_type(string(rs.m_sz_no), string(rs.m_sz_name);pRst-MoveNext();picRs-Release();pRst-Close();catch(_com_error& e)AfxMessageBox(e.ErrorMessage();return TRUE;return TRUE; / return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSE4.5设计订餐管理模块订餐管理模块的设计和菜谱管理模块的界面设计基本相同,数组操控方法也 一样,所以二者的设计 基本可以同样处理。void CDlgDC:OnBtnDcadd()char buf128;m_list.InsertItem(0, m_desk);m_nos.GetWindowText(buf, 128);m_list.SetItemText(0, 1, buf);m_list.SetItemText(0, 2, m_name); if (!UpdateData()return;if (m_desk.GetLength()=0)MessageBox(请输入桌号!);return;if (m_name.GetLength()=0)MessageBox(请选择一样菜!);return;sprintf(buf, %f, m_number);m_list.SetItemText(0, 3, buf);_tmstr(m_date, buf);m_list.SetItemText(0, 4, buf);4.6设计结算模块在单击主界面的“结算”按钮。开始结算的时候,最先出现下面的对话框,如图所示:用户在这里输入结算桌号和折扣情况,为符合实际情况,需要在Class Wizard里限制折扣一项的输入0.1-1.0之间。下面的处理单击“结算”按钮事件的函数。void CRMSDlg:OnBtnJs()CDlgBeginJS dlg1;ShowWindow(SW_HIDE);dlg1.DoModal();if (dlg1.m_desk.GetLength()0)CDlgJS dlg2;dlg2.Setup(m_DBCnt, dlg1.m_desk, dlg1.m_dz);dlg2.DoModal(); elseMessageBox(请输入桌号!);ShowWindow(SW_SHOW);在上面的代码中,读取了桌号和折扣的信息后,程序把这2个信息传给一个CDlgJS对话框对象,然后显示这个对话框,如下所示:在这里。程序读出指定桌号的订餐信息,计算出总金额,并根据打折情况算出帐目。,BOOL CDlgJS:OnInitDialog()CDialog:OnInitDialog();m_list.InsertColumn(0,桌号);m_list.InsertColumn(1,菜谱号);m_list.InsertColumn(2,菜名);m_list.InsertColumn(3,菜价);m_list.InsertColumn(4,数量);m_list.InsertColumn(5,订餐日期);RECT rect;m_list.GetWindowRect(&rect);int wid = rect.right - rect.left;m_list.SetColumnWidth(0,wid/6);m_list.SetColumnWidth(1,wid/6);m_list.SetColumnWidth(2,wid/6);m_list.SetColumnWidth(3,wid/6);m_list.SetColumnWidth(4,wid/6);m_list.SetColumnWidth(5,wid/6);m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);m_date = CTime:GetCurrentTime();SetDlgItemText(IDC_EDIT_JSDESK, m_desk);char buf64;sprintf(buf, %f, m_dz);SetDlgItemText(IDC_EDIT_JSDZ, buf);RefreshData();return TRUE; / return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSEfloat CDlgJS:GetPrice(LPCTSTR no)_RecordsetPtr pRst = NULL;IADORecordBinding *picRs = NULL; /Interface Pointer declared.(VC+ Extensions)CCPRs rs;rs.m_f_price = 0.0;CString sql_;sql_.Format(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(0x80000000);TESTHR(pRst-QueryInterface(_uuidof(IADORecordBinding),(LPVOID*)&picRs);TESTHR(picRs-BindToRecordset(&rs);picRs-Release();pRst-Close();return rs.m_f_price;4.7设计帮助模块本系统的帮助模块由2部分组成。一部分是本程序的about窗口。另一个是在外部编译号的chm格式的帮助文件。单击主对话框中相应按钮可以激活2部分功能。5、小结经过半个月的设计和调试,完成了餐饮管理系统。其功能基本符合目前餐饮业的要求.先进性:设计合理适用性:功能齐全,模块式可拆卸易用性:操作简单,容易维护稳定性:系统成熟,稳定,安全性能好在整个设计过程中,也并不是很顺利,也出现过很多的问题,不知不觉就钻牛角尖,在不断学习的过程中我体会到:1、作是一个不断学习新鲜事物的过程,从设计初的不懂到最后能够顺利完成,我体会到在实践中学习的重要性,这对于将来我未来的学习具有重要意义。2、由于自己的专业知识不够,在编程的过程中遇到了很多很多的问题,在一步一步的检查后基本上实现了设计处的要求,但功能不是很完善,有待进一步提高3、设计过程中,经常会遇到困难,我学会通过别人的代码理解语言的含义但这并不是抄袭,然后根据自己的设计要求编写代码。设计中得到老师和同学的悉心指导。4、总之,通过此次数据库课程设计,我深刻体会到要做好一个完整的事情,需要有系统的思维方式和方法,对待一个新的问题,要耐心、要善于运用已有的资源来充实自己。同时我也深刻的认识到,在对待一个新事物时,一定要从整体考虑,完成一步之后再作下一步,这样对于系统而言才能更加有效。对MS SQL SERVER2000有了深刻的认识,积累了使用软件工程的思想来开发软件的经验,同时最重要的是摸索出了一套考虑问题和解决问题的法,这对于我以后的工作和学习有了很大的帮助,谢谢柳老师在百忙中抽出时间给我们指导在此感谢!目录1 前言11.1 目的11.2 背景11.3 定义11.4 参考资料12 系统分析与设计12.1系统目标设计 12.2系统开发设计思想 12.3 系统功能模块 23 数据库设计 23.1数据库需求分析 23.2数据库概念设计 33.3 数据库逻辑结构设计 53.4 数据字典 83.5 数据库物理设计 104 功能模块设计 104.1设计登陆和口令管理模块 104.2设计值班员管理模块 264.3设计登陆和口令管理模块104.4 设计管理模块新 144.5设计定餐模块174.6设计结算模块 204.7 设计帮助模块 235小节25
展开阅读全文