1计算机学院课程设计报告课程名称:C++课程设计课题:客房管理系统专业班级:学号:姓名:指导老师:日期:2013年7月3日2目录1.课题简介………………………………………032.设计方案………………………………………043.具体设计及截屏图……………………………054.关键代码分析…………………………………105.测试……………………………………………156.课题总结与体会………………………………177.参考文献………………………………………188.源代码…………………………………………1931.课题简介客房管理系统是根据某酒店对客房管理的实际情况进行编写的,主要目的是为了方便酒店对客房的实际情况进行集中的查询与管理工作,以提高整个酒店的工作。经过电脑及生活中的调查研究,根据客人的经济水平和生活理念,客房的类型已趋向于多样化,有标准房,单人房,VIP间,甚至总统套房。而初步设定通过客房的编号、类型、价格来定位一个客房的管理系统。客房是一个对外服务的内容,为了客人的住宿要求,所以系统需要实现客房信息的录入、修改和删除功能。客人对剩余客房需要进行选择,系统必须实现相应的查询、排序和输出功能,使客人择优而居。主要实现的功能包括:客房信息的录入、修改、删除、剩余客房信息查询、排序、输出。客房信息可写入文件,也可从文件中读取。客房信息涉及的数据有客房编号、客房类型、住房天数、订金、客户姓名、客户身份证号码等。42.设计方案按照需求分析所得,客房信息系统有以下几个功能模块:1.新建两个类;分别为Customer和HolterRoom,其中Customer为基类,HolterRoom通过共有继承,成为Customer的派生类。2.录入,增添客房信息;先判断是否已存在客房信息,如果已存在,则再选择是否添加;若不存在,则添加客房信息。3.修改客房信息;读取保存的客房信息数据,根据客房编号查找所需修改的客房信息,然后根据具体所需,修改成员参数。4.删除客房信息模块;从保存中的文件中读取信息,删除需要删除的信息,完善现在的客房运作。5.查询客房函数;分按编号、类型、客户姓名查找客房信息,这样可以更具有人性化来选择所剩余的客房,从而进行日常安排。7.输出剩余客房函数;输出根据系统所需排序后的客房信息,本系统中是根据了客人入住的有效期即天数来及时了解空出的房间。由上述需求分析可得,系统的功能模块图如图1所示。图1酒店客房管理系统录入客房信息客人入住登记修改客房信息客人退房结算输出所有客房信息查询窗口删除客房信息通过房号查询客房输出所有空房通过姓名查询客房通过房号查询客房52.具体设计及截屏图1、类的设计根据上述需求分析,有客房类和客户类。(1)客户类客户类中的主要成员有:name为客户姓名,ID为客户身份证号码,money为客户订金,StayTime为将要入住客房时长。(2)客房类客房类中的主要成员有:num是客房编号,Type是客房类型,Price是客房价格,HolterRoom()为客房类的构造函数,同时Customer类中的成员均是客房类的成员。2.界面设计:(1)主界面的设计主界面中显示客房管理系统的全部信息,客房信息的录入,客人入住登记,客房信息的修改,客人退房结算,查询所有客房信息,查询(包括按房间号,按房间类型,按客户姓名查询,同时还有输出所有空房信息),删除客房信息。酒店客房管理系统如图1所示。图2主界面(2)分界面:客房信息查询设计6分别实现按姓名,按房间号和按房间类型查询客房信息的功能,还可实现输出所有空房信息的功能。客房信息录入如图2所示。图3录入客房信息的分界面(4)分界面:客房信息的修改的设计提示根据编号寻找到客房并输出该客房内容,然后询问用户是否要修改客房信息,修改界面如图所示。图4修改客房信息的分界面7(5)分界面:客房信息的删除的设计提示根据编号寻找到客房并输出该客房内容,然后询问用户是否要删除客房信息,修改界面如图所示。图5删除客房信息的分界面(6)分界面:剩余客房信息的查询的设计在保存完所修改或删除的客房信息,查询剩余的客房信息,可浏览所有空房信息。查询空房的信息界面如图6所示。图6查询客房信息的分界面8(7)分界面:所有信息的输出的设计在排序完后的所有客房中,输出所有客房的信息,以检验客房的经营情况。所有客房信息输出界面如图7所示。图7所有客房的信息4.关键代码分析(1)系统的登录在主函数中,输出客房信息系统的各功能提示。选择需要执行功能的序号,由switch判断和选择所需要执行的功能。选择1:执行客房信息的录入;选择2:执行客人入住登记;选择3:执行教工客房信息的修改;选择4:执行客人退房结算;选择5:执行查询所有客房信息;选择6:执行查询;选择7:执行删除客房信息;选择8:退出系统;主函数:intmain(){HolterRoomRoom[200];//创建客房对象数组inttop;9HolterRoomb;top=-1;fstreamfile(Room.txt,ios::in);while(1){file.read((char*)&b,sizeof(b));if(!file)break;top++;Room[top]=b;}file.close();//读取文件夹Room.txt中的数据while(1){cout\n\n客房管理系统\n\n;cout----------------------------------\n\n;cout1.客房信息的录入\n\n;cout2.客人入住登记\n\n;cout3.客房信息的修改\n\n;cout4.客人退房结算\n\n;cout5.查询所有客房信息\n\n;cout6.查询系统\n\n;cout7.删除客房信息\n\n;cout8.退出系统\n\n;cout请选择:;intchoose=0;cinchoose;system(cls);switch(choose)//用户的选择{case1:set_HolterRoom_info(Room);break;//输入客房信息case2:set_Customer_info(Room);break;//10客人入住登记case3:Change_HolterRoom_info(Room);break;//修改客房信息case4:SetCount(Room);break;//客户退房case5:PrintAll(Room);break;//查询所有客房信息case6:Find_choose(Room);break;//查询case7:Delete_HolterRoom(Room);break;//删除客房信息case8:Write(Room);Save_HolterRoom_info(Room);Save_Customer_info(Room);exit(0);//退出default:break;}}return0;}在读取数据时,可以从以有的文件中读取数据到程序中,避免了程序的重复输入数据,既实现了程序的多次可持续地使用,又有利于后面的信息修改、删除等功能。voidRead(HolterRoom*Room)//读取数据库inttop;HolterRoomb;top=-1;fstreamfile(Room.txt,ios::in);//创建一个输入文件流对象,读取文件夹Room.txt中的数据。while(1){file.read((char*)&b,sizeof(b));if(!file)break;top++;Room[top]=b;};file.close();//关闭文件11(2)信息的添加客房信息的录入,创建HolterRoom类和Room对象数组,调用构造函数,输入客房的房间编号、房间类型、定房日期、房间价格、房间内容及个人的入住有效期。voidset_HolterRoom_info(HolterRoom*Room)if(Room[0].num==0){intsize;cout暂无房间信息,请添加!endl;staticintNumber=700;cout请输入要添加的房间数:;cinsize;for(inti=0;isize;i++){Room[i].num=Number++;cout房间号码:Room[i].num;coutendl;cout房间类型:;cinRoom[i].Type;cout房间价格:;cinRoom[i].Price;coutendlendl;};cout客房信息录入成功!endlendl;}else{stringP;cout客房信息已有,是否要添加房间?(Y/N);cinP;if(P==Y)add_HolterRoom_info(Room);elseif(P==N)cout已取消房间添加.endlendl;elsecout此操作非法!endlendl;};system(pause);12system(cls);};(3)信息的删除删除客房信息,按要求提示输入要删除客房的房间编号,通过for循环和if语句寻找到要删除的客房,并显示其信息,然后询问用户是否要删除客房信息,通过if语句进行判断,若输入“Y”则删除,并显示删除成功,若为“N”,则取消删除,输入其他均显示“非法操作!”。voidDelete_HolterRoom(HolterRoom*Room){intNum;cout请输入要删除的房间号:;cinNum;for(inti=0;i30;i++)if(Room[i].num==Num){stringB;cout房间已找到:endl;cout房间类型:;coutRoom[i].Typeendl;cout房间价格:;coutRoom[i].Priceendl;cout客户信息:endl;cout客户身份证号码:;coutRoom[i].IDendl;cout客户姓名:;coutRoom[i].nameendl;cout订金;coutRoom[i].moneyendl;cout确定要删除客房信息?(Y/N);cinB;coutendl;if(B==Y){Room[i].Type=null;Room[i].num=0;Room[i].Price=0;Room[i].money=0;Room[i].StayTime=0;Room[i].name=无;Room[i].ID=0;cout删除成功!endl;}13elseif(B==N){cout取消删除。endl;}elsecout非法的操作!endl;};system(pause);system(cls);};(4)信息的修改修改客房信息,按要求提示输入要修改客房的房间编号,通过for循环和if语句寻找到要修改的客房,并显示其信息,然后询问用户是否要修改客房信息,通过if语句进行判断,若输入“Y”则进行逐条修改,若为“N”,则取消修改,输入其他均显示“非法操作!”。voidChange_HolterRoom_info(HolterRoom*Room){intNum;cout请输入要修改的房间号码:endl;cinNum;string_name;string_ID;int_money;int_StayTime;string_Price;string_Type;intt=0;for(inti=0;i30;i++){if(Num==Room[i].num){cout房间类型:;coutRoom[i].Typeendl;cout房间价格:;coutRoom[i].Priceendl;cout客户姓名:;coutRoom[i].name;coutendl;cout客户身份证号码:;coutRoom[i].ID;cout