First Project (“Autoverlei”)

Die main.cpp funktion:

#include "AutovermietungsGesellschaft.h"
#include <iostream>

int main() {
    // PKW mit einer Leistung von 160 PS, 0.71 EUR pro PS und mit Navigationssystem
    PKW PKW01(160, 0.71f, true);
    // PKW mit einer Leistung von 210 PS, 0.85 EUR pro PS und ohne Navigationssystem
    PKW PKW02(210, 0.85f, false);
    // Elektroauto mit einer Leistung von 110 PS, 2.12 EUR pro PS, ohne Navigationssystem, einer Akkukapazität von 80 kWh und einem kWh-Preis von 0.33 EUR
    Elektroauto elektroauto01(110, 2.12f, false, 80.0f, 0.33f);
    // Elektroauto mit einer Leistung von 98 PS, 2.03 EUR pro PS, mit Navigationssystem, einer Akkukapazität von 95 kWh und einem kWh-Preis von 0.34 EUR
    Elektroauto elektroauto02(98, 2.03f, true, 95.0f, 0.34f);

    Autovermietungsgesellschaft HinzKunzAutos;
    HinzKunzAutos.addAuto(&PKW01);
    HinzKunzAutos.addAuto(&PKW02);
    HinzKunzAutos.addAuto(&elektroauto01);
    HinzKunzAutos.addAuto(&elektroauto02);

    HinzKunzAutos.printList();

    std::cout << "JAHRESMIETEINNAHMEN der Gesellschaft, wenn jedes Auto 300 Tage im Jahr vermietet ist: "
        << HinzKunzAutos.berechneGesamtJahresmiete(300)
        << std::endl << std::endl;

    return 0;
}

AutovermietungsGesellschaft.cpp:

#include "AutovermietungsGesellschaft.h"
#include <iostream>

// Implementierung der Auto Klasse
Auto::Auto() : Leistung(0), MietpreisProPS(0.0f) {}

Auto::Auto(unsigned leistung, float mietpreisProPS)
    : Leistung(leistung), MietpreisProPS(mietpreisProPS) {}

void Auto::setLeistung(unsigned PS) {
    Leistung = PS;
}

unsigned Auto::getLeistung() const {
    return Leistung;
}

void Auto::setMietpreisProPS(float mietpreisPS) {
    MietpreisProPS = mietpreisPS;
}

float Auto::getMietpreisProPS() const {
    return MietpreisProPS;
}

// Implementierung der PKW Klasse
PKW::PKW() : Auto(), NavigationsSystem(false) {}

PKW::PKW(unsigned leistung, float mietpreisProPS, bool navi)
    : Auto(leistung, mietpreisProPS), NavigationsSystem(navi) {}

void PKW::setNavigationsSystem(bool navi) {
    NavigationsSystem = navi;
}

bool PKW::getNavigationsSystem() const {
    return NavigationsSystem;
}

float PKW::berechneJahresmiete(unsigned anzahlTageVermietet) const {
    float Jahresmiete = MietpreisProPS * Leistung * anzahlTageVermietet;
    if (NavigationsSystem) {
        Jahresmiete += MieteNavi * anzahlTageVermietet;
    }
    return Jahresmiete;
}

void PKW::printInfo() const {
    std::cout << "Leistung: " << Leistung << " PS\n"
        << "Mietpreis pro PS: " << MietpreisProPS << " EUR\n"
        << "Navigationssystem: " << (NavigationsSystem ? "Ja" : "Nein") << std::endl;
}

// Implementierung der Elektroauto Klasse
Elektroauto::Elektroauto()
    : PKW(), Akkukapazitaet(0.0f), MietpreisProKWH(0.0f) {}

Elektroauto::Elektroauto(unsigned leistung, float mietpreisProPS, bool navi, float akkukapazitaet, float mietpreisProKWH)
    : PKW(leistung, mietpreisProPS, navi), Akkukapazitaet(akkukapazitaet), MietpreisProKWH(mietpreisProKWH) {}

void Elektroauto::setAkkukapazitaet(float kapazitaet) {
    Akkukapazitaet = kapazitaet;
}

