用C写的停车收费代码

某市停车场收费标准为:

小型车:首小时内每15分钟收费:2.5元,首小时后每15分钟收费:3.75

大型车:首小时内每15分钟收费:5元,首小时后每15分钟收费:7.5

夜间收费标准(21:00---7:00)一律执行小型车每两小时1元,大型车每两小时2元

请编写程序,输入车型和进场时间(XXXX-XX-XX XX:XX)以及出场时间,计算停车时间,然后算出应收金额(请注意白天和晚上跨时间段问题,比如早上6.30进场,7.15出场;白天不够15分钟部分按照15分钟计算;夜间不够2小时部分也按2小时计算)。

 

// To_park_car.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <math.h>
#include <time.h>
 const int   Bigcar_rule   = 5;     //day per 15 minutes
 const float Smallcar_rule = 2.5;   //day per 15 minutes

 const float Bigcar_att   = 7.5;    //past 15 minutes in day
 const float Smallcar_att =3.75;    //past 15 minutes in day

 const int   Bigcar_night = 2;      //night per an hour
 const int   Smallcar_night = 1;    //night per an hour

 const int   Per_time = 15;         // 15 minutes

//Check input value
bool Compare(int sy,int sm,int sd,int sh,int smi,int ey,int em,int ed,int eh,int emi)
{
 if(ey > sy ||(ey>=sy && em> sm) || (ey>=sy && em>= sm && ed>sd) ||(ey>=sy && em>= sm && ed>=sd && eh>sh)||(ey>=sy && em>= sm && ed>=sd && eh>=sh && emi>smi))
 {
  return true;
 }
 else return false;
}

/// Generates all month of year
int *GenerateMonth(int year)
{
 int *month =new int[13];
 
  month[0] = 0;
  month[1] = 31;
  if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
        {
      month[2] = 29;
  }
  else
  {
   month[2] =28;
  }
  month[3] = 31;
  month[4] = 30;
  month[5] = 31;
  month[6] = 30;
  month[7] = 31;
  month[8] = 31;
  month[9] = 30;
  month[10]= 31;
  month[11]= 30;
  month[12]= 31;
 return month;
}
//Check now of hour  or less than target to park car hour
bool CheckHour(int sy,int sm,int sd,int sh,int smi,int ey,int em,int ed,int eh,int emi)
{
 int hour = sh;
 if(hour >24)
 {
  hour=1;
  sd++;
 }
 if(hour >=21 || sh<7)
 {
  if(em>sm || ed>sd || ed>=sd && eh>hour || ed>=sd && eh>=hour && emi>=smi)
  {
   return true;
  }
 }
    if(ey > sy || ed>sd || ed>=sd && eh>hour+1 || ed>=sd && eh>hour && emi>=smi|| em>sm)
 {
  return true;
 }
 return false;
}
//Check now of day  or less than target to park car date
bool CheckDay(int yy,int mm,int dd,int hh,int mi,int ey,int em,int ed,int eh,int emi)
{
    int *point;
 int month_content_day = 0;
 int month_mod_value = 0;
    point =GenerateMonth(yy);
 //count days per month
 month_content_day = point[mm];
 dd++;
 if(dd > month_content_day )
 {
  mm++;
  dd=1;
 }
 //current month
 if(mm > 12)
 {
  month_mod_value = 1;
  yy++;
  mm =1;
 }
 else
 {
  month_mod_value = mm;
 }
 if(ey>yy || em>=month_mod_value && ed>dd || em>=month_mod_value && ed>=dd && eh>hh || em>=month_mod_value && ed>=dd && eh>=hh && emi>=mi)
 {
  return true;
 }
 return false;
}

//Check now of month  or less than target to park car month
bool CheckMonth(int  yy,int mm,int dd,int hh,int mi,int ey,int em,int ed,int eh,int emi)
{
 int sm = mm;
 if (sm+1>12)
 {
  sm =dd = 1;
  yy++;


 }
 
 if((ey>= yy && em>sm && ed>dd) || (ey>= yy && em>sm && ed>=dd &&eh>hh) || (ey>= yy && em>sm && ed>=dd &&eh>=hh && emi>=mi) || (ey>yy && em != 1) || (ey>yy && em == 1 && sm != 12))
 {
  return true;
 }
    return false;

 
}
//statistics how many days  in complete year
int StatisticsYearDays(int yy,int mm,int dd,int ed)
{
 
 int sumday  = 0;
 int *cnt ;
 int idx = 0;
 
 cnt =GenerateMonth(yy);
 //sum current year day

 while (idx <=12)
 {
  if(idx == 0)
  {
   sumday = cnt[mm] - dd;
  }
  else if (idx == 12 && mm != 12)
  {
   sumday = sumday +ed;
  }
  else
  {
   if(mm >12)
   {
    mm=1;
    yy++;
       cnt =GenerateMonth(yy);
   }
   sumday = sumday +cnt[mm];
  }
  idx++;
  mm++;
 }

 //while (idx <= 12)
 //{
 // sumday = sumday+cnt[idx];
 // idx++;
 //}
 //idx = 1;
 //cnt =GenerateMonth(yy+1);
 ////sum next year day
 //while (idx < em)
 //{
 // sumday = sumday+cnt[idx];
 // idx++;
 //}

 return sumday;
}

