Advertisement
Viktor_Profa

Лабораторна робота №14

Oct 27th, 2024
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4. #include <string>
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8.  
  9. // Клас Ingredient (Інгредієнт)
  10. class Ingredient {
  11. private:
  12.     string name;     // Назва продукту
  13.     float quantity;  // Дозування
  14.     float price;     // Ціна одиниці продукції
  15.  
  16. public:
  17.     // Конструктор
  18.     Ingredient(const string& name, float quantity, float price)
  19.         : name(name), quantity(quantity), price(price) {}
  20.  
  21.     // Метод для розрахунку вартості інгредієнта
  22.     float getCost() const {
  23.         return quantity * price;
  24.     }
  25.  
  26.     // Метод для виведення інформації про інгредієнт
  27.     void display() const {
  28.         cout << "Назва: " << name << ", Дозування: " << quantity
  29.              << ", Ціна за одиницю: " << price << " грн." << endl;
  30.     }
  31.  
  32.     // Метод для запису в файл
  33.     void writeToFile(ofstream& outFile) const {
  34.         outFile << name << " " << quantity << " " << price << endl;
  35.     }
  36.  
  37.     // Метод для зчитування з файлу
  38.     static Ingredient readFromFile(ifstream& inFile) {
  39.         string name;
  40.         float quantity, price;
  41.         inFile >> name >> quantity >> price;
  42.         return Ingredient(name, quantity, price);
  43.     }
  44. };
  45.  
  46. // Клас Recipe (Рецепт)
  47. class Recipe {
  48. private:
  49.     string recipeName;                     // Назва рецепта
  50.     vector<Ingredient> ingredients;        // Вектор інгредієнтів
  51.  
  52. public:
  53.     // Конструктор
  54.     Recipe(const string& recipeName) : recipeName(recipeName) {}
  55.  
  56.     // Метод для додавання інгредієнта до рецепту
  57.     void addIngredient(const Ingredient& ingredient) {
  58.         ingredients.push_back(ingredient);
  59.     }
  60.  
  61.     // Метод для розрахунку загальної вартості виготовлення виробу
  62.     float calculateCost() const {
  63.         float totalCost = 0.0;
  64.         for (const auto& ingredient : ingredients) {
  65.             totalCost += ingredient.getCost();
  66.         }
  67.         return totalCost;
  68.     }
  69.  
  70.     // Метод для виведення інформації про рецепт
  71.     void displayRecipe() const {
  72.         cout << "Рецепт: " << recipeName << endl;
  73.         cout << "Інгредієнти:" << endl;
  74.         for (const auto& ingredient : ingredients) {
  75.             ingredient.display();
  76.         }
  77.         cout << "Загальна вартість виготовлення: " << fixed << setprecision(2)
  78.              << calculateCost() << " грн." << endl;
  79.     }
  80.  
  81.     // Метод для запису рецепта в файл
  82.     void writeToFile(ofstream& outFile) const {
  83.         outFile << recipeName << endl;
  84.         outFile << ingredients.size() << endl; // Кількість інгредієнтів
  85.         for (const auto& ingredient : ingredients) {
  86.             ingredient.writeToFile(outFile);
  87.         }
  88.     }
  89.  
  90.     // Метод для зчитування рецепту з файлу
  91.     static Recipe readFromFile(ifstream& inFile) {
  92.         string recipeName;
  93.         getline(inFile, recipeName);
  94.         Recipe recipe(recipeName);
  95.  
  96.         size_t ingredientCount;
  97.         inFile >> ingredientCount;
  98.         inFile.ignore(); // Ігноруємо символ нового рядка після числа
  99.  
  100.         for (size_t i = 0; i < ingredientCount; ++i) {
  101.             recipe.addIngredient(Ingredient::readFromFile(inFile));
  102.         }
  103.  
  104.         return recipe;
  105.     }
  106.  
  107.     // Метод для пошуку рецепта за назвою
  108.     static void searchRecipe(const string& filename, const string& searchName) {
  109.         ifstream inFile(filename);
  110.         if (!inFile) {
  111.             cout << "Не вдалося відкрити файл!" << endl;
  112.             return;
  113.         }
  114.  
  115.         string line;
  116.         bool found = false;
  117.  
  118.         while (getline(inFile, line)) {
  119.             if (line == searchName) {
  120.                 found = true;
  121.                 cout << "Рецепт знайдено: " << endl;
  122.                 Recipe recipe = readFromFile(inFile);
  123.                 recipe.displayRecipe();
  124.                 break;
  125.             }
  126.             size_t ingredientCount;
  127.             inFile >> ingredientCount;
  128.             inFile.ignore(); // Ігноруємо символ нового рядка після числа
  129.             inFile.ignore(numeric_limits<streamsize>::max(), '\n'); // Ігноруємо інгредієнти
  130.             for (size_t i = 0; i < ingredientCount; ++i) {
  131.                 inFile.ignore(numeric_limits<streamsize>::max(), '\n'); // Ігноруємо кожен інгредієнт
  132.             }
  133.         }
  134.  
  135.         if (!found) {
  136.             cout << "Рецепт не знайдено." << endl;
  137.         }
  138.  
  139.         inFile.close();
  140.     }
  141. };
  142.  
  143. // Основна програма
  144. int main() {
  145.     Recipe recipe("Піца");
  146.  
  147.     // Додавання інгредієнтів до рецепту
  148.     recipe.addIngredient(Ingredient("Тісто", 0.5, 20.0)); // 0.5 кг, 20 грн/кг
  149.     recipe.addIngredient(Ingredient("Томатний соус", 0.2, 15.0)); // 0.2 кг, 15 грн/кг
  150.     recipe.addIngredient(Ingredient("Сир", 0.3, 50.0)); // 0.3 кг, 50 грн/кг
  151.  
  152.     // Виведення інформації про рецепт
  153.     recipe.displayRecipe();
  154.  
  155.     // Запис рецепту у файл
  156.     ofstream outFile("recipes.txt");
  157.     recipe.writeToFile(outFile);
  158.     outFile.close();
  159.  
  160.     // Пошук рецепту у файлі
  161.     string searchName;
  162.     cout << "Введіть назву рецепту для пошуку: ";
  163.     getline(cin, searchName);
  164.     Recipe::searchRecipe("recipes.txt", searchName);
  165.  
  166.     return 0;
  167. }
  168.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement