1引言... 2
1.1编写目的... 2
1.2背景... 2
1.3定义... 2
1.4参考资料... 2
2程序系统的结构... 2
3程序1(标识符)设计说明... 3
3.1程序描述... 3
3.2功能... 3
3.3性能... 5
3.4输入项... 5
3.5输出项... 6
3.6算法... 6
3.7流程逻辑... 11
3.8接口... 16
3.9存储分配... 16
3.10注释设计... 16
3.11限制条件... 16
3.12测试计划... 16
3.13尚未解决的问题... 16
4程序2(标识符)设计说明... 17
详细设计说明书
1引言
1.1编写目的
编写本说明书的目的是说明对程序系统的设计考虑,包括程序系统的基本描述、程序系统的组织结构、功能分配、流程逻辑、接口、注释设计、存储分配等,为程序代码的编写和软件的十线打下基础。
预期读者为:软件开发的人员,项目评审人员,及软件测试人员。
1.2背景
待开发的软件系统的名称:酒店管理系统
本项目的任务提出者和开发者:刘畅和酒店管理系统开发小组
本项目的用户是针对各档次酒店宾馆管理定制开发的
本系统环境要求:所有程序均在Windows98/XP,Windows2000操作系统下测试运行。
如果数据库为SQL Server数据库,建议用户安装SQL Serve2000
1.3定义
酒店管理系统是酒店宾馆销售管理系统
1.4参考资料
《软件工程》 陈明 编 中央广播电视大学出版社
《现代软件工程》 陈松乔 任胜兵 王国军 编著 清华大学出版社
计算机软件产品开发文件编制指南(GB 8567-88)
《软件开发规范国家标准》
2程序系统的结构
此系统的功能模块图:
3程序1(标识符)设计说明
3.1程序描述
根据该系统功能模块,对应的五个简单的子程序,分别达到了系统的登陆,订房,经理管理,结账以及数据库的快捷准确的运行。
3.2功能
客户管理模块
此功能模块包括两个子模块,客户登记和客户查询。
1.客户住房登记
该窗口具有新增、保存、删除、打印押金收据等功能。在此管理人员必须输入个人客户的详细资料包括姓名、性别、年龄证件类别、证件号码、住店日期、预付押金,所入住的房间号等。在这个窗口中,系统会将未住客房的资料通过表格形式显示出来,以方便管理人员合理安排客户住房。当管理人员将个人资料登入后,系统将会显示所入住客户的姓名、身份证号、性别、入住日期、入住时间和入住的房间号等资料,以方便管理人员核对客户资料。一般情况下,客户信息录入完毕后,需要打印“住房押金收款凭证”所以在该窗口添加了打印功能。
2. 客户查询
该窗口具有查询、结账、退房、打印结账凭证等功能。在此管理人员对要求退房的客户进行查询,并进行费用结算。在查询时,可以按房号、姓名、全部等方式进行查询,客户的信息资料可以从查询结果中获得。在此管理人员可以浏览已住客户的详细资料,包括客户的姓名、性别、入住人数、房间号码、身份证号码、入住日期、入住时间、已住天数等资料,方便管理人员管理客户。
一般情况下,结账退房时要进行查询,调出该客户登记的资料,并进行费用结算,同时打印“客户结账凭证”,所以我们将客户结账退房功能放置在该窗口进行,符合手工操作习惯。在查询结果中选择要退房的记录先进行结账,系统将显示该客户的住宿详细资料,并询问是否需要打印,若须打印单击打印按钮,打印该客户的“住宿结账凭证”,若无须打印则按返回键。打印完毕后,便可以办理退房手续了,将退房房间号的床位腾出备用。
客房管理模块
此功能模块也包括两个子模块:房间设置和房间查询。
1.房间设置
该窗口具有对房间数据进行新增、删除、保存等操作功能,在此管理人员必须输入新房间的房间号码、总床位数、剩余床位数、每床的单价等,在输入完毕后,单击“确定”,系统将显示新房间的基本情况。同时,为方便管理人员对房间进行管理,在这个窗口中,我们将剩余床位为零的房号记录用红色标记,表示该房客满,禁用。
2. 房间查询
在此管理人员对要求客房进行查询,在查询时,可以按房号、床位数、全部等方式进行查询,房间的信息资料可以从查询结果中获得。包括客房总床位数、剩余床位数、每床的单价等。
统计报表模块
该模块实现对客房住宿收银的统计,为管理人员提供某一段时间内住房人数和累计收入的统计,可以实现对统计的数据进行年报表,月报表,日报表的查询统计并进行打印,为管理人员的经营决策提供科学数据。
系统维护模块
此功能模块有三个子模块,我们在进行系统维护时,首先要选取系统维护的类型,包括:数据初始化,修改密码、数据备份和新用户注册。
1.数据初始化
此模块实现系统原始数据的清空,以便重新输入数据,进行管理。
2.修改密码
在此模块中,用户必须首先输入用户名和原始密码,按“确认”键后,在新密码栏中输入新密码,并进行确认,最后单击“确认”键进行保存。
3.数据备份
任一个含有数据库的系统,其数据的备份功能是很重要的。因系统有着种种不可预测的被损坏的可能,如果系统数据没有备份,一旦数据被丢失或破坏,有时会给用户造成无法估量的损失或严重的后果。
4.新用户的注册
一般情况下,系统的使用不止一人,每人使用都可以有自己的用户名和密码,特别是统计报表数据时,其默认的报表人名称就是进入系统的用户名。
系统帮助模块
提供帮助信息。
3.3性能
改程序的运行过程简单,精度、灵活性和时间特性均能到达要求,保证酒店的正常运营。
3.4输入项
输入字段图标显示:
3.5输出项
3.6算法
模块主要算法设计
活动图:
1.用户登陆、提交订房单活动图
图1.用户登陆、提交订房单活动图
2.订房活动图
图2. 订房活动图
3.经理管理活动图
图3.经理管理活动图
4.结账活动图
图4. 结账活动图
5. 数据库管理活动图
图5. 数据库管理活动图
3.7流程逻辑
1.用户登陆/注册、提交订房单模块
图6
2. 订房模块
图7
3. 经理管理模块
图8
4.结账模块
图9
3.8接口
图10
3.9存储分配
无
3.10注释设计
流程图中对模块各个节点、变量等都有详细的注释。
3.11限制条件
此程序为简单C/S结构管理系统的字程序,一般的环境均可运用。
3.12测试计划
无
3.13尚未解决的问题
无
4程序2(标识符)设计说明
无
第二篇:酒店管理系统的设计与实现2
本栏目责任编辑:闻翔军数据库及信息管理
酒店管理系统的设计与实现
甘朝松1,夏容2
(1.江西城市职业技术学院计算机分院,江西南昌330004;2.南昌航空大学科技学院,江西南昌330034)
摘要:本文主要介绍了利用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++.Withthedevelopmentofsoftwareanddatabasetechnology,thedomesticcorporationsandtheoverseacorporationsalreadybegintomakefulluseofallkindsofsystem
productioninformation、employeeinformationandsoon.managementsoftwaretomanagelotsofinteriorthings,suchasvenditioninformation、
Computer-aidedmanagementhaslotsofmeritscomparedwithtraditionalmanagementmode,suchashighefficiencyandhighsecurity.Italsosuppliesmorewideforegroundanddevelopingspaceforthedevelopmentofsystemmanagementsoftware.Themainaimofthissystemistode-signaeasily-usingmanagementsystemofrestaurantforpettyrestaurant.FrontendusesVisualC++asdevelopingtool,designsmaininterfaceandfunctionmodules;backgrounduseSQLServer2000forconnectingandmanagingsystemdatabase.Thissystembasiclyactualizedfunctions
prearrangement、settleaccountsforpettyrestaurant,andhelprestauranttosetupdatabaseofbillsoffareandven-incommonuseoforderdishes、
ditioninformation.Theycanexpedientlybequeryedandstrengthentheeasily-usingandsecurityofsystem.
Keywords:VisualC++;security;database1引言
酒店管理系统是我们常说的MIS(ManagementInformation
System,管理信息系统)的一种,在强调管理,强调信息的现代社会
中它越来越得到普及。酒店管理系统的主要目标是实现对酒店内
部各种管理的电子化和自动化,提高酒店的办公效率,为高质量
的酒店服务提供保证。
在酒店业竞争越来越激烈的今天,努力在市场竞争中脱颖而
出,已经成为每位酒店经营者所追求的目标。酒店如何才能提高
服务质量,其管理能力显得越来越重要。由于使用了先进的数据
库管理技术,酒店管理系统对提高酒店的管理能力将会起到比较
重大的作用,整个系统的基本设计目标是实现系统界面友好美
观、简单易用、功能全面并有较高的安全性。本系统需要实现中小
型酒店常用的点菜、订菜、结算等功能,并帮助酒店建立菜谱数据
库和销售存根数据库,能够方便地进行查询,并在系统的易用性
和安全性两方面进行相应的完善。管理系统分解成前台和后台两部分,并将系统分解为几个比较小的功能模块分别进行开发。使得开发过程更具条理性,并且方便对模块功能进行修改或添加新的功能模块,从而使整个系统能够随着酒店业务的扩展进行功能的升级。为了增强系统的安全性,需要设计登录模块,登录成功后才可以使用全部功能.整个酒店管理系统的设计方案如图2所示。
2系统主要模块
(1)登录管理模块;(2)菜谱管理模块;(3)点菜订菜模块;(4)结算
模块;(5)帮助模块;(6)数据库设计;(7)系统界面设计。
软件系统由各个具体的功能模块组成,若值班员未登录或登
录失败,则只能使用登录,帮助,关于,退出这四个功能模块。登录
成功后才可以使用全部的功能模块。各个功能模块都是分别进行
开发的,这样就便于日后拓展功能,也易于检查和修改错误。软件
的系统结构如图1所示。图1软件系统结构
3系统设计方案
根据系统功能的要求,考虑到VisualC++的编程特点,将酒店图2系统设计方案
收稿日期:2007-09-10
作者简介:甘朝松(1968-),男,江西赣州人,江西城市职业技术学院讲师,主要从事计算机应用及教学;夏容(1982-),女,四川泸州人,南昌航
空大学科技学院助教,主要从事计算机技术应用与教学。
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来实现这一点:
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();pRst->Close();}
catch(_com_error&e)
{AfxMessageBox(e.ErrorMessage());m_list.SetRedraw(TRUE);return;}
m_list.SetRedraw(TRUE);}
在上面的这段RefreshData函数的代码中,由于使用了ADO2.0forVisualC++Extensions所提供的新特性DataBinding(数据绑定)技术,所以代码显得比较简洁。
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);
GetDlgItem(IDC_BTN_VIEWDC)->EnableWindow(FALSE);若登录成功后,只需将FALSE换成TRUE,则所有按钮都变为可用。将进行登录验证的SQL代码加入到主对话框的事件处理函数CRMSDlg::OnBtnLogin()中,用来处理登录事务:
sql_.Format("SELECT值班员FROMZBYWHERE值班员='%s'AND密码='%s'",dlg.m_name,dlg.m_pswd);
这里并没有取出值班员表中的所有字段(值班员和密码),然
后把密码字段和用户的输入作比较来决定登录成功与否;而是只取出了值班员名字(值班员),密码的校验放在数据库服务器端进行,这主要是基于安全的考虑。如果没有确实的需要,就尽量不从数据库里取用户密码这种敏感数据,以免产生安全漏洞,削弱系统的安全性。
修改密码部分的处理代码和登录部分类似,只是不但要进行旧密码的验证,还要确认两次输入的新密码一致,如旧密码错误或两次输入的新密码不一致则需要给出相应的提示。另外还要利用SQL语句向数据库中写入新密码:sql_.Format("UpdateZBYSET密码='%s'WHERE值班员='%s'",dlg.m_newpswd,dlg.m_name);密码修改成功后则给出密码已修改成功的提示。
5.4点菜模块
在这个模块里可以根据顾客的需要逐项输入菜谱中的菜肴,并可对已经做出的选择进行删除和修改。待最终决定之后单击提交按钮就会将结果保存到数据库中。点菜订菜操作首先要在桌号编辑框中输入桌号,然后在编号选择框中通过选择菜谱中的编号来选择菜肴。这样顾客只需说出所需菜肴在菜谱上的编号,值班员就可以很快地找到顾客所需要的菜,而不必让顾客报出菜名,提高服务效率,降低出错率。为了使编号选择框中包含所有的菜谱号,在CDlgDC::OnInitDialog()中应包含如下代码:
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;//InterfacePointerde-clared.(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);
try
{_bstr_tstrSQL("SELECT*FROMCP");
pRst=m_DBCnt->Execute(strSQL,NULL,adCmdText);
TESTHR(pRst->QueryInterface(_uuidof(IADORecordBinding),(LPVOID*)&picRs));
TESTHR(picRs->BindToRecordset(&rs));inti=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.
24
电脑知识与技术
本栏目责任编辑:闻翔军数据库及信息管理
符合实际情况,需要在ClassWizard里限制折扣率一项的输入在0.1-1.0之间。如未输入桌号就点击确定,则会给出要求输入桌号的提示。下面是处理单击结算按钮事件的函数:
m_sz_name)));
pRst->MoveNext();}picRs->Release();pRst->Close();}
catch(_com_error&e)
{AfxMessageBox(e.ErrorMessage());returnTRUE;}
上面代码中的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)#pragmawarning(disable:4503)#include<map>#include<string>usingnamespacestd;
typedefmap<string,string>CPMap;CPMapcpmap;
这里定义的CPMap类建立了一个从字符串到字符串的映射,就是从map和string模板类来的,CPMap是一个STL(StandardTemplateLibrary)类,而cpmap则是CPMap型的全局变量。另外由
于使用了模板,会在类的内部产生相当长的类型名,从而在编译时出现C4787警告,提示指示类型名长度超过255个字符,所以
来关掉这个警告。用“#pragmawarning(disable:4786)”
值班员在订餐模块中修改、删除和增加菜肴都不会对数据库作修改,而是先在列表框控件m_list中进行这些操作。只有在单击提交按钮之后,才会向数据库中提交数据。每向数据库中加入一条,就会自动清除列表框中相应的输入。全部添加成功后,列表框才会被全部清空。如果中途出现错误,则停止添加。列表框中剩下的项就是没有成功添加的项,值班员可对其进行修改后再进行添加。这部分的主要代码如下:
voidCRMSDlg::OnBtnJs(){CDlgBeginJSdlg1;
ShowWindow(SW_HIDE);dlg1.DoModal();
if(dlg1.m_desk.GetLength()>0){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;
IADORecordBinding*picRs=NULL;//InterfacePointerde-clared.(VC++Extensions)
CCPRsrs;
rs.m_f_price=0.0;CStringsql_;
sql_.Format("SELECT*FROMCPWHERE编号='%s'",no);_bstr_tstrSQL=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();
returnrs.m_f_price;}
结算完成后单击保存帐单按钮,程序将在结算表中添加一条记录,并删除已经结算过的订菜信息。由于涉及到两个相互关联的操作,所以必须使用ADO的事务功能。在添加操作之前调用Connection对象的BeginTrans方法开始一个事务,在删除操作完成之后调用CommitTrans提交这个事务:如果其中的某一步出错,通过RollBackTrans方法,数据库将保持原样。
处理单击保存帐单按钮事件的函数:
try
{TESTHR(pRst.CreateInstance(_uuidof(Recordset)));
pRst->Open("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);}pRst->Close();}
catch(_com_error&e)
{AfxMessageBox(e.ErrorMessage());return;}
在将数据添加到数据库后将显示操作完成的提示。5.5结算模块
开始结算时,将先出现要求输入桌号和折扣率的对话框,为
voidCDlgJS::OnBtnJssave(){if(!UpdateData())return;
if(m_no.GetLength()==0)
{MessageBox("请输入客户姓名!");return;}
_RecordsetPtrpRst=NULL;CJSRsrs;try
{m_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);//填写结算记录
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);
COleSafeArrayvaFieldlist,vaValuelist;rs.FillFieldsArray(vaFieldlist,vaValuelist);//添加结算记录
TESTHR(pRst->AddNew(vaFieldlist,vaValuelist));pRst->Close();//删除订菜记录
(下转第79页)CStringsql_;
25
本栏目责任编辑:冯蕾
网络地址转换一协议转换(NAT-PT)包括两个组成部分:网络地址转换协议和协议转换。其中地址转化是指通过使用NAT网关,将一种IP网络的地址转换为另一种IP网络的地址,它允许内部网络使用一组在公网中从不使用的保留地址。在使用这项技术是可以将IPv6网视为一个独立而封闭的局域网,它需要使用一个地址翻译器进行地址翻译。当内网的主机向外发送数据包时,将内部的IP地址转换为外部的公网地址,当数据包从外部网络回复数据包时,再将公网地址转换为内部网络的地址。
协议转换是指根据IPv6和IPv4之间的差异对数据包的首部做相应的修改以符合对方网络的格式要求,并且由于网络层协议
将网的改变要对上层的TCP、UDP、ICMP等数据包做相应的修改。
络地址转换机制与协议转换机制相结合而产生的NAT-PT可以通过对协议、地址的转换实现IPv6和IPv4之间的相互通信。
2.4基于MPLS的过渡技术
MPLS(MultiprotocolLabelSwitch)最初是用来提高路由器的转发速度而提出的一个协议,但是由于MPLS在流量工程和VPN这一在目前工网络中非常关键的两项技术中的突出表现,MPLS己日益成为扩大IP网络规模的重要标准。
MPLS是一种使不同的网络传输技术在同一个平台上统一起来的技术,它能够减少网络的复杂度,并兼容主流的网络技术,代表了未来网络发展的一种趋势。目前,使用MPLS的骨干网越来越多,因此必须考虑如何在MPLS上集成IPv6。因为MPLS在网络中,转发是根据标记进行的,这就不需要数据层面支持IPv6的数据转发,即无须核心网络软硬件的升级,只需要边缘路由器具有配置IPv6的能力即可。
利用现有的MPLS骨干网向IPv6过渡,是将IPv4升级过渡到IPv6的一个重要途径,具体的办法是,在CE路由器上配置IPv6隧道、MPLS电路的IPv6透明传输等。
MPLS当前技术已经比较成熟,可以借助MPLSL2/L3VPN技术来连接IPv6的网络。在CE路由器上配置隧道要求CE路由器支持双栈,CE和PE之间运行IPv4,CE负责将IPv6数据封装在IPv4中通过MPLS传送到对端的CE路由器。MPLS电路的IPv6透明传输将IPv6的数据包通过AnyTransportOVERMPLS(MPLS/AtoM)或EthernetOVERMPLS(EToMPLS)来传递,路由器需要支持
在PE路由器起用IPv6是在PE路由AToM特性,相当L2VPN于。
器上提供双栈功能,IPv6数据包被封装在二层标签里进行传送,外层标签由LDP来分发,内层标签由BGP4+来分发,相当于L3VPN。NativeIPv6MPLS是将IPv4的核心网络升级到IPv6,其核心网的控制平面需要升级到IPv6以支持核心网的IPv6路由和IPv6的LDP,如果需要提供IPv4/IPv6共存的服务,则需要双控制平面的支持。
网络通讯与安全
个比较麻烦的过程,特别是在隧道数目增加到一定程度时,因此,采用隧道方案特别是手工隧道时一定要做好详细的文档一记录。IPv6的流量和原有的IPv4流量之间会争抢带宽和路由器资源
缓冲和路由表),在IPv6的流量较小时,这个问题不是很明(CPU、
显,但随着IPv6流量的增大这个问题将来会很突出,存在迂回路由的情况。这对于整个IPv4网络性能来说,无疑是一种恶劣的影响。在IPv6网络建设的初期,其网络规模和业务量都较小,因此采用这种连接方式是可行的。
双协议栈的优点是不需要购置专门的IPv6路由器和链路,节省了硬件投资,核心IPv6路由器之间采用专用本地链路,克服了隧道方式的许多缺点。其缺点是IPv6的流量和原4的IPv4流量争抢带宽和路由器资源,从而影响IPv4网络的性能,升级和维护费用大,不符合从网络边缘开始演进的策略。在IPv6网络建设的初期,由于IPv6地址相对充足,这种方案的实施具有可行性。当IPv6网络发展到一定阶段,为每个节点分配两个全局地址的方案将很难实现。
NAT-PT的优点是所有的地址转换和协议转换都在NAT-PT服务器上完成,而子网内部的主机不需要做任何改动,就可以实现两个不同子网之间的相互访问。同样由于所有的IP数据包都要在NAT-PT服务器上做数据包的修改,使得它们常常会破坏端到端服务,这一点IPv4和中的NAT类似。同时,翻译器还会造成网络潜在的单故障点。同时NAT-PT实现起来比较复杂,牵涉到如何简单快速地实现网络地址和端口分配和数据包的快速修改。由于有大量的数据包在NAT-PT服务器上处理,因此NAT-PT服务器的处理能力成为两个网络之间通信的瓶颈。
基于MPLS的IPv6过渡技术其优点是具有MPLS网络的一切优点,由于MPLS支持约束路由流量工程,因而把IPv6和IPv4的数据流当作不同的流,从而在核心网络可减小IPv4/IPv6争抢资源的影响。当IPv6核心网络达到一定的规模,且其数据量足够大时,就可以采用这种方案。
4总结
IPv4自身的局限性注定了会最终过渡到以IPv6为核心的新一代Internet,因为IPv6可以满足下一世纪的高性能、可扩展性的网络互联,并可以解决IPv4协议中存在的许多问题。但从IPv4到
艰难的。迄今为止,还没有一种IPv6过渡过程也一定会是漫长、
普遍适用的标准过渡机制,我们只能因地制宜的采取不同的过渡
机制来应对不同的过渡阶段和不同的网络环境,合理的使用各种过渡机制,才能在从IPv4到IPv6的转换中花费最小的代价。
参考文献:
[1]李振强,赵晓宇,等.IPv6技术揭密[M].北京:人民邮电出版社,2006:120-128.
[2]张晓彤,晏国晨,等,译.理解IPv6[M].北京:清华大学出版社,2004:78-80.
3四种技术的优缺点比较
隧道技术其优点是不需要大量的专用路由器设备和专用链路,可以明显地减少投资。其缺点是在IPv4网络上配置隧道是一
(上接第25页)
sql_.Format("DELETEFROMDCWHEREdc_desk='%s'",m_desk);
_bstr_tstrSQL=sql_;
m_DBCnt->Execute(strSQL,NULL,adCmdText);//提交事务m_DBCnt->CommitTrans();}catch(_com_error&e)
{AfxMessageBox(e.ErrorMessage());m_DBCnt->RollbackTrans();return;}
MessageBox("操作完成!");EndDialog(0);}
是实现对酒店内部各种管理的电子化和自动化,提高酒店的办公效率,为高质量的酒店服务提供保证。
参考文献:
[1]马安鹏.VisualC++程序设计导学[M].清华大学出版社,2002.2.
[2]兰芸.VisualC++6.0编程事例精解[M].北京希望电子出版社,2002.3.
[3]伍俊良.VisualC++课程设计与系统开发案例[M].清华大学出版社,2002.6.
[4]王宏,李与东,李罡.MicrosoftVisualC++实战演练[M].人民邮电出版社,2002.2.
[5]李闽溟,吴继刚,周学明.VisualC++6.0数据库系统开发实例导航[M].人民邮电出版社,2002.10.
6结束语
酒店管理系统是我们常说的MIS的一种,在强调管理,强调信息的现代社会中它越来越得到普及。酒店管理系统的主要目标
79