//statistics how many days  in complete month
int StatisticsMonthDays(int yy,int mm,int dd,int hh,int mi,int ey,int em,int idx)
{
 int sumday  = 0;
 int *cnt ; 
 cnt =GenerateMonth(yy);

 //statistics current month
 if(idx == 0 && dd==0  && hh==0 && mi==0)
 {
  //complete month
  sumday = sumday+cnt[mm];
  
 }
 else if( mm < em)
 {
  sumday = sumday+cnt[mm];
 }
 else if(ey>yy)
 {
  sumday = sumday+cnt[mm];
 }
 idx++;
 return sumday;
}
//Statistics all Hour of day
double StatisticsHourOfDay(int car_type,int sumday)
{
 double result  = 0;
 if(car_type == 1)
 {
  //small car
  result = 60/Per_time * Smallcar_att * 14 * sumday;
 }
 else
 {
  result = 60/Per_time * Bigcar_att * 14 * sumday;
 }
 return result;
}
// Statistics all Hour of night
double StatisticsHourOfNight(int car_type,int sumday)
{
 double result = 0;
 if(car_type ==1)
 {
  result =  Smallcar_night * 10 * sumday;
 }
 else
 {
  result =  Bigcar_night   * 10*  sumday;
 }
 return result;
}
//Statistics per hour * sumhour of day
double StatisticsHourDayCost(int car_type,int sumhour,double pay)
{
 double result = 0;
 if(car_type == 1)
 {
  //small car
  result = 60/Per_time * pay  * sumhour;
 }
 else
 {
  result = 60/Per_time * pay  * sumhour;
 }
 return result;
}
//
double StatisticsHourNightCost(int car_type,int sumhour)
{
 double result = 0;
 if(car_type == 1)
 {
  //small car
  result =  Smallcar_night  * sumhour;
 }
 else
 {
  result =  Bigcar_night  * sumhour;
 }
 return result;
}

