写的好辛苦~可是范老师却连运行都没让我运行~我枯了!
采用的是结构体数组的存储方式。数组
某客店有N个等级的房间,第k级客房有A(k)个,每一个房间有B(k)个单人床,以菜单调用方式设计为单身旅客分配床位以及离店时收回床位的程序。要求分配成功时,印出旅客姓名、年龄、性别、到达日期、客房等级、房间号及床位号;分配不成功时,容许更改房间等级,若不更改等级,印出“满客”提示。
由于懒,就不注释了。
除了time库里面的结构体以外,有Guest、Bed、Room和Level四种结构体。写出了面向对象的感受。
没有按照题目要求那样每一个房间床位数还不同~我以为那样太臃肿了。
以及“不可建造多余10个房间等级”的缘由仅仅是由于个人房间号“X0X”很差设计……(。
退房操做仅仅是将名字置NULL。
获取系统时间方面主要就是对字符串进行了各类操做。ui
#include <stdio.h> #include <time.h> 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;i<levelNum;i++){ level[i].room = (Room*)malloc(sizeof(Room)*roomNum); for(j=0;j<roomNum;j++){ level[i].room[j].roomNumber = j + 1; level[i].room[j].peopleNum = 0; level[i].room[j].sex = 3; level[i].room[j].bed = (Bed*)malloc(sizeof(struct Bed)*bedNum); for(k=0;k<bedNum;k++){ level[i].room[j].bed[k].bedNumber = k; strcpy(level[i].room[j].bed[k].guest.name, ""); } } } return level; } int CheckIn(Level* hotel){ int i, j, level, room, bed; int sex, flag = 0; printf("\n*本店共有1-%d等级的房间,请输入您要入住的等级:",levelNum); scanf("%d",&i); level = i - 1; printf("\n*请登记您的性别( F=0 / M=1 ):"); scanf("%d",&sex); if(flag == 0){ for(i=0;i<roomNum;i++){ for(j=0;j<bedNum;j++){ if( hotel[level].room[i].sex==sex && strcmp(hotel[level].room[i].bed[j].guest.name, "")==0 ){ room = i; bed = j; hotel[level].room[i].peopleNum += 1; flag = 1; break; } } if(flag == 1) break; } } if(flag == 0){ for(i=0;i<roomNum;i++){ if( hotel[level].room[i].sex==3 ){ room = i; bed = 0; hotel[level].room[i].sex = sex; hotel[level].room[i].peopleNum += 1; flag = 1; break; } } } if(flag == 0){ return 0; } hotel[level].room[room].bed[bed].guest.room = room; hotel[level].room[room].bed[bed].guest.bed = bed; hotel[level].room[room].bed[bed].guest.sex = sex; char name[20],date[20]; int age; printf("\n**请登记您的其余我的信息:\n"); printf("*姓名:"); scanf("%s",&name); strcpy(hotel[level].room[room].bed[bed].guest.name, name); printf("*年龄:"); scanf("%d",&age); hotel[level].room[room].bed[bed].guest.age = age; time_t t; struct tm * lt; char y[20],m[20],d[20],h[20],f[20],s[20]; time (&t);//获取Unix时间戳 lt = localtime (&t);//转为时间结构 ltoa(lt->tm_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("\n**如下是您的我的信息:\n"); PrintGuest(hotel, level, room, bed); return 1; } void PrintGuest(Level* hotel, int level, int room, int bed){ printf("***************************************************\n"); printf("*\n"); printf("** 等级:%d\t\t房号:%d0%d\t床号:No.%d\n",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\n", hotel[level].room[room].bed[bed].guest.age); printf("** 入住时间:%s\n", hotel[level].room[room].bed[bed].guest.date); printf("*\n"); printf("***************************************************\n\n"); } 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("\n**如下是您的我的信息:\n"); PrintGuest(hotel, level, room, bed); strcpy(hotel[level].room[room].bed[bed].guest.name, ""); hotel[level].room[room].peopleNum -= 1; return 1; } else{ printf("\n*您的名字与房号不匹配!\n"); return 0; } } else{ printf("\n*您输入的房号或床号为空!\n"); 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("\n*您查询的房号或床号为空!\n"); return 0; } else { printf("\n**如下是您查询的信息:\n"); PrintGuest(hotel, level, room, bed); return 1; } } void PrintAll(Level* hotel){ int i, j, k, sum = 0; for(i=0;i<levelNum;i++){ for(j=0;j<roomNum;j++){ for(k=0;k<bedNum;k++){ if( strcmp(hotel[i].room[j].bed[k].guest.name, "")!=0 ){ PrintGuest(hotel, i, j, k); sum++; } } } } printf("***************************************************\n\n"); printf("*CK客栈入住状况:\n"); for(i=0;i<levelNum;i++){ printf("\n******等级%d******\n", i+1); for(j=0;j<roomNum;j++){ printf("*房间%d0%d:\t", i+1, j+1); if(hotel[i].room[j].sex==0) printf("女性房间\t"); else if(hotel[i].room[j].sex==1) printf("男性房间\t"); else printf("未入住房间\t"); printf("剩余%d个床位\n", bedNum - hotel[i].room[j].peopleNum); } } printf("\n*CK客栈目前共入住%d人,剩余床位数%d。\n", sum, levelNum*roomNum*bedNum-sum); printf("***************************************************\n\n"); } /********************************************/ int main(){ int select, level, room, bed, sum; int age; char sex; char name[20]; printf("CK客栈一共有几个房间等级?"); scanf("%d",&levelNum); printf("CK客栈每一个等级有几个房间?"); scanf("%d",&roomNum); printf("CK客栈每一个房间有几个床位?"); scanf("%d",&bedNum); if(levelNum>10 || roomNum>10) { printf("因为资金和场地有限,本旅馆不可建造多余10个等级及房间!"); levelNum = 9; roomNum = 9; } Level* hotel = BuildHotel(levelNum, roomNum, bedNum); while(1){ printf("\n\n*******欢迎来到CK客栈*******"); printf("\n***----1>入住------------***"); printf("\n***----2>退房------------***"); printf("\n***----3>查询房客--------***"); printf("\n***----4>打印房间状况----***"); printf("\n***----5>退出系统--------***"); printf("\n****************************"); printf("\n*请输入数字:"); scanf("%d",&select); printf("\n"); switch(select){ case 1: if( CheckIn(hotel) ){ printf("*入住成功!\n"); } else printf("\n*该等级房间已满!请从新选择!\n"); break; case 2: if( CheckOut(hotel) ){ printf("*退房成功!\n"); } else printf("*退房失败!\n"); break; case 3: if( Query(hotel) ){ printf("*查询成功!\n"); } else printf("*查询失败!\n"); break; case 4: PrintAll(hotel); break; case 5: printf("*欢迎下次光临CK客栈!祝您一帆风顺!"); return 0; default: printf("*输入错误!请从新输入!\n"); break; } } }