怎么定义酒殿管理系统的数据结构!!!
要求:
房间有等级,每个等级有ai间房,每间房有bi个床位.
客人入住,需要登记姓名,性别,房间等级,几号房,几号床位.
怎么定义这个数据结构呢?
我定义了
struct Room
{
int Name; //姓名
int Age; //年龄
int Sex; //性别
int Arrive_Data; //到达时间
int Level; //等级
int Room_Num; //房间号
int Bed_Num; //床位好
struct Room *Next;
};
但是感觉整个房间没法定义.
如果使用数组的话,必须要到3维了.
谁有更好的方法呢?
问题点数:20、回复次数:14Top
1 楼deshun205(零下七度)回复于 2003-08-03 10:08:34 得分 0
整个酒店的房间应该怎么表示呢?Top
2 楼connie2003(川川)回复于 2003-08-03 13:13:06 得分 0
如果是C++的话,可不可以用定义个类数组来表示整体房间,然后再将他放到其他类中
我是这样想的,但是觉的有点不对!Top
3 楼villager(在黑暗的角落 忧郁的眼神注视着你)回复于 2003-08-03 13:19:43 得分 0
你得问客户才行啊,看看没有用电脑以前他们是怎么登记的Top
4 楼deshun205(零下七度)回复于 2003-08-03 14:49:11 得分 0
这个是老师的作业题目.
我自己的定义:
int Room_Live[3][6][4] //三个等级,每个等级6个房间,每个房间4个床位
struct Room
{
int Name; //姓名
int Age; //年龄
int Sex; //性别
int Arrive_Data; //到达时间
int Room_Level; //等级
int Room_Num; //房间号
int Bed_Num; //床位好
int Room_Live[Room_Level][Room_Num][Bed_Num]; //=0,说明该床位没人住,=1,说明有人住。(好象没有必要这样定义)
struct Room *Next;
};
但是我在初始化必须使
int i ;
int j;
int k;
for(i=0;i<3;i++0
for(j=0;j<6;j++)
for(k=0;k<4;k++)
Room[i][j][k]=0;
即刚开始,所有的床位都是空的。
Top
5 楼bm1408(向va_list学习~不用VC好多年~)回复于 2003-08-03 15:04:46 得分 0
看看你的程序的需要了!
Top
6 楼deshun205(零下七度)回复于 2003-08-03 15:47:25 得分 0
题目已经在上面了。
但是我不知道该如何定义这个数据结构Top
7 楼deshun205(零下七度)回复于 2003-08-03 17:16:32 得分 0
题目:某旅馆有n 个等级房间,第i个等级有ai个房间,每个房间有bi个床位;设计为单身旅客的床位的分配和回收.
说明:
1、输入数据。分配时输入旅客的姓名,年龄,性别,到达日期和所要求的房间等级。回收时输入房间的等级,房间号码和床位号。
2、输出数据。分配成功时,打印旅客的姓名,性别等。
失败,如果所有等级无床位则客满,否则,询问旅客是否愿意更改等级等信息。如愿意,则重新输入,否则,结束。
3、数据结构。采用顺序结构和链接结构的线线表和堆栈
以下为我的部分程序(尚未完成)(程序调试出了很多问题。)
肯定诸位指出缺点:
1、数据结构怎么定义。我感觉我定义的不是很好。
2、我采用三维数组来表示整个房间,但是好象这样分配,内存吃不消。
[code]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Room
{
char Name[20]; //姓名
int Age; //年龄
char Sex; //性别
int Arrive_Data; //入住时间
int Room_Level; //房间等级
int Room_Num; //房间号码
int Bed_Num; //床位号码
//int Room_Total[Room_Level][Room_Num][Room_Num]; /*if Room_Total=0,无人住*/
struct Room *Next;
};
void Print(struct Room *Pointer) //打印信息
{
printf("The information is as follow:\n");
printf("Name: %s\n",Pointer->Name);
printf("Age: %d\n",Pointer->Age);
printf("Sex: %c\n",Pointer->Sex);
printf("Room Level: %d\n",Pointer->Room_Level);
printf("Room Number:%d\n",Pointer->Room_Num);
printf("Bed Number:%d\n",Pointer->Bed_Num);
}
struct Room *Search(struct Room *Pointer,int Room_Live[Pointer->Room_Level-1][6][4])
{
int i;
int j;
for(i=0;i<6;i++)
for(j=0;j<4;j++)
if(Room_Live[Pointer->Room_Level-1][i][j] ==0)
{
printf("Level %d still has empty bed!\n",Pointer->Room_Level);
Pointer->Room_Num=i;
Pointer->Bed_Num=j;
//Pointer->Room_Level=
printf("please input information:\n"); //输入信息
printf("input your name:\n");
scanf("%s",&Pointer->Name);
printf("input your age:\n");
scanf("%d",&Pointer->Age);
printf("input your sex:\n");
scanf("%c",&Pointer->Sex);
printf("input your arriving data:(20030810 is means year:2003,month:8,day:10)");
scanf("%d",&Pointer->Arrive_Data);
Print(Pointer); //打印信息
return Pointer;
break;
}
else
return NULL;
}
void main()
{
int Room_Live[3][6][4]; /*三个等级,每个等级有6个房间,每个房间有4个床*/
struct Room *Pointer1;
struct Room *Pointer2;
struct Room *Pointer;
struct Room *Hotel={{"zhangdeshun",22,'m',20030120,1,2,3},
{"zhanlihua",21,'f',20030210,2,5,2}}; //初始化
int Level_1_Left=24; /* 第一等级可用房间数*/
int Level_2_Left=24; /* 第二等级可用房间数*/
int Level_3_Left=24; /* 第三等级可用房间数*/
int Live_Quit_Choose;
char Level_Change;
Level_Change='y'; //初始化为y (yes)
int i=0;
int j=0;
int k=0;
for(i=0;i<3;i++0)
for(j=0;j<6;j++)
for(k=0;k<4;k++)
Room_Live[i][j][k]=0;
Room_Live[1][2][3]=1;
Room_Live[2][5][2]=1;
Level_1_Left=Level_1_Left - 1;
Level_2_Left=Level_2_Left - 1;
printf("What do you want to do ?\n");
printf("**********************************\n");
printf("****Live in the Hotel======>1 ****\n");
printf("****Quit the Hotel ======>2 ****\n");
printf("**********************************\n");
scanf("%d",&Live_Quit_Choose); //选择入住还是退房
switch(Live_Quit_Choose)
{
case 1: //住房
if(!(Level_1_Left+Level_2_Left+Level_3_Left))
{
printf("The Hotel is full.Please come next time!\n");
break;
}
else
{
while(Level_Change=='y')
{
Pointer=(struct Room *) malloc(sizeof(struct Room)); //分配空间
printf("Which level do you want?(choose from 1,2,3)\n");
scanf("%d",&Pointer->Room_Level);
Pointer=Search(Pointer,Room_Live); //该等级还有空房
if(!Pointer)
{
printf("The room level which you want is full,do you want to choose another level (y\n)?");
scanf("%c",&Level_Change);
}
else
{
Hotel->Next=Pointer;
Pointer->Next=NULL;
}
}
case 2: //退房
default:printf("You enter a wrong number!\n");
}
}
[/code]
Top
8 楼yzb1000(zealot)回复于 2003-08-03 18:24:54 得分 20
struct Person
{
int Name; //姓名
int Age; //年龄
int Sex; //性别
int Arrive_Data; //到达时间
struct Room *room;
struct Person *Next;
};
struct Room{
int Level; //等级
int Room_Num; //房间号
int Bed_Num; //床位好
struct Room *Next
}; //用链表把整个酒店的房间串起来,可以考虑用两个链表,一个是空房,一个是用了的房
这样在分房和收回时就简单了。
yzb1000@163.comTop
9 楼deshun205(零下七度)回复于 2003-08-04 10:19:56 得分 0
谢谢.
另外,怎么表示Room里面的Level.
如:
struct Room *pointer;
pointer->Level=3;
还是 struct Person *pointer;
pointer->Room->Level=3;
Top
10 楼connie2003(川川)回复于 2003-08-04 13:15:48 得分 0
是啊,是不是 pointer -> Room -> Level = 3; 是客人入住的房间等级;而pointer -> Level 是空房的定义;我不懂,能不能说一下
Top
11 楼deshun205(零下七度)回复于 2003-08-04 19:12:28 得分 0
我不懂.
我以前没这样定义过.
好象他们表示中有一个是错误的.
对于pointer -> Room -> Level = 3应该这样表示:pointer->Room.Level=3.
我也不知道这样对不对.Top
12 楼yzb1000(zealot)回复于 2003-08-05 09:23:24 得分 0
我在详细说一下我我的思路,很久没打字了,打的N慢,别急Top
13 楼yzb1000(zealot)回复于 2003-08-05 09:58:07 得分 0
//假设N个等级是从1--N
//用N个链表来分别表示它们
#defing N 10
typedef struct tagPerson
{
int Name; //姓名
int Age; //年龄
int Sex; //性别
int Arrive_Data; //到达时间
struct tagRoom *room;//这里room是指针,要访问它的成员就要用->
struct tagPerson *Next;
}Person;
typedef struct tagRoom{
int Room_Num; //房间号
int Bed_Num; //床位号
struct tagRoom *Next
}Room;
Room *RoomList[N+1];//用数组的1--N,下标表示这个链表所指的床位的等级初始化时把等级为i的床位都联结在以
RoomList[i]为头指针的链表里,当有客人入住时,就根据等级在对应的链表里选取一项,把它的地址赋给对应的person
的room指针,并从链表中脱离。收回房间时执行相反的过程就可以了。
下面的都正确:
1.Person *someone;
someone->room->Room_Num;
2.Room oneroom;
oneroom.Room_Num;
Top
14 楼deshun205(零下七度)回复于 2003-08-08 15:43:47 得分 0
我在创天中文 vc++下,运行不了.
在TC3.0下运行通过,但是输入数据不是我所想要的.
你可以运行一下,输入1,然后按照程序的想法,应该继续输入姓名等,但是它跳出了Top



