Тема: Розрахунок палива для всіх транспортів

Привіт я роблю завдання в польський універ але що правда з цим завдання виникли складнощі, вже декілька днів сиджу і не можу його зробити. Я вже писав і на польські форуми але що правда не сильно вони мені допомогли тільки підкинули ідею що це можна якось зробити за допомогою векторів але я не зміг знайти інформації як. Тому буду вдячний за будь які ідеї або ссилки на матеріали де можна про це почитати і зрозуміти куди мені рухатись далі

Завдання виглядає так:

Створіть ієрархію класів, що описують міський транспорт, використовуючи концепцію успадкування.
Виразіть у цій ієрархії наступне:
1. Всі транспортні засоби громадського транспорту є транспортними засобами,
2.Міський транспорт використовує трамваї та автобуси,
3. Транспортні засоби зберігаються у трамвайних та автобусних депо відповідно,
4. Кожен автомобіль знає свою максимальну швидкість,
5.Кожен транспортний засіб громадського транспорту знає свій номер,
6.Кожен транспортний засіб громадського транспорту знає своє депо,
7.Кожен трамвай - це набір від 1 до 3 вагонів (і знає, зі скількох вагонів він складається),
8.Кожен автобус знає, скільки пального було спожито за поточний місяць,
9. Кожне депо знає свою назву,
10. Кожне депо знає, які транспортні засоби до нього належать,
11. Кожне депо має назву.
Кожен транспортний засіб повинен мати можливість надати свій опис у вигляді напису. Опис повинен містити всю інформацію, яку знає транспортний засіб (наприклад, номер або максимальна швидкість). Опис депо — це назва депо, його тип(трамвайне депо або автобусне) та описи окремих транспортних засобів(трамваїв і автобусів). Автобусне депо описує скільки палива спожили всі автобуси в цьому місяці. Трамвайне депо описує загальну кількість вагонів із всіх трамваїв.
Напишіть програму, яка створить кілька об’єктів, що представляють усі транспортні засоби та два депо (автобусне і трамвайне депо), присвойте транспортні засоби до депо, а потім напишіть опис обох депо.


По суті мені задається що в цьому коді мені вдалося все реалізувати крім підрахунку палива в депо і загальної кількості вагонів

#include <iostream>
#include <string>

using namespace std;

