C++6.0设计报告酒店客房管理系统设计.doc
学 年 设 计 报 告设计题目 酒店客房管理系统 作者姓名 第六组 所学专业 计算机科学与技术 指导教师 2011年 8月28 日学年设计任务书学年设计题目酒店客房管理系统组长 学号 班级计科 组别六专业计算机科学与技术组员 指导教师 学年设计目的设计一个酒店客房管理系统的程序学年设计所需环境Microsoft Visual C+ 6.0学年设计任务要求设计一个具有订房、入住、查询、退房的酒店客房管理系统学年设计工作进度计划序号起止日期工 作 内 容分工情况12011.8.22查资料和分析程序全体成员参与22011.8.222011.8.28主要函数的编写 32011.8.222011.8.28其它函数的编写 42011.8.29系统测试 52011.8.302011.8.31实验报告的编写 指导教师签字: 年 月 日教研室审核意见:教研室主任签字: 年 月 日.目录摘要1关键词11 绪论11.1 研究背景11.2 主要工作11.3 本文结构12 相关知识22.1 函数的介绍22.2 数组与结构体数组22.3 文件的概念23 系统设计23.1 需求分析23.2 系统模型设计33.3 系统工作流程设计44 系统实现44.1 功能模块44.1.1 订房模块44.1.2 入住模块64.1.3 查询模块94.1.4 退房模块125 系统测试与数据分析155.1程序测试155.2 程序的修改155.3 系统的优化155.4 程序运行结果156 结束语19参考文献19附录20致谢36酒店客房管理系统设计 摘要:随着经济社会发展以及生活水平的提高,旅游业已迅速发展,其带动了酒店服务行业的快速发展,为了更好地实现对酒店的管理,在信息技术发展的基础上,用于酒店客房管理的信息系统应用而生,它可以实现对酒店客房的有效管理,提高酒店管理的现代化、信息化水平。在调研和分析酒店客房管理系统需求的基础上,设计和实现了一个酒店客房管理系统,系统具有订房,入住,查询,退房等功能,系统具备了酒店客房管理的基本功能。关键词:管理系统;服务;酒店客房;系统设计1 绪论1.1 研究背景酒店客房管理是酒店管理的重要组成部分,伴随着科技的迅速发展,酒店服务行业需要完善的客房管理系统来提高酒店客房服务的质量和酒店服务的效率。在信息技术发展基础上,酒店客房管理系统得到广泛应用,本文针对酒店客房管理的需求,设计和实现了一个具有订房,入住,查询,退房等功能的管理系统。1.2 主要工作本设计根据旅客的服务需求设计了订房,入住,查询,退房等功能。旅客可以通过订房功能预定自己想住的房间;入住功能可以正确的让旅客住进自己预定的房间;旅客可以通过查询功能查询不同类型的房间;退房功能可以方便旅客退房。1.3 本文结构 本文第1部分绪论主要说明了研究背景、主要工作和本文结构。第2部分说明了有关管理系统设计的相关知识。第三部分系统设计,绘制了系统的模块图和流程图。第四部分功能模块的实现。第五部分系统的测试与数据分析,说明了测试遇到的问题、解决方法及系统进一步的优化。2 相关知识2.1 函数的介绍函数的含义:一个函数是使用花括号括起来的一个语句序列,用一个标识符(函数名)来命名该语句序列,如fun()/代码,通过函数体内的代码,实现某些功能,如输入输出,排序等,所以也叫“方法”,这跟数学函数不同函数的调用:定义一个函数后,就可以在程序中调用这个函数。调用函数时,将实参数传递给形参并执行函数定义中所规定的程序过程,以实现相应的功能。2.2 数组与结构体数组结构体:结构体是C语言中的一种新的构造数据类型,它能够把有内在联系的不同类型的数据统一成一个整体,使他们相互关联;同时,结构体又是一个变量的集合,可以按照对基本数据类型的操作方法单独使用其变量成员。结构就是这样一个特殊的构造数据类型。数组:定义一个数组,需要明确数组变量名,数组元素的类型和数组的大小。结构体数组:结构体数组是结构与数组的结合,与普通数组的不同之处在于每个数组元素都是一个结构体类型的数据,包括多个成员项。2.3 文件的概念文件:文件是驻留在外部介质中的一个有序数据集,可以是源文件,目标程序文件,可执行程序,也可以是待输入的原始数据,或是一组输出的结果。文件可以通过应用程序创建,如运行“记事本”程序,输入一些数据,然后保存并输入文件名,就会在磁盘里产生一个文本文件。当有大量数据输入时,可通过编辑工具事先建立输入数据的文件,程序运行时将不再从键盘输入,而从指定的文件上读入,从而实现数据一次输入多次使用。同样,当有大量数据输出时,可以将其输出到指定文件,不受屏幕大小的限制,并且任何时候都可以查看结果文件。一个程序的运算结果还可以作为另一外程序的输入,进行进一步加工。3 系统设计3.1 需求分析订房功能:选择订房要输入顾客的姓名、身份证号、房间的类型、入住天数以及入住人数,根据选择房间类型和入住天数会输出预订费用。方法:利用switch语句进行不同房间类别的选择,利用STATE变量记录房间状态的信息,如果预订成功就可以对STATE进行状态赋值,把房间改为已经预定的状态。定义一个元素用来保存顾客的人数。入住登记功能:先判别该顾客是否预订了房间,如果预订了房间通过姓名以及身份证号码的输入查询该顾客的房间号码和交纳费用。如果没有预定房间,则需要进行登记入住,要输入顾客的姓名、身份证号、入住人数、客房类型、预定天数,根据选择交纳费用。方法:利用if语句判断顾客是否预订房间,如果已经预订,即利用for循环进行查找该顾客的信息以及房间号码和所需要的费用。否则再次利用for循环进行房间查找,用STATE变量判断房间是否为入住状态。退房结算功能:通过输入顾客的身份证号码和姓名查询到该顾客的信息,通过输入实际的入住天数计算出实际的住房费用。方法:利用for循环进行查找顾客的信息,再利用switch语句对房间的类别进行分类,通过if语句判断顾客的入住天数是否为实际入住天数,再计算出实际的住房费用,最后在数组中把已退房的位置置为空。信息查询功能:分为房间信息查询和顾客信息查询,在房间信息中把全部房间都输出,并且已预订和已入住的房间也显示出来。在顾客信息中把顾客的房间号以及预付房费显示出来。方法:利用if语句判断查询的类型,然后利用for循环进行信息的查找。3.2 系统模型设计 图3-1 模块设计图3.3 系统工作流程设计 图3-2系统流程图4 系统实现4.1 功能模块4.1.1 订房模块订房实现的程序代码: void book_room() int room_standard,day; CCustomer(customeri); printf("请您选择预定房间的标准:n"); printf("1.单人间/天150元n2.双人间/天200元n3.标准间/天300元n4.套房/天600元n"); scanf("%d",&room_standard); printf("请输入预定天数n"); scanf("%d",&day); customeri.day=day; switch(room_standard) int n; case 1: printf("住房费用总共为: %d 元n",day*150); /计算住房费用 for(n=0;n<20;n+) /从第一个级别的房间中查找一个空闲的房间 if(roomn.state=0) /state=0表示该住房没有被预定的 printf("预定成功房间号码为: %dn",roomn.number); roomn.state=1; customeri.room_number=roomn.number; break; break; case 2: printf("住房费用总共为: %d 元n",day*200); for(n=20;n<40;n+) if(roomn.state=0) printf("预定成功房间号码为: %dn",roomn.number); roomn.state=1; customeri.room_number=roomn.number; break; break; case 3: printf("住房费用总共为: %d 元n",day*300); for(n=40;n<60;n+) if(roomn.state=0) printf("预定成功房间号码为: %dn",roomn.number); roomn.state=1; customeri.room_number=roomn.number; break; break; case 4: printf("住房费用总共为: %d 元n",day*600); for(n=60;n<80;n+) if(roomn.state=0) printf("预定成功房间号码为: %dn",roomn.number); roomn.state=1; customeri.room_number=roomn.number; break; break; i+; /住房的顾客数加14.1.2 入住模块 入住实现的程序代码:void check_in() char name110,id119; int ding_or_no,prepaid; int j; printf("该顾客订房了吗? (1->订了 2->没订) "); scanf("%d",&ding_or_no); if(ding_or_no=1) printf("请输入顾客的姓名:n"); scanf("%s",&name1); printf("请输入顾客的身份证号码:n"); scanf("%s",&id1); for(j=0;j<i;j+) if(strcmp(customerj.name,name1)=0)&&(strcmp(customerj.ID,id1)=0) /查找该顾客的定房信息 int num=customerj.room_number; /取得定房的房间号 printf("顾客 %s 今天入住本宾馆! 房间号码为: %dn",name1,num); switch(num/100) case 6: prepaid=customerj.day*150; customerj.prepaid=prepaid; printf("请收房费 %d元整!n",prepaid); /开始收费 roomnum%100-1.state=2; /修改房间状态为入住状态 break; case 7: prepaid=customerj.day*200; customerj.prepaid=prepaid; printf("请收房费 %d元整!n",prepaid); room19+num%100.state=2; break; case 8: prepaid=customerj.day*300; customerj.prepaid=prepaid; printf("请收房费 %d元整!n",prepaid); room39+num%100.state=2; break; case 9: prepaid=customerj.day*600; customerj.prepaid=prepaid; printf("请收房费 %d元整!n",prepaid); room59+num%100.state=2; break; break; if(j>=i)printf("该顾客没订房!"); else int room_standard,day; CCustomer(customeri); printf("请您选择预定房间的标准:n"); printf("1.单人间/天150元n2.双人间/天200元n3.标准间/天300元n4.套房/天600元n"); scanf("%d",&room_standard); printf("请输入住宿天数n"); scanf("%d",&day); customeri.day=day; switch(room_standard) int n; case 1: prepaid=day*150; customeri.prepaid=prepaid; printf("请收房费 %d元整!n",prepaid); for(n=0;n<20;n+) if(roomn.state=0) printf("入住房间号码为: %dn",roomn.number); roomn.state=2; customeri.room_number=roomn.number; break; break; case 2: prepaid=day*200; customeri.prepaid=prepaid; printf("请收房费 %d元整!n",prepaid); for(n=20;n<40;n+) if(roomn.state=0) printf("入住房间号码为: %dn",roomn.number); roomn.state=2; customeri.room_number=roomn.number; break; break; case 3: prepaid=day*300; customeri.prepaid=prepaid; printf("请收房费 %d元整!n",prepaid); for(n=40;n<60;n+) if(roomn.state=0) printf("入住房间号码为: %dn",roomn.number); roomn.state=2; customeri.room_number=roomn.number; break; break; case 4: prepaid=day*600; customeri.prepaid=prepaid; printf("请收房费 %d元整!n",prepaid); for(n=60;n<80;n+) if(roomn.state=0) printf("入住房间号码为: %dn",roomn.number); roomn.state=2; customeri.room_number=roomn.number; break; break; i+; 4.1.3 查询模块查询实现的程序代码:void inquire()int people=0; char inquire_choice; printf("房间信息查询请按1, 顾客信息查询请按2: "); fflush(stdin); scanf("%c",&inquire_choice); while(inquire_choice>'2'|inquire_choice<'1') printf("输入错误请重新性输入!n"); printf("房间信息查询请按1, 顾客信息查询请按2: "); scanf("%c",&inquire_choice);scanf("%c",&inquire_choice); if(inquire_choice='1') int j,k=0; printf("n"); printf("下列房间还没人预订,也没人入住:n"); printf("单人间/天150元:n"); for(j=0;j<20;j+) if(roomj.state=0) if(k%10=0) printf("n"); printf("%dt",roomj.number); k+; printf("n双人间/天200元:n"); k=0; for(j=20;j<40;j+) if(roomj.state=0) if(k%10=0) printf("n"); printf("%dt",roomj.number); k+; printf("n标准间/天300元:n"); k=0; for(j=40;j<60;j+) if(roomj.state=0) if(k%10=0) printf("n"); printf("%dt",roomj.number); k+; printf("n套房/天600元:n"); k=0; for(j=60;j<80;j+) if(roomj.state=0) if(k%10=0) printf("n"); printf("%dt",roomj.number); k+; printf("n"); printf("n");for(j=0;j<80;j+) if(roomj.state=2) people+=customerj.people; printf("入住人数为%d",people); printf("n"); k=0; printf("下列房间已预订:n"); for(j=0;j<80;j+) if(roomj.state=1) if(k%10=0) printf("n"); printf("%dt",roomj.number); k+; k=0; printf("n"); printf("n"); printf("下列房间有人入住:n"); for(j=0;j<80;j+) if(roomj.state=2) if(k%10=0) printf("n"); printf("%dt",roomj.number); k+; printf("n"); printf("n"); else if(inquire_choice='2') char inquire_choice; int j; printf("按姓名查询请按1, 按身份证查询请按2: n"); fflush(stdin); scanf("%c",&inquire_choice); while(inquire_choice>'2'|inquire_choice<'1') printf("输入错误请重新性输入!n"); printf("按姓名查询请按1, 按身份证查询请按2: "); scanf("%c",&inquire_choice);scanf("%c",&inquire_choice); if(inquire_choice='1') char name310; printf("请输入顾客的姓名: n"); scanf("%s",&name3); for(j=0;j<i;j+) if(strcmp(customerj.name,name3)=0) printf("%s的住房信息如下:n",name3); printf("t房间号为: %dn",customerj.room_number); printf("t预付房费为: %dn",customerj.prepaid); printf("%d %d",j,i);if(j>i)printf("没有%s的住房信息!",customerj.name); if(inquire_choice='2') char id310; int j; printf("请输入顾客的身份证: n"); scanf("%s",&id3); for(j=0;j<i;j+) if(strcmp(customerj.ID,id3)=0) printf("%s的住房信息如下:n",customerj.name); printf("t房间号为: %dn",customerj.room_number); printf("t预付房费为: %dn",customerj.prepaid); 4.1.4 退房模块退房实现的程序代码:void check_out() char name210,id219; int standard,j,room_number,day1,day2,day; printf("请输入要退房的顾客姓名和身份证号码:n"); scanf("%s%s",&name2,&id2); printf("请输入该顾客实住天数:n"); scanf("%d",&day2); for(j=0;j<i;j+) if(strcmp(customerj.name,name2)=0)&&(strcmp(customerj.ID,id2)=0) char account; room_number=customerj.room_number; standard=room_number/100; day1=customerj.day; day=day1-day2; switch(standard) case 6: printf("顾客的房间号是%d :为单人间,每天150元n",room_number); printf("该顾客预付了房费 %d元, 实际消费 %d元整!n",customerj.prepaid,day2*150); printf("n"); if(day>0) printf("请退给该顾客 %d 元整!n",day*150); if(day<0) printf("请补收该顾客住房费 %d 元整!n",-day*150); break; case 7: printf("顾客的房间号是%d :为单人间,每天200元n",room_number); printf("该顾客预付了房费 %d元, 实际消费 %d元整!n",customerj.prepaid,day2*200); printf("n"); if(day>0) printf("请退给该顾客 %d 元整!n",day*200); if(day<0) printf("请补收该顾客住房费 %d 元整!n",-day*200); break; case 8: printf("顾客的房间号是%d :为单人间,每天300元n",room_number); printf("该顾客预付了房费 %d元, 实际消费 %d元整!n",customerj.prepaid,day2*300); printf("n"); if(day>0) printf("请退给该顾客 %d 元整!n",day*300); if(day<0) printf("请补收该顾客住房费 %d 元整!n",-day*300); break; case 9: printf("顾客的房间号是%d :为单人间,每天600元n",room_number); printf("该顾客预付了房费 %d元, 实际消费 %d元整!n",customerj.prepaid,day2*600); printf("n"); if(day>0) printf("请退给该顾客 %d 元整!n",day*600); if(day<0) printf("请补收该顾客住房费 %d 元整!n",-day*600); break; printf("n"); printf("退房核算清楚,请按1: "); fflush(stdin); scanf("%c",&account); if(account='1') int k; for(k=0;k<80;k+) if(roomk.number=customerj.room_number) roomk.state=0; i-; for(;j<i;j+) customerj=customerj+1; FCustomer(); if(j=i)printf("该顾客没住房!");5 系统测试与数据分析 5.1程序测试 当数据输入过多或过少时程序不能按照预期的设想正常运行。 当分步读取文件信息时,第二步读取时不能正常读取其中的信息。 当查询时inquire_choice或choice变量会读取换行符。 当使用两个文件时,此时读取文件内容会发生文件内容无法修改现象,但当在运行程序时输出其中修改过的信息时,文件内容就会被修改。5.2 程序的修改 使用fflush(stdin)声明刷新函数。 让指针在第一步读取时向后移动一位,第二步时可正常读取。 先多加一个输入语句读取换行符。 这个问题没解决,改用一个指针。5.3 系统的优化 本程序的功能还不够完善,其可以进行以下优化:(1) 可以在程序的开头输入年,月,日,这样可以设置查询欠费信息,及时补收欠费过多的顾客。可设置预付定金功能。(2) 房间信息初始化时再设计设置一个密码,防止操作不当删除重要信息,也可以将密码以二进制形式保存在文本中,设计重新设置密码功能。 (3) 防错能力有限,当输入过于混乱时,系统就会发生错误,导致其中的重要信息被修改。(4) 没有采用链表,如果采用链表动态分配内存可以节省内存空间。(5)房间信息建立时,房间信息为系统预设,当房间价格或房间号发生变化时,该系统必须修改才可用,可以增加让用户自行更改价格的功能。5.4 程序运行结果管理员进入界面:管理员要输入用户名1和人密码1才能进入系统。 图5-1进入界面订房界面:选择1,进入订房界面,要输入顾客的姓名、身份证号、入住人数、客房类型、预定天数。继续使用系统选择1,退出选择2。 图5-2订房界面入住界面:选择2,进入入住界面,选择是否订房,未订房要输入顾客的姓名、身份证号、入住人数、客房类型、预定天数。继续使用系统选择1,退出选择2 图5-3入住界面退房界面:选择3,进入退房界面,输入顾客的姓名、身份证号和实住天数,然后看预费和实际消费应该退费还是再续费。继续使用系统选择1,退出选择2 图5-4退房界面查询界面:选择4,进入查询界面,房间查询选择1,顾客查询选择2。继续使用系统选择1,退出选择2。 图5-5查询界面 图5-6查询界面退出界面:选择2,退出系统。 图5-7退出界面6 结束语经过将近一个星期的的努力,学年设计基本完成了。在学年设计的实践中,学到很多有用的知识,也积累了不少宝贵的项目开发经验。在此要特别感谢同学和指导老师的鼓励和支持, 在学年设计实践过程中少走很多弯路,在此特别表示感谢。IBM 有句著名的宣传词叫“The future is OPEN”,这句话有两层意思,第一层意思是技术的进步需要所有的人共同的努力,开源的世界里面所有的人都可以贡献自己的力量去让技术进步,我们可以感觉到它正在改变我们的世界;第二层的意思是,每一个都贡献自己的力量去帮助别人,在帮助别人的同时,也帮助了我们自己。系统虽然还不算完善,但毕竟这一切都凝聚了无数汗水 。最后用比尔·盖茨先生在未来之路中的几句话来为我的学年设计画上句号。“我认为,这是一个绝妙的生存时代。从来也没有这么多的机会让人去完成从前根本无法做到的事情。”“现在,我们又要开始另一次伟大的旅行。”“你会和我一起探讨这样一个问题,我们应该如何塑造未来?”参考文献1何钦铭.C语言程序设计M.高等教育出版社.2008.12 薛华成.管理信息系统M.清华大学出版社,1996.73胡学钢.数据结构(C语言版)M.高等教出版社.2008.1附录#include <stdio.h> #include <stdlib.h>#include <string.h>FILE *fp;/*void initial_room(); /初始化80个房间信息void welcome(); /验证用户登陆,登陆成功显示欢迎信息void enter();void book_room();void check_in();void check_out();void inquire();int i=0;/*struct Room int number; int dank; int price; int state; ;struct Customer char name10,ID19; int room_number; int prepaid; int people; int day;/*