《客房管理系统毕业设计范例(共32页).doc》由会员分享,可在线阅读,更多相关《客房管理系统毕业设计范例(共32页).doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上客房管理系统学 院专 业班 级学 号姓 名指导教师教师职称年月日目录专心-专注-专业摘要【摘要】随着我国经济的迅速发展和假日经济的出现,宾馆酒店业的竞争愈来愈激烈。要想在竞争中取得优势,必须在经营管理、产品服务等方面提高服务管理意识。而对酒店的经营状况起决定作用的是酒店的管理。如何利用先进的管理手段,提高酒店的管理水平,是每一家酒店的管理者所面临的重要课题。简单的服务标准已经不是制胜的锦囊,只有做到最细微之处才有机会让顾客体会到酒店服务的优点,而准确、快捷、周全往往就是最基本的成功要素。虽然计算机管理并不是酒店走向成功的关键元素,但它可以最大限度的为准确、快捷、周全等
2、要素发挥效用提供有力的支持。因此,采用全新的计算机网络和管理系统,将成为提高酒店的管理效率,改善服务水准的重要手段之一。面对信息时代的机遇和挑战,利用科技手段提高企业管理无疑是一条行之有效的途径。信息与科技在酒店管理与现代化建设中显现出越来越重要的地位。在某种意义上,酒店客房状态管理方面的信息化与科学化,已成为现代化酒店的重要标志。【关键词】客房管理系统0 引言通过计算机对物流企业运作的全过程进行全面、效的管理,解决了经营过程中,客户需求和企业资源不能有效协调与统一按排的问题,减少了管理者的工作量,大大提高了企业的工作效率和经济效益,满足了信息时代物流企业管理、发展的需求,成为物流企业适应时代
3、发展中企业管理者必不可少的管理工具。1 需求分析1.1 系统需求分析根据宾馆的具体情况,系统主要功能包括:l 住宿管理。 l 客房管理。l 挂账管理。l 查询统计。l 日结。l 系统设置。1.2 可行性分析随着信息技术的发展和人们对宾馆酒店的要求越来越高,许多宾馆已明显觉得手工管理已不能适应当前宾馆高速发展的需要,宾馆已意识到使用计算机网络和计算机管理的重要性,决定首先在客房部采用宾馆客房管理系统。该系统应充分利用信息技术提高宾馆客房的管理水平、服务水平。宾馆客房管理系统要实现客房预定、住宿登记、追加押金、调房登记、退房结帐、挂账、查询统计、预收销售报表等功能。其中动态实时的住宿登记、客房调整
4、、销售报表、追加押金等有机的联系在一起,对宾馆客房进行全方位的管理。2 总体设计1 项目规划面对服务行业的高速发展和宾馆企业信息化发展的过程中出现的各种情况,本系统主要实现如下功能:q 住宿管理模块住宿管理模块包括客房预定、入住登记、客人续住 、调房登记 、退房结帐5部分。 q 客房管理模块客房管理模块包括客房设置 、客房查询、宿费提醒3部分。q 查询统计模块查询统计模块包括预定房查询、住宿查询、退宿查询、客房宿费统计4部分。q 报表管理模块报表管理模块包括预售报表、客房销售报表2部分。q 挂帐管理模块挂帐管理模块包括客户管理、挂账查询、客户结帐3部分。q 系统设置模块系统设置模块包括系统初使
5、化、权限管理、密码设置3部分。2 系统功能结构图1 客房管理系统功能结构图3 设计目标本软件系统使根据实际需求而开发的,完全能够实现宾馆客房信息的管理,运用本系统可以实现以下目标:q 界面友好,界面设计美观。q 轻松实现客房信息管理的可视,高效,快捷和方便的管理。q 数据存储安全可靠。q 同Windows 操作系统的无缝结合,使用户无需为软件的移植性烦恼。q 根据巧妙的权限设置使保证信息安全保密。3 系统设计1 开发及运行环境系统开发平台:Visual C+ 6.0数据库管理系统软件:SQL Server 2000运行平台:Windows xp/Windows 2000显示像素:最低800*6
6、00,最佳效果1024*768。2 数据库设计1数据库概要说明在SQL Server 2000 数据库中建立名为myhotel的数据库,设计如下数据表:checkinregtable,checkoutregtable,guazhanginfo,kfyd,regmoneytable,roomsetting,setability,usertalbe。图2所示的即为本系统中数据库中的数据表结构图,该数据表结构图包含系统所有数据表。可以清晰地反应数据库信息。图2 数据库概要说明2主要数据表结构数据库中的数据表请参见附录B。4 功能模块设计4.1创建工程框架(1)利用Vc+ 建立一个基于对话框的应用程序
7、,如图3所示,在对话框中输入工程名字和保存目录,点击“确定”按钮。图3 “新建”窗口(2)在弹出的步骤1对话框中选择基于对话框选项,如图4所示,点击“下一步”按钮。图4 “步骤1”窗口(3)以下步骤保持默认选择,直到完成。4.2主窗口设计主程序界面是应用程序提供给用户访问其他功能模块的平台,根据实际需要,物流综合管理系统的主界面采用了传统的“菜单/工具栏/状态栏”风格。物流综合管理系统主程序界面如图5所示。图5 主程序运行界面1客户区设计在生成的对话框内添加图片、静态文本、标签、编辑框、按钮等资源。设置主要资源属性如下表所示:控件的属性和ID见如表1所示。表1 控件的属性和ID控件ID标题ID
8、_BTN_borrowroom开房ID_BTN_returnroom结帐ID_BTN_mainfind查询ID_BTN_daysummery日结ID_BTN_alert提醒ID_CLOSE退出2菜单设计(1)点击insertResourse打开添加资源界面如下图6所示。图6 “Insert Resourse”窗口(2)选择Menu,点击New,插入空白菜单,设置ID属性为IDR_mainMENU然后按照图7编辑菜单项图7 菜单资源主菜单的各个子菜单的ID和标题属性如表2所示。表2 各个子菜单的ID和标题属性控件ID标题ID_MENU_checkinreg住宿登记ID_MENU_roomsett
9、ing客房设置ID_MENU_checkout退宿结帐ID_MENU_addmoney追加押金ID_MENU_changeroomreg调房登记ID_MENU_findroom客房查询ID_MENU_findguazhang挂帐查询ID_MENU_guazhangmoney客户结款ID_MENU_findcheckinreg住宿查询ID_MENU_findcheckoutreg退宿查询ID_MENU_findroomfee宿费提醒ID_MENU_regmoneytable登记预收报表ID_MENU_saleroomtable客房销售报表ID_MENU_saleroomsummary客房销售统计
10、ID_MENU_adm_setting操作员设置ID_MENU_pwd_setting密码设置ID_MENU_setting_begin初始化ID_MENU_setting_ability权限设置ID_MENU_findroomstate房态查看ID_MENU_roomprebook客房预定ID_MENU_findprebookroom预定房查询3代码分析(1)系统主界面操作可以根据用户的权限设定,所以要加入连接数据库功能,故在stdafx.h文件中加入以下代码,提供加入ADO的支持/ add the support of ADO#import c:program filescommon fi
11、lessystemadomsado15.dll no_namespace rename (EOF, adoEOF) 并在Myhotel.h中加入: CDatabase m_DB;_ConnectionPtrm_pConnection;此外在myhotel.cpp的初始化函数中加入连接数据库的代码:ry/连接数据库 CString strConnect; strConnect.Format(DSN=myhotel;); if(!m_DB.OpenEx(strConnect,CDatabase:useCursorLib) AfxMessageBox(Unable to Connect to the
12、 Specified Data Source); return FALSE ; catch(CDBException *pE)/抛出异常 pE-ReportError(); pE-Delete(); return FALSE;/ 初始化COM,创建ADO连接等操作AfxOleInit();m_pConnection.CreateInstance(_uuidof(Connection);/ 在ADO操作中建议语句中要常用try.catch()来捕获错误信息,/ try / 打开本地数据库m_pConnection-Open(Provider=MSDASQL.1;Persist Security
13、Info=False;Data Source=myhotel,adModeUnknown);catch(_com_error e)/抛出可能发生的异常AfxMessageBox(数据库连接失败,确认数据库配置正确!);return FALSE;(2)此主窗口初始化时候要根据登录的操作员的权限来设置登录操作员所有权进行的操作,此功能由函数setuserability来完成,代码为:void CMyhotelDlg:setuserability() m_pRecordset.CreateInstance(_uuidof(Recordset);_variant_t var,varIndex; /lo
14、guserid=操作员01;CString strsqlshow; strsqlshow.Format(SELECT * FROM setability where 操作员=%s,loguserid); try/打开数据库连接m_pRecordset-Open(_variant_t)(strsqlshow), / 查询表中所有字段theApp.m_pConnection.GetInterfacePtr(),/ 获取库接库的IDispatch指针adOpenDynamic,adLockOptimistic,adCmdText);catch(_com_error *e)/捕获异常的发生AfxMes
15、sageBox(e-ErrorMessage();/mynenu=AfxGetMainWnd()-GetMenu();/获得主菜单指针/CString ling=0;tryif(!m_pRecordset-BOF)/判断指针是否在数据集最后m_pRecordset-MoveFirst();elseAfxMessageBox(表内数据为空);return;/MessageBox(eeeeeeeeee);/读取数据表内客房预定字段内容var = m_pRecordset-GetCollect(客房预定);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=lin
16、g)/判断是否有权限操作客房预定模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_roomprebook,MF_DISABLED|MF_GRAYED); /读取数据表内住宿登记字段内容var = m_pRecordset-GetCollect(住宿登记);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作住宿登记模块 /如果没有权利就使该菜单灰显 EnableMenuItem(mynenu-m_hMenu,ID_MENU_checkinreg,MF_DISABLED|
17、MF_GRAYED); /读取数据表内追加押金字段内容 var = m_pRecordset-GetCollect(追加押金);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作追加押金模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_addmoney,MF_DISABLED|MF_GRAYED); /读取数据表内调房登记字段内容 var = m_pRecordset-GetCollect(调房登记);if(var.vt != VT_NULL)if(LPCSTR)_b
18、str_t(var)=ling)/判断是否有权限操作调房登记模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_changeroomreg,MF_DISABLED|MF_GRAYED); /读取数据表内退宿登记字段内容var = m_pRecordset-GetCollect(退宿登记);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作退宿登记模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_checkout
19、,MF_DISABLED|MF_GRAYED); /读取数据表内客房管理字段内容var = m_pRecordset-GetCollect(客房管理);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作客房管理模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_roomsetting,MF_DISABLED|MF_GRAYED); /读取数据表内客房查询字段内容var = m_pRecordset-GetCollect(客房查询);if(var.vt != VT_NUL
20、L)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作客房查询模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_findroom,MF_DISABLED|MF_GRAYED); /读取数据表内房态查看字段内容var = m_pRecordset-GetCollect(房态查看);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作房态查看模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU
21、_findroomstate,MF_DISABLED|MF_GRAYED); /读取数据表内挂帐查询字段内容var = m_pRecordset-GetCollect(挂帐查询);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作挂帐查询模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_findguazhang,MF_DISABLED|MF_GRAYED); /读取数据表内客户结款字段内容var = m_pRecordset-GetCollect(客户结款);if(v
22、ar.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作客户结款模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_guazhangmoney,MF_DISABLED|MF_GRAYED); /读取数据表内预定房查询字段内容var = m_pRecordset-GetCollect(预定房查询);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作预定房查询模块 /如果没有权利就使该菜单灰显 EnableMenuIte
23、m(mynenu-m_hMenu,ID_MENU_findprebookroom,MF_DISABLED|MF_GRAYED); /读取数据表内住宿查询字段内容var = m_pRecordset-GetCollect(住宿查询);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作住宿查询模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_findcheckinreg,MF_DISABLED|MF_GRAYED); /读取数据表内退宿查询字段内容var = m_pRec
24、ordset-GetCollect(退宿查询);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作退宿查询模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_findcheckoutreg,MF_DISABLED|MF_GRAYED); /读取数据表内宿费提醒字段内容 var = m_pRecordset-GetCollect(宿费提醒);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作宿费提醒模块
25、/如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_findroomfee,MF_DISABLED|MF_GRAYED); /读取数据表内登记预收报表字段内容var =m_pRecordset-GetCollect(登记预收报表);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作登记预收报表模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_regmoneytable,MF_DISABLED|MF_GRAYED);
26、/读取数据表内客房销售报表字段内容 var = m_pRecordset-GetCollect(客房销售报表);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作客房销售报表模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_saleroomtable,MF_DISABLED|MF_GRAYED); /读取数据表内客房销售统计报表字段内容var = m_pRecordset-GetCollect(客房销售统计报表);if(var.vt != VT_NULL)if(LPC
27、STR)_bstr_t(var)=ling)/判断是否有权限操作客房销售统计模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_saleroomsummary,MF_DISABLED|MF_GRAYED); /读取数据表内操作员设置字段内容var = m_pRecordset-GetCollect(操作员设置);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作操作员设置模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_
28、MENU_adm_setting,MF_DISABLED|MF_GRAYED); /读取数据表内密码设置字段内容var = m_pRecordset-GetCollect(密码设置);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作密码设置模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_pwd_setting,MF_DISABLED|MF_GRAYED);/读取数据表内初始化字段内容var = m_pRecordset-GetCollect(初始化);if(var
29、.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作初始化模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynenu-m_hMenu,ID_MENU_setting_begin,MF_DISABLED|MF_GRAYED); /读取数据表内权限设置字段内容var = m_pRecordset-GetCollect(权限设置);if(var.vt != VT_NULL)if(LPCSTR)_bstr_t(var)=ling)/判断是否有权限操作权限设置模块 /如果没有权利就使该菜单灰显EnableMenuItem(mynen
30、u-m_hMenu,ID_MENU_setting_ability,MF_DISABLED|MF_GRAYED); mynenu-Detach(); DrawMenuBar();/重绘主菜单catch(_com_error *e)/捕获异常AfxMessageBox(e-ErrorMessage();m_pRecordset-Close();/关闭记录集m_pRecordset = NULL;其他的详细代码代码见源码。4.3 登录模块设计1 实现目标为了防止非法用户进入系统,本软件设计了系统登录窗口。在程序启动时,首先弹出登录窗口,要求用户输入登录信息,如果用户输入不合法,将禁止进入系统。系统
31、登录窗口运行结果下图8所示。图8 登录窗口2 设计步骤(1)点击insertResourse打开添加资源界面如图9所示。图9 “Insert Resourse”窗口选择Dialog,点击New,插入新的对话框。(2)利用类向导为此对话框资源设置属性。在“Name”编辑框中输入窗口类名,例如“CLoginDlg”,在“Base class”组合框中选择一个基类,这里为“CDialog”,单击“OK”按钮创建窗口。(3)在工作区的资源视图中选择新创建的窗口,向窗口中添加静态文本、列表框、编辑框、按钮等资源。设置主要资源属性如表3所示。控件ID对应变量/标题属性IDC_COMBO_usernamem
32、_usernameIDC_passwordm_passwordIDOK确定IDCANCEL取消(4)然后建立和数据库的映射:利用类向导建立记录集的映射类。如图10所示。图10 “新建类”窗口选择基类为CRecordset,点击“OK”按钮进入下一步,如下图11所示。图11 “Database Option”窗口选择数据源类型为ODBC,并选择所使用的数据源,在此选择我们使用的myhotel数据源。点击“OK”,进入下一步,如图12所示。图12 “Select Database Tables”选择所要关联的数据表,因为是操作员登录信息,所以用户表dbo.usertable数据表,点击OK完毕。3
33、代码分析(1)可以看到我们已经创建了一个新类CUserset,其头文件的关键代码如下:class CUserset : public CRecordsetpublic:CUserset(CDatabase* pDatabase = NULL);DECLARE_DYNAMIC(CUserset)/ Field/Param Data/AFX_FIELD(CUserset, CRecordset)CStringm_user_name;CStringm_user_pwd;/AFX_FIELD/ Overrides/ ClassWizard generated virtual function over
34、rides/AFX_VIRTUAL(CUserset)public:virtual CString GetDefaultConnect(); / Default connection stringvirtual CString GetDefaultSQL(); / Default SQL for Recordsetvirtual void DoFieldExchange(CFieldExchange* pFX); / RFX support/AFX_VIRTUAL/ Implementation#ifdef _DEBUGvirtual void AssertValid() const;virt
35、ual void Dump(CDumpContext& dc) const;#endif;(2)点击“确定”按钮可以登录到系统主界面,此按钮的相应函数为:void CLoginDlg:OnOK() / TODO: Add extra validation here CString sqlStr;UpdateData(true);if(m_username.IsEmpty()/判断用户名是否为空AfxMessageBox(请输入用户名!);return;/construct the sql string /创建查询语句sqlStr=SELECT * FROM usertalbe WHERE us
36、er_name=;sqlStr+=m_username;sqlStr+=;sqlStr+=AND user_pwd=;sqlStr+=m_password;sqlStr+=;/MessageBox(sqlStr);/打开数据库if(!myuserset.Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr)AfxMessageBox(user表打开失败!);return;loguserid=m_username;/保存操作员ID,其他窗口要用if(!myuserset.IsEOF()/关闭数据库连接myuserset.Close(); CDialog:OnOK();else
37、/给出错误提示AfxMessageBox(登陆失败!);m_username=_T();m_password=_T();UpdateData(false);/更新显示myuserset.Close();/关闭数据库连接return;(3)为了按下Enter键控制输入焦点,故加入PreTranslateMessage方法,代码如下:BOOL CLoginDlg:PreTranslateMessage(MSG* pMsg) / TODO: Add your specialized code here and/or call the base classif(pMsg-message=WM_KEYD
38、OWN&pMsg-wParam=VK_RETURN)DWORD def_id=GetDefID(); if(def_id!=0) /MSG消息的结构中的hwnd存储的是接收该消息的窗口句柄 CWnd *wnd=FromHandle(pMsg-hwnd); char class_name16; if(GetClassName(wnd-GetSafeHwnd(),class_name,sizeof(class_name)!=0) DWORD style=:GetWindowLong(pMsg-hwnd,GWL_STYLE); if(style&ES_MULTILINE)=0) if(strnicmp(class_name,edit,5)=0) /将焦点设置到默认按钮上面 GetDlgItem(LOWORD(def_id)-SetFocus(); pMsg-wParam=VK_TAB;/重载回车键盘消息为table键盘消息,ok! return CDialog:PreTranslateMessage(pMsg);4.4 住宿管理模块设计