床位的分配与回收Word文档下载推荐.docx

上传人:b****4 文档编号:6378023 上传时间:2023-05-06 格式:DOCX 页数:33 大小:214.04KB
下载 相关 举报
床位的分配与回收Word文档下载推荐.docx_第1页
第1页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第2页
第2页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第3页
第3页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第4页
第4页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第5页
第5页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第6页
第6页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第7页
第7页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第8页
第8页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第9页
第9页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第10页
第10页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第11页
第11页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第12页
第12页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第13页
第13页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第14页
第14页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第15页
第15页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第16页
第16页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第17页
第17页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第18页
第18页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第19页
第19页 / 共33页
床位的分配与回收Word文档下载推荐.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

床位的分配与回收Word文档下载推荐.docx

《床位的分配与回收Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《床位的分配与回收Word文档下载推荐.docx(33页珍藏版)》请在冰点文库上搜索。

床位的分配与回收Word文档下载推荐.docx

性别(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->

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2