C程序实现旅馆房间管理

发布时间:2024-11-03 04:32 发布:上海旅游网

问题描述:

设某旅馆有N间客房,每间客房的房间号码、房间等级、床位数以及占用状态分别存在一维数组ROOM、RANK、NBED 和STATUS中,房间的等级值为1、2和3,房间的状态值为0(空闲)或1(占用),客房是以房间(不是以床位)为单位出租的。
要求:
能根据几个散客的要求预定一间空房,设程序的输入为:人数M、房间的等级要求R(当R为0时表示任何等级都可以),程序的输出为所有可供选择的房间号。
谢谢一楼的回答
而且写得很不错,佩服!
希望有更简便的语句可以实现!
期待中。。。

补充:
已知有方案一那样的条件,并且已知等级为R的房间每人每天的住宿费为RATE(R),RATE是一个一维数组。程序在输出每个候选的房间号码RM(J)之后,还要求输出这批散客每人所需付的住宿费DAYRENT(J)。考虑到旅馆房间数N可能比较大,为此,不必每次预订时都把满足要求的房间号RM(J)都输出。设程序要求输入人数M、房间等级要求R、以及希望输出可供选择的房间号码数K(1<=K<=N),程序执行后能输出所要求的结果。

到此(+50分)

以上同,为了使程序能具有较大的适应性,设旅馆的房间数N是一个可供修改的符号为常数,而旅馆订房系统的房间初始信息可以由程序员根据旅馆现状初始化(即ROOM、RANK、NBED、STATDS、RATE数组状态可由程序员进行初始化),然后在初始化的基础进行订房工作。初始化后的工作要求同以上。

到此(+100分)

问题解答:

越改越多。。
#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"

#define MAX 64/*MAX-1为房间上限值*/

void View(char ROOM[],int RANK[],int NBED[],int STATUS[]);/*显示各房间状态*/
int Full();/*查看旅馆是否已满*/
int Getmax(int NBED[]);/*取得可用的最大房间的床位数*/
int Array(int M,int R);/*安排房间*/
void Menu();/*显示菜单*/
void BkRm();/*订房*/
void ReRm();/*退房*/
void Direct();/*快捷订房(直接输入房间号)*/
void Ready();/*初始化*/

char ROOM[MAX];
int RANK[MAX],
NBED[MAX],
STATUS[MAX];
float RATE[MAX];
int M,R;
int SIZE,SIZER;

void main()
{
Ready();
View(ROOM,RANK,NBED,STATUS);
while(1)
{
if(Full()==SIZE)
printf("FULL!!!!!\n");
Menu();
}
}

void Ready()
{
int i;
printf("For your first using this program, please answer the questions to set your base data. Thanks!\n");
printf("How many ROOMs does your hotel have ?");
scanf("%d",&SIZE);
getchar();
printf("How many RANKs does your hotel have ?");
scanf("%d",&SIZER);
getchar();
printf("Please set the RATE.\n");
for(i=0;i<SIZER;i++)
{
printf("RANK %d :",i+1);
scanf("%f",&RATE[i]);
getchar();
}
for(i=0;i<SIZE;i++)
{
printf("Please input the SERIAL NUMBER, RANK, BED NUMBER, and STATUS of %d",i+1);
if(i==0)
printf("st room\n");
else if(i==1)
printf("nd room\n");
else if(i==2)
printf("rd room\n");
else
printf("th room\n");
scanf("%c,%d,%d,%d",&ROOM[i],&RANK[i],&NBED[i],&STATUS[i]);
getchar();
}
putchar('\n');
putchar('\n');
}

void Menu()
{
int i;
printf("\t1.VIEW ROOM\t2.BOOK ROOM\t3.RETURN ROOM\t4.EXIT\n\t0.DIRECT");
printf("\nInput the Number (0-3): ");
while(1)
{
scanf("%d",&i);
getchar();
if(i>=0 && i<=3)
break;
else
printf("Error! Input Again!\nInput the Number (0-4): ");
}
switch(i)
{
case 1:
{
View(ROOM,RANK,NBED,STATUS);
break;
}
case 2:
{
BkRm();
break;
}
case 3:
{
ReRm();
break;
}
case 0:
{
Direct();
break;
}
default:
exit(0);
}
}

void Direct()
{
char num;
int i;
printf("Please input the NUMBER of rooms : ");
scanf("%c",&num);
if(num<='z' && num>='a')
num+='Z'-'z';
getchar();
for(i=0;i<SIZE;i++)
if(ROOM[i]==num)
STATUS[i]=1;
printf("Success!\n");
}

void BkRm()
{
char confirm;
int flag;
do
{
printf("Please input the NUMBER of customers : ");
scanf("%d",&M);
getchar();
printf("Please input the RANK of rooms : ");
scanf("%d",&R);
getchar();
printf("Number %d\tRANK %d\nYes Or No ?(Y/N)",M,R);
scanf("%c",&confirm);
getchar();
}while(confirm=='N' || confirm=='n');
flag=Array(M,R);
if(flag!=0)
{
printf("BooK ROOM ?(Y/N)");
scanf("%c",&confirm);
getchar();
if(confirm=='Y' || confirm=='y')
Direct();
}
}

void ReRm()
{
char num;
int i;
printf("Please input the NUMBER of rooms : ");
scanf("%c",&num);
getchar();
if(num<='z' && num>='a')
num+='Z'-'z';
if(!isalpha(num))
{
printf("Error! Input Again!\n");
ReRm();
}
for(i=0;i<SIZE;i++)
if(ROOM[i]==num)
if(STATUS[i]==0)
{
printf("It has been returned already!\n");
break;
}
else
{
STATUS[i]=0;
printf("Success!\n");
break;
}

}

int Array(int M,int R)
{
int i,flag=0,count=0,shownum;
printf("How many results do you want ? ");
scanf("%d",&shownum);
getchar();
for(i=0;i<SIZE;i++)
if(NBED[i]==M && (R==RANK[i] || R==0) && STATUS[i]==0)
{
flag=-1;
printf("\tROOM\tRANK\tBED\tRATE\n");
printf("\t%c\t%d\t%d\t%.2f\n",ROOM[i],RANK[i],NBED[i],RATE[(RANK[i]-1)]);
count++;
if(count==shownum)
return flag;
}
if(flag==-1)
return flag;
else
{
printf("Rooms RECOMMEND:\n");
for(i=0;i<SIZE;i++)
if(NBED[i]>=M && STATUS[i]==0)
{
flag=1;
printf("\tROOM\tRANK\tBED\tRATE\n");
printf("\t%c\t%d\t%d\n",ROOM[i],RANK[i],NBED[i],RATE[(RANK[i]-1)]);

count++;
if(count==shownum)
return flag;
}
return flag;
}
}

int Full()
{
int i,full=0;
for(i=0;i<SIZE;i++)
if(STATUS[i]==1)
full++;
return full;
}

void View(char ROOM[],int RANK[],int NBED[],int STATUS[])
{
int i;
printf("\tROOM\tRANK\tBED\tSTATUS\t\tROOM\tRANK\tBED\tSTATUS\n");
for(i=0;i<SIZE;i++)
{
printf("\t%c\t%d\t%d\t%d\t",ROOM[i],RANK[i],NBED[i],STATUS[i]);
if((i+1)%2==0)
putchar('\n');
}
putchar('\n');
}

int Getmax(int NBED[])
{
int max=0,i;
for(i=0;i<SIZE-1;i++)
{
if(STATUS[i]==1)
continue;
if(max<NBED[i] && STATUS[i]==0)
max=NBED[i];
}
return max;
}

热点新闻