还剩32页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
酒店住房信息管理系统
一、题目(问题)描述模拟酒店住房信息管理系统程序,进入系统,目录有登记入住,查询房间入住,查询当前费用,结账退房,帮助说明,关于,保存当前信息,退出系统系统中包括各种信息,程序运行结果正确,操作方便,逻辑层次清晰如图1解图1酒店住房信息管理系统
二、功能分析通过体验并分析后得出酒店住房信息管理系统主要功能包括
1.登记入住;
2.查询房间入住;
3.查询当前费用;
4.结账退房;
5.帮助说明;
6.关于;
0.退出.
三、系统设计1.程序总体结构程序中由主模块负责协调各功能模块的工作进入程序后,根据输入操作,执行相应的读入、查询、排序、增加、删除、显示当前信息、保存、显示平均成绩、退出等功能,并在屏幕上输出图2酒店住房信息管理系统的总体结构图
2.界面设计如图3,下面的Choose表示通过选择
1、
2、
3、
4、
5、
6、0等来进入各项功能,从而实现程序对信息的管理图3管理信息界面3.输入方式设计此程序为dos下程序,因此简化为键盘控制
1、
2、
3、
4、
5、
6、0分别表示各项功能回车表示确认进入各个程程序;主页面开始之后,键入
1.登记入住;
2.查询房间入住;
3.查询当前费用;
4.结账退房;
5.帮助说明;
6.关于;
0.退出.4.重要数据的数据结构设计酒店住房信息管理系统结构typedefstructtmtm;/*structtm命名为tm*/typedefstructnode/*把struct命名为node*/{void*elem;/*无类型指针类型成员*/structnode*next;/*指针类型成员存放*/}node_t;/*指针地址*/typedefstructroom/*房间结构*/{introom_number;/*房间号*/Boolroom_is_used;/*房间已使用*/Typeroom_kind;/*房间种类*/charguest_name
[20];/*客人姓名*/charguest_Id
[19];/*省份证号*/doubleroom_price;/*房间价格*/tm*start_time;/*入住时间*/tm*end_time;/*退房时间*/doubletotal_cost;/*合计消费金额*/}room_t;5.函数设计文件中函数的功能如下文件名函数原型函数功能“filemenu.c”voidwelcome显示欢迎页面voidmenu主菜单页面voidlocateposition;定位光标voidanimal;显示一个小动画voidanimation;显示另一动画voidmenu;菜单项voidgoodbai完成时退出程序voidpriceinfo显示房间价格
四、关键技术、难点及其解决方法此程序的关键是是否有保存功能,而且是保存把信息保存到文件中后退出程序,当再次进入程序是是否能查找到上次登陆是录入的信息,还有就是当系统要查找、删除信息是如何确定程序中是否有你要查找、删除的信息,来验证系统中是否存在所要的信息
五、测试方法
1.按键测试检查正确的输入时,是否界面正确表现;错误输入时,是否无效
2.程序运行测试正确运行,观察是否异常;运行时中断,程序是否正确退出
六、总结通过这次课程设计,使我受到了一次用专业知识、专业技能分析和解决问题的全面系统的锻炼对一些基础知识有了更规范的认识让我理解到结构化设计相关知识在实际方面的应用的操作,让我更深刻理解的“自顶向下,逐步细化的”思想;模块设计,多个函数并用;代码的重要性及注释的关键性使我在综合知识的选用方面,在应用软件开发的基本思想、方法方面,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步此外,我深深地体现到进行软件开发不是一件简单的事情,它需要设计者具有全面的专业知识、缜密的思维、严谨的工作态度以及较高的分析问题、解决问题的能力,而我在很多方面还有欠缺最后,我要衷心感谢老师在我的设计过程中给予我的极大帮助,使我能够及时、顺利地完成此次的课程设计同时,也要感谢我的指导老师和同学们在本系统的设计过程中给予我的支持和帮助附
1、使用说明
1.功能说明.此程序分为7个选项,分别是登记入住、查询房间入住、查询当前费用、查询当前费用、结账退房、帮助说明、关于、退出等功能,当选1时是进入登记入住功能,2是进入查询房间入住功能,3是进入查询当前费用功能,4是结账退房功能、5是显示帮助说明功能、6是显示关于的信息功能,0是退出系统功能
2.用户手册..显示主菜单后键入数字
1.登记入住;
2.查询房间入住;
3.查询当前费用;
4.结账退房;
5.帮助说明;
6.关于;
0.退出.附
2、代码清单*****************************************************************“filemenuc”******************************************************************#includestdio.h#includestdlib.h#includetime.h#includemath.h#includeconio.h#includectype.h#includestring.h#includewindows.h#defineROOM_MAX100#defineTYPE_NUM4#defineWIDTH80#defineHIGH25typedefstructtmtm;typedefenum{FalseTrue}Bool;typedefenum{SingleStandardVipPresident}Type;typedefstructnode{void*elem;structnode*next;}node_t;/*房间结构*/typedefstructroom{introom_number;Boolroom_is_used;Typeroom_kind;charguest_name
[20];charguest_Id
[19];doubleroom_price;tm*start_time;tm*end_time;doubletotal_cost;}room_t;voidwelcome;voidmenu;voidlocate_position;voidanimal;voidanimationintx;voidgoodbye;node_t*list_init;node_t*list_addnode_t*headvoid*elem;node_t*list_delnode_t*headnode_t*dest;node_t*list_for_eachnode_t*headvoid**funcnode_t*headnode_t*curvoid*argvoid*arg;node_t*list_reversenode_t*head;voidlist_destorynode_t*head;void*mprintnode_t*headnode_t*curvoid*arg;void*maddnode_t*headnode_t*curvoid*arg;void*mdelnode_t*headnode_t*curvoid*arg;voidroom_addnode_t*headroom_thotal[TYPE_NUM][ROOM_MAX];voidroom_delnode_t*head;voidprice_info;intincrease_twointi;doubleprice_of_roomTypekind;char*Type_to_stringTypekind;char*Bool_to_stringBool_bool_;room_t*get_first_roomroom_thotal[ROOM_MAX]Typekind;/***increase_two**@i要自增的数*调用一次增加2*/intincrease_twointi{returni+2;}/***price_of_room**@kind房间类型*根据房间的类型得到房间的单价*/doubleprice_of_roomTypekind{returnpow2intkind*100;}/***定位光标*@x要定位的列数*@y要定位的行数*无返回值**调用API,定位光标位置,比用空格,Tab,回车定位方便许多*/voidlocate_positionintxinty{COORDC;C.X=x;C.Y=y;SetConsoleCursorPositionGetStdHandleSTD_OUTPUT_HANDLEC;}/***welcome*显示欢迎界面(总菜单界面的大部分内容)*列出用户可进行的操作*每次任务完成后,再次调用些界面*/voidwelcome{intposition=4;locate_position253;printf酒店房间登记与计费管理系统;locate_position30position=increase_twoposition;printf1:登记入住;locate_position30position=increase_twoposition;printf2:查询房间入住;locate_position30position=increase_twoposition;printf3:查询当前费用;locate_position30position=increase_twoposition;printf4:结账退房;locate_position30position=increase_twoposition;printf5:帮助说明;locate_position30position=increase_twoposition;printf6: 关于;locate_position30position=increase_twoposition;printf0:退出;locate_position27position=increase_twoposition;printf请选择要办理的业务\n;}voidgoodbye{charis_leave=i;charstr
[15]=color0;charstr_color
[2];intcolor;time_ttTime;tm*tBlock;locate_position3310;printf确认退出Y/N?;whileis_leave!=Yis_leave!=N{is_leave=kbhittouppergetch:m;animal1;animation6;animal18;animation19;animal20;animation21;animal22;animation23;strcpystrcolor0;color=rand%8+8;itoacolorstr_color16;strcatstrstr_color;systemstr;locate_position294;tTime=timeNULL;tBlock=localtimetTime;printf%s%2d:%02d:%02d__DATE__tBlock-tm_hourtBlock-tm_mintBlock-tm_sec;locate_position3310;printf确认退出Y/N;_sleep1000;}iftoupperis_leave==Y{locate_position3013;printf谢谢使用,欢迎下次来访!;locate_position00;getch;exit0;}else{systemcls;menu;}}/***price_info**无参数,显示房间的价格*/voidprice_info{intposition=1;intweidth=20;printf\n----------------房间的收费如下------------------;locate_positionweidthposition=increase_twoposition;printf1:%-20s[单间]%
10.2fType_to_stringType0price_of_roomType0;locate_positionweidthposition=increase_twoposition;printf2:%-20s[标准间]%
10.2fType_to_stringType1price_of_roomType1;locate_positionweidthposition=increase_twoposition;printf3:%-20s[VIP房间]%
10.2fType_to_stringType2price_of_roomType2;locate_positionweidthposition=increase_twoposition;printf4:%-20s[总统套房]%
10.2fType_to_stringType3price_of_roomType3;locate_positionweidth+6position=increase_twoposition;printf从中午十二点到第二天中午十二点算一天\n;locate_positionweidth+12position=increase_twoposition;printf不足一天按一天算;_sleep3000;}/***animation*展示一个小动画* @x在第几行展示 * 其中随着时间流逝,不断的向右移动*/voidanimationintx{staticinti=1;locate_position1x;printf=============================================================================;locate_positioni%WIDTH-5x;printf;i+=3;ifiWIDTH-5{i=1;}}/***和上面的函数相似,这次是向左*/voidanimalintx{staticinti=74;locate_position1x;printf-----------------------------------------------------------------------------;locate_positioni%WIDTH-5x;printf;i-=5;ifi0{i=WIDTH-6;}}/***menu*菜单项**没有参数,显示菜单界面*根据不同的选项,进入不同的子模块*/voidmenu{intcolor;inti=0j;charstr
[15];charstr_color
[2];charch=m;time_ttTime;tm*tBlock;room_thotal[TYPE_NUM][ROOM_MAX];node_t*head=list_init;memsethotal0sizeofroom_t*TYPE_NUM*ROOM_MAX;/*初始化房间信息*/fori=0;iTYPE_NUM;i++{forj=0;jROOM_MAX;j++{hotal[i][j].room_number=i+1*100+j;hotal[i][j].room_kind=Typei;hotal[i][j].room_price=price_of_roomTypei;ifi*i+j==12{hotal[i][j].room_is_used=True;list_addheadhotal[i][j];}}}srandunsignedtimeNULL;systemtitle酒店房间登记与计费管理系统;whilech!=0{ch=kbhitgetch:m;switchch{case1:systemcls;room_addheadhotal;systempause;systemcls;break;case2:systemcls;printf\n----------------所有用户信息如下---------------\n\n;printf房间号 房间类型 用户名 用户证件 单价\n;printf------|----------|-----------|--------------------------|-----------------------\n;list_for_eachheadmprintNULL;systempause;systemcls;break;case3:systemcls;price_info;systempause;systemcls;break;case4:systemcls;room_delhead;systempause;systemcls;break;case5:systemcls;printf1以下是主页请按提示输入所需的服务;2输入提示数值1,2,3,4,5,6,0!\n;break;case6:systemcls;printf1系统时间为机器时间请调整准确时间;2存盘为系统存盘;3注意输入格式要有效.\n;break;case0:systemcls;goodbye;break;default:break;}/*显示动画效果*/animal22;animation1;animation23;strcpystrcolor0;color=rand%8+8;itoacolorstr_color16;strcatstrstr_color;systemstr;welcome;locate_position294;tTime=timeNULL;tBlock=localtimetTime;printf%s%2d:%02d:%02d__DATE__tBlock-tm_hourtBlock-tm_mintBlock-tm_sec;locate_position4820;_sleep1000;}}/***list_init*初始化链表,这个链表为循环链表,有头结点*/node_t*list_init{node_t*head=node_t*mallocsizeofnode_t;head-elem=NULL;head-next=head;returnhead;}/***list_add*向链表里面添加结点**@head链表的头结点*@elem结点中的数据*此列表为尾插法*/node_t*list_addnode_t*headvoid*elem{node_t*new_node=node_t*mallocsizeofnode_t;new_node-elem=elem;new_node-next=head-next;head-next=new_node;returnnew_node;}/***list_del*删除列表中的元素**@head列表的头结点*@dest要删除的结点*给出要删除的结点,从头结点开始找到要删除的结点,然后删除*表头元素不能删除*/node_t*list_delnode_t*headnode_t*dest{node_t*pre=head;node_t*cur=pre-next;whilecur!=dest{ifcur!=head{pre=pre-next;cur=cur-next;}else{returnhead;}}pre-next=cur-next;/*释放指针后直接赋值为NULL预防野指针*freecur;*cur=NULL;*但是这个地方不能free了,因为它的元素包含有房间数组* 而房间还是要用的所以就不能消了*/returnpre-next;}/***list_for_each*遍历链表**@head链表头结点*@func函数指针,对不同的遍历进行不同的操作*@arg参数,有时候可以不用,主要是为了向func所指向的函数传递参数*/node_t*list_for_eachnode_t*headvoid**funcnode_t*headnode_t*curvoid*argvoid*arg{node_t*cur=head-next;whilecur!=head{funcheadcurarg;cur=cur-next;}returnhead;}/***list_reverse*反转链表** @head要转的链表的表头结点* 链表调换过来,原来的表头现在为表尾,不过对于循环链表来说这个操作很简单*/node_t*list_reversenode_t*head{node_t*pre=head;node_t*cur=pre-next;node_t*nxt=cur-next;whilecur!=head{cur-next=pre;pre=cur;cur=nxt;nxt=nxt-next;}cur-next=pre;returnhead;}/***list_destory*销毁链表** @head要销毁链表的表头结点* 程序退出前可以把链表销毁*/voidlist_destorynode_t*head{node_t*cur=head-next;whilecur!=head{head-next=cur-next;freecur;cur=cur-next;}freehead;}/***mprint*打印结点的内容** @head链表的头结点 本函数不用,为了给list_for_each调用* @cur要打印的当前结点* @arg占位*/void*mprintnode_t*headnode_t*curvoid*arg{printf%d\t%-15s%-10s%-20s\t\t%
4.2f元/天\nroom_t*cur-elem-room_numberType_to_stringroom_t*cur-elem-room_kindroom_t*cur-elem-guest_nameroom_t*cur-elem-guest_Idroom_t*cur-elem-room_price;returnNULL;}/***mdel*删除给定元素内容的结点**@head链表的头结点*@cur要删除的结点*@arg要删除结点中的一项内容*通过arg找到要删除的结点,再调用list_del删除结点*/void*mdelnode_t*headnode_t*curvoid*arg{ifroom_t*cur-elem-room_number==*int*arg{list_delheadcur;}returnNULL;}/***Bool_to_string**@_bool_将给定的Bool类型变量返回String值用于输出*/char*Bool_to_stringBool_bool_{switch_bool_{caseFalse:returnFalse;caseTrue:returnTrue;default:returnNULL;}}/***Type_to_string**@kind将给定的Type类型变量返回String值用于输出*/char*Type_to_stringTypekind{switchkind{caseSingle:returnSingle;caseStandard:returnStandard;caseVip:returnVip;casePresident:returnPresident;default:returnNULL;}}/***get_first_room*得到第一个为空的房间** @hotal房间数组* @kind哪一种类型的房间*/room_t*get_first_roomroom_thotal[ROOM_MAX]Typekind{inti;fori=0;iROOM_MAX;i++hotal++{if!hotal-room_is_used{returnhotal;}}returnNULL;}/***room_add*将要住处的房间添加到房间链表里面** @hoad链表头* @hotal整个酒店的房间**首先由房客确定要居住的房间类型* 根据类型,调用get_first_room得到第一个没有居住的房间* 再把房间信息填完整,最后加入到房间链表里面*/voidroom_addnode_t*headroom_thotal[TYPE_NUM][ROOM_MAX]{intposition=1;Typekind;time_ttimer=timeNULL;room_t*room_dest;locate_position30position=increase_twoposition;printf一共有四种类型的房间\n\n;locate_position25position=increase_twoposition;printf1:Single[单间];locate_position25position=increase_twoposition;printf2:Standard[标准间];locate_position25position=increase_twoposition;printf3:Vip[VIP房间];locate_position25position=increase_twoposition;printf4:President[总统套房];locate_position25position=increase_twoposition;printf0:Esc[取消]\n;locate_position25position=increase_twoposition;printf请选择要居住的类型,按0取消本次操作:\n;locate_position30position=increase_twoposition;scanf%dkind;/*用户选择取消,则直接退出 */if!kind{return;}/*因为输入的类型比房间类型大 1所以要减1*/room_dest=get_first_roomhotal[kind-1]kind-1;room_dest-room_is_used=True;locate_position33position=increase_twoposition;printf请输入您的姓名;locate_position35position=increase_twoposition;scanf%sroom_dest-guest_name;do{locate_position30position=increase_twoposition;printf请输入您的18位身份证号;locate_position30position=increase_twoposition;scanf%sroom_dest-guest_Id;}whilestrlenroom_dest-guest_Id!=18;/*入住时间和离开时间都为当时时间,离开时间在每次查看的时候都会增加的*/room_dest-start_time=localtimetimer;room_dest-start_time=localtimetimer;list_addheadroom_dest;locate_position25position=increase_twoposition;printf入住信息已经填写完整,祝您居住愉快!;locate_position30position=increase_twoposition;}/***room_del*删除房间** @head链表头结点* 删除房间函数,根据要房客要退房的房间号,调用mdel从链表中去除房间信息*/voidroom_delnode_t*head{intdel_num;charch=i;printf请输入要退定的房间号\n;scanf%ddel_num;printf要删除的房间号是:%d\ndel_num;whiletoupperch!=Ytoupperch!=N{printf确定退房Y/N\n;ch=getchar;}iftoupperch==Y{list_for_eachheadmdelvoid*del_num;printf退记成功,欢迎下次光临!\n;}}intmain{menu;return0;}退出关于帮助说明结账退房查询房间入住查询当前费用登记入住酒店信息管理系统-10-。