模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx

上传人:b****1 文档编号:1569484 上传时间:2023-05-01 格式:DOCX 页数:18 大小:555.50KB
下载 相关 举报
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第1页
第1页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第2页
第2页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第3页
第3页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第4页
第4页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第5页
第5页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第6页
第6页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第7页
第7页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第8页
第8页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第9页
第9页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第10页
第10页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第11页
第11页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第12页
第12页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第13页
第13页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第14页
第14页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第15页
第15页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第16页
第16页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第17页
第17页 / 共18页
模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx

《模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx》由会员分享,可在线阅读,更多相关《模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。

模拟旅馆管理系统的一个功能床位的分配与回收Word文件下载.docx

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

题目:

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

1问题描述:

某旅馆有n个等级的房间,第I等级有

个房间,每个等级有

个床位(1≤I≤n)。

试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。

⒉基本要求

(1)输入数据

分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。

回收时,输入房间等级、房间号和床位号。

2)输出数据

分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。

分配不成功时,如所有等级均无床位,则打印“客满”信息;

如旅客需要的等级均无空床位,则打印“是否愿意更换等级”的询问信息。

若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。

⒊实现提示

(1)数据结构

主要采用顺序结构链接结构的线性表及堆栈。

a)每个房间用一个如下所示的具有五个字段的结点(房结点)表示:

性别

房间号

现有空床数

BTOP

RLINK

其中,性别:

0表示房间为空状态

1表示房间分配给女旅客

2表示房间分配给男旅客

现有空床数:

数据在0~

之间,其中

是第i等级一个房间的床位数,当现有空床数为

时,表示房间为空;

为0时,表示房间满。

RLINK:

当房间空时,用作空房栈的连接;

当房间不空时,指向下一个房结点。

BTOP:

指向该房间的空床号栈栈顶。

一个房间对应一个顺序表示的空床号栈。

栈的容量为

,栈中存放空床号。

分配时,从栈顶取出空床号,栈顶下移(BTOP=BTOP+1);

回收时,栈顶上移(BTOP=BTOP-1),将回收的空床号填入栈顶。

每一个等级中的空房间构成一个空房栈;

已住旅客的房间构成一个链栈(简称房链),其头结点结构如下:

可分配女床位总数

可分配男床位总数

TTOP

其中:

第i等级中房间总数

第i等级中每个房间的床位数

可分配男、女床位的总数的初值等于

*

,因为开始时所有房间和床位既可以分配给男旅客,也可以分配给女旅客。

当在房链中分配一个床位给男(女)旅客,床位总数应减1;

当从空房栈中取出一个房间作为男(女)旅客房间时,则可分配女(男)床位总数应减

,当回收一个男(女)床位时,则可分配男(女)床位总数应加1;

当回收一个男(女)空房至空房栈时,则可分配女(男)床位总数应加

TTOP:

指向本级空房栈栈顶,当无空房间时,TTOP=^(NIL)。

指向本级房链第一个顶点,当房链为空时,RLINK=^(NIL)

顺序表s=(

),其中,

顺序存放第1~n等级房间的头结点;

存放内容如下所示:

全店可分配女床总数

^

初始时,全店可分配男、女床总数相同,均为

,在分配或回收时,对各等级可分配男(女)床位总数处理的同时也要对全店可分配男(女)床总数作相应处理,当全店可分配男(女)床总数等于零时,表示客满。

(2)需求分析

经过分析,程序要有以下几个功能:

a.程序启动的时候应该能够对旅馆的信息进行初始化,并且可以让不同的进行手动初始化;

b.当客户到来的时候,可以登录客户的信息,并且根据旅馆的情况和客

户的要求进行分配床位;

c.当客户结账的时候,可以打印其账单,并且将床位回收;

d.在进行输入信息的时候,应该有检查错误的功能,防止输入的信息超出正常范围.

4、概要设计

功能模块的划分

功能模块的描述:

1.信息的初始化:

应该包括两种初始化,第一种是每次打开程序的时候,自动完成对旅馆信息的初始化。

第二种是由用户输入旅馆的信息,完成旅馆信息的初始化。

2.显示模块.显示模块是人机交互的必要模块,用于显示主菜单、旅馆的当前住宿情况、

床位分配情况、账单等等,方便用户进行下一步操作。

3.客户登记及床位分配模块:

用来登记客户的信息以及床位的分配。

4.客户退房及床位回收模块:

用来登记退房客户的信息以及床位的回收。

5.保存信息模块:

用来保存旅馆的相关信息,包括手动初始化之后的客房信息,以及退出程序之前的保存工作。

6.退出:

退出程序。

4.源程序代码:

#include"

stdafx.h"

#include<

iostream>

usingnamespacestd;

#include<

conio.h>

//数据的输入和输出

stdlib.h>

string>

cstring>

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;

//表示一个人也没有

person[k].age=0;

//客人信息置为0

person[k].day=0;

person[k].month=0;

person[k].year=0;

//名字无需初始化

person[k].bednumber=0;

}

p->

roomgrade=i;

//该房间的基本信息初始化

roomnumber=j;

//房间号

peoplein=0;

//入住人数

for(h=0;

h<

h++)p->

bed[h]=0;

//0表示该床未住人,1表示住人

q->

next=p;

q=q->

next;

}

i++;

}

q->

return(head);

}

voidinit(Room*head)//初始化

