模拟旅馆管理系统的一个功能――床位的分配与回收

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验报告课程名称数据结构实验名称床位的分配与回收实验类型_综合型实验地点计405机房实验日期2017.5.20指导教师魏海平专业软件工程班级软件1601学号1611030102姓名寇春雷辽宁石油化工大学计算机与通信工程学院数据结构实验报告评分表项目要求分数有无项目(√)得分预习报告(30分)实验目的明确5实验内容理解透彻5实验方案设计完整合理程序总体框架设计完整10完成相关辅助代码5测试方案合理5实验过程(30分)发现问题5问题的分析15问题的解决方法10实验报告(20分)内容翔实无缺漏5如实记录实验过程10撰写规整5实验总结(10分)实验结果的分析5按照结果对原实验方案的改进意见5实验体会(10分)实验的收获5实验内容的发散考虑5总分实验四模拟旅馆管理系统的一个功能——床位的分配与回收题目:模拟旅馆管理系统的一个功能——床位的分配与回收⒈问题描述:某旅馆有n个等级的房间,第I等级有ia个房间,每个等级有ib个床位(1≤I≤n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。⒉基本要求(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。回收时,输入房间等级、房间号和床位号。2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。⒊实现提示(1)数据结构主要采用顺序结构链接结构的线性表及堆栈。a)每个房间用一个如下所示的具有五个字段的结点(房结点)表示:性别房间号现有空床数BTOPRLINK其中,性别:0表示房间为空状态1表示房间分配给女旅客2表示房间分配给男旅客现有空床数:数据在0~ib之间,其中ib是第i等级一个房间的床位数,当现有空床数为ib时,表示房间为空;为0时,表示房间满。RLINK:当房间空时,用作空房栈的连接;当房间不空时,指向下一个房结点。BTOP:指向该房间的空床号栈栈顶。一个房间对应一个顺序表示的空床号栈。栈的容量为ib,栈中存放空床号。分配时,从栈顶取出空床号,栈顶下移(BTOP=BTOP+1);回收时,栈顶上移(BTOP=BTOP-1),将回收的空床号填入栈顶。每一个等级中的空房间构成一个空房栈;已住旅客的房间构成一个链栈(简称房链),其头结点结构如下:可分配女床位总数可分配男床位总数iaibTTOPRLINK其中:ia:第i等级中房间总数ib第i等级中每个房间的床位数可分配男、女床位的总数的初值等于ia*ib,因为开始时所有房间和床位既可以分配给男旅客,也可以分配给女旅客。当在房链中分配一个床位给男(女)旅客,床位总数应减1;当从空房栈中取出一个房间作为男(女)旅客房间时,则可分配女(男)床位总数应减ib,当回收一个男(女)床位时,则可分配男(女)床位总数应加1;当回收一个男(女)空房至空房栈时,则可分配女(男)床位总数应加ib。TTOP:指向本级空房栈栈顶,当无空房间时,TTOP=^(NIL)。RLINK:指向本级房链第一个顶点,当房链为空时,RLINK=^(NIL)顺序表s=(missss,...,...,,,10),其中,nss~1顺序存放第1~n等级房间的头结点;0s存放内容如下所示:全店可分配女床总数全店可分配女床总数00^^初始时,全店可分配男、女床总数相同,均为iiiba*,在分配或回收时,对各等级可分配男(女)床位总数处理的同时也要对全店可分配男(女)床总数作相应处理,当全店可分配男(女)床总数等于零时,表示客满。(2)需求分析经过分析,程序要有以下几个功能:a.程序启动的时候应该能够对旅馆的信息进行初始化,并且可以让不同的进行手动初始化;b.当客户到来的时候,可以登录客户的信息,并且根据旅馆的情况和客户的要求进行分配床位;c.当客户结账的时候,可以打印其账单,并且将床位回收;d.在进行输入信息的时候,应该有检查错误的功能,防止输入的信息超出正常范围.4、概要设计功能模块的划分功能模块的描述:1.信息的初始化:应该包括两种初始化,第一种是每次打开程序的时候,自动完成对旅馆信息的初始化。第二种是由用户输入旅馆的信息,完成旅馆信息的初始化。2.显示模块.显示模块是人机交互的必要模块,用于显示主菜单、旅馆的当前住宿情况、床位分配情况、账单等等,方便用户进行下一步操作。3.客户登记及床位分配模块:用来登记客户的信息以及床位的分配。4.客户退房及床位回收模块:用来登记退房客户的信息以及床位的回收。5.保存信息模块:用来保存旅馆的相关信息,包括手动初始化之后的客房信息,以及退出程序之前的保存工作。6.退出:退出程序。4.源程序代码:主函数初始化显示客户登记床位分配客户退房床位回收保存信息退出#includestdafx.h#includeiostreamusingnamespacestd;#includeconio.h//数据的输入和输出#includestdlib.h#includestring#includecstring#includestdio.h#defineN7//房间等级#defineNUM4//每个等级的房间数#defineM2//每个房间的床位数typedefstructcustomer{//顾客结构stringname;intage;intsex;intday,month,year;//到期时间intbednumber;//该顾客的床号}customer;typedefstructroom{//房间结构customerperson[M];introomgrade;//该房间的房间等级introomnumber;//该房间的房间号intpeoplein;//该房间的房间入住人数intbed[M];//该房间的总床位structroom*next;//结构体指针}Room;Room*creat(){//建立房间的链表Room*head,*p,*q;inti=1,j,k,m=0,h;head=new(Room);//生成头结点head-next=NULL;q=head;//正位序插在表尾while(i=N){//从第一等级开始一一建立单链表for(j=1;j=NUM;j++){//进入该等级,建立不同房间p=new(Room);for(k=0;kM;k++){//每个房间的不同顾客信息初始化p-person[k].sex=-1;//表示一个人也没有p-person[k].age=0;//客人信息置为0p-person[k].day=0;p-person[k].month=0;p-person[k].year=0;//名字无需初始化p-person[k].bednumber=0;//该顾客的床号}p-roomgrade=i;//该房间的基本信息初始化p-roomnumber=j;//房间号p-peoplein=0;//入住人数for(h=0;hM;h++)p-bed[h]=0;//0表示该床未住人,1表示住人q-next=p;q=q-next;}i++;}q-next=NULL;return(head);}voidinit(Room*head)//初始化{Room*p=head;inti,k;//p=head;while(p!=NULL){for(k=0;kM;k++){//该房间的M个顾客初始化p-person[k].age=0;p-person[k].day=0;p-person[k].month=0;p-person[k].sex=-1;p-person[k].year=0;//顾客姓名无需初始化p-person[k].bednumber=0;//该顾客的床号}p-peoplein=0;//房价基本信息初始化for(i=0;iM;i++)p-bed[i]=0;p=p-next;//下一个房间搜索}printf(\n------操作成功!------\n);printf(**********************************************\n);}voidcheckin(Room*head){//订房间Room*p;inti,j,bednumber=0,sex,roomgrade;//printf(\n------欢迎使用订房系统------\n);printf(**********************************************\n);//输入性别,及房间等级//姓名,年龄stringname;intage,day,month,year;printf(请输入姓名:);cinname;intlen=name.length();if(name[0]65){printf(Error!请重新输入。\n);return;}printf(请输入年龄:);scanf_s(%d,&age);printf(请输入性别(1为男,0为女):);scanf_s(%d,&sex);printf(请输入房的截至日期:);printf(年=);scanf_s(%d,&year);printf(月=);scanf_s(%d,&month);printf(日=);scanf_s(%d,&day);printf(请输入房间等级:(1-%d):,N);scanf_s(%d,&roomgrade);p=head;intfangjianhao=0;//标记床号,房间号intflag=0;//标记是否分配成功while(p!=NULL){//一个房间一个房间搜索,订房if(p-roomgrade==roomgrade){for(i=1;i=NUM;i++){//进入该等级,查找房间for(j=0;jM;j++){//进入该房间查找床位if(p-bed[j]==0){//查找到次床位flag=1;//标记分配成功bednumber=j+1;//标记床号fangjianhao=p-roomnumber;p-person[j].name=name;//写入顾客信息p-person[j].age=age;p-person[j].sex=sex;p-person[j].year=year;p-person[j].month=month;p-person[j].day=day;p-person[j].bednumber=j+1;//该顾客的床号p-bed[j]=1;//标记此房间的词此床位已住人p-peoplein++;//此房间的入住人数+1break;//找到床位跳出循环}if(flag==1)break;}if(flag==1)break;}//进入该等级,查找房间if(flag==1)break;}p=p-next;//继续下一个房间的搜索}//while()printf(**********************************************\n);if(flag==0)printf(\n该等级的房间已满,请重新另外等级房间!\n);if(flag==1)printf(\n您分配的房间信息为:\n房间等级:%d\n房间号:%d\n床号:%d\n,roomgrade,fangjianhao,bednumber);printf(**********************************************\n);}voidcheckout(Room*head){//退房间Room*p;introomnumber,roomgrade,bednumber,j;intflag=0;//标志位printf(------欢迎使用退房系统------\n);printf(********************************

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功