//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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。