酒店管理系统的设计与实现Word格式文档下载.docx

上传人:b****5 文档编号:18349968 上传时间:2022-12-15 格式:DOCX 页数:16 大小:26.79KB
下载 相关 举报
酒店管理系统的设计与实现Word格式文档下载.docx_第1页
第1页 / 共16页
酒店管理系统的设计与实现Word格式文档下载.docx_第2页
第2页 / 共16页
酒店管理系统的设计与实现Word格式文档下载.docx_第3页
第3页 / 共16页
酒店管理系统的设计与实现Word格式文档下载.docx_第4页
第4页 / 共16页
酒店管理系统的设计与实现Word格式文档下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

酒店管理系统的设计与实现Word格式文档下载.docx

《酒店管理系统的设计与实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《酒店管理系统的设计与实现Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。

酒店管理系统的设计与实现Word格式文档下载.docx

根据系统功能的要求,考虑到VisualC++的编程特点,将酒店

管理系统分解成前台和后台两部分,并将系统分解为几个比较小

的功能模块分别进行开发。

使得开发过程更具条理性,并且方便

对模块功能进行修改或添加新的功能模块,从而使整个系统能够

随着酒店业务的扩展进行功能的升级。

为了增强系统的安全性,

需要设计登录模块,登录成功后才可以使用全部功能.整个酒店管

理系统的设计方案如图2所示。

图1软件系统结构

图2系统设计方案

摘要:

本文主要介绍了利用VisualC++开发的酒店管理系统。

随着软件开发技术和数据库技术的完善与发展,国内外的企业已经开

始充分利用各种各样的系统管理软件来管理诸如销售信息、产品信息、员工信息等大量日趋繁杂的资料,计算机辅助管理的高效性和高

安全性等优点使得传统的管理方式黯然失色,也为系统管理软件的发展提供了更广阔的前景和发展空间。

本系统设计的主要目标是设计

一个面向中小型酒店的简单易用的酒店管理系统。

前台以VisualC++为开发工具,设计软件的界面和各个功能模块;

后台使用SQL

Server2000进行系统数据库的连接和管理。

本系统已基本实现了中小型酒店常用的点菜、订菜、结算等功能,帮助酒店建立了菜谱数据库

和销售存根数据库,可以方便地进行查询,并在系统的易用性和安全性两方面进行了相应的完善。

关键词:

VisualC++;

安全性;

数据库

中图分类号:

TP315文献标识码:

A文章编号:

1009-3044(2007)19-40023-03

TheDesignmentandImplementationofRestaurantManagementSystem

GANChao-Song1,XIARong2

(1.SchoolofComputing,JiangxiCityVocationalInstitute,Nanchang330004,China;

2.ScienceandTechnologyCollegeofNCHU,Nanchang

330034,China)

Abstract:

ThispapermainlyintroducesthemanagementsystemofrestaurantdevelopedwithMicrosoftVisualC++.Withthedevelopment

ofsoftwareanddatabasetechnology,thedomesticcorporationsandtheoverseacorporationsalreadybegintomakefulluseofallkindsofsystem

managementsoftwaretomanagelotsofinteriorthings,suchasvenditioninformation、productioninformation、employeeinformationandsoon.

Computer-aidedmanagementhaslotsofmeritscomparedwithtraditionalmanagementmode,suchashighefficiencyandhighsecurity.Italso

suppliesmorewideforegroundanddevelopingspaceforthedevelopmentofsystemmanagementsoftware.Themainaimofthissystemistodesign

aeasily-usingmanagementsystemofrestaurantforpettyrestaurant.FrontendusesVisualC++asdevelopingtool,designsmaininterface

andfunctionmodules;

backgrounduseSQLServer2000forconnectingandmanagingsystemdatabase.Thissystembasiclyactualizedfunctions

incommonuseoforderdishes、prearrangement、settleaccountsforpettyrestaurant,andhelprestauranttosetupdatabaseofbillsoffareandvendition

information.Theycanexpedientlybequeryedandstrengthentheeasily-usingandsecurityofsystem.

Keywords:

VisualC++;

security;

database

23

4设计要点与注意事项

4.1设计要点

图形化界面尽量做到美观简洁;

充分考虑到系统的安全性;

通过使用map类快速保存和检索数据集结果;

通过使用数据绑定技术优化代码。

4.2注意事项

系统运行前数据库要进行正确配置;

算法应简单明了,有较高的时空效率;

注意学习使用数据绑定等新技术;

设计登录模块时注意增强安全性。

5关键技术

5.1数据库的连接

将SQLServer默认的数据库设置为酒店管理系统所在的

RMS后,就可以在程序中使用DSN来访问SQLServer数据库了。

CRMSDlg:

:

OnInitDialog()中连接数据库部分的代码如下:

try{m_DBCnt.CreateInstance(_uuidof(Connection));

m_DBCnt->

ConnectionString="

DSN=RMS;

UID=fdd;

PWD=

121"

;

m_DBCnt->

Open("

"

"

-1);

}catch(_com_error&

e)

{AfxMessageBox(e.ErrorMessage());

this->

EndDialog(0);

}