float Elektroauto::getAkkukapazitaet() const {
    return Akkukapazitaet;
}

void Elektroauto::setMietpreisProKWH(float mietpreisKWh) {
    MietpreisProKWH = mietpreisKWh;
}

float Elektroauto::getMietpreisProKWH() const {
    return MietpreisProKWH;
}

float Elektroauto::berechneJahresmiete(unsigned anzahlTageVermietet) const {
    float Jahresmiete = MietpreisProPS * Leistung * anzahlTageVermietet + MietpreisProKWH * Akkukapazitaet * anzahlTageVermietet;
    if (getNavigationsSystem()) {
        Jahresmiete += MieteNavi * anzahlTageVermietet;
    }
    return Jahresmiete;
}

void Elektroauto::printInfo() const {
    PKW::printInfo();
    std::cout << "Akkukapazität: " << Akkukapazitaet << " kWh\n"
        << "Mietpreis pro kWh: " << MietpreisProKWH << " EUR" << std::endl;
}

// Implementierung der Autovermietungsgesellschaft Klasse
Autovermietungsgesellschaft::Autovermietungsgesellschaft()
    : anzahlAutos(0) {}

void Autovermietungsgesellschaft::addAuto(Auto* neuesAuto) {
    if (anzahlAutos < 100) {
        Autos[anzahlAutos++] = neuesAuto;
    }
}

void Autovermietungsgesellschaft::printList() const {
    for (unsigned i = 0; i < anzahlAutos; ++i) {
        Autos[i]->printInfo();
        std::cout << std::endl;
    }
}

float Autovermietungsgesellschaft::berechneGesamtJahresmiete(unsigned anzahlTageVermietet) const {
    float GesamtJahresmiete = 0.0f;
    for (unsigned i = 0; i < anzahlAutos; ++i) {
        GesamtJahresmiete += Autos[i]->berechneJahresmiete(anzahlTageVermietet);
    }
    return GesamtJahresmiete;
}

AutovermietungsGesellschaft.h:

#ifndef AUTOVERMIETUNGSGESELLSCHAFT_H
#define AUTOVERMIETUNGSGESELLSCHAFT_H

#include <iostream>

// Forward declaration for the classes
class Auto;
class PKW;
class Elektroauto;
class Autovermietungsgesellschaft;

const static float MieteNavi = 100.0f;

class Auto {
public:
    Auto();
    Auto(unsigned leistung, float mietpreisProPS);

    void setLeistung(unsigned PS);
    unsigned getLeistung() const;

    void setMietpreisProPS(float MietpreisPS);
    float getMietpreisProPS() const;

    virtual float berechneJahresmiete(unsigned anzahlTageVermietet) const = 0;
    virtual void printInfo() const = 0;

protected:
    unsigned Leistung;
    float MietpreisProPS;
};

class PKW : public Auto {
public:
    PKW();
    PKW(unsigned leistung, float mietpreisProPS, bool navi);

    void setNavigationsSystem(bool navi);
    bool getNavigationsSystem() const;

    float berechneJahresmiete(unsigned anzahlTageVermietet) const override;
    void printInfo() const override;

private:
    bool NavigationsSystem;
};

class Elektroauto : public PKW {
public:
    Elektroauto();
    Elektroauto(unsigned leistung, float mietpreisProPS, bool navi, float akkukapazitaet, float mietpreisProKWH);

    void setAkkukapazitaet(float kapazitaet);
    float getAkkukapazitaet() const;

    void setMietpreisProKWH(float mietpreisKWh);
    float getMietpreisProKWH() const;

    float berechneJahresmiete(unsigned anzahlTageVermietet) const override;
    void printInfo() const override;

private:
    float Akkukapazitaet;
    float MietpreisProKWH;
};

class Autovermietungsgesellschaft {
public:
    Autovermietungsgesellschaft();

    void addAuto(Auto* neuesAuto);
    void printList() const;
    float berechneGesamtJahresmiete(unsigned anzahlTageVermietet) const;

private:
    Auto* Autos[100];
    unsigned anzahlAutos;
};

#endif // AUTOVERMIETUNGSGESELLSCHAFT_H

Leave a Reply

Your email address will not be published. Required fields are marked *