Zad 2

 avatar
unknown
c_cpp
a month ago
7.2 kB
0
Indexable
#include <iostream>
#include <string>
#include <vector>
#include <fstream>

using namespace std;

// Клас Vehicle
class Vehicle {
private:
    int MaxSpeed;
    double Acceleration;

public:
    Vehicle() : MaxSpeed(0), Acceleration(0.0) {}

    Vehicle(int ms, double accel) : MaxSpeed(ms), Acceleration(accel) {}

    void setMaxSpeed(int ms) { MaxSpeed = ms; }
    int getMaxSpeed() const { return MaxSpeed; }

    void setAcceleration(double accel) { Acceleration = accel; }
    double getAcceleration() const { return Acceleration; }
};

// Клас Car, наследява от Vehicle
class Car : public Vehicle {
private:
    int Doors;
    int WheelSize;
    int EnginePower;

public:
    Car() : Doors(0), WheelSize(0), EnginePower(0) {}

    Car(int doors, int ws, int ep) : Doors(doors), WheelSize(ws), EnginePower(ep) {}

    Car(int doors, int ws, int ep, int ms, double accel) : Vehicle(ms, accel), Doors(doors), WheelSize(ws), EnginePower(ep) {}

    void setDoors(int doors) { Doors = doors; }
    int getDoors() const { return Doors; }

    void setWheelSize(int ws) { WheelSize = ws; }
    int getWheelSize() const { return WheelSize; }

    void setEnginePower(int ep) { EnginePower = ep; }
    int getEnginePower() const { return EnginePower; }
};

// Клас BodyWork
class BodyWork {
private:
    string Colour;
    bool WindowsTint;
    bool Metallic;
    int PaintPerls;

public:
    BodyWork() : Colour("Unknown"), WindowsTint(false), Metallic(false), PaintPerls(0) {}

    BodyWork(string c, bool wt, bool m, int pp) : Colour(c), WindowsTint(wt), Metallic(m), PaintPerls(pp) {}

    void setColour(string c) { Colour = c; }
    string getColour() const { return Colour; }

    void setWindowsTint(bool wt) { WindowsTint = wt; }
    bool getWindowsTint() const { return WindowsTint; }

    void setMetallic(bool m) { Metallic = m; }
    bool getMetallic() const { return Metallic; }

    void setPaintPerls(int pp) { PaintPerls = pp; }
    int getPaintPerls() const { return PaintPerls; }
};

// Клас CarBrand, наследява от Car и BodyWork
class CarBrand : public Car, public BodyWork {
private:
    string Brand;
    string Model;
    double price;

public:
    CarBrand() : Car(), BodyWork(), Brand("Unknown"), Model("Unknown"), price(0.0) {}

    CarBrand(string b, string m, double p) : Brand(b), Model(m), price(p) {}

    CarBrand(string b, string m, double p, int doors, int ws, int ep, int ms, double accel, string c, bool wt, bool mtl, int pp)
        : Car(doors, ws, ep, ms, accel), BodyWork(c, wt, mtl, pp), Brand(b), Model(m), price(p) {}

    void setBrand(string b) { Brand = b; }
    string getBrand() const { return Brand; }

    void setModel(string m) { Model = m; }
    string getModel() const { return Model; }

    void setPrice(double p) { price = p; }
    double getPrice() const { return price; }
};

// Функция за показване на менюто
void displayMenu() {
    cout << "\nМеню:\n";
    cout << "1. Добавяне на записи от тип CarBrand.\n";
    cout << "2. Съхрани във файл.\n";
    cout << "3. Прочети от файл.\n";
    cout << "4. Търси по марка на кола.\n";
    cout << "5. Изход.\n";
}

// Функция за добавяне на нов запис от тип CarBrand
void addCarBrand(vector<CarBrand>& carBrands) {
    string brand, model, colour;
    double price;
    int doors, ws, ep, ms, pp;
    bool wt, metallic;
    double accel;

    cout << "Въведете марка на кола: ";
    cin >> brand;
    cout << "Въведете модел на кола: ";
    cin >> model;
    cout << "Въведете цена: ";
    cin >> price;
    cout << "Въведете брой врати: ";
    cin >> doors;
    cout << "Въведете размер на джанти в инчове: ";
    cin >> ws;
    cout << "Въведете мощност на двигателя: ";
    cin >> ep;
    cout << "Въведете максимална скорост: ";
    cin >> ms;
    cout << "Въведете ускорение: ";
    cin >> accel;
    cout << "Въведете цвят на колата: ";
    cin >> colour;
    cout << "Затъмняване на прозорците (1 за да, 0 за не): ";
    cin >> wt;
    cout << "Металик (1 за да, 0 за не): ";
    cin >> metallic;
    cout << "Брой перли в боята: ";
    cin >> pp;

    carBrands.push_back(CarBrand(brand, model, price, doors, ws, ep, ms, accel, colour, wt, metallic, pp));
}

// Функция за запис в файл
void saveToFile(const vector<CarBrand>& carBrands) {
    ofstream outFile("cars.txt");

    for (const auto& car : carBrands) {
        outFile << car.getBrand() << " " << car.getModel() << " " << car.getPrice() << "\n";
        outFile << car.getDoors() << " " << car.getWheelSize() << " " << car.getEnginePower() << " "
                << car.getMaxSpeed() << " " << car.getAcceleration() << "\n";
        outFile << car.getColour() << " " << car.getWindowsTint() << " " << car.getMetallic() << " "
                << car.getPaintPerls() << "\n";
    }

    outFile.close();
}

// Функция за четене от файл
void loadFromFile(vector<CarBrand>& carBrands) {
    ifstream inFile("cars.txt");
    string brand, model, colour;
    double price;
    int doors, ws, ep, ms, pp;
    bool wt, metallic;
    double accel;

    while (inFile >> brand >> model >> price) {
        inFile >> doors >> ws >> ep >> ms >> accel;
        inFile >> colour >> wt >> metallic >> pp;
        carBrands.push_back(CarBrand(brand, model, price, doors, ws, ep, ms, accel, colour, wt, metallic, pp));
    }

    inFile.close();
}

// Функция за търсене на кола по марка
void searchByBrand(const vector<CarBrand>& carBrands) {
    string searchBrand;
    cout << "Въведете марка за търсене: ";
    cin >> searchBrand;

    bool found = false;
    for (const auto& car : carBrands) {
        if (car.getBrand() == searchBrand) {
            cout << "Намерена кола: " << car.getBrand() << " " << car.getModel() << " Цена: " << car.getPrice() << "\n";
            found = true;
        }
    }

    if (!found) {
        cout << "Няма намерени коли с тази марка.\n";
    }
}

// Основна функция
int main() {
    vector<CarBrand> carBrands;
    int choice;

    while (true) {
        displayMenu();
        cout << "Изберете опция: ";
        cin >> choice;

        switch (choice) {
            case 1:
                addCarBrand(carBrands);
                break;
            case 2:
                saveToFile(carBrands);
                break;
            case 3:
                loadFromFile(carBrands);
                break;
            case 4:
                searchByBrand(carBrands);
                break;
            case 5:
                return 0;
            default:
                cout << "Невалиден избор! Моля, опитайте отново.\n";
        }
    }

    return 0;
}
Leave a Comment