returnTRUE;

其中DSN=后面即为酒店管理系统所用的数据库的名称,可

根据实际情况进行更改。

5.2菜谱管理模块

菜谱对话框的设计采用一个列表框控件显示读取的数据记

录,并在CDlgViewCP:

OnInitDialog()中对这个控件(m_list)进行初

始化(分割列,设置列宽,设置风格等),其中m_list.SetExtendedStyle

(LVS_EX_FULLROWSELECT);

这一行代码使单击列表框时选中其

中的一整行,而不是其中的某一格。

在单击并选中某一行的时候,

程序处理这个单击事件,并将这一行的数据在下面的列表框中显

示出来,利用函数CDlgViewCP:

OnClickListCp来实现这一点:

inti=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;

另外在菜谱管理模块中还要同时实现菜谱查询功能,即由用

户选择查询目标(编号,菜名,种类),再填入所要查询的内容就可在

菜谱中查询到符合条件的菜。

如果没有输入任何查询条件,那么

就列出菜谱中所有的菜。

voidCDlgViewCP:

RefreshData(LPCTSTRqry)

{m_list.DeleteAllItems();

m_list.SetRedraw(FALSE);

_RecordsetPtrpRst=NULL;

IADORecordBinding*picRs=NULL;

//InterfacePointerdeclared.(

VC++Extensions)

CCPRsrs;

