码迷,mamicode.com
首页 > 其他好文 > 详细

一道关于停车计费的问题

时间:2016-07-11 12:06:25      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

程序允许30分钟,期间要求用户输入来模拟车辆进入、出去的行为
输入的内容为一串字符串,每个不同的字符串代表一辆车.
纪录所有车每次进出的时间,计算时间、次数和价格.
价格依照价格表,阶梯定价:头10分钟5元,超过10分钟的每分钟5元
程序运行30分钟自动退出,程序退出前还没出库的车,收费200元
程序最后统计所有车辆的情况:次数,每次时间,总时间,总价
#!/usr/bin/perl  
use strict;  
use warnings;  
use Data::Dumper;  
use Time::Local;  
use POSIX qw{strftime};  
my (%hash,%count)=();  
my $start_time = time;  
sub p_money{  #计算费用  
    my $time = shift;  
   return 5 if $time <= 600;  
   if ($time>600 and $time<1800){  
    my $min;  
     $time%60==0?$min = ($time-600)/60:$min= int( ($time-600)/60 +1);  
        my $mon_minute = 5+$min*5;  
       return $mon_minute;  
   }  
}  
my (@arr,$end_time);  
while(1){  
    my ($start);  
   $end_time=time;  
print  "Car Number :";  
   eval{  
local $SIG{ALRM}=sub {die "timeout\n";};  
  alarm(5);  
    chomp( $start = <>);        #此处设施中断  5秒内没有用户输入就继续循环,  
    push @{$hash{$start}},time;  
    $count{$start}++ if defined $start;  
    alarm(0);  
   };  
if ($end_time-$start_time>20){   #这里程序运行20秒,则退出循环,打印车辆的费用  
        for (sort keys %hash){  
my $stop_time = time()-$hash{$_}[0];  
        my $car_start_time = strftime("%Y-%m-%d %H:%M:%S", localtime($hash{$_}[0]));  
        my $car_stop_time = strftime("%Y-%m-%d %H:%M:%S", localtime(time));  
        push @arr,"$_\t$car_start_time $car_stop_time $stop_time\t200\n";  
        }  
   print "\n车号\t开始时间\t离开时间\t停车时间\t价格\n";  
   print @arr;  
        exit;  
    }  
   if(defined $start  and  ($count{$start}||0) >1 ){  
        push @{$hash{$start}},time;  
        my $stop_time = $hash{$start}[-1]-$hash{$start}[0];  
        my $car_money = p_money $stop_time;  
        my $car_start_time = strftime("%Y-%m-%d %H:%M:%S", localtime($hash{$start}[0]));  
        my $car_stop_time = strftime("%Y-%m-%d %H:%M:%S", localtime($hash{$start}[-1]));  
        push @arr, "$start\t$car_start_time $car_stop_time $stop_time\t$car_money\n";  
        delete $count{$start}; #删除 出库车辆  
        delete $hash{$start};  
        redo;  #继续等待用户输入  
    }else{  
        redo;  
    }  
}  

技术分享

 

一道关于停车计费的问题

标签:

原文地址:http://www.cnblogs.com/mcshell/p/5659528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!