该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
{clrscr();
printf("很抱歉,该房间已有客人入住,请按ESC返回");
while(getch()!=033);
return;}
printf("您选择的房间%d号房按小时计费为%d元/时,按天计费为%d元/天,请选择客户的计费方式:\n",n,room[n-1].h_money,room[n-1].d_money);
printf("1--按小时收费\n2--按天收费");//分两种情况进行对flag的赋值
ch=getch();
while(ch!='1'&&ch!='2')
ch=getch();
if(ch=='1')room[n-1].flag=1;
else room[n-1].flag=2;
printf("\n请输入客户的姓名:");
fflush(stdin);
gets(room[n-1].name);
printf("请输入客户准备支付的押金金额(0~10000元):");
scanf("%d",&room[n-1].deposit);
while(room[n-1].deposit<0||room[n-1].deposit>10000)
{fflush(stdin);
printf("输入错误,请重新输入客户准备支付的押金金额(0~10000元):");
scanf("%d",&room[n-1].deposit);}
printf("请确认是否入住:(Y/N)");
ch=getch();
while(ch!='y'&&ch!='n')//如果确认入住,则记录入住时间,并加以显示,之后自动存档
ch=getch();
if(ch=='y')
{start=time(NULL);
printf("\n您的入住时间为");
local=localtime(&start);
printf("%d年%d月%d日%d时%d分",local->tm_year+1900,local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min);
switch(room[n-1].flag)
{case 1:strcpy(fangshi,"按小时收费");break;
case 2:strcpy(fangshi,"按天收费");break;
default:break;}
printf("\n您选择的收费方式为%s",fangshi);
room[n-1].start=start;
save();
printf("\n请按ESC返回主菜单");
while(getch()!=033);
}
return;
}
long h_calculate(long end,long start,int money)//按小时计费函数
{
long fee;
int hour,min;
if((end-start)/60<30)return 0;
else if((end-start)/60<60)return money;
hour=(end-start)/3600;
min=((end-start)%3600)/60;
if(min>30)hour++;
fee=hour*money;
return fee;
}
long d_calculate(long end,long start,int money)//按天计费函数
{int day;
long fee,dif;
dif=end-start;
if(dif<3600*24)return money;
day=dif/(3600*24);
if(dif%(3600*24)!=0)day++;
fee=day*money;
return fee;
}
void display2()//显示所有空房信息
{
int i;
clrscr();
read();
printf("房号 价格元(时/天)");
for(i=0;i
{if(room[i].flag==0)
printf("\n%-7d %d/%d",room[i].num,room[i].h_money,room[i].d_money);
}
printf("\n请按ESC返回主菜单");
while(getch()!=033);
return;
}
void yingzhifu(long money,int dep)//通过押金和应付费用的核算,得出最后的收费办法
{long dif=(long)dep-money;
if(dif==0)printf("押金与费用相等");
else if(dif>0)printf("酒店应找还客户%ld元",dif);
else printf("客户应再支付%ld元",dif*(-1));
}
void cancel()//退房功能函数
{struct tm *local;
int n;
time_t end;
char ch;
long money;
end=time(NULL);
clrscr();
if(find()==0)//如果find()值为0,则提示房间全空,按键返回
{printf("当前房间尚未有人入住,无法办理退房手续,请按ESC返回");
while(getch()!=033);
return;}
printf("请选择退房的房号(1~%d):",M);
fflush(stdin);
scanf("%d",&n);
while(n>M||n<1)
{clrscr();
fflush(stdin);
printf("输入错误,请重新输入退房的房间号(1~%d):",M);
scanf("%d",&n);
}
if(room[n-1].flag==0)
{
clrscr();
printf("该房间尚未有人入住,无法办理退房,请按ESC返回");//如果无人入住,则提示返回
while(getch()!=033);
return;}
printf("房号:%d\n入住客人姓名:%s\n",room[n-1].num,room[n-1].name);//显示房间的全部信息
printf("入住时间:");
local=localtime(&room[n-1].start);
printf("%d年%d月%d日%d时%d分",local->tm_year+1900,local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min);
printf("\n押金:%d",room[n-1].deposit);
printf("\n收费方式:");
if(room[n-1].flag==1)//通过检查flag的值确认之后显示的数据
{printf("按小时收费,超过半小时按一小时收费,不足半小时不计入时间\n");
printf("当前费用:%ld",money=h_calculate(end,room[n-1].start,room[n-1].h_money));
printf("\n应支付:");
yingzhifu(money,room[n-1].deposit);
}
else
{printf("按天收费\n");
printf("当前费用:%ld",money=d_calculate(end,room[n-1].start,room[n-1].d_money));
printf("\n应支付:");
yingzhifu(money,room[n-1].deposit);
}
printf("\n是否确认为该房间办理退房手续(Y/N)?");//如果确认退房,则将该房间的部分信息归0,完成退房
ch=getch();
while(ch!='y'&&ch!='n')
ch=getch();
if(ch=='y')
{
room[n-1].flag=0;
strcpy(room[n-1].name,"-empty-");
room[n-1].start=0;
room[n-1].deposit=0;
save();
printf("\n已经完成退房手续,请按ESC返回");
while(getch()!=033);
}
return;
}