try{_bstr_tstrSQL=qry;

TESTHR(pRst.CreateInstance(_uuidof(Recordset)));

pRst=m_DBCnt->

Execute(strSQL,NULL,adCmdText);

//数据绑定(DataBinding)

TESTHR(pRst->

QueryInterface(_uuidof(IADORecordBinding),

(LPVOID*)&

picRs));

TESTHR(picRs->

BindToRecordset(&

rs));

inti=0;

charbuf[128];

while(!

pRst->

adoEOF)

{m_list.InsertItem(0,rs.m_sz_no);

m_list.SetItemText(i,1,rs.m_sz_name);

m_list.SetItemText(i,2,rs.m_sz_kind);

sprintf(buf,"

%f"

rs.m_f_price);

m_list.SetItemText(i,3,buf);

m_list.SetItemText(i,4,rs.m_sz_detail);

//移到下一条记录

pRst->

MoveNext();

picRs->

Release();

Close();

catch(_com_error&

m_list.SetRedraw(TRUE);

return;

在上面的这段RefreshData函数的代码中,由于使用了ADO

2.0forVisualC++Extensions所提供的新特性DataBinding(数据

绑定)技术,所以代码显得比较简洁。

5.3登录管理模块

在未登录的时候,主对话框中的按钮,除了登录,退出,帮助,

关于等项,全是不可用的。

为了达到这一效果,在CRMSDlg:

OnInitDialog()中加入如下代码:

GetDlgItem(IDC_BTN_UPDPWD)->

EnableWindow(FALSE);

GetDlgItem(IDC_BTN_DC)->

GetDlgItem(IDC_BTN_JS)->

GetDlgItem(IDC_BTN_CP)->

GetDlgItem(IDC_BTN_VIEWDC)->

若登录成功后,只需将FALSE换成TRUE,则所有按钮都变

为可用。

将进行登录验证的SQL代码加入到主对话框的事件处理

函数CRMSDlg:

OnBtnLogin()中,用来处理登录事务:

sql_.Format("

SELECT值班员FROMZBYWHERE值班员=

'

%s'

AND密码='

dlg.m_name,dlg.m_pswd);

这里并没有取出值班员表中的所有字段(值班员和密码),然

后把密码字段和用户的输入作比较来决定登录成功与否;

而是只

取出了值班员名字(值班员),密码的校验放在数据库服务器端进

行,这主要是基于安全的考虑。

如果没有确实的需要,就尽量不从

数据库里取用户密码这种敏感数据,以免产生安全漏洞,削弱系

统的安全性。

修改密码部分的处理代码和登录部分类似,只是不但要进行

旧密码的验证,还要确认两次输入的新密码一致,如旧密码错误

或两次输入的新密码不一致则需要给出相应的提示。

另外还要利

用SQL语句向数据库中写入新密码:

sql_.Format("

UpdateZBY

SET密码='

%s'

WHERE值班员='

dlg.m_newpswd,dlg.

m_name);

密码修改成功后则给出密码已修改成功的提示。

5.4点菜模块

在这个模块里可以根据顾客的需要逐项输入菜谱中的菜肴,

并可对已经做出的选择进行删除和修改。

待最终决定之后单击提

交按钮就会将结果保存到数据库中。

点菜订菜操作首先要在桌号

编辑框中输入桌号,然后在编号选择框中通过选择菜谱中的编号

来选择菜肴。

这样顾客只需说出所需菜肴在菜谱上的编号,值班

员就可以很快地找到顾客所需要的菜,而不必让顾客报出菜名,

提高服务效率,降低出错率。

为了使编号选择框中包含所有的菜

谱号,在CDlgDC:

OnInitDialog()中应包含如下代码:

try

{_bstr_tstrSQL("

SELECT*FROMCP"

);

cpmap.clear();

//清空cpmap

{m_nos.AddString(rs.m_sz_no);

//向cpmap中添加一个[菜谱号-菜名]映射

cpmap.insert(CPMap:

value_type(string(rs.m_sz_no),string(rs.

24

m_sz_name)));

上面代码中的cpmap变量用于保存一组[菜谱号-菜名]的映

射,这样在用户选中某一个菜谱编号是能迅速的由编号找到对应

的菜,而不用去读取数据库.值班员在编号选择框中选中一个编号

的事件为CBN_CLOSEUP,这个事件的处理函数为

CDlgDC:

OnCloseupComboDcnos():

voidCDlgDC:

OnCloseupComboDcnos()

{charbuf[128];

m_nos.GetWindowText(buf,128);

CPMap:

const_iteratorit=cpmap.find(string(buf));

if(it!

=cpmap.end())

{stringname=(*it).second;

GetDlgItem(IDC_EDIT_DCNAME)->

SetWindowText(name.data());

}}

cpmap的定义在DlgDC.cpp的开头:

#pragmawarning(disable:

4786)

4503)

#include<

map>

string>

usingnamespacestd;

typedefmap<

string,string>

CPMap;

CPMapcpmap;

这里定义的CPMap类建立了一个从字符串到字符串的映

射,就是从map和string模板类来的,CPMap是一个STL(Standard

TemplateLibrary)类,而cpmap则是CPMap型的全局变量。

另外由

于使用了模板,会在类的内部产生相当长的类型名,从而在编译

时出现C4787警告,提示指示类型名长度超过255个字符,所以

用“#pragmawarning(disable:

4786)”来关掉这个警告。

值班员在订餐模块中修改、删除和增加菜肴都不会对数据库

作修改,而是先在列表框控件m_list中进行这些操作。

只有在单

击提交按钮之后,才会向数据库中提交数据。

每向数据库中加入

一条,就会自动清除列表框中相应的输入。

全部添加成功后,列表

框才会被全部清空。

如果中途出现错误,则停止添加。

列表框中剩

下的项就是没有成功添加的项,值班员可对其进行修改后再进行

添加。

这部分的主要代码如下:

{TESTHR(pRst.CreateInstance(_uuidof(Recordset)));

DC"

_variant_t((IDispatch*)m_DBCnt,true),

adOpenKeyset,adLockOptimistic,adCmdTable);

//逐项读取,逐项提交

while(m_list.GetItemCount()>

0)

{

m_list.GetItemText(0,0,rs.m_sz_desk,sizeof(rs.m_sz_desk));

m_list.GetItemText(0,1,rs.m_sz_no,sizeof(rs.m_sz_no));

m_list.GetItemText(0,2,rs.m_sz_name,sizeof(rs.m_sz_name));

rs.m_f_number=(float)atof(m_list.GetItemText(0,3));

m_list.GetItemText(0,4,rs.m_sz_date,sizeof(rs.m_sz_date));

COleSafeArrayvaFieldlist,vaValuelist;

rs.FillFieldsArray(vaFieldlist,vaValuelist);

//提交一条菜谱记录

TESTHR(pRst->

AddNew(vaFieldlist,vaValuelist));

//从列表控件中删除已成功添加的菜

m_list.DeleteItem(0);

在将数据添加到数据库后将显示操作完成的提示。

5.5结算模块

开始结算时,将先出现要求输入桌号和折扣率的对话框,为

符合实际情况,需要在ClassWizard里限制折扣率一项的输入在

0.1-1.0之间。

如未输入桌号就点击确定,则会给出要求输入桌号

的提示。

下面是处理单击结算按钮事件的函数:

voidCRMSDlg:

OnBtnJs()

{CDlgBeginJSdlg1;

ShowWindow(SW_HIDE);

dlg1.DoModal();

if(dlg1.m_desk.GetLength()>

{CDlgJSdlg2;

dlg2.Setup(m_DBCnt,dlg1.m_desk,dlg1.m_dz);

dlg2.DoModal();

}else

{MessageBox("

请输入桌号!

"

ShowWindow(SW_SHOW);

在上面的代码中,读取了桌号和折扣率的信息之后,程序把

这两个信息传给一个CDlgJS对话框对象,然后显示这个对话框。

程序读出指定桌号的订餐信息,计算出总金额,并根据打折情况

计算出结算金额,这部分工作在OnInitDialog中完成:

floatCDlgJS:

GetPrice(LPCTSTRno)

{_RecordsetPtrpRst=NULL;

rs.m_f_price=0.0;

CStringsql_;

sql_.Format("

SELECT*FROMCPWHERE编号='

no);

_bstr_tstrSQL=sql_;

if(pRst->

adoEOF)_com_issue_error(0x80000000);

TESTHR(pRst->

QueryInterface(__uuidof(IADORecordBinding),

returnrs.m_f_price;

结算完成后单击保存帐单按钮,程序将在结算表中添加一条

记录,并删除已经结算过的订菜信息。

由于涉及到两个相互关联

的操作,所以必须使用ADO的事务功能。

在添加操作之前调用

Connection对象的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1