zoukankan      html  css  js  c++  java
  • 实验七

    //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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    OA项目之分页
    OA项目之弹出层中再弹出层
    OA项目之导入
    OA项目之导出
    git使用6步走
    配置 Docker 镜像站
    Taro随笔
    byte(C# 参考)
    MySQL 笔记
    HTTP 错误代码
  • 原文地址:https://www.cnblogs.com/lightac/p/10905388.html
Copyright © 2011-2022 走看看