
- •Coursework thesis
- •Task for coursework
- •Abstract
- •List of abbreviations
- •Introduction
- •Domain analysis
- •Designing the system
- •Interface classes iSerializible, iEmissionable and iCloneable
- •Class for transport information
- •Bus, Plane, Train classes
- •Data storing. Transport schedule class
- •Array of pointers. Container class.
- •User Interface Design
- •Software implementation
- •Clock and Time classes.
- •Coordinates structure implementation
- •StationInfo structure implementation
- •IEmissionable, iSerializable and iCloneable implementation
- •TransportInfo class implementation
- •Bus, Plane, Train class implementation
- •TransportSchedule class implementation
- •Conclusions
- •References
- •Appendix a File Time.H
- •File Time.Cpp
- •File Clocks.H
- •File Clocks.Cpp
- •File iSerializable.H
- •File iEmissionable.H
- •File iCloneable.H
- •File stdafx.H
- •File stdafx.Cpp
- •CoordinatesData.Json
- •File transports.Csv
- •File Coordinates.Cpp
- •File main.Cpp
- •File Route.Cpp
- •File Route.H
- •File StationInfo. Cpp
- •File StationInfo.H
- •File TransportSchedule.H
- •File TransportSchedule.Cpp
- •File PtrArray.Cpp
- •File TransportInfo.Cpp
- •File TransportInfo.H
- •File Bus.H
- •File Bus.Cpp
- •File Plane.H
- •File Plane.Cpp
- •File Train.H
- •File Train.Cpp
- •Appendix b
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;
}