class Public_Transport {
public:
    void MaxSpeed(int speed) {
        cout << "Максимальна швидкість: " << speed << " км/г" << endl;
    }
};
class Autobus : Public_Transport {
public:
    void Autobus_1_typu(int numer_transportu, int paliwo) {
        cout << "Автобус 1 типу " << endl;
        cout << "Номер транспорту: " << numer_transportu << endl;
        MaxSpeed(171); // Цей тип транспорту має сталу швидкість
        cout << "Автобус використав: " << paliwo << " л. палива в цьому місяці" << endl;
    }
    void Autobus_2_typu(int numer_transportu, int paliwo) {
        cout << "Автобус 2 типу " << endl;
        cout << "Номер транспорту: " << numer_transportu << endl;
        MaxSpeed(190); // Цей тип транспорту має сталу швидкість
        cout << "Автобус використав: " << paliwo << " л. палива в цьому місяці" << endl;
    }
    void Autobus_3_typu(int numer_transportu, int paliwo) {
        cout << "Автобус 3 типу " << endl;
        cout << "Номер транспорту: " << numer_transportu << endl;
        MaxSpeed(230); // Цей тип транспорту має сталу швидкість
        cout << "Автобус використав: " << paliwo << " л. палива в цьому місяці" << endl;
    }
};
class DepotWoronicza : Autobus {
public:
    void Woronicza_AutobusTypu1(int numer, int paliwo) {
        Autobus_1_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Вороніча \n" << endl;
    }
    void Woronicza_AutobusTypu2(int numer, int paliwo) {
        Autobus_2_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Вороніча \n" << endl;
    }
    void Woronicza_AutobusTypu3(int numer, int paliwo) {
        Autobus_3_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Вороніча \n" << endl;
    }
};
class DepotStalowa : Autobus {
public:
    void Stalowa_AutobusTypu1(int numer, int paliwo) {
        Autobus_1_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Сталева \n" << endl;
    }
    void Stalowa_AutobusTypu2(int numer, int paliwo) {
        Autobus_2_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Сталева \n" << endl;
    }
    void Stalowa_AutobusTypu3(int numer, int paliwo) {
        Autobus_3_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Сталева \n" << endl;
    }
};
class DepotRedutowa : Autobus {
public:
    void Redutowa_AutobusTypu1(int numer, int paliwo) {
        Autobus_1_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Редутова \n" << endl;
    }
    void Redutowa_AutobusTypu2(int numer, int paliwo) {
        Autobus_2_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Редутова \n" << endl;
    }
    void Redutowa_AutobusTypu3(int numer, int paliwo) {
        Autobus_3_typu(numer, paliwo); // В цьому місці вписуємо номер транспорту і скільки використав палива
        cout << "Депо цього транспорту є: Редутова \n" << endl;
    }
};
class Tramwaj : Public_Transport {
public:
    void Tramwaj_1_typu(int numer_pojazdu, int wagony) {
        cout << "Трамвай 1 типу: " << endl;
        cout << "Номер транспорту: " << numer_pojazdu << endl;
        MaxSpeed(120); // Цей тип транспорту має сталу швидкість
        cout << "Трамвай має: " << wagony << " вагонів" << endl;
    }
    void Tramwaj_2_typu(int numer_pojazdu, int wagony) {
        cout << "Трамвай 2 типу: " << endl;
        cout << "Номер транспорту: " << numer_pojazdu << endl;
        MaxSpeed(150); // Цей тип транспорту має сталу швидкість
        cout << "Трамвай має: " << wagony << " вагонів" << endl;
    }
    void Tramwaj_3_typu(int numer_pojazdu, int wagony) {
        cout << "Трамвай 3 типу: " << endl;
        cout << "Номер транспорту: " << numer_pojazdu << endl;
        MaxSpeed(180); // Цей тип транспорту має сталу швидкість
        cout << "Трамвай має: " << wagony << " вагонів" << endl;
    }
};
class DepotMokotow : Tramwaj {
public:
    void Mokotow_TramwajTypu1(int numer, int wagony) {
        Tramwaj_1_typu(numer, wagony); // В цьому місці вписуємо номер транспорту і кількість вагонів
        cout << "Депо цього транспорту є: Мокотув \n" << endl;
    }
    void Mokotow_TramwajTypu2(int numer, int wagony) {
        Tramwaj_2_typu(numer, wagony); // В цьому місці вписуємо номер транспорту і кількість вагонів
        cout << "Депо цього транспорту є: Мокотув \n" << endl;
    }
    void Mokotow_TramwajTypu3(int numer, int wagony) {
        Tramwaj_3_typu(numer, wagony); // В цьому місці вписуємо номер транспорту і кількість вагонів
        cout << "Депо цього транспорту є: Мокотув \n" << endl;
    }
};
class DepotZoliborz : Tramwaj {
public:
    void Zoliborz_TramwajTypu1(int numer, int wagony) {
        Tramwaj_1_typu(numer, wagony); // В цьому місці вписуємо номер транспорту і кількість вагонів
        cout << "Депо цього транспорту є: Жолібож \n" << endl;
    }
    void Zoliborz_TramwajTypu2(int numer, int wagony) {
        Tramwaj_2_typu(numer, wagony); // В цьому місці вписуємо номер транспорту і кількість вагонів
        cout << "Zajezdnia tego pojazdu jest: Жолібож \n" << endl;
    }
    void Zoliborz_TramwajTypu3(int numer, int wagony) {
        Tramwaj_3_typu(numer, wagony); // В цьому місці вписуємо номер транспорту і кількість вагонів
        cout << "Zajezdnia tego pojazdu jest: Жолібож \n" << endl;
    }
};
int main()
{
    DepotWoronicza bus1;
    DepotStalowa bus2;
    DepotRedutowa bus3;
    DepotMokotow tram1;
    DepotZoliborz tram2;
    bus1.Woronicza_AutobusTypu1(1, 33);
    bus1.Woronicza_AutobusTypu2(2, 25);
    bus1.Woronicza_AutobusTypu3(3, 54);
    bus2.Stalowa_AutobusTypu1(4, 34);
    bus2.Stalowa_AutobusTypu2(5, 67);
    bus2.Stalowa_AutobusTypu3(6, 37);
    bus3.Redutowa_AutobusTypu1(7, 56);
    bus3.Redutowa_AutobusTypu2(8, 67);
    bus3.Redutowa_AutobusTypu3(9, 76);
    tram1.Mokotow_TramwajTypu1(10, 3);
    tram1.Mokotow_TramwajTypu2(11, 2);
    tram1.Mokotow_TramwajTypu2(12, 1);
    tram2.Zoliborz_TramwajTypu1(10, 3);
    tram2.Zoliborz_TramwajTypu2(11, 2);
    tram2.Zoliborz_TramwajTypu3(12, 1);

}

