实验七

//Automobile.h
#ifndef AUTOMOBILE_H
#define AUTOMOBILE_H
using namespace std;
#include <string>
class Park;
class Automobile
{
public:
    void enter(Park *park);
    string getName();
    void leave(Park *park);
    Automobile(string name, int payment = 0);
protected:
    string name;
    int payment;
};
#endif // AUTOMOBILE_H

//Automobile.cpp
#include "Automobile.h"
#include "Park.h"
#include <string>
using namespace std;
Automobile::Automobile(string name, int payment): name(name), payment(payment){;}
void Automobile::enter(Park *park)
{
    park->assignAutomobile(this);
}
void Automobile::leave(Park *park)
{
    park->passAutomobile(this, payment);
}
string Automobile::getName()
{
    return name;
}

//Park.h
#ifndef PARK_H
#define PARK_H
class Automobile;
class Park
{
public:
    void showInfo();
    Park(int N);
    ~Park();
    void assignAutomobile(Automobile *automobile);
    void passAutomobile(Automobile *automobile, int payment);
private:
    int income;
    int num;
    int maxNum;
    Automobile **spaces;
};
#endif // PARK_H

//Park.cpp
#include "Park.h"
#include "Automobile.h"
#include <string>
#include <iostream>
using namespace std;
Park::Park(int N)
{
    income = 0;
    maxNum = N;
    num = 0;
    spaces = new Automobile*[N];
    for (int i = 0; i < N; i++)
        spaces[i] = NULL;
}
Park::~Park()
{
    delete[] spaces;
}
void Park::showInfo()
{
    cout << "停车场目前停放了" << num << "辆汽车";
    if (num == 0)
        cout << ",";
    else
    {
        for (int i = 0; i < maxNum; i++)
            if (spaces[i])
                cout << spaces[i]->getName() << ",";
    }
    cout << "共收入" << income << "元停车费" << endl;
}
void Park::assignAutomobile(Automobile *automobile)
{
    if (num == maxNum)
        cout << "无法为" << automobile->getName() << "分配停车位" << endl;
    else
        for (int i = 0; i < maxNum; i++)
            if (!spaces[i])
            {
                num++;
                spaces[i] = automobile;
                cout << automobile->getName() << "进入停车场,分配停车位" << endl;
                break;
            }
}
void Park::passAutomobile(Automobile *automobile, int payment)
{
    for (int i = 0; i < maxNum; i++)
        if (spaces[i] == automobile)
        {
            income += payment;
            num--;
            spaces[i] = NULL;
            cout << automobile->getName() << "离开停车场,缴纳停车费" << payment << "元" << endl;
            break;
        }
}

//Truck.h
#ifndef TRUCK_H
#define TRUCK_H
#include "Automobile.h"
#include <string>
using namespace std;
class Truck: public Automobile
{
public:
    Truck(string name, double weight);
    double getWeight();
    int pay();
private:
    double weight;
};
#endif // TRUCK_H

//Truck.cpp
#include "Truck.h"
#include <string>
#include <iostream>
using namespace std;
Truck::Truck(string name, double weight): Automobile(name), weight(weight)
{
    payment = pay();
}
double Truck::getWeight()
{
    return weight;
}
int Truck::pay()
{
    return 3;
}

//Car.h
#ifndef CAR_H
#define CAR_H
#include "Automobile.h"
#include <string>
using namespace std;
class Car: public Automobile
{
public:
    Car(string name, string name1);
    string getName1();
    int pay();
private:
    string name1;
};
#endif // CAR_H

//Car.cpp
#include "Car.h"
#include <string>
#include <iostream>
using namespace std;
Car::Car(string name, string name1): Automobile(name), name1(name1)
{
    payment = pay();
}
string Car::getName1()
{
    return name1;
}
int Car::pay()
{
    return 1;
}

//Bus.h
#ifndef BUS_H
#define BUS_H
#include "Automobile.h"
#include <string>
using namespace std;
class Bus: public Automobile
{
public:
    Bus(string name, int load);
    int getLoad();
    int pay();
private:
    int load;
};
#endif // BUS_H

//Bus.cpp
#include "Bus.h"
#include <string>
#include <iostream>
using namespace std;
Bus::Bus(string name, int load): Automobile(name), load(load)
{
    payment = pay();
}
int Bus::getLoad()
{
    return load;
}
int Bus::pay()
{
    return 2;
}

//main.cpp
#include "Park.h"
#include "Automobile.h"
#include "Car.h"
#include "Truck.h"
#include "Bus.h"
#include <string>
#include <iostream>
using namespace std;
int main()
{
    int N;
    cout << "请输入停车位数量:";
    cin >> N;
    Park *park = new Park(N);
    Car car1("鲁B-12345","奥迪A6");
    car1.enter(park);
    Truck truck("鲁B-23456", 15);
    truck.enter(park);
    car1.leave(park);
    Bus bus("鲁B-34567", 50);
    bus.enter(park);
    park->showInfo();
    Car car2("鲁B-45678","宝马320");
    car2.enter(park);
    bus.leave(park);
    truck.leave(park);
    park->showInfo();
    delete park;
    return 0;
}
作者:LightAc
出处:https://www.cnblogs.com/lightac/
联系:
Email: dzz@stu.ouc.edu.cn
QQ: 1171613053
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/lightac/p/10905388.html