Zad 2
unknown
c_cpp
a year ago
7.2 kB
5
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;
}
Editor is loading...
Leave a Comment