Сорі якщо що за помилки якщо є так як я це все мусив перекладати з польської

2

Re: Розрахунок палива для всіх транспортів

Тут не сказано робити класи для кожного транспорту. Я б просто зробив би класс депо, далі від нього наслідується клас транспорт, де можна вибрати вид транспорту далі громадський і міський, щось в цьому дусі. У вас вийшло, що клас DepotZoliborz це супер клас, який може бути трамваєм, автомобілем, депошкою, міським транспортом і може використовувати функції цих класів. Звісно це моя думка, якщо вас цікавить, щось конкретне запитуйте, вам спробують відповісти.

Подякували: dranchuk.roma1

3

Re: Розрахунок палива для всіх транспортів

vlad032 написав:

...Я б просто зробив би клас депо, далі від нього наслідується клас транспорт, де можна вибрати вид транспорту далі громадський і міський, щось в цьому дусі...

dranchuk.roma написав:

3. Транспортні засоби зберігаються у трамвайних та автобусних депо відповідно

Депо в умові не вказано як транспортний засіб, отже і похідні від нього класи не можуть бути транспортом. Це склад де зберігаються ці самі ТЗ, отже можна припустити, - ТЗ є властивістю для класу Депо.

Подякували: leofun01, dranchuk.roma2

4

Re: Розрахунок палива для всіх транспортів

dranchuk.roma написав:

По суті мені задається що в цьому коді мені вдалося все реалізувати крім підрахунку палива в депо і загальної кількості вагонів

Це вам так здається. Без образ, але перечитайте ще раз лекції з ООП. Код м'яко кажучи - безглуздий...

Подякували: leofun01, dranchuk.roma2

5

Re: Розрахунок палива для всіх транспортів

lucas-kane написав:
dranchuk.roma написав:

По суті мені задається що в цьому коді мені вдалося все реалізувати крім підрахунку палива в депо і загальної кількості вагонів

Це вам так здається. Без образ, але перечитайте ще раз лекції з ООП. Код м'яко кажучи - безглуздий...

Ну я то вже це зрозумів що це не правильно тому що депо не може наслідувати клас транспорт так як депо не є транспортом воно має в собі транспорт і походу це треба зробити якось так

#include <iostream>
#include <vector>

using namespace std;

Public_Transport{
    // це базовий клас для типів транспорту і депо так як вони входять до громадського транспорту
}
class Transpotr : Public_Transport{
    // тут описуємо спільні цехи всіх типів транспорту, наприклад номер і швидкість
}
class Autobus : Transport{
    // тут описуємо тільки ті цехи які має мати автобус такі як паливоі
}
class Tramwaj: Transport{
    // тут описуємо тільки ті цехи які має мати трамвай такі як кількість вагонів
}
class Depot{
    // тут описуємо цехи всіх депо
}
class AutobusDepot : Depot{
    // тут тільки кількість витраченого палива всіх автобусі за місяць, тому тут має бути якийсь доступ до обєктів створених на 
    //основі класу Autobus
    vector<Autobus> pojazdy; // мені порадили використовувати щось типу такого щоб можна було порахувати це павливо
}
class TramwajDepot : Depot{
    // тут тільки кількість вагонів всіх трамваїв, тому тут має бути якийсь доступ до обєктів створених на основі класу Tramwaj
    vector<Tramwaj> pojazdy; // мені порадили використовувати щось типу такого щоб можна було порахувати це вагони
}

