停车场收费问题

该文介绍了一个停车场收费系统的设计,系统根据不同车型(轿车、客车、货车)收取不同费用。轿车每小时8元,超30分钟按1小时计算;客车每小时10元,30分钟内按半小时,超则按1小时;货车每小时15元,不满1小时也按1小时计费。文章提供了C++代码实现,包括车辆类、各类车的子类和收费类,以及测试用例。
摘要由CSDN通过智能技术生成

在停车场收费系统中,收费者会根据车型的不同按不同的单价和计费方式收取不同的停车费,其中:

  • 轿车Car:每小时8元,超过30分钟按一小时计算,未超过30分钟不收费 
    
  • 客车Bus:每小时10元,30分钟以内按半小时计费,未达1小时但超过30分钟按1小时计算
    
  •     货车Truck:每小时15元,未达1小时的按1小时计算
    
  •     其他未知类型:按默认方法计算,见裁判程序。
    

请补充必要的类和函数定义,使停车场类Parker可收取停入的n辆车的费用。

裁判测试程序样例:

#include <iostream>
#include <string>
using namespace std;
const float Car_Price= 8;
const float Bus_Price= 10;
const float Truck_Price=15;
class Vehicle{
    protected:
        float price;
        int minute;
    public:
       virtual float computeFee(){return 20.0f*minute/60;};
       virtual string getType(){return "unknow"; };
       float getPrice();
       void setPrice(float _price);
       int getMinute();
       void setMinute(int _minute);
       Vehicle(float _price,int _minute); 
       Vehicle(){
       };
};
/* 你的代码将被嵌入这里 */
int main(){
    int n,minute; //停车辆次,时长 
    char type;
    Vehicle *vp;
    Parker p;
    cin>>n;
    
    for(int i=1;i<=n;i++){
        cin>>type>>minute;
        switch(type){
            case 'c':vp=new Car(minute);break;
            case 't':vp=new Truck(minute);break;
            case 'b':vp=new Bus(minute);break;
            default: vp=new Vehicle();vp->setMinute(minute);
        }
        cout<<"type:"<<vp->getType() <<" minute:"<<vp->getMinute()<<" fee:"<<vp->computeFee()<<endl;
        p.park(vp);
        delete vp;
    }
    cout<<"sum:"<<p.getSum()<<endl;
    return 0;
}
 

输入样例:

输入的第一行为进入停车场的车辆总数n.
接下来有n行输入,每行为一辆车的类型及停车时长,时长单位为分钟,类型'c'代表Car,类型'b'代表Bus,类型't'代表Truck,其他字符则为未知类型。

3
c 40
t 5
b 40

输出样例:

输出为n+1行,前n行输出每辆车的类型,停车时长,收取的费用,最后一行输出目前停车场得到的停车费总额。

type:car minute:40 fee:8
type:truck minute:5 fee:15
type:bus minute:40 fee:10
sum=33


 float Vehicle::getPrice()
{
    return price;//返回车型函数 
}
       void Vehicle::setPrice(float _price)
       {
           this->price=_price;
       }
       int Vehicle::getMinute()
       {
           return minute;//得到停车时间函数 
       }
       void Vehicle::setMinute(int _minute)
       {
           this->minute=_minute;
       }
       Vehicle::Vehicle(float _price,int _minute)
       {
       this->price=_price;
       this->minute =_minute;
       }
class Car:public Vehicle
{
    public:
        virtual string getType()
        {
            return "car";
        };
        Car(int m):Vehicle(Car_Price,m)
        {};
        virtual float computeFee()
        {
            int hour =minute/60;
            if(minute-hour*60>30)
            {
                hour++;
            }
            return hour*price;
        };
        
};
class Bus:public Vehicle
{
public:
 virtual string getType()
 {
  return "bus";
 };
 Bus(int m):Vehicle(Bus_Price,m)
 {};
 virtual float computeFee() 
 {
         int hour=minute/30;
         if(hour*30<minute) 
            hour+=1;
         return hour*price/2;
    }
};
class Truck:public Vehicle
{
public:
 virtual string getType() 
 {
  return "truck";
 };
 Truck(int m):Vehicle(Truck_Price,m)
 {};
 virtual float computeFee() 
 {
  int hour=minute/60;
        if(hour*60<minute) 
           hour+=1;
        return hour*price;
 }
};
class Parker//未知车型 
{
    double kai=0;
public:
 void park(Vehicle *A) 
 {
  kai =kai + A->computeFee();
 }
 double getSum() 
 {
  return kai;
 }
};

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值