床位的分配与回收Word文档下载推荐.docx
- 文档编号:6378023
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:33
- 大小:214.04KB
床位的分配与回收Word文档下载推荐.docx
《床位的分配与回收Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《床位的分配与回收Word文档下载推荐.docx(33页珍藏版)》请在冰点文库上搜索。
性别(0女/1男)
入住时间
1
Zhang
25
20140608
2
Wang
24
Li
Zhao
20140609
Liu
26
20140610
输出:
每输入一个旅客的信息都会输出下表(第一位房客)
旅客房间分配表
性别
等级
房号
床位
时间
zhang
输入第二位房客后输出:
wang
输入第三位房客后输出:
li
输入第四个房客后输出:
zhao
输入第五个房客后输出:
liu
如果再次输入功能选项“1”,则会输出“旅店客满,不能入住”
退房操作:
输入功能选项“2”执行退房操作,输入退房的等级“2”,输入房号“1”,输入床号“2”。
则输出以下内容:
此等级、此房间、此床位旅客的信息为:
该名旅客的信息:
姓名性别年龄入住时间
Li0252014-6-8
输入功能选项“2”,继续退房,等级“2”,房号“2”,床号“1”,则输出以下内容:
zhao0242014-6-9
再次入住操作:
输入功能键“1”,房间等级“2”然后输入以下表格信息:
入住日期
chen
20140611
则输出:
等级号
继续入住操作:
输入功能键“1”,房间等级“2”然后输入以下表格信息:
hu
22
20140612
则输出
查询房客信息:
输入“3”,然后输入查询房客的名字“zhao”
输出“未找到该旅客,请核实后再输入”
再次,输入“3”,然后输入查询房客的名字“hu”
输出以下表格:
统计旅客信息:
输入“4”,
等级为1的房间入住人数为1
等级为2的房间入住人数为4
退出本程序:
输入“0”,则可以退出本程序。
四、【算法思想】
1、客人入住:
当入住的是某房间的第一个旅客,需要对其特别处理,以其客户信息作为本房间旅客链的第一个结点。
若非第一位乘客,则要对空的床号进行查找,首先设置一变量“i”,初始化i=1,使其与现有空房的旅客链的每位旅客的床号比较,若发现有床号与i相等,则i自加1,再进行与本房间所有旅客床号比较,若无旅客床号与i的值相等,则返回i,作为本次入住旅客的床号。
2、旅客退房
退房,若是某房间第一个乘客退房,因为首位旅客信息单元是旅客链的第一的链单元,所以删除时应将下一位旅客的地址赋给本房间存储单元中存放客户指针的单元中,以防止客户链的丢失。
若非第一个旅客退房,则只需要将本旅客的下一位旅客的地址放到这位旅客的前一位旅客的next域里面,然后释放退出旅客的信息单元就行了。
五、【模块划分】
重要模块:
主要功能函数:
初始化函数:
voidInit(hotel_lv*L)(逐级进行初始化)
判断是否客满:
intfull(hotel_lv*L)(主机进行查询直到发现空床位截止)
打印旅客信息:
voidPr_divide(cus*p,fangjian*q)
旅客住宿函数:
voidPr_divide(cus*p,fangjian*q)(首先调用full()函数,若非满,相应级别查找,有空床位则入住)
旅客退房函数:
cus*Delete(hotel_lv*L)(逐级查询直至床位,有次床位则删除)
查询旅客信息:
voidcx_customer(hotel_lv*L)(按名字逐级顺序查询)
统计旅店当前入住人数:
voidTongji_cus(hotel_lv*L)(逐级按房间顺序统计)
主函数:
voidmain()(调用各功能函数)
六、【数据结构】
本次数据结构课程设计,做的是旅店管理系统,定义了三个结构体链表,给等级链表设置了一个头结点,采用链表嵌套方法,等级链表嵌套房间链表,房间链表再嵌套旅客链表。
(1)对旅店结构体定义
typedefstructhotel_lv
{
intlv_num;
//旅店等级号
structhotel_lv*next;
//指向下一等级
structfangjian*fj_next;
//指向房间
}hotel_lv;
(2)房间结构体定义
typedefstructfangjian
intfj_num;
//房间号
intmax;
//房间的最大床位数目
intmem_num;
//房间内的当前人数
structfangjian*next;
//指向下一房间
structcustomer*cus_next;
//指向旅客
}fangjian;
(3)对旅客结构体定义
typedefstructcustomer
charname[15];
//旅客姓名
intage;
//旅客年龄
intsex;
//旅客性别
intlv;
//旅客住宿时的等级号
intbed_num;
//旅客的床位号
intyear;
//住宿日期
intmonth;
//住宿日期
intday;
structcustomer*next;
//指向下一旅客
}cus;
七、【测试情况】
八、【心得】
在开始这个课题之初,自己感觉对这个题目自己应该可以很好地完成这以课题,但到后来自己深入的研究了一下发现,这道题目还是很难得至少对于我来说,自己也曾有放弃的想法,但后来在指导老师的指导和帮助下最终完成了这个程序。
首先,定义的结构体数组,进行编写。
如果用顺序表的话对于不同的旅馆是不适用的,因为各个旅馆的房间的级别、房间的个数、房间的床位都是不相同的,如果用链表就不一样了,所以改用链表来编写。
对后面的处理在旅客进行入住情况中,在床位分配的时候,因为没有设置床位的头结点,所以要对第一个床位进行特别判断。
然后经过多次调试与修改,最终能实现旅客的入住情况。
旅客退房跟入住时一样,在床位回收的时候,因没有设置床位的头结点,所以要对第一个床位进行特别判断。
再次对非空非满的房间进行入住的时候要进行判断,哪些床位是空的,对空的床位可以分配给相应的旅客。
对退房的旅客同样需要对是否是第一位房客和非第一位房客区别开来进行修改指针。
完成了这些,本程序的基本重要的问题都已解决了。
九、【源程序】
#include<
stdio.h>
stdlib.h>
string.h>
typedefstructhotel_lv//旅店结构体
typedefstructfangjian//房间结构体
typedefstructcustomer//旅客结构体
voidInit(hotel_lv*L)//初始化函数
inti,j,k,l;
hotel_lv*p,*q;
fangjian*p1,*p2,*p3;
printf("
请输入房间分为几个等级:
\n"
);
scanf("
%d"
&
j);
//输入房间共分为几个等级
q=L;
for(i=1;
i<
=j;
i++)//初始化该等级的房间
{
p=(hotel_lv*)malloc(sizeof(hotel_lv));
q->
next=p;
p->
lv_num=i;
//给房间等级赋值
printf("
请输入房间等级为%d的房间个数:
p->
lv_num);
l);
//输入该等级的房间数目
if(l==0)
continue;
else//初始化该房间内的床位
{
p2=(fangjian*)malloc(sizeof(fangjian));
p2->
fj_num=1;
printf("
请输入房间等级为%d房间号为1的床位个数的最大值:
lv_num,k);
scanf("
(p2->
max));
//输入房间1的床位数目
mem_num=0;
//该房间内当前人数赋为零
fj_next=p2;
p3=p2;
for(k=2;
k<
=l;
k++)
p1=(fangjian*)malloc(sizeof(fangjian));
p3->
next=p1;
p1->
fj_num=k;
请输入房间等级为%d房间号为%d的床位个数的最大值:
(p1->
//输入房间k的床位数目
//该房间内的当前人数赋为零
p3=p1;
}
next=NULL;
//房间链表尾指针赋为空
}
q=q->
next;
}
//等级链表尾指针域赋为
}
intfull(hotel_lv*L)//判是否客满
hotel_lv*l;
fangjian*f;
l=L->
while(l!
=NULL)
f=l->
fj_next;
while(f!
if(f->
mem_num!
=f->
max)//如果有房间的当前人数不等于房间的最大人数,则返回0
return0;
else
f=f->
l=l->
if(!
l)//否则返回1
return1;
voidPr_divide(cus*p,fangjian*q)//打印旅客信息
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"
┃旅客房间分配表┃\n"
┣━━━━━━┳━━┳━━┳━━━┳━━━┳━━━┳━━━━━━━┫\n"
┃姓名┃性别┃年龄┃等级号┃房间号┃床位号┃入住时间┃\n"
┣━━━━━━╋━━╋━━╋━━━╋━━━╋━━━╋━━━━━━━┫\n"
┃%12s┃%d┃%2d┃%2d┃%2d┃%2d┃%4d-%2d-%2d┃\n"
p->
name,p->
sex,p->
age,p->
lv,q->
fj_num,p->
bed_num,p->
year,p->
month,p->
day);
┗━━━━━━┻━━┻━━┻━━━┻━━━┻━━━┻━━━━━━━┛\n"
voidinput(hotel_lv*L)//旅客入住函数
charc;
staticinti;
cus*s,*p2,*p3;
fangjian*p1;
if(full(L))//判断是否旅店客满
旅店客满,不能入住。
else
请输入旅客所需的房间等级:
"
//输入旅客所需的等级
lv);
=NULL)//等级不为空时
if(l->
lv_num!
=lv)
l=l->
else//有此等级时
{
p1=l->
while(p1!
=NULL)//房间不为空
{
if(p1->
mem_num==p1->
max)//是否有空床位
{
p1=p1->
if(p1==NULL)
{
getchar();
printf("
此等级为%d的所有房间均无空位\n是否愿意更换等级[y/n]"
lv);
%c"
c);
//做出选择
if(c=='
y'
)
input(L);
else
return;
}
}
else//进行旅客登记
{//第一个结点要特别判断
if(p1->
mem_num==0)
s=(cus*)malloc(sizeof(cus));
printf("
\n------------------------------------\n"
\n旅客的信息:
"
\n请输入旅客姓名:
scanf("
%s"
s->
name);
\n请输入旅客年龄:
(s->
age));
\n请输入旅客性别(如:
男1:
女0):
sex));
\n请输入旅客住宿开始日期;
”);
%d%d%d"
s->
year,&
month,&
s->
lv=lv;
//修改指针
p1->
cus_next=s;
mem_num++;
//房间当前人数加1
bed_num=1;
//尾指针置为空
Pr_divide(s,p1);
//打印房间分配表
break;
else
p2=p1->
cus_next;
p3=p2;
i=1;
for(;
p3!
=NULL;
p3=p3->
next)
{
if(i==p3->
bed_num)
{
++i;
p3=p2;
}
}
p2->
next!
p2=p2->
next);
s=(cus*)malloc(sizeof(cus));
printf("
scanf("
age);
\n请输入旅客性别"
sex);
\n请输入旅客住宿开始日期"
s->
p2->
next=s;
p1->
bed_num=i;
Pr_divide(s,p1);
break;
}
}
break;
}
cus*Delete(hotel_lv*L)//旅客退房函数
intlv,hotel_num,bed_num;
cus*p,*q;
fangjian*f;
请输入该退房人房间的等级号码:
//输入退房人的房间等级
getchar();
{
=lv)
else//找到该等级
f=l->
请输入该退房人房间的房间号码:
hotel_num);
//输入退房人的房间号码
getchar();
while(f!
if(f->
fj_num!
=hotel_num)
f=f->
else//找到该房间
p=f->
q=f->
printf("
请输入该退房人的床位号码:
bed_num);
//输入退房人的床位号码
getchar();
while(q!
if(q->
bed_num!
=bed_num)
q=q->
else//查找该床位
if(bed_num==p->
bed_num)//第一结点特别判断
{//直接打印旅客信息
该名顾客的信息:
姓名\t性别\t年龄\t入住时间\n"
%s\t%d\t%d\t%d-%d-%d\n"
q->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 床位 分配 回收