小生想写一套宾馆管理系统,可是价钱计算这块小生实在写不出来了。要求是这样的: 一天房价是80元,每天下午2点算一天;
入住8小时便算一天钱,不到8小时算半天;
到14点算一天,如果当日12点以后入住的,准备住一天,到当日14点这两个小时便免费 (比如13:59入住,到 14:00算钱显然不合适)。算出结账时一共多少钱。
谢谢大哥们了!!
入住8小时便算一天钱,不到8小时算半天;
到14点算一天,如果当日12点以后入住的,准备住一天,到当日14点这两个小时便免费 (比如13:59入住,到 14:00算钱显然不合适)。算出结账时一共多少钱。
谢谢大哥们了!!
首先,判斷入住時間和退房時間的日期是否大於等於1,如果小於1,也就是說當天住當天退,那麼只需要判斷是否大於8小時即可,小於8小時就是半天,大於等於8小時就是1天。
如果入住時間和退房時間的日期大於等於1,那麼整個住宿時間就等於 退房日期-入住日期+入住A+退房B,如下判斷:
入住時間在0點~6點,那麼入住的當天時間就算1天,即入住A=1.
入住時間在6點~12點,那麼入住的當天時間就算半天,即入住A=0.5.
入住時間在12點~24點,那麼入住的當天時間就算零天,即入住A=0.
退房時間在0點~14點,那麼退房的當天時間就算零天,即退房B=0.
退房時間在14點~22點,那麼退房的當天時間就算半天,即退房B=0.5.
退房時間在22點~24點,那麼退房的當天時間就算1天,即退房B=1.程序上的實現應該就很簡單了,做判斷就可以了。
首先,判斷入住時間和退房時間的日期,如果小於1,也就是說當天住當天退,那麼只需要判斷是否大於8小時即可,小於8小時就是半天,大於等於8小時就是1天。
如果入住時間和退房時間的日期等於1且入住時間小於8小時,算半天。
如果入住時間和退房時間的日期大於等於1且入住時間大於8小時,那麼整個住宿時間就等於 退房日期-入住日期+入住A+退房B,如下判斷:
入住時間在0點~6點,那麼入住的當天時間就算1天,即入住A=1.
入住時間在6點~12點,那麼入住的當天時間就算半天,即入住A=0.5.
入住時間在12點~24點,那麼入住的當天時間就算零天,即入住A=0.
退房時間在0點~14點,那麼退房的當天時間就算零天,即退房B=0.
退房時間在14點~22點,那麼退房的當天時間就算半天,即退房B=0.5.
退房時間在22點~24點,那麼退房的當天時間就算1天,即退房B=1.
房费:标准间:80元; 钟点房:50元
退房时间:14点;1.住房可分为标准间(过夜的)和钟点房(假设最多只能住5个小时) 钟点房:50元(刚入住收半价(25元);
超过半小时 至 5个小时是50元);
限制钟点房最多只能住5个小时,就是说钟点房没有任何多余计算。
标准间:80元(刚入住收半价(40元);
开标准间的一定是要住一天的(既然开了标准间,住不住够是他的事,没住够也按标准间计算)
标准间退房说明:每天14点是系统的退房时间;就是到昨天14:00— 今天14:00算一天。
入住8小时便算一天。不到8小时算半天;
退房波动值说明:
12:00(假设) — 13:59 这段时间算波动值。(例如13:59入住,到14:00退房,这一分钟不应该收费。)
波动值仅仅是在刚登记时有效。-------------------------------------------------------
我的思路是这样的,不知道对不对.
就是不算一天的钱,半天半天往上加。
比如:
房费:80元/天
登记后立刻算40元(半天),够八小时加40,到14:00在加40,从14:00够8小时在加40........以此类推。
--------------------------------------------------------伪代码:$入住时间 = 2000-01-01 03:00 //登记时的时间
$系统时间 = 2000-01-02 14:32 //读取系统时间date()函数
$半天房价= $房价 / 2 //算出半天房价
$房价 = 80 //标准间房价80元一天if($入住时间 = [12点到13:59这个区间])
{
$价格= 0;
$入住天数 = 0;
}
else{
$入住天数 =0.5 //登记后立刻算半天
$价格 = $半天房价; //累加变量。一登记算半天房价
}
if($系统时间 ==14点){
$价格= $价格 + $半天房价 $入住天数 = $入住天数 +0.5
}
if($入住时间 + (距离14点的8个小时)){
$价格 = $价格 + $半天房价 $入住天数 = $入住天数 +0.5
}if([12点到13:59这个区间] 到 [12点到13:59这个区间] 结账了)
{
$价格= $半天房价;
$入住天数 = 0.5;
}
价格文本框输出:$价格
天数文本框输出:$入住天数
可是大哥们代码该如何写呢~~~~不知道从何下手......
代码实现如下://应付房费
$total_pay=0;
//入住天数
$in_days=0;//房价
$price = 80; //标准间房价80元一天
//半天房价
$half_price= $price / 2; //算出半天房价//入住时间
$in_time = new DateTime('2011-02-05 03:00'); //登记时的时间
//系统时间,即退房时间,此处设置一下默认值
$sys_time = new DateTime('2011-02-06 14:32'); //读取系统时间date()函数$date_tmp=new DateTime();
$start_time=new DateTime($date_tmp->format('Y-m-d').' 12:00:00');
$end_time=new DateTime($date_tmp->format('Y-m-d').' 13:59:59');
if($in_time<= $end_time && $in_time>= $start_time)
{
$total_pay= 0;
$in_days = 0;
}
else{
$in_days =0.5 ; //登记后立刻算半天
$total_pay = $half_price; //累加变量。一登记算半天房价
}
if($sys_time->format('H') =='14'){
$total_pay= $total_pay + $half_price;
$in_days = $in_days +0.5;
}
if($入住时间 + (距离14点的8个小时)){
$total_pay = $total_pay + $half_price;
$in_days = $in_days +0.5;
}if([12点到13:59这个区间] 到 [12点到13:59这个区间] 结账了)
{
$total_pay= $half_price;
$in_days = 0.5;
}
echo '价格为:'.$total_pay.'<br />';
echo '入住天数为:'.$in_days;但是:if($入住时间 + (距离14点的8个小时)){ 和if([12点到13:59这个区间] 到 [12点到13:59这个区间] 结账了)这两句话看不明白意思,第二感觉语法不通,为什么两个时间段一样呢?开始时间和结束时间一样不就相当于等于[12点到13:59这个区间]这个时间点了吗?
$HalfPrice= $DefPrice / 2; //算出半天房价
$StartDate = "2000-01-01 18:00"; //登记时的时间
$SysDate = "2000-01-03 15:00"; //读取系统时间date()函数for($StartDate,$SysDate){ //时间按小时循环,看从登记时间到现在时间一共过了多少个小时
if($StartDate < 8小时){
$Price = $HalfPrice; //累加变量。一登记算半天房价
$Day =0.5; //天数
}
elseif($StartDate > 8小时){ $Price = $Price + $HalfPrice; //累加变量。一登记算半天房价
$Day = $Day + 0.5; //天数累加
}
elseif($StartDate > 超过24小时){ $Price = $Price + $HalfPrice; //累加变量。一登记算半天房价
$Day = $Day + 0.5; //天数累加
}
}价格:<input type="text" value="<?php echo $Price ?>" /><br />
入住天数:<input type="text" value="<?php echo $Day ?>" />大致是这个思路,语法还是有问题。
意思是一天加两次钱,够8小时+40,够24小时+40,每天循环,以此类推....
可是这个循环怎么写啊??迷茫......
把结果在这里重新整理一下。宾馆系统的算法就是从入住时间开始,8小时以内算半天,超过8小时算一天。直到24小时结束。第二天继续,不够8小时算半天,超过8小时算一天。
比如:
价格:80元/ 天
1月1日1点入住;
那么到1月1日9点以前都算半价(40元);
超过九点在加半价(40元),就是一天的价格
到1月2日1点,在加40元,价格变成了120元
到1月2日9点,在加40元,价格变成160元
......
实现代码如下:
<?php
date_default_timezone_set('Asia/Chongqing'); //设置默认时区$a = strtotime("2011-02-09 03:32");
//入住的时候,用函数 time() 获取一个时间戳。这里取33个小时测试, 你自己把变量 $a 改为入住时的时间戳。$day = floor((time() - $a) / 3600 / 24); //天数
$hour = floor((time() - $a) / 3600) - $day * 24; //小时数
$minute = floor((time() - $a) / 60) - $day * 24 * 60 - $hour * 60; //分钟数$y = ($hour == 0) ? 0 : (($hour < 8) ? 40 : 80); //判断是否多出8小时,这里要判断 0 的情况$time = $day.'天'.$hour.'小时'.$minute.'分'; //入住时间
$pay = $day * 80 + $y; //费用
echo '入住时间: '.$time.'<br>';
echo '住宿费: '.$pay;
?>