Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Thesis / Thesis.docx
Скачиваний:
3
Добавлен:
20.12.2024
Размер:
998.96 Кб
Скачать

File TransportInfo.H

#pragma once

#include "StationInfo.h"

class TransportInfo :

public ISerializable<TransportTypes, std::ofstream, std::stringstream>,

public IEmissionable,

public ICloneable<TransportInfo*>

{

protected:

StationInfo departure;

StationInfo destination;

double fee;

int id;

public:

TransportInfo();

TransportInfo(const int ID, StationInfo const& departure, StationInfo const& destination, double fee);

~TransportInfo() override = default;

// Getter methods

StationInfo const& getDeparture() const;

StationInfo const& getDestination() const;

double getFee() const;

int getID() const;

//Methods

virtual double calculateEmissionSavings(double distance) const;

//Overriden methods

std::string_view getTypeString() const final;

//Operators overload

TransportInfo& operator=(TransportInfo const& other);

bool operator==(TransportInfo const& other) const;

//Input/output operators

friend std::ostream& operator<<(std::ostream& out, TransportInfo const& other);

friend std::ofstream& operator<<(std::ofstream& ofs, TransportInfo const& other);

friend std::istream& operator>>(std::istream& in, TransportInfo& other);

friend std::stringstream& operator>>(std::stringstream& ifs, TransportInfo& other);

};

File Bus.H

#pragma once

#include "Plane.h"

class Bus :

public TransportInfo

{

private:

double fuelEfficiency;

public:

Bus();

Bus(const int ID, StationInfo const& departure, StationInfo const& destination, double fee,

double fuelEfficiency);

TransportTypes getType() const override;

void serialize(std::ofstream& out) const override;

void deserialize(std::stringstream& ss) override;

double calculateFuelConsumption(double distance) const override;

double calculateEmissions(double distance) const override;

TransportInfo* clone() const override;

//Operators

friend std::istream& operator>>(std::istream& in, Bus& other);

};

File Bus.Cpp

#include "Bus.h"

Bus::Bus()

: TransportInfo(), fuelEfficiency()

{

emissionFactor = 8.7;

}

Bus::Bus(int ID, StationInfo const& departure, StationInfo const& destination, double fee,

double fuelEfficiency)

: TransportInfo(ID, departure, destination, fee),

fuelEfficiency(fuelEfficiency)

{

emissionFactor = 8.7;

}

TransportTypes Bus::getType() const

{

return TransportTypes::E_Bus;

}

void Bus::serialize(std::ofstream& ofs) const

{

ofs << static_cast<const TransportInfo&>(*this)

<< ',' << this->fuelEfficiency << '\n';

}

void Bus::deserialize(std::stringstream& ss)

{

ss >> static_cast<TransportInfo&>(*this);

std::string item;

std::getline(ss, item, ',');

this->fuelEfficiency = std::stod(item);

}

double Bus::calculateFuelConsumption(double distance) const

{

// Fuel consumption logic specific to a bus

return distance / fuelEfficiency;

}

double Bus::calculateEmissions(double distance) const

{

// Emission calculation specific to a bus

return calculateFuelConsumption(distance) * emissionFactor; // kg CO2 per liter of diesel

}

TransportInfo* Bus::clone() const

{

return new Bus(*this);

}

std::istream& operator>>(std::istream& in, Bus& other)

{

in >> static_cast<TransportInfo&>(other);

std::cout << "Enter the bus' fuel efficiency: ";

validateInput(other.fuelEfficiency, in);

return in;

}

Соседние файлы в папке Thesis