Untitled

 avatar
unknown
plain_text
9 days ago
3.6 kB
5
Indexable
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

class Date {
public:
    string tip;
    string nr_m;
    int h1, h2, m1, m2;
    char col1, col2;
    int ore, min;

    Date(const string& t, const string& nr, int h1_, char c1, int m1_, int h2_, char c2, int m2_)
        : tip(t), nr_m(nr), h1(h1_), col1(c1), m1(m1_), h2(h2_), col2(c2), m2(m2_) {}

    void calculare_timp(){
        ore = h2 - h1;
        min = m2 - m1;
        if (min < 0){
            min += 60;
            ore -= 1;
        }
    }
    
    void afisare_date() {
        cout << tip << " " << nr_m << " " << h1 << ":" << m1 << " " << h2 << ":" << m2 << endl;
    }

    virtual void calcul_tarif() = 0;
    virtual ~Date() {}
};

class Masina : public Date {
public:
    Masina(const string& nr, int h1, char c1, int m1, int h2, char c2, int m2)
        : Date("Masina", nr, h1, c1, m1, h2, c2, m2) {}

    void calcul_tarif() override {
        int tar = ore * 5;
        cout << "Spre plata pentru Masina: " << tar << " lei" << endl<<endl;
    }
};

class Motocicleta : public Date {
public:
    Motocicleta(const string& nr, int h1, char c1, int m1, int h2, char c2, int m2)
        : Date("Motocicleta", nr, h1, c1, m1, h2, c2, m2) {}

    void calcul_tarif() override {
        int tar = ore * 3;
        cout << "Spre plata pentru Motocicleta: " << tar << " lei" << endl<<endl;
    }
};

class Bicicleta : public Date {
public:
    Bicicleta(const string& nr, int h1, char c1, int m1, int h2, char c2, int m2)
        : Date("Bicicleta", nr, h1, c1, m1, h2, c2, m2) {}

    void calcul_tarif() override {
        ore = ore - 2;
        int tar = ore * 2;
        if (ore <= 0){
            cout<<"N-ai ce plati saracule."<<endl<<endl;
        } else {
            cout << "Spre plata pentru Bicicleta: " << tar << " lei" << endl<<endl;
        }
        
    }
};

class Camion : public Date {
public:
    Camion(const string& nr, int h1, char c1, int m1, int h2, char c2, int m2)
        : Date("Camion", nr, h1, c1, m1, h2, c2, m2) {}

    void calcul_tarif() override {
        int tar = ore * 10;
        cout << "Spre plata pentru Camion: " << tar << " lei" << endl<<endl;
    }
};

int main() {
    vector<Date*> vehicule;
    ifstream file("input.txt");
    
    if (!file) {
        cerr << "Error: Could not open input.txt!" << endl<<endl;
        return 1;
    }

    string tip, nr_m;
    int h1, m1, h2, m2;
    char col1, col2;

    while (file >> tip >> nr_m >> h1 >> col1 >> m1 >> h2 >> col2 >> m2) {
        if (col1 != ':' || col2 != ':') {
            cerr << "Error: Time format incorrect in input file!" << endl;
            continue;
        }

        try {
            if (tip == "Masina") {
                vehicule.push_back(new Masina(nr_m, h1, col1, m1, h2, col2, m2));
            } else if (tip == "Camion") {
                vehicule.push_back(new Camion(nr_m, h1, col1, m1, h2, col2, m2));
            } else if (tip == "Motocicleta") {
                vehicule.push_back(new Motocicleta(nr_m, h1, col1, m1, h2, col2, m2));
            } else if (tip == "Bicicleta") {
                vehicule.push_back(new Bicicleta(nr_m, h1, col1, m1, h2, col2, m2));
            } else {
                cerr << "Error: Unknown vehicle type (" << tip << ")!" << endl;
            }
        } catch (const exception &e) {
            cerr << e.what() << endl;
        }
    }

    file.close();

    for (Date* v : vehicule) {
        v->afisare_date();
        v->calculare_timp();
        v->calcul_tarif();
        delete v;
    }

    return 0;
}
Editor is loading...
Leave a Comment