1、0面向对象程序设计 II 课程设计指导书题目: 宾馆管理系统学院: 计算机科学与工程学院专业: 软件工程 班级: 133301学号: 20133503 20133490 20133482姓名:王帅 刘俊 甘雨指导老师: 韩旭明设计日期:2015.6.24-2015.6.301一、课程设计的目的1) 学习综合运用 C 高级语言课程和其他先修课程的知识,提高分析和解决实际问题的的能力,进一步巩固、加深和拓宽所学的知识;进一步加强结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。2) 全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法;独立完成有一定工作量的程序设计任务,同
2、时强调好的程序设计风格。3) 掌握程序设计中的常用算法和 C 语言的编程技巧和上机调试程序的方法。4) 在参与一系列子项目的实践过程中,提高如何综合运用所学知识解决实际问题的能力,以及获得相关项目管理和团队合作等众多方面的具体经验。2、课程设计的任务按照如下要求,运用 C+语言,编写一套可用的较为完善的宾馆住宿管理系统软件(两人分模块合作)1) 对宾馆基本信息【房间数量、房间类别(标间、单间、套房) 、收费标准等】在适当范围内自行规定。2) 能够实现预定登记、入住登记、退房结算等功能;房间状态(空房、入住、预定)能够以一定方式直观地表现。3) 能够录入住宿人员信息、计算客户消费总额并生成账单,
3、账单信息存入到磁盘文件当中去。4) 能够相对灵活地查询房间状态、入住情况、空房情况、预订情况等内容。5) 能够产生各类报表,如房间信息、入住信息、消费表单等在磁盘文件当中可以查看它们的信息。2三、系统设计方案3.1 系统详细描述3.1.1 系统设计背景随着人民生活水平的提高,旅游出行的人越来越多,宾馆的客流量不断增加,普通的手写登记太过复杂经常出现信息丢失,也不适合现在的节约型社会的发展,宾馆在正常运营中需要对客房资源、顾客信息、退房信息等进行管理,利用客房管理系统及时了解各个环节中信息的变更,有利于提高管理的效率。 本项目作为 c+课程设计的训练项目提出,目的是为了提高同学们系统的开发,则提
4、高大家的实践能力。所以开发一个符合自身宾馆实际情况的工作平台是十分必要的。3.1.2 系统设计详细信息系统使用对象设定为百康宾馆。百康酒店是一家乡镇中小型宾馆,三层建筑,拥有各类房间共 20 间。其中一层均为单人间,共 9 间,房号 101-109;二层为均双人间,共 6 间,房号 201-206;三层均为豪华套房,共 5 间,房号 301-305。各类房间均设有电视、橱柜、内网电话、风扇、暖气等基础设施,24 小时热水供应,可淋浴。一层前台处设有便捷商店,当时结算,不计入住宿账单。可通过内网电话购买,免费送至房间。A、收费标准:有按天计费和按小时计费两种收费标准。按天计费,标准为单人间 17
5、0 元/天,双人间 280 元/天,豪华套房 500 元/天。按小时计费,标准为单人间 20 元/小时,双人间 30 元/小时,豪华套房 50 元/小时。B、计时标准:按天计费时,从 0 时至次日 0 时计一天,不满一天按一天计算;按3小时计费时,不满一小时按一小时计费。 (特殊情形的优惠政策不在本设计考虑范围之内)C、定金标准:入住定金按(预计入住时间*其单日房费+500 元)收取,退房时充作房费和房屋设施折损费(抵偿损坏的房内设施) ,多退少补。预定定金(按预计订房时间*对应房间按天计算住宿价格*40%)收取,若到时不入住且不续订,则不再退还;若到时入住,充作入住定金,多退少补。电话预定无
6、需缴纳定金,但不确保届时有空房间。注:定金数额可在以上标准数额之上,退房结算时多退少补。退房时,室内设施经确认无损坏情况,则不收取房屋设施折损费。3.2 功能模块划分3.2.1 功能模块描述根据任务内容要求及宾馆相关情况等信息,百康宾馆住宿管理系统需要实现查询功能(包括客房总体使用情况查询、已入住客房查询、已预订客房查询、闲置房间信息查询等查询方式) ,订房登记,入住登记,退房结算等四大基本功能。系统应实现对各类信息的灵活查找,客户信息的录入、保存与调用,自动结算并生成账单等操作。为了简化前台人员操作并提高其工作效率,还应实现开始前初始化询问,订房或入住登记时自动显示当前闲置房间,入住前询问是
7、否已预订,输入错误信息时进行提醒等人性化功能。由以上分析,将系统主要分为以下四大功能模块,如图 3.1 所示:1) 客房查询:包括查询客房总体使用情况、查询当前闲置房间信息、查询已入住房间信息、查询已预定房间信息等查询功能;2) 订房登记:包括显示当前闲置房间信息、登记预定信息等功能;3) 入住登记:包括显示当前房间总体使用情况、询问是否预定过房间、登记入住人信息等功能;4) 退房结算:包括选择结算方式、输入结算时间、计算住宿费用等功能。4百康宾馆住宿管理系订房登记 入住登记 客房查询 退房结算客房总体信息查询已预订房间信息查询已入住房间信息查询闲置房间信息查询图 3.1 功能模块结构图3.2
8、.2 输入项以下输入项均为键盘输入:num房间号 ,intkongxian房间是否空闲 ,int name20名字定义, char name20 ID20身份证号(18 位阿拉伯数字) ,char ID20lianxifangshi15联系方式(11 位阿拉伯数字) , char lianxifangshi15yajin押金, int yudingriqi预定日期(日期均为 8 位阿拉伯数字,格式为年月日) , long ruzhushijian入住日期 ,long tianshu预计天数, int jiezhiriqi截止日期 ,long 5p是否初始化(0 或 1) , intchose选
9、择主菜单(1,2,3,4 或 5) , intt计费方式(1 或 2) , inti子菜单选择(1,2,3,4 或 5) (不同模块可能定义不同) , inta是否预定过房间(在 ruzhudengji()定义的) ,int3.2.3 输出项房间号, int房间类型 , char leixing10价格(元/天), int价格(元/小时) ,int是否空闲 ,int客人姓名,char name20身份证,char ID20联系方式 ,charlianxifangshi15押金(元), int预定日期 ,long入住时间 ,long预计天数, int截止日期, long四、系统实现与测试4.1
10、主菜单模块实现64.1.1 主菜单流程图开始结束输出 “ 提示 ”输出 “ 提示 ”输入 c h o s e 值P 是否为 1C h o s e ! = 0调用 c h u s h i h u a ()输出 “ 提示 ”输入 “ 按任意键 ”YNN输入 “ p 值 ”是否为 “ 1 ”调用订房登记函数调用入住登记函数调用退房结算函数调用房间查询函数Y是否为 “ 2 ”Y是否为 “ 3 ”调用 M e n u _ D i s p l a y ( )函数是否为 “ 4 ”YYYNN是否为 “ 5 ”NNY输出“ 提示 ”N7图 4.1 主菜单流程图4.1.2 主菜单代码void Menu_Disp
11、lay()system(“cls“);coutp;if(p=1)chushihua();int chose;Menu_Display();coutchose;while(chose!=0) switch(chose)/用 switch 语句判断选择菜单的功能case 1:search_message();break; /客房查询case 2:dingfangdengji();break;/订房间case 3:ruzhudengji();break;/入住房间case 4:tuifang();break;/退房case 5:exit(0);default:coutchose;while(chos
12、e=0)couthoteli.numhoteli.leixinghoteli.jiagehoteli.kongxianhoteli.namehoteli.IDhoteli.lianxifangshihoteli.yajinhoteli.yudingriqihoteli.ruzhushijianhoteli.tianshuhoteli.jiezhiriqi;couta;if(a=1)coutb;for(i=0;ihoteli.ruzhushijian;couthoteli.jiezhiriqi;hoteli.yudingriqi=0;elsecoutb;for(i=0;ihoteli.name;
13、couthoteli.ID;couthoteli.lianxifangshi;couthoteli.yajin;couthoteli.tianshu;couthoteli.ruzhushijian;hoteli.kongxian=2;ofstream xieru(“宾馆房间信息 .txt“,ios:out); /写回文件xierua;int c=0,i=0;fin.seekg(117,ios:beg);/在输入文件开头以参照位置为基础移动若干字节(beg=begin)while(ihoteli.numhoteli.leixinghoteli.jiagehoteli.kongxianhoteli
14、.namehoteli.IDhoteli.lianxifangshihoteli.yajinhoteli.yudingriqihoteli.ruzhushijianhoteli.tianshuhoteli.jiezhiriqi;if(hoteli.num=a) /查询客人房间b=i;i+;fin.close();coutd;hotelb.jiezhiriqi=d;int fei;coutt;if(t=2)fei=hotelb.yajin-(hotelb.jiezhiriqi-hotelb.ruzhushijian)*(hotelb.jiage/100); /结算函数,押金(结算时间-入住时间)
15、 *价格else20fei=hotelb.yajin-(hotelb.jiezhiriqi-hotelb.ruzhushijian)*(hotelb.jiage%100); /按小时计算if(fei#include /输出流控制23#include#include /输入输出文件流using namespace std;void search_message();void dingfangdengji();void ruzhudengji();void tuifang();void all_message();void empty_message();void ruzhixinxi();voi
16、d dingfangxinxi();struct hotel /定义结构体int num;char leixing10;int jiage;int kongxian;char name20;char ID20;char lianxifangshi15;int yajin;long yudingriqi;long ruzhushijian;int tianshu;long jiezhiriqi;hotel20;void Menu_Display()system(“cls“);coutp;if(p=1)chushihua();int chose;Menu_Display();coutchose;w
17、hile(chose!=0) switch(chose)/用 switch 语句判断选择菜单的功能case 1:search_message();break; /客房查询case 2:dingfangdengji();break;/订房间case 3:ruzhudengji();break;/入住房间case 4:tuifang();break;/退房case 5:exit(0);default:coutchose;while(chose=0)couthoteli.numhoteli.leixinghoteli.jiagehoteli.kongxianhoteli.namehoteli.IDh
18、oteli.lianxifangshihoteli.yajinhoteli.yudingriqihoteli.ruzhushijianhoteli.tianshuhoteli.jiezhiriqi;couta;if(a=1)coutb;for(i=0;ihoteli.ruzhushijian;couthoteli.jiezhiriqi;hoteli.yudingriqi=0;elsecoutb;for(i=0;ihoteli.name;couthoteli.ID;couthoteli.lianxifangshi;couthoteli.yajin;couthoteli.tianshu;couth
19、oteli.ruzhushijian;hoteli.kongxian=2;ofstream xieru(“宾馆房间信息 .txt“,ios:out); /写回文件xierua;int c=0,i=0;fin.seekg(117,ios:beg);/在输入文件开头以参照位置为基础移动若干字节(beg=begin)while(ihoteli.numhoteli.leixinghoteli.jiagehoteli.kongxianhoteli.namehoteli.IDhoteli.lianxifangshihoteli.yajinhoteli.yudingriqihoteli.ruzhushiji
20、anhoteli.tianshuhoteli.jiezhiriqi;if(hoteli.num=a) /查询客人房间b=i;i+;fin.close();coutd;hotelb.jiezhiriqi=d;int fei;coutt;if(t=2)fei=hotelb.yajin-(hotelb.jiezhiriqi-hotelb.ruzhushijian)*(hotelb.jiage/100); /结算函数,押金(结算时间-入住时间) *价格elsefei=hotelb.yajin-(hotelb.jiezhiriqi-hotelb.ruzhushijian)*(hotelb.jiage%1
21、00); /按小时计算if(fei0)fei=-fei;cout“应付费用为:“fei“元“endl;elsecout“总消费金额为:“hotelb.yajin-fei“元 “endl;cout“押金足够 应返还给您:“fei“ 元“endl;fstream jsxx(“结算信息.txt“,ios:out);jsxx“消费信息为 :“endl;jsxx“姓名: “hotelb.nameendl“押金(元):“hotelb.yajinendl“入住时间:“hotelb.ruzhushijianendl“结算时间:“dendl;if(t=2)jsxx“计费方式:按天数计费“endl;elsejsxx“计费方式:按小时计费“endl;jsxx“总消费金额为:“hotelb.yajin-fei“元“endl;jsxx“押金足够 应返还给您:“fei“元“endl;jsxx.close();hotelb.kongxian=0; /房间结算后初始化房间信息strcpy(hotelb.name,“0“);strcpy(hotelb.ID,“0“);