int main(){
    // ну і тут вже створення обєктів
}

6

Re: Розрахунок палива для всіх транспортів

#include <iostream>

using namespace std;

// Тип  ДЕПО
enum class DepotType {
    _BusDepot, // автобусне депо
    _TramDepot, // трамвайне депо
    _depot_not_specified //депо не вказано
};

class Depot;

// 1. Всі транспортні засоби громадського транспорту є транспортними засобами
// Базовий клас "Засіб пересування - Транспортний засіб (ТЗ)"
class Vehicle {
private:
    size_t _max_speed; // 4. Кожен автомобіль знає свою максимальну швидкість
    size_t _num_id; // 5. Кожен транспортний засіб громадського транспорту знає свій номер
    DepotType _depot_type; // 6.Кожен транспортний засіб громадського транспорту знає своє депо
};

// 2. Міський транспорт використовує трамваї та автобуси
// Похідний клас "Трамвай" від базового "Засіб пересування"
class Tram : public Vehicle {
private:
    size_t _tram_cars; // 7. Кожен трамвай - це набір від 1 до 3 вагонів (і знає, зі скількох вагонів він складається)
};

// Дочірній клас "Автобус" походить від батькіського класу "Засіб пересування"
class Bus : public Vehicle {
private:
    size_t _consume_fuel; // 8. Кожен автобус знає, скільки пального було спожито за поточний місяць
};

// 3. Транспортні засоби зберігаються у трамвайних та автобусних депо відповідно
class Depot {
private:
    // Опис депо — це назва депо, його тип(трамвайне депо або автобусне)
    // та описи окремих транспортних засобів(трамваїв і автобусів)
    DepotType _depot_type; // 9. Кожне депо знає свою назву (тип) трамвайне депо або автобусне
    Vehicle** _vehicle; // 10. Кожне депо знає, які транспортні засоби до нього належать
    string _depot_name; // 11. Кожне депо має назву
};

int main()
{
    // Напишіть програму, яка створить кілька об’єктів, що представляють усі транспортні засоби
    // та два депо (автобусне і трамвайне депо), присвойте транспортні засоби до депо,
    // а потім напишіть опис обох депо.

    Vehicle veh[] = { Bus(), Bus(), Tram(), Bus(), Tram() };
    Depot busDepot, tramDepot;

    // Для size_t i = 0; i < SIZE_VEH; i++
    // Якщо veh[i]._depot_type == busDepot._depot_type, тоді busDepot._vehicle = veh[i];
    // інакше tramDepot = veh[i];

    // Та виводимо інфу про busDepot, tramDepot;

    return 0;
}

Читайте уважніше завдання. Там все чудово описано як робити. На мою думку спадкову ієрархію з ДЕПО можна й не робити. Але це за вашим бажанням. Вашу задачу я бачу так...

Подякували: dranchuk.roma1

7

Re: Розрахунок палива для всіх транспортів

lucas-kane написав:

Читайте уважніше завдання. Там все чудово описано як робити. На мою думку спадкову ієрархію з ДЕПО можна й не робити. Але це за вашим бажанням. Вашу задачу я бачу так...

Мені вже вдалося це завдання зробити, треба було просто підставити клас як тип даних у векторі і після того все уже пішло як по маслу.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Public_Transport {
public:
    void Number(){}    
    void Speed(){}
};

class Bus : Public_Transport {
public:
    int fuel;
    int number;
    int speed;
    void Number(int number) {
        this->number = number;
        cout << "Number of transport is: " << number << "." << endl;
    }
    void Speed(int speed) {
        this->speed = speed;
        cout << "Max speed is: " << speed << " km/h " << endl;
    }
    void Fuel(int fuel) {
        this->fuel = fuel;
        cout << "Spend: " << fuel << " l. of fuel \n" << endl;
    }
    void InformationAboutBuses(int speed, int number, int fuel) {
        Number(number);
        Speed(speed);
        Fuel(fuel);
    }
};
class Tram : Public_Transport {
public:
    int tramcars;
    int number;
    int speed;
    void Number(int number) {
        this->number = number;
        cout << "Number of transport is: " << number << "." << endl;
    }
    void Speed(int speed) {
        this->speed = speed;
        cout << "Max speed is: " << speed << " km/h " << endl;
    }
    void TramCars(int tramcars) {
        this->tramcars = tramcars;
        cout << "Tram have: " << tramcars << " cars \n" << endl;
    }
    void InformationAboutTrams(int speed, int number, int tramcars) {
        Number(number);
        Speed(speed);
        TramCars(tramcars);
    }
};
class Depot {
public:
    string name_of_depot;
};
class BusDepot : Depot {
public:
    vector<Bus> buses;
    void AddTransport(Bus bus) {
        buses.push_back(bus);
    }
    int FuelCounting() {
        int fuel = 0;
        for (int i = 0; i < buses.size(); i++) {
            fuel = fuel + buses[i].fuel;
        }
        cout << "Buses spend: " << fuel << " l. fuel in month \n\n" << endl;
        return fuel;
    }
    int NumberOfBus() {
        int number = 0;
        cout << "Depot have those buses: " << endl;
        for (int i = 0; i < buses.size(); i++) {
            number = buses[i].number;
            cout << number << endl;
        }

        return number;
    }
    void InformationOfDepot(string name_of_depot) {
        cout << "\nName of depot: " << name_of_depot << "" << endl;
        NumberOfBus();
        FuelCounting();

    }
};
class TramDepot : Depot {
public:
    vector<Tram> trams;
    void AddTransport(Tram tram) {
        trams.push_back(tram);
    }
    int TramCarsCounting() {
        int tramcars = 0;
        for (int i = 0; i < trams.size(); i++) {
            tramcars = tramcars + trams[i].tramcars;
        }
        cout << "Tram Depot have: " << tramcars << " cars in all trams\n\n" << endl;
        return tramcars;
    }
    int NumberOfTram() {
        int number;
        cout << "Depot have those trams: " << endl;
        for (int i = 0; i < trams.size(); i++) {
            number = trams[i].number;
            cout << number << endl;
        }

        return number;
    }
    void InformationOfDepot(string name_of_depot) {
        cout << "\nName of depot: " << name_of_depot << "" << endl;
        NumberOfTram();
        TramCarsCounting();

    }
};
int main() {
    Bus bus1;
    Bus bus2;
    Bus bus3;
    Tram tram1;
    Tram tram2;
    Tram tram3;
    BusDepot woronicza;
    TramDepot mokotow;
    bus1.InformationAboutBuses(125, 1, 5);
    bus2.InformationAboutBuses(130, 2, 5);
    bus3.InformationAboutBuses(160, 3, 5);
    woronicza.AddTransport(bus1);
    woronicza.AddTransport(bus2);
    woronicza.AddTransport(bus3);
    woronicza.InformationOfDepot("Woronicza");
    tram1.InformationAboutTrams(210, 12, 3);
    tram2.InformationAboutTrams(127, 13, 1);
    tram3.InformationAboutTrams(255, 14, 2);
    mokotow.AddTransport(tram1);
    mokotow.AddTransport(tram2);
    mokotow.AddTransport(tram3);
    mokotow.InformationOfDepot("Mokotów");    
}

8 Востаннє редагувалося lucas-kane (25.04.2022 00:06:16)

Re: Розрахунок палива для всіх транспортів

Чудовий початок, але щоб менше писати зайвий код при успадкуванні в С++ є такий механізм пізнього зв'язування.
Потрібно розробляти бібліотеку так, щоб потім у main-функції писати більш-менш притомний код...

Post's attachments

main_old.cpp 3.12 kb, 137 downloads since 2022-04-24 

Подякували: vlad0321