「ベッドの割り当て」の問題-C言語配列の実現


前に書く
书くのはとても苦労します~しかし范先生は运行さえ私に运行させていません~私は枯れました!構造体配列の格納方式を採用している.
テーマ:ベッドの割り当て
ある客店にはNランクの部屋があり、k級客室はA(k)個あり、各部屋にBがあります(k)シングルベッドで、メニュー呼び出し方式でシングル旅客がベッドを割り当て、店を出る時にベッドを回収するプログラムを設計する.割り当て成功を要求する時、旅客の名前、年齢、性別、到着日、客室等級、部屋番号及びベッド番号を印刷する.割り当てが成功しない時、部屋等級の変更を許可し、等級を変更しなければ、「満客」の提示を印刷する.
ツッコミと説明
怠け者だから、注釈をつけない.timeライブラリ内の構造体のほかに,Guest,Bed,Room,Levelの4種類の構造体がある.オブジェクト向けの感じが出てきました.タイトル通りにはいかなかったのですが、部屋ごとにベッド数が違います~それはむくんでいると思います.また、「余分な10部屋を建ててはいけないレベル」の理由は、私の部屋番号「X 0 X」がデザインが悪いだけ......(.チェックアウト操作はNULLに名前を置くだけです.システム時間を取得する上で主に文字列を操作しています.
完全なコード
#include 
#include 

int levelNum, roomNum, bedNum;

typedef struct tm *tim;

typedef struct Guest{
    int level, room, bed;
    char name[20],date[20];
    int age;
    int sex;
}Guest;
 
typedef struct Bed{
    int bedNumber;
    Guest guest;
}Bed;
 
typedef struct Room{
    int sex;
    int bedNum;
    int peopleNum;
    int roomNumber;
    Bed *bed;
}Room;

typedef struct Level{
    Room *room;
    int roomNum;
}Level;


Level* BuildHotel(int levelNum, int roomNum, int bedNum){
    Level* level;
    int i, j, k;
    level = (Level*)malloc(sizeof(Level)*levelNum);
    for(i=0;itm_year+1900,y,10);
    ltoa(lt->tm_mon+1,m,10);
    ltoa(lt->tm_mday,d,10);
    ltoa(lt->tm_hour,h,10);
    ltoa(lt->tm_min,f,10);
    ltoa(lt->tm_sec,s,10);

    strcat(y,"/");strcat(y,m);strcat(y,"/");strcat(y,d);strcat(y," ");
    strcat(y,h);strcat(y,":");strcat(y,f);strcat(y,":");strcat(y,s);
    strcpy(hotel[level].room[room].bed[bed].guest.date, y);
    
    printf("
** :
"); PrintGuest(hotel, level, room, bed); return 1; } void PrintGuest(Level* hotel, int level, int room, int bed){ printf("***************************************************
"); printf("*
"); printf("** :%d\t\t :%d0%d\t :No.%d
",level+1, level+1, room+1, bed+1); printf("** :%s\t", hotel[level].room[room].bed[bed].guest.name); if(hotel[level].room[room].bed[bed].guest.sex==0) printf(" : \t"); else printf(" : \t"); printf(" :%d
", hotel[level].room[room].bed[bed].guest.age); printf("** :%s
", hotel[level].room[room].bed[bed].guest.date); printf("*
"); printf("***************************************************

"); } int CheckOut(Level* hotel){ int i, j, level, room, bed; char name[20]; printf("* :"); scanf("%d", &i); level = i/100 -1; room = i%10 -1; printf("* :"); scanf("%d", &j); bed = j - 1; if( strcmp(hotel[level].room[room].bed[bed].guest.name, "")!=0 ){ printf("* :"); scanf("%s", &name); if( strcmp(hotel[level].room[room].bed[bed].guest.name, name)==0 ){ printf("
** :
"); PrintGuest(hotel, level, room, bed); strcpy(hotel[level].room[room].bed[bed].guest.name, ""); hotel[level].room[room].peopleNum -= 1; return 1; } else{ printf("
* !
"); return 0; } } else{ printf("
* !
"); return 0; } } int Query(Level* hotel){ int i, j, level, room, bed; char name[20]; printf("* :"); scanf("%d", &i); level = i/100 -1; room = i%10 -1; printf("* :"); scanf("%d", &j); bed = j - 1; if( strcmp(hotel[level].room[room].bed[bed].guest.name, "")==0 ){ printf("
* !
"); return 0; } else { printf("
** :
"); PrintGuest(hotel, level, room, bed); return 1; } } void PrintAll(Level* hotel){ int i, j, k, sum = 0; for(i=0;i10 || roomNum>10) { printf(" , 10 !"); levelNum = 9; roomNum = 9; } Level* hotel = BuildHotel(levelNum, roomNum, bedNum); while(1){ printf("

******* CK *******"); printf("
***----1> ------------***"); printf("
***----2> ------------***"); printf("
***----3> --------***"); printf("
***----4> ----***"); printf("
***----5> --------***"); printf("
****************************"); printf("
* :"); scanf("%d",&select); printf("
"); switch(select){ case 1: if( CheckIn(hotel) ){ printf("* !
"); } else printf("
* ! !
"); break; case 2: if( CheckOut(hotel) ){ printf("* !
"); } else printf("* !
"); break; case 3: if( Query(hotel) ){ printf("* !
"); } else printf("* !
"); break; case 4: PrintAll(hotel); break; case 5: printf("* CK ! !"); return 0; default: printf("* ! !
"); break; } } }