酒店管理系统的设计与实现(22页).doc

上传人:1595****071 文档编号:37804509 上传时间:2022-09-02 格式:DOC 页数:22 大小:161.50KB
返回 下载 相关 举报
酒店管理系统的设计与实现(22页).doc_第1页
第1页 / 共22页
酒店管理系统的设计与实现(22页).doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《酒店管理系统的设计与实现(22页).doc》由会员分享,可在线阅读,更多相关《酒店管理系统的设计与实现(22页).doc(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-酒店管理系统的设计与实现-第 22 页酒店管理系统的设计与实现1 引言酒店管理系统是我们常说的MIS (Management InformationSystem, 管理信息系统)的一种, 在强调管理, 强调信息的现代社会中它越来越得到普及。酒店管理系统的主要目标是实现对酒店内部各种管理的电子化和自动化, 提高酒店的办公效率, 为高质量的酒店服务提供保证。在酒店业竞争越来越激烈的今天, 努力在市场竞争中脱颖而出, 已经成为每位酒店经营者所追求的目标。酒店如何才能提高服务质量, 其管理能力显得越来越重要。由于使用了先进的数据库管理技术, 酒店管理系统对提高酒店的管理能力将会起到比较重大的作用,

2、整个系统的基本设计目标是实现系统界面友好美观、简单易用、功能全面并有较高的安全性。本系统需要实现中小型酒店常用的点菜、订菜、结算等功能, 并帮助酒店建立菜谱数据库和销售存根数据库, 能够方便地进行查询, 并在系统的易用性和安全性两方面进行相应的完善。2 系统主要模块(1)登录管理模块; (2)菜谱管理模块; (3)点菜订菜模块; (4)结算模块; (5)帮助模块; (6)数据库设计; (7)系统界面设计。软件系统由各个具体的功能模块组成, 若值班员未登录或登录失败, 则只能使用登录, 帮助, 关于, 退出这四个功能模块。登录成功后才可以使用全部的功能模块。各个功能模块都是分别进行开发的, 这样

3、就便于日后拓展功能, 也易于检查和修改错误。软件的系统结构如图1 所示。3 系统设计方案根据系统功能的要求, 考虑到Visual C+的编程特点, 将酒店管理系统分解成前台和后台两部分, 并将系统分解为几个比较小的功能模块分别进行开发。使得开发过程更具条理性, 并且方便对模块功能进行修改或添加新的功能模块, 从而使整个系统能够随着酒店业务的扩展进行功能的升级。为了增强系统的安全性,需要设计登录模块, 登录成功后才可以使用全部功能.整个酒店管理系统的设计方案如图2 所示。图1 软件系统结构图2 系统设计方案摘要: 本文主要介绍了利用Visual C+开发的酒店管理系统。随着软件开发技术和数据库技

4、术的完善与发展, 国内外的企业已经开始充分利用各种各样的系统管理软件来管理诸如销售信息、产品信息、员工信息等大量日趋繁杂的资料, 计算机辅助管理的高效性和高安全性等优点使得传统的管理方式黯然失色, 也为系统管理软件的发展提供了更广阔的前景和发展空间。本系统设计的主要目标是设计一个面向中小型酒店的简单易用的酒店管理系统。前台以Visual C+ 为开发工具, 设计软件的界面和各个功能模块; 后台使用SQLServer 2000 进行系统数据库的连接和管理。本系统已基本实现了中小型酒店常用的点菜、订菜、结算等功能, 帮助酒店建立了菜谱数据库和销售存根数据库, 可以方便地进行查询, 并在系统的易用性

5、和安全性两方面进行了相应的完善。关键词: Visual C+; 安全性; 数据库中图分类号: TP315 文献标识码: A 文章编号: 1009- 3044(2007)19- 40023- 03The Des ignment and Implementation of Res taurant Management Sys temGAN Chao- Song1, XIA Rong2(1.School of Computing, Jiangxi City Vocational Institute, Nanchang 330004, China; 2.Science and Technology C

6、ollege of NCHU, Nanchang330034, China)Abs tract:This paper mainly introduces the management system of restaurant developed with Microsoft Visual C+. With the developmentof software and database technology, the domestic corporations and the oversea corporations already begin to make full use of all k

7、inds of systemmanagement software to manage lots of interior things, such as vendition information、production information、employee information and so on.Computer- aided management has lots of merits compared with traditional management mode, such as high efficiency and high security. It alsosupplies

8、 more wide foreground and developing space for the development of system management software. The main aim of this system is to designa easily- using management system of restaurant for petty restaurant. Front end uses Visual C+ as developing tool, designs main interfaceand function modules; backgro

9、und use SQL Server 2000 for connecting and managing system database. This system basicly actualized functionsin common use of order dishes、prearrangement、settle accounts for petty restaurant, and help restaurant to set up database of bills of fare and venditioninformation. They can expediently be qu

10、eryed and strengthen the easily- using and security of system.Key words :Visual C+; security; database234 设计要点与注意事项4.1 设计要点图形化界面尽量做到美观简洁;充分考虑到系统的安全性;通过使用map 类快速保存和检索数据集结果;通过使用数据绑定技术优化代码。4.2 注意事项系统运行前数据库要进行正确配置;算法应简单明了, 有较高的时空效率;注意学习使用数据绑定等新技术;设计登录模块时注意增强安全性。5 关键技术5.1 数据库的连接将SQL Server 默认的数据库设置为酒店管理系

11、统所在的RMS 后, 就可以在程序中使用DSN 来访问SQL Server 数据库了。CRMSDlg:OnInitDialog()中连接数据库部分的代码如下:trym_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);return TRUE;其中DSN=后面即为酒店

12、管理系统所用的数据库的名称, 可根据实际情况进行更改。5.2 菜谱管理模块菜谱对话框的设计采用一个列表框控件显示读取的数据记录, 并在CDlgViewCP:OnInitDialog()中对这个控件(m_list)进行初始化(分割列, 设置列宽, 设置风格等), 其中(LVS_EX_FULLROWSELECT);这一行代码使单击列表框时选中其中的一整行, 而不是其中的某一格。在单击并选中某一行的时候,程序处理这个单击事件, 并将这一行的数据在下面的列表框中显示出来, 利用函数CDlgViewCP:OnClickListCp 来实现这一点:int i = m_list.GetSelectionMa

13、rk();m_no = m_list.GetItemText(i,0);m_name = m_list.GetItemText(i,1);m_kind = m_list.GetItemText(i,2);etItemText(i,3);m_detail = m_list.GetItemText(i,4);UpdateData(FALSE);*pResult = 0;另外在菜谱管理模块中还要同时实现菜谱查询功能, 即由用户选择查询目标(编号,菜名,种类), 再填入所要查询的内容就可在菜谱中查询到符合条件的菜。如果没有输入任何查询条件, 那么就列出菜谱中所有的菜。void CDlgViewCP:R

14、efreshData(LPCTSTR qry)m_list.DeleteAllItems();m_list.SetRedraw(FALSE);_RecordsetPtr pRst = NULL;IADORecordBinding *picRs = NULL; /Interface Pointer declared.(VC+ Extensions)CCPRs rs;try _bstr_t strSQL = qry;TESTHR(pRst.CreateInstance(_uuidof(Recordset);pRst = m_DBCnt- Execute(strSQL, NULL, adCmdTex

15、t);/数据绑定(Data Binding)TESTHR (pRst - QueryInterface (_uuidof (IADORecordBinding),(LPVOID*)&picRs);TESTHR(picRs- BindToRecordset(&rs);int i = 0;char buf128;while (! pRst- adoEOF)m_list.InsertItem(0, rs.m_sz_no);ame);m_list.SetItemText(i, 2, rs.m_sz_kind);sprintf(buf, %f, rs.m_f_price); m_list.SetItem

16、Text(i, 3, buf);m_list.SetItemText(i, 4, rs.m_sz_detail);/移到下一条记录pRst- MoveNext();picRs- Release();pRst- Close();catch(_com_error& e)AfxMessageBox(e.ErrorMessage();m_list.SetRedraw(TRUE);return;m_list.SetRedraw(TRUE);在上面的这段RefreshData 函数的代码中, 由于使用了ADO2.0 for Visual C+ Extensions 所提供的新特性Data Binding

17、(数据绑定)技术, 所以代码显得比较简洁。5.3 登录管理模块在未登录的时候, 主对话框中的按钮, 除了登录, 退出, 帮助,关于等项, 全是不可用的。为了达到这一效果, 在CRMSDlg:OnInitDialog()中加入如下代码:GetDlgItem(IDC_BTN_UPDPWD)- EnableWindow(FALSE);GetDlgItem(IDC_BTN_DC)- EnableWindow(FALSE);GetDlgItem(IDC_BTN_JS)- EnableWindow(FALSE);GetDlgItem(IDC_BTN_CP)- EnableWindow(FALSE);Get

18、DlgItem(IDC_BTN_VIEWDC)- EnableWindow(FALSE);若登录成功后, 只需将FALSE 换成TRUE, 则所有按钮都变为可用。将进行登录验证的SQL 代码加入到主对话框的事件处理函数CRMSDlg:OnBtnLogin()中, 用来处理登录事务:sql_.Format (SELECT 值班员FROM ZBY WHERE 值班员=%s AND 密码=%s,dlg.m_name, dlg.m_pswd);这里并没有取出值班员表中的所有字段(值班员和密码), 然后把密码字段和用户的输入作比较来决定登录成功与否; 而是只取出了值班员名字(值班员), 密码的校验放在数

19、据库服务器端进行, 这主要是基于安全的考虑。如果没有确实的需要, 就尽量不从数据库里取用户密码这种敏感数据, 以免产生安全漏洞, 削弱系统的安全性。修改密码部分的处理代码和登录部分类似, 只是不但要进行旧密码的验证, 还要确认两次输入的新密码一致, 如旧密码错误或两次输入的新密码不一致则需要给出相应的提示。另外还要利用SQL 语句向数据库中写入新密码: sql_.Format (Update ZBYSET 密码=% s WHERE 值班员=% s,dlg.m_newpswd, dlg.m_name); 密码修改成功后则给出密码已修改成功的提示。5.4 点菜模块在这个模块里可以根据顾客的需要逐项

20、输入菜谱中的菜肴,并可对已经做出的选择进行删除和修改。待最终决定之后单击提交按钮就会将结果保存到数据库中。点菜订菜操作首先要在桌号编辑框中输入桌号, 然后在编号选择框中通过选择菜谱中的编号来选择菜肴。这样顾客只需说出所需菜肴在菜谱上的编号, 值班员就可以很快地找到顾客所需要的菜, 而不必让顾客报出菜名,提高服务效率, 降低出错率。为了使编号选择框中包含所有的菜谱号, 在CDlgDC:OnInitDialog()中应包含如下代码:try_bstr_t strSQL(SELECT * FROMCP);pRst = m_DBCnt- Execute(strSQL, NULL, adCmdText);

21、TESTHR (pRst - QueryInterface (_uuidof (IADORecordBinding),(LPVOID*)&picRs);TESTHR(picRs- BindToRecordset(&rs);int i = 0;cpmap.clear(); / 清空cpmapwhile (! pRst- adoEOF)m_nos.AddString(rs.m_sz_no);/向cpmap 中添加一个菜谱号- 菜名映射cpmap.insert (CPMap:value_type (string (rs.m_sz_no), string(rs.24m_sz_name);pRst- M

22、oveNext();picRs- Release();pRst- Close();catch(_com_error& e)AfxMessageBox(e.ErrorMessage();return TRUE;上面代码中的cpmap 变量用于保存一组菜谱号- 菜名的映射, 这样在用户选中某一个菜谱编号是能迅速的由编号找到对应的菜, 而不用去读取数据库.值班员在编号选择框中选中一个编号的事件为CBN_CLOSEUP, 这个事件的处理函数为CDlgDC:OnCloseupComboDcnos():void CDlgDC:OnCloseupComboDcnos()char buf128;m_nos.G

23、etWindowText(buf, 128);CPMap:const_iterator it = cpmap.find(string(buf);if (it! =cpmap.end()string name = (*it).second;GetDlgItem(IDC_EDIT_DCNAME)- SetWindowText(name.data();cpmap 的定义在DlgDC.cpp 的开头:#pragma warning(disable: 4786)#pragma warning(disable: 4503)#include #include using namespace std;type

24、def map CPMap;CPMap cpmap;这里定义的CPMap 类建立了一个从字符串到字符串的映射, 就是从map 和string 模板类来的, CPMap 是一个STL(StandardTemplate Library)类, 而cpmap 则是CPMap 型的全局变量。另外由于使用了模板, 会在类的内部产生相当长的类型名, 从而在编译时出现C4787 警告, 提示指示类型名长度超过255 个字符, 所以用“#pragma warning(disable: 4786)”来关掉这个警告。值班员在订餐模块中修改、删除和增加菜肴都不会对数据库作修改, 而是先在列表框控件m_list 中进行

25、这些操作。只有在单击提交按钮之后, 才会向数据库中提交数据。每向数据库中加入一条, 就会自动清除列表框中相应的输入。全部添加成功后, 列表框才会被全部清空。如果中途出现错误, 则停止添加。列表框中剩下的项就是没有成功添加的项, 值班员可对其进行修改后再进行添加。这部分的主要代码如下:tryTESTHR(pRst.CreateInstance(_uuidof(Recordset);pRst- Open(DC,_variant_t(IDispatch *) m_DBCnt, true),adOpenKeyset, adLockOptimistic, adCmdTable);/逐项读取,逐项提交wh

26、ile (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

27、);COleSafeArray vaFieldlist, vaValuelist;rs.FillFieldsArray(vaFieldlist,vaValuelist);/提交一条菜谱记录TESTHR(pRst- AddNew(vaFieldlist, vaValuelist);/从列表控件中删除已成功添加的菜m_list.DeleteItem(0);pRst- Close();catch(_com_error& e)AfxMessageBox(e.ErrorMessage();return;在将数据添加到数据库后将显示操作完成的提示。5.5 结算模块开始结算时, 将先出现要求输入桌号和折扣率

28、的对话框, 为符合实际情况, 需要在ClassWizard 里限制折扣率一项的输入在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(请输入桌号! );Sho

29、wWindow(SW_SHOW);在上面的代码中, 读取了桌号和折扣率的信息之后, 程序把这两个信息传给一个CDlgJS 对话框对象, 然后显示这个对话框。程序读出指定桌号的订餐信息, 计算出总金额, 并根据打折情况计算出结算金额, 这部分工作在OnInitDialog 中完成:float CDlgJS:GetPrice(LPCTSTR no)_RecordsetPtr pRst = NULL;IADORecordBinding *picRs = NULL; /Interface Pointer declared.(VC+ Extensions)CCPRs rs;rs.m_f_price =

30、0.0;CString sql_;sql_.Format(SELECT * FROMCP WHERE 编号=%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- Rele

31、ase();pRst- Close();return rs.m_f_price;结算完成后单击保存帐单按钮, 程序将在结算表中添加一条记录, 并删除已经结算过的订菜信息。由于涉及到两个相互关联的操作, 所以必须使用ADO 的事务功能。在添加操作之前调用Connection 对象的BeginTrans 方法开始一个事务, 在删除操作完成之后调用CommitTrans 提交这个事务: 如果其中的某一步出错,通过RollBackTrans 方法, 数据库将保持原样。处理单击保存帐单按钮事件的函数:void CDlgJS:OnBtnJssave()if (! UpdateData()return;if

32、 (m_no.GetLength()=0)MessageBox(请输入客户姓名! );return;_RecordsetPtr pRst = NULL;CJSRs rs;trym_DBCnt- BeginTrans(); /开始事务TESTHR(pRst.CreateInstance(_uuidof(Recordset);pRst - Open (JS,_variant_t (IDispatch *) m_DBCnt, true),adOpenKeyset, adLockOptimistic, adCmdTable); /打开结算表格strcpy(rs.m_sz_no, m_no); /填写结

33、算记录strcpy(rs.m_sz_desk,m_desk);rs.m_f_dz = m_dz;rs.m_f_total = m_total;_tmstr(m_date, rs.m_sz_date);COleSafeArray vaFieldlist, vaValuelist;rs.FillFieldsArray(vaFieldlist,vaValuelist);/添加结算记录TESTHR(pRst- AddNew(vaFieldlist, vaValuelist);pRst- Close();/删除订菜记录CString sql_; ( 下转第79 页)25网络地址转换一协议转换(NAT-

34、PT)包括两个组成部分:网络地址转换协议和协议转换。其中地址转化是指通过使用NAT 网关,将一种IP 网络的地址转换为另一种IP 网络的地址, 它允许内部网络使用一组在公网中从不使用的保留地址。在使用这项技术是可以将IPv6 网视为一个独立而封闭的局域网, 它需要使用一个地址翻译器进行地址翻译。当内网的主机向外发送数据包时, 将内部的IP 地址转换为外部的公网地址, 当数据包从外部网络回复数据包时, 再将公网地址转换为内部网络的地址。协议转换是指根据IPv6 和IPv4 之间的差异对数据包的首部做相应的修改以符合对方网络的格式要求, 并且由于网络层协议的改变要对上层的TCP、UDP、ICMP

35、等数据包做相应的修改。将网络地址转换机制与协议转换机制相结合而产生的NAT- PT 可以通过对协议、地址的转换实现IPv6 和IPv4 之间的相互通信。2.4 基于MPLS 的过渡技术MPLS(Multiprotocol Label Switch)最初是用来提高路由器的转发速度而提出的一个协议, 但是由于MPLS 在流量工程和VPN 这一在目前工网络中非常关键的两项技术中的突出表现, MPLS 己日益成为扩大IP 网络规模的重要标准。MPLS 是一种使不同的网络传输技术在同一个平台上统一起来的技术, 它能够减少网络的复杂度, 并兼容主流的网络技术, 代表了未来网络发展的一种趋势。目前, 使用M

36、PLS 的骨干网越来越多, 因此必须考虑如何在MPLS 上集成IPv6。因为MPLS 在网络中, 转发是根据标记进行的, 这就不需要数据层面支持IPv6 的数据转发, 即无须核心网络软硬件的升级, 只需要边缘路由器具有配置IPv6 的能力即可。利用现有的MPLS 骨干网向IPv6 过渡, 是将IPv4 升级过渡到IPv6 的一个重要途径, 具体的办法是, 在CE 路由器上配置IPv6 隧道、MPLS 电路的IPv6 透明传输等。MPLS 当前技术已经比较成熟, 可以借助MPLSL2/L3VPN 技术来连接IPv6 的网络。在CE 路由器上配置隧道要求CE 路由器支持双栈, CE 和PE 之间运

37、行IPv4, CE 负责将IPv6 数据封装在IPv4 中通过MPLS 传送到对端的CE 路由器。MPLS 电路的IPv6透明传输将IPv6 的数据包通过Any Transport OVER MPLS(MPLS/AtoM)或Ethernet OVER MPLS(EToMPLS)来传递, 路由器需要支持AToM特性, 相当L2VPN 于。在PE 路由器起用IPv6 是在PE 路由器上提供双栈功能, IPv6 数据包被封装在二层标签里进行传送,外层标签由LDP 来分发, 内层标签由BGP4+来分发, 相当于L3VPN。Native IPv6 MPLS 是将IPv4 的核心网络升级到IPv6, 其核

38、心网的控制平面需要升级到IPv6 以支持核心网的IPv6 路由和IPv6 的LDP, 如果需要提供IPv4 /IPv6 共存的服务, 则需要双控制平面的支持。3 四种技术的优缺点比较隧道技术其优点是不需要大量的专用路由器设备和专用链路, 可以明显地减少投资。其缺点是在IPv4 网络上配置隧道是一个比较麻烦的过程, 特别是在隧道数目增加到一定程度时, 因此,采用隧道方案特别是手工隧道时一定要做好详细的文档一记录。IPv6 的流量和原有的IPv4 流量之间会争抢带宽和路由器资源(CPU、缓冲和路由表), 在IPv6 的流量较小时, 这个问题不是很明显, 但随着IPv6 流量的增大这个问题将来会很突

39、出, 存在迂回路由的情况。这对于整个IPv4 网络性能来说, 无疑是一种恶劣的影响。在IPv6 网络建设的初期, 其网络规模和业务量都较小, 因此采用这种连接方式是可行的。双协议栈的优点是不需要购置专门的IPv6 路由器和链路, 节省了硬件投资, 核心IPv6 路由器之间采用专用本地链路, 克服了隧道方式的许多缺点。其缺点是IPv6 的流量和原4 的IPv4 流量争抢带宽和路由器资源, 从而影响IPv4 网络的性能, 升级和维护费用大, 不符合从网络边缘开始演进的策略。在IPv6 网络建设的初期, 由于IPv6 地址相对充足, 这种方案的实施具有可行性。当IPv6 网络发展到一定阶段, 为每个

40、节点分配两个全局地址的方案将很难实现。NAT- PT 的优点是所有的地址转换和协议转换都在NAT- PT服务器上完成, 而子网内部的主机不需要做任何改动, 就可以实现两个不同子网之间的相互访问。同样由于所有的IP 数据包都要在NAT- PT 服务器上做数据包的修改, 使得它们常常会破坏端到端服务, 这一点IPv4 和中的NAT 类似。同时, 翻译器还会造成网络潜在的单故障点。同时NAT- PT 实现起来比较复杂, 牵涉到如何简单快速地实现网络地址和端口分配和数据包的快速修改。由于有大量的数据包在NAT- PT 服务器上处理, 因此NAT- PT 服务器的处理能力成为两个网络之间通信的瓶颈。基于

41、MPLS 的IPv6 过渡技术其优点是具有MPLS 网络的一切优点, 由于MPLS 支持约束路由流量工程, 因而把IPv6 和IPv4的数据流当作不同的流, 从而在核心网络可减小IPv4/ IPv6 争抢资源的影响。当IPv6 核心网络达到一定的规模, 且其数据量足够大时, 就可以采用这种方案。4 总结IPv4 自身的局限性注定了会最终过渡到以IPv6 为核心的新一代Internet, 因为IPv6 可以满足下一世纪的高性能、可扩展性的网络互联, 并可以解决IPv4 协议中存在的许多问题。但从IPv4 到IPv6 过渡过程也一定会是漫长、艰难的。迄今为止, 还没有一种普遍适用的标准过渡机制,

42、我们只能因地制宜的采取不同的过渡机制来应对不同的过渡阶段和不同的网络环境, 合理的使用各种过渡机制, 才能在从IPv4 到IPv6 的转换中花费最小的代价。参考文献:1李振强,赵晓宇,等.IPv6 技术揭密M.北京:人民邮电出版社,2006:120- 128.2张晓彤,晏国晨,等,译.理解IPv6M.北京:清华大学出版社,2004:78- 80.( 上接第25 页)sql_.Format (DELETE FROM DC WHERE dc_desk =% s,m_desk);_bstr_t strSQL = sql_;m_DBCnt- Execute(strSQL, NULL, adCmdTex

43、t); /提交事务m_DBCnt- CommitTrans();catch(_com_error& e)AfxMessageBox(e.ErrorMessage();m_DBCnt- RollbackTrans();return;MessageBox(操作完成! );EndDialog(0);6 结束语酒店管理系统是我们常说的MIS 的一种, 在强调管理, 强调信息的现代社会中它越来越得到普及。酒店管理系统的主要目标是实现对酒店内部各种管理的电子化和自动化, 提高酒店的办公效率, 为高质量的酒店服务提供保证。参考文献:1 马安鹏. Visual C+程序设计导学M. 清华大学出版社,2002.2.2 兰芸. Visual C+6.0 编程事例精解M. 北京希望电子出版社,2002.3.3 伍俊良. Visual C+课程设计与系统开发案例M. 清华大学出版社,2002.6.4 王宏, 李与东, 李罡. Microsoft Visual C+实战演练M. 人民邮电出版社,2002.2.5 李闽溟, 吴继刚, 周学明. Visual C+6.0 数据库系统开发实例导航M. 人民邮电出版社,2002.10.79_

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com