CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

怎么定义酒殿管理系统的数据结构!!!

楼主deshun205(零下七度)2003-08-03 09:58:32 在 C/C++ / C语言 提问

要求:  
  房间有等级,每个等级有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

相关问题

  • IP报头选项的数据结构定义
  • 这样的xml如何定义存储他的数据结构?
  • ActiveX中能导出自定义的数据结构吗?
  • 如何定义一个不定长的数据结构?
  • 自定义的数据结构该怎样存储进数据库?
  • 自定义的数据结构该怎样存储进数据库?(续)
  • 关于通过socket传送自定义数据结构出现的问题
  • PB中如何定义数据结构,说一点也给分!(在线等待)
  • 如何把文件内容赋值给自定义的数据结构变量
  • 使用STL中提供的数据结构是不是要比自己定义数据结构要耗费更大的内存?

关键词

  • live
  • 信息
  • room
  • pointer
  • 等级
  • 房间
  • 床位
  • level
  • bed
  • 定义

得分解答快速导航

  • 帖主:deshun205
  • yzb1000

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo