版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
./实验报告课程名称数据结构实验名称床位的分配与回收实验类型_综合型实验地点计405机房实验日期指导教师海平专业软件工程班级软件1601学号1611030102寇春雷石油化工大学计算机与通信工程学院数据结构实验报告评分表项目要求分数有无项目〔√得分预习报告〔30分实验目的明确5实验容理解透彻5实验方案设计完整合理程序总体框架设计完整10完成相关辅助代码5测试方案合理5实验过程〔30分发现问题5问题的分析15问题的解决方法10实验报告〔20分容翔实无缺漏5如实记录实验过程10撰写规整5实验总结〔10分实验结果的分析5按照结果对原实验方案的改进意见5实验体会〔10分实验的收获5实验容的发散考虑5总分实验四模拟旅馆管理系统的一个功能——床位的分配与回收题目:模拟旅馆管理系统的一个功能——床位的分配与回收问题描述:某旅馆有n个等级的房间,第I等级有个房间,每个等级有个床位〔1≤I≤n。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位〔供下次分配的算法。⒉基本要求〔1输入数据分配时,输入旅客、年龄、性别、到达日期和所需房间等级。回收时,输入房间等级、房间号和床位号。2输出数据分配成功时打印旅客、年龄、到达日期、房间等级、房间和床位。分配不成功时,如所有等级均无床位,则打印"客满"信息;如旅客需要的等级均无空床位,则打印"是否愿意更换等级?"的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。⒊实现提示〔1数据结构主要采用顺序结构结构的线性表及堆栈。每个房间用一个如下所示的具有五个字段的结点〔房结点表示:性别房间号现有空床数BTOPRLINK其中,性别:0表示房间为空状态1表示房间分配给女旅客2表示房间分配给男旅客现有空床数:数据在0~之间,其中是第i等级一个房间的床位数,当现有空床数为时,表示房间为空;为0时,表示房间满。RLINK:当房间空时,用作空房栈的连接;当房间不空时,指向下一个房结点。BTOP:指向该房间的空床号栈栈顶。一个房间对应一个顺序表示的空床号栈。栈的容量为,栈中存放空床号。分配时,从栈顶取出空床号,栈顶下移〔BTOP=BTOP+1;回收时,栈顶上移〔BTOP=BTOP-1,将回收的空床号填入栈顶。每一个等级中的空房间构成一个空房栈;已住旅客的房间构成一个链栈〔简称房链,其头结点结构如下:可分配女床位总数可分配男床位总数TTOPRLINK其中::第i等级中房间总数第i等级中每个房间的床位数可分配男、女床位的总数的初值等于*,因为开始时所有房间和床位既可以分配给男旅客,也可以分配给女旅客。当在房链中分配一个床位给男〔女旅客,床位总数应减1;当从空房栈中取出一个房间作为男〔女旅客房间时,则可分配女〔男床位总数应减,当回收一个男〔女床位时,则可分配男〔女床位总数应加1;当回收一个男〔女空房至空房栈时,则可分配女〔男床位总数应加。TTOP:指向本级空房栈栈顶,当无空房间时,TTOP=^〔NIL。RLINK:指向本级房链第一个顶点,当房链为空时,RLINK=^<NIL>顺序表s=<>,其中,顺序存放第1~n等级房间的头结点;存放容如下所示:全店可分配女床总数全店可分配女床总数00^^初始时,全店可分配男、女床总数相同,均为,在分配或回收时,对各等级可分配男〔女床位总数处理的同时也要对全店可分配男〔女床总数作相应处理,当全店可分配男〔女床总数等于零时,表示客满。〔2需求分析当客户到来的时候,可以登录客户的信息,并且根据旅馆的情况和客户的要求进行分配床位;当客户结账的时候,可以打印其账单,并且将床位回收;在进行输入信息的时候,应该有检查错误的功能,防止输入的信息超出正常围.4、概要设计主函数功能模块的划分主函数退出保存信息客户退房床位回收客户登记床位分配退出保存信息客户退房床位回收客户登记床位分配显示初始化功能模块的描述:1.应该包括两种初始化,第一种是每次打开程序的时候,自动完成对旅馆2.显示模块.3.客户登记及床位分配模块:用来登记客户的信息以及床位的分配。4.用来登记退房客户的信息以及床位的回收。5.保存信息模块:用来保存旅馆的相关信息,包括手动初始化之后的客房信息,以及退出程序之前的保存工作。6.退出:退出程序。4.源程序代码:#include"stdafx.h"#include<iostream>usingnamespacestd;#include<conio.h>//数据的输入和输出#include<stdlib.h>#include<string>#include<cstring>#include<stdio.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;k<M;k++>{//每个房间的不同顾客信息初始化 p->person[k].sex=-1;//表示一个人也没有 p->person[k].age=0;//客人信息置为0 p->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;h<M;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;k<M;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;i<M;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<"请输入:">; cin>>name;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;j<M;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<"**********************************************\n">; printf<"请输入房间等级:">; scanf_s<"%d",&roomgrade>; printf<"请输入房间号:">; scanf_s<"%d",&roomnumber>; printf<"请输入床号:">; scanf_s<"%d",&bednumber>; p=head;//p标记头节点while<p!=NULL>{//搜索房间号,性别,房间等级if<p->roomgrade==roomgrade&&p->roomnumber==roomnumber>{for<j=0;j<M;j++>{//进入该房间查找床位if<p->person[j].bednumber==bednumber>{//查找到此床位 flag=1;//标记查找成功 p->person[j].name="";//清除顾客信息 p->person[j].age=0; p->person[j].sex=-1; p->person[j].year=0; p->person[j].month=0; p->person[j].day=0; p->person[j].bednumber=0; p->bed[j]=0;//标记此房间的词此床位未住人 p->peoplein--;//此房间的入住人数-1//p->roomnumber=0;break;//找到床位跳出循环 }if<flag==1>break; }if<flag==1>break; }if<flag==1>break; p=p->next;//继续下一个房间的搜索 }if<flag==1>printf<"删除信息成功!\n">;if<flag==0>printf<"删除信息失败!\n">; printf<"**********************************************\n">;}voiddisplay<Room*head>{//显示房间信息Room*p;inti,k; p=head; printf<"\n\n已订房间查询\n\n">; printf<"**********************************************\n">;while<p->next!=NULL>{//搜索if<p->roomgrade<=5&&p->roomgrade>=1>for<k=0;k<M;k++>{//输出该房间的所有顾客信息if<p->person[k].bednumber!=0>{ printf<"\n房间等级:%d,房间号:%d,",p->roomgrade,p->roomnumber>; printf<"顾客:">; cout<<p->person[k].name; printf<",顾客性别:%d该房间已住人数:%d,房间到期日期:%d年,%d月,%d日,",p->person[k].sex,p->peoplein,p->person[k].year,p->person[k].month,p->person[k].day>; printf<"该房间已住人的床号为:">;for<i=0;i<M;i++>if<p->bed[i]==1> printf<"%d,",i+1>; } } p=p->next;//继续下一个房间的搜索 } printf<"\n**********************************************\n">;}voidmain<>{intn,k=1;//k为判断循环的条件Room*head; head=creat<>;//creat<>返回room结构类型while<k==1>{printf<"欢迎您的光临,很高兴为您服务
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年4月江苏扬州市邗江区卫生健康系统事业单位招聘专业技术人员20人备考题库附参考答案详解(突破训练)
- 2026湖北武汉市三级医院招聘14人备考题库带答案详解(b卷)
- 2026甘肃金昌永昌县红山窑镇卫生院招聘1人备考题库附参考答案详解(精练)
- 2026春季山东济宁市鱼台邮政校园招聘备考题库附参考答案详解(培优)
- 2026内蒙古呼和浩特市实验幼儿园招聘教师1人备考题库及答案详解【各地真题】
- 雨课堂学堂在线学堂云《食品理化检测技术(贵州农业职业学院)》单元测试考核答案
- 酿酒厂发酵工艺规范
- 2026山东济南市中心医院招聘卫生高级人才(控制总量)10人备考题库含答案详解(轻巧夺冠)
- 2026山东济南市第二妇幼保健院招聘卫生高级人才(控制总量)2人备考题库及参考答案详解(模拟题)
- 2026浙江丽水开放大学招聘专业技术人员1人备考题库附答案详解(完整版)
- 中药泡洗操作技术
- JJF(京) 159-2025 水质在线电导率仪校准规范
- 校园体育活动意外伤害应急处置
- 消毒供应资源高效利用与基层成本优化策略
- 二级股东合同范本
- 口腔门诊部医保自查报告
- (2025年)病理生理学期末考试练习题(含答案)
- 天然气管道防范第三方施工破坏安全培训课件
- 烟草配送员岗位安全培训课件
- 广东广州市海珠区统计局招聘统计专职人员笔试模拟试题及完整答案详解1套
- 生产运营月度会议汇报
评论
0/150
提交评论