/*                    用C语言实现一个简单的单身公寓管理系统1. 这个公寓有1024个单人房;
2. 客人入住的时候,看是否有空房,如果有,安排入住,记录客人编号,入住的天数,房间号;
3. 客人如果主动退房,就安排退房,把房间置为空;
4. 如果某个房间的客人已经住足天数,就通知客人退房,不给续住。客人如果还要住,
   需要客人重新申请入住;
5. 客人可能住一天,也可能住几年。用c语音编写一个小程序,实现客人入住;住客人主动退房;周期检查各个房间数据,到期的房间安排退房,把房间值为空;
要求:
    1.程序要高效; 房间数目使用宏,如果是10000个房间,程序一样可以用;
    2.请补全”your define“ 和 “your code” 既可;
    3.程序不要求编译通过,以后课程里回教大家如何编译。
    4.不用考虑操作互斥的问题;
客人信息:
    编号                    房间信息:
    房间号:0-MAX_ROOM_NUM
    房间状态,是否空:1 空, 0有人居住
    入住客人编号;32位无符号数;为了编程方便,1-MAX_RENTERS_NUM;
    客人要住的天数;32位无符合数;为了编程方便,最大值位MAX_DAYS;
    剩余天数;32位无符合数;为了编程方便,最大值位MAX_DAYS;
    
函数框架1. 客人入住,由其他程序来调用
   原型  :DWORD CheckIn(DWORD dwRenterId, DWORD dwDays);
   参数  :dwRenterId,入住者ID;
           dwDays, 居住天数;
   返回值:房间号,如果没有房间可住,返回0xffffffff;
   
2. 客人主动提前退房,由其他程序来调用;
   原型  :DWORD CheckOut(DWORD dwRenterId,DWORD dwRoomNo);
   参数  :dwRenterId,入住者ID;
           dwRoomNo, 房间号;
   返回值:是成功退房; 不成功的情况是入住者ID不合法,dwRoomNo不合法,或者他没有住房,或者他说的房间为空等;3. 每天检查和更新房间信息,为到期的客人退房;
   void updateRoomInfo(void)
   如果有到期的房间退房,请调用void RoomNote(DWORD dwRenterId,DWORD dwRoomNo);4. 初始化函数
   int RoomManInit(void);
   
*/   
/*
** 宏定义,结构定义,函数申明,变量申明等
*/#define ONEDAY                  1#define MAX_ROOM_NUM            1024
#define MAX_RENTERS_NUM         4096
#define MAX_DAYS                8192#ifndef __BYTE
#define __BYTE
typedef  unsigned  char         BYTE;
#endif#ifndef __WORD
#define __WORD
typedef  unsigned  short        WORD;
#endif#ifndef __DWORD
#define __DWORD
typedef  unsigned  long         DWORD;
#endif
/* your define */extern void DayDelay(DWORD dwDays);
/*
** 供他人调用
*/   
DWORD CheckIn(DWORD dwRenterId, DWORD dwDays)
{
    /* your code */
}   
   
/*
** 供他人调用
*/  
DWORD CheckOut(DWORD dwRenterId,DWORD dwRoomNo)
{
    /* your code */
}
/*
** 供RoomManMain调用
*/ 
void updateRoomInfo(void)
{
    /* your code */
}/*
** 供RoomManMain调用
*/
DWORD RoomManInit(void)
{
    /* your code */
}
/* 
** updateRoomInfo 来调用
*/
void RoomNote(DWORD dwRenterId,DWORD dwRoomNo)
{
    printf("RoomNote: dwRenterId=%lu, dwRoomNo=%lu\n", dwRenterId, dwRoomNo);
    return;     
}
/*
** 由系统调用来执行
*/
void RoomManMain(void)
{
    RoomManInit();
    
    while(1)
    {
        DayDelay(ONEDAY);
        updateRoomInfo();
    }
}