一道關於停車計費的問題

程序容許30分鐘,期間要求用戶輸入來模擬車輛進入、出去的行爲
輸入的內容爲一串字符串,每一個不一樣的字符串表明一輛車.
紀錄全部車每次進出的時間,計算時間、次數和價格.
價格依照價格表,階梯訂價:頭10分鐘5元,超過10分鐘的每分鐘5元
程序運行30分鐘自動退出,程序退出前還沒出庫的車,收費200元
程序最後統計全部車輛的狀況:次數,每次時間,總時間,總價

code:web

  
  
  
  
  1. #!/usr/bin/perl  
  2. use strict;  
  3. use warnings;  
  4. use Data::Dumper;  
  5. use Time::Local;  
  6. use POSIX qw{strftime};  
  7. my (%hash,%count)=();  
  8. my $start_time = time;  
  9. sub p_money{  #計算費用  
  10.     my $time = shift;  
  11.    return 5 if $time <= 600;  
  12.    if ($time>600 and $time<1800){  
  13.     my $min;  
  14.      $time%60==0?$min = ($time-600)/60:$minint( ($time-600)/60 +1);  
  15.         my $mon_minute = 5+$min*5;  
  16.        return $mon_minute;  
  17.    }  
  18. }  
  19. my (@arr,$end_time);  
  20. while(1){  
  21.     my ($start);  
  22.    $end_time=time;  
  23. print  "Car Number :";  
  24.    eval{  
  25. local $SIG{ALRM}=sub {die "timeout\n";};  
  26.   alarm(5);  
  27.     chomp( $start = <>);        #此處設施中斷  5秒內沒有用戶輸入就繼續循環,  
  28.     push @{$hash{$start}},time;  
  29.     $count{$start}++ if defined $start;  
  30.     alarm(0);  
  31.    };  
  32. if ($end_time-$start_time>20){   #這裏程序運行20秒,則退出循環,打印車輛的費用  
  33.         for (sort keys %hash){  
  34. my $stop_time = time()-$hash{$_}[0];  
  35.         my $car_start_time = strftime("%Y-%m-%d %H:%M:%S", localtime($hash{$_}[0]));  
  36.         my $car_stop_time = strftime("%Y-%m-%d %H:%M:%S", localtime(time));  
  37.         push @arr,"$_\t$car_start_time $car_stop_time $stop_time\t200\n";  
  38.         }  
  39.    print "\n車號\t開始時間\t離開時間\t停車時間\t價格\n";  
  40.    print @arr;  
  41.         exit;  
  42.     }  
  43.    if(defined $start  and  ($count{$start}||0) >1 ){  
  44.         push @{$hash{$start}},time;  
  45.         my $stop_time = $hash{$start}[-1]-$hash{$start}[0];  
  46.         my $car_money = p_money $stop_time;  
  47.         my $car_start_time = strftime("%Y-%m-%d %H:%M:%S", localtime($hash{$start}[0]));  
  48.         my $car_stop_time = strftime("%Y-%m-%d %H:%M:%S", localtime($hash{$start}[-1]));  
  49.         push @arr, "$start\t$car_start_time $car_stop_time $stop_time\t$car_money\n";  
  50.         delete $count{$start}; #刪除 出庫車輛  
  51.         delete $hash{$start};  
  52.         redo;  #繼續等待用戶輸入  
  53.     }else{  
  54.         redo;  
  55.     }  
  56. }  

結果:sql

相關文章
相關標籤/搜索