{

Room*p=head;

inti,k;

//p=head;

while(p!

=NULL)

{

for(k=0;

k++){//该房间的M个顾客初始化

//顾客姓名无需初始化

p->

//房价基本信息初始化

for(i=0;

i<

i++)

bed[i]=0;

p=p->

//下一个房间搜索

printf("

\n------操作成功!

------\n"

);

**********************************************\n"

voidcheckin(Room*head)

{//订房间

Room*p;

inti,j,bednumber=0,sex,roomgrade;

//

\n------欢迎使用订房系统------\n"

//输入性别,及房间等级

//姓名,年龄

intage,day,month,year;

请输入姓名:

"

cin>

>

name;

intlen=name.length();

if(name[0]<

65){

printf("

Error!

请重新输入。

\n"

return;

请输入年龄:

scanf_s("

%d"

&

age);

请输入性别(1为男,0为女):

sex);

请输入房的截至日期:

年="

scanf_s("

year);

月="

month);

日="

day);

请输入房间等级:

(1-%d):

"

N);

roomgrade);

p=head;

intfangjianhao=0;

//标记床号,房间号

intflag=0;

//标记是否分配成功

while(p!

=NULL){//一个房间一个房间搜索,订房

if(p->

roomgrade==roomgrade){

for(i=1;

i++){//进入该等级,查找房间

for(j=0;

j++){//进入该房间查找床位

if(p->

bed[j]==0){//查找到次床位

flag=1;

//标记分配成功

bednumber=j+1;

//标记床号

fangjianhao=p->

roomnumber;

p->

person[j].name=name;

//写入顾客信息

person[j].age=age;

person[j].sex=sex;

person[j].year=year;

person[j].month=month;

person[j].day=day;

person[j].bednumber=j+1;

bed[j]=1;

//标记此房间的词此床位已住人

peoplein++;

//此房间的入住人数+1

break;

//找到床位跳出循环

}

if(flag==1)break;

}

if(flag==1)break;

}//进入该等级,查找房间

if(flag==1)break;

//继续下一个房间的搜索

}//while()

if(flag==0)

\n该等级的房间已满,请重新另外等级房间!

if(flag==1)

\n您分配的房间信息为:

\n房间等级:

%d\n房间号:

%d\n床号:

%d\n"

roomgrade,fangjianhao,bednumber);

voidcheckout(Room*head){//退房间

introomnumber,roomgrade,bednumber,j;

//标志位

------欢迎使用退房系统------\n"

请输入房间号:

roomnumber);

请输入床号:

bednumber);

//p标记头节点

=NULL){//搜索房间号,性别,房间等级

roomgrade==roomgrade&

&

p->

roomnumber==roomnumber){

for(j=0;

if(p->

person[j].bednumber==bednumber){//查找到此床位

flag=1;

//标记查找成功

p->

person[j].name="

;

//清除顾客信息

person[j].age=0;

person[j].sex=-1;

person[j].year=0;

person[j].month=0;

person[j].day=0;

person[j].bednumber=0;

bed[j]=0;

//标记此房间的词此床位未住人

peoplein--;

//此房间的入住人数-1

//p->

roomnumber=0;

break;

}if(flag==1)break;

}if(flag==1)break;

}if(flag==1)break;

//继续下一个房间的搜索

if(flag==1)printf("

----------删除信息成功!

---------\n"

if(flag==0)printf("

----------删除信息失败!

voiddisplay(Room*head)

{//显示房间信息

\n\n--------已订房间查询--------\n\n"

while(p->

next!

=NULL){//搜索

roomgrade<

=5&

roomgrade>

=1)

k++){//输出该房间的所有顾客信息

if(p->

person[k].bednumber!

=0){

printf("

%d,房间号:

%d,"

p->

roomgrade,p->

顾客姓名:

cout<

<

p->

person[k].name;

顾客性别:

%d该房间内已住人数:

%d,房间到期日期:

%d年,%d月,%d日,"

person[k].sex,p->

peoplein,p->

person[k].year,p->

person[k].month,p->

person[k].day);

该房间已住人的床号为:

for(i=0;

if(p->

bed[i]==1)

printf("

i+1);

}

\n**********************************************\n"

voidmain()

intn,k=1;

//k为判断循环的条件

Room*head;

head=creat();

//creat()返回room结构类型

while(k==1){

欢迎您的光临,很高兴为您服务\n"

------系统功能-------\n"

1:

订房\n"

2:

退房\n"

3:

显示房间分配情况\n"

4:

删除所有信息\n"

5:

退出系统\n"

请您选择功能(请输入1-5的数字):

scanf_s("

n);

switch(n){

case1:

checkin(head);

break;

case2:

checkout(head);

case3:

display(head);

case4:

init(head);

case5:

k=0;

//结束

default:

printf("

输入的信息错误!

请重新输入!

5.程序截图:

6.实验总结

(1)本次课程设计的题目是模拟旅馆的一个功能——床位的分配与回收。

我采用的是链表和栈的结构形式进行编程,基本完成题目的要求,既对链表和栈的相关知识有了更加深刻的理解,而且又熟练了c语言编程。

(2)我们定义了一个顺序表来存储每一级房间的头结点。

然后义了三个结构体,房间节点的结构体,床位节点的结构体,客户节点的结构体,分别用来存放房间、床位、客户的相关信息。

然后用了链式存储结构的栈结构,分别为空房栈、已住房栈、空床位栈、已住床位栈。

(3)本次实验涉及到的主要是链表的和栈的运算,包括有链表的建立,插入,删除,栈主要是进栈,出栈,栈节点的查找等,进一步加深了对数据结构的了解。

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

当前位置:首页 > 人文社科 > 法律资料

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

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