int StatisticsHour()
{
 int sumhour = 0;
     return ++sumhour;
}
//Statistic Cost of Parking car
int StatisticsCost(int sumday,int sumhour_night,int sumhour_day,int summinute,int car_type)
{
 double cost = 0;
 if (sumday > 0)
 {
  cost = cost + StatisticsHourOfDay(car_type,sumday);
  cost = cost + StatisticsHourOfNight(car_type,sumday);
 }
 if(sumhour_day > 1 || sumhour_day >=1 && summinute > 0 )
 {
  if(car_type ==1 )
  {
   cost = cost +StatisticsHourDayCost(car_type,sumhour_day,Smallcar_att);
  }
  else
  {
   cost = cost +StatisticsHourDayCost(car_type,sumhour_day,Bigcar_att);
  }
  
 }
 else if( sumhour_day == 1 && summinute == 0 || sumhour_day<=1 && summinute>0)
 {
  if(car_type ==1 )
  {
   cost = cost +StatisticsHourDayCost(car_type,sumhour_day,Smallcar_rule);
  }
  else
  {
   cost = cost +StatisticsHourDayCost(car_type,sumhour_day,Bigcar_rule);
  }
 }
 if(sumhour_night > 0)
 {
  cost = cost + StatisticsHourNightCost(car_type,sumhour_night);
 }
 if(cost >0 )
 {
  //pass N hour
  if(car_type ==1)
  {
   cost = cost + summinute * Smallcar_att;
  }
  else
  {
   cost = cost + summinute * Bigcar_att;
  } 
 }
 else
 {
  //first hour
  if(car_type ==1)
  {
   cost = cost + summinute * Smallcar_rule;
  }
  else
  {
   cost = cost + summinute * Bigcar_rule;
  }
 }
 printf("The car total Cost of parking car is %f",cost);
 return 0;
}
//Statistic Time of parking car
int StatisticsTime(int sy,int sm,int sd,int sh,int smi,int ey,int em,int ed,int eh,int emi,int car_type)
{
 int sumday  = 0;
 int sumhour_day = 0;
 int sumhour_night = 0;
 int summinute=0;
 int idx = 0;
 while (ey> sy || em> sm || ed> sd ||eh > sh|| emi > smi)
 {
     if(sy>ey)
  {
   break;
  }
  if((ey-sy>=2)||(ey>sy && em> sm) || (ey>sy && em>= sm && ed>sd) ||(ey>sy && em>= sm && ed>=sd && eh>sh)||(ey>sy && em>= sm && ed>=sd && eh>=sh && emi>=smi))
  {
   //start year less than end year  indicate to park a year
   sumday = sumday + StatisticsYearDays(sy,sm,sd,ed);
   sy++;
  }
  else if(CheckMonth(sy,sm,sd,sh,smi,ey,em,ed,eh,emi))
  {
   //start year month than end month  indicate to park a month
   sumday = sumday + StatisticsMonthDays(sy,sm,sd,sh,smi,ey,em,idx);
   sm++;
   if(sm >12)
   {
    sm = 1;
    sy++;
   }
   idx++;
  }
  else if (CheckDay(sy,sm,sd,sh,smi,ey,em,ed,eh,emi))
  {

    sd++;
    if(sd > GenerateMonth(sy)[sm])
    {
     sd = 1;
     sm ++;
     if(sm > 12)
     {
      sm = 1;
      sy ++;
     }
    }
    sumday = sumday ++;
  }
  else if(CheckHour(sy,sm,sd,sh,smi,ey,em,ed,eh,emi))
  {
   if(sh>=21 || sh<7 )
   {
    //night
    sumhour_night = sumhour_night + StatisticsHour();
    //all hour in night Times
    if((eh >=21 || eh<7) && sd>ed && sh>eh || (eh >=21 || eh<7) && sd>ed && sh>=eh&& smi>=emi)
    {
     smi = 0;
    }
    sh=sh+2;
    if(sh >= 7 && sh <9)
    {
     sh =7;
     smi =0;
    }
   }
   else
   {
    //day
    sumhour_day = sumhour_day + StatisticsHour();
    sh++;
    if(sh>=21)
    {
     smi = 0;
    }
   }
   if(sh >24)
   {
    if(sh == 25)
    {
       sh =1;
    }
    else
     sh =2;
    sd++;
    if(sd >  GenerateMonth(sy)[sm])
    {
     sd = 1;
     sm++;
     if(sm >12)
     {
      sm = 1;
      sy ++;
     }
    }
   }

  }
  else if(ey>=sy && em>=sm && ed>=sd && eh >=sh )
  {
   if(smi >60)
   {
    smi = smi%60;
    sh++;
   }
   summinute = summinute++;
   smi = smi+Per_time;
  }
  else
  {
   break;
  }
 }

 printf("The Car is parking %d days and approximate %d hours of day \n and approximate %d hours of night and approximate %d minutes \n",sumday,sumhour_day,sumhour_night,summinute*Per_time);
 StatisticsCost( sumday,sumhour_night,sumhour_day,summinute,car_type);
 return 0;
}

 

int _tmain(int argc, _TCHAR* argv[])
{
 
  //start yyyy  mmm dd  hh24 mi and car_type
  int sy,sm,sd,sh,smi,car_type;
  //end   yyyy  mmm dd  hh24 mi and car_type
  sy=sm=sd=sh=smi=car_type = 0;
  int ey,em,ed,eh,emi;
  ey=em=ed=eh=emi = 0;
  int result =0;
  printf("Please input to park car start time,format is yyyy mm dd hh24 mi \n");
  scanf("%d %d %d %d %d",&sy,&sm,&sd,&sh,&smi);
  printf("Please input to park car type,when 1 then small car when 2  big car else 1 \n");
  scanf("%d",&car_type);

  printf("Please input to park car start time,format is yyyy mm dd hh24 mi \n");
  scanf("%d %d %d %d %d",&ey,&em,&ed,&eh,&emi);
  ///////////////////////////////////////////
  if(Compare(sy,sm,sd,sh,smi,ey,em,ed,eh,emi))
  {
   //input correctly
   printf("[ Parking car charge standard! \n");
   printf("Start 7 to 21 per %d minutes bigCar is %d  and smallCar is %f \n",Per_time,Bigcar_rule,Smallcar_rule);
   printf("Pass an Hour  per %d minutes bigCar is %f  and smallCar is %f \n",Per_time,Bigcar_att,Smallcar_att);
   printf("Start 21 to 7 per 2 hours    bigCar is %d  and smallCar is %d ] \n",Bigcar_night,Smallcar_night);
   printf("\n");
   time_t lt;
   lt = time(NULL);
            printf("%s\n",ctime(&lt));
   result = StatisticsTime(sy,sm,sd,sh,smi,ey,em,ed,eh,emi,car_type);
   time_t et;
   et=time(NULL);
   printf("%s\n",ctime(&et));
   printf("%d",ctime(&et) - ctime(&lt));
  }
  else
  {
   printf("Input error please check your input value");
  }
 scanf("%d") ;
 //printf("%d %d %d %d %d",y,m,d,h,mi);
 
 return 0;
}

 

你可能感兴趣的:(null,less,input,float,statistics)