Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <fstream>
- #include <string>
- #include <iomanip>
- using namespace std;
- // Клас Ingredient (Інгредієнт)
- class Ingredient {
- private:
- string name; // Назва продукту
- float quantity; // Дозування
- float price; // Ціна одиниці продукції
- public:
- // Конструктор
- Ingredient(const string& name, float quantity, float price)
- : name(name), quantity(quantity), price(price) {}
- // Метод для розрахунку вартості інгредієнта
- float getCost() const {
- return quantity * price;
- }
- // Метод для виведення інформації про інгредієнт
- void display() const {
- cout << "Назва: " << name << ", Дозування: " << quantity
- << ", Ціна за одиницю: " << price << " грн." << endl;
- }
- // Метод для запису в файл
- void writeToFile(ofstream& outFile) const {
- outFile << name << " " << quantity << " " << price << endl;
- }
- // Метод для зчитування з файлу
- static Ingredient readFromFile(ifstream& inFile) {
- string name;
- float quantity, price;
- inFile >> name >> quantity >> price;
- return Ingredient(name, quantity, price);
- }
- };
- // Клас Recipe (Рецепт)
- class Recipe {
- private:
- string recipeName; // Назва рецепта
- vector<Ingredient> ingredients; // Вектор інгредієнтів
- public:
- // Конструктор
- Recipe(const string& recipeName) : recipeName(recipeName) {}
- // Метод для додавання інгредієнта до рецепту
- void addIngredient(const Ingredient& ingredient) {
- ingredients.push_back(ingredient);
- }
- // Метод для розрахунку загальної вартості виготовлення виробу
- float calculateCost() const {
- float totalCost = 0.0;
- for (const auto& ingredient : ingredients) {
- totalCost += ingredient.getCost();
- }
- return totalCost;
- }
- // Метод для виведення інформації про рецепт
- void displayRecipe() const {
- cout << "Рецепт: " << recipeName << endl;
- cout << "Інгредієнти:" << endl;
- for (const auto& ingredient : ingredients) {
- ingredient.display();
- }
- cout << "Загальна вартість виготовлення: " << fixed << setprecision(2)
- << calculateCost() << " грн." << endl;
- }
- // Метод для запису рецепта в файл
- void writeToFile(ofstream& outFile) const {
- outFile << recipeName << endl;
- outFile << ingredients.size() << endl; // Кількість інгредієнтів
- for (const auto& ingredient : ingredients) {
- ingredient.writeToFile(outFile);
- }
- }
- // Метод для зчитування рецепту з файлу
- static Recipe readFromFile(ifstream& inFile) {
- string recipeName;
- getline(inFile, recipeName);
- Recipe recipe(recipeName);
- size_t ingredientCount;
- inFile >> ingredientCount;
- inFile.ignore(); // Ігноруємо символ нового рядка після числа
- for (size_t i = 0; i < ingredientCount; ++i) {
- recipe.addIngredient(Ingredient::readFromFile(inFile));
- }
- return recipe;
- }
- // Метод для пошуку рецепта за назвою
- static void searchRecipe(const string& filename, const string& searchName) {
- ifstream inFile(filename);
- if (!inFile) {
- cout << "Не вдалося відкрити файл!" << endl;
- return;
- }
- string line;
- bool found = false;
- while (getline(inFile, line)) {
- if (line == searchName) {
- found = true;
- cout << "Рецепт знайдено: " << endl;
- Recipe recipe = readFromFile(inFile);
- recipe.displayRecipe();
- break;
- }
- size_t ingredientCount;
- inFile >> ingredientCount;
- inFile.ignore(); // Ігноруємо символ нового рядка після числа
- inFile.ignore(numeric_limits<streamsize>::max(), '\n'); // Ігноруємо інгредієнти
- for (size_t i = 0; i < ingredientCount; ++i) {
- inFile.ignore(numeric_limits<streamsize>::max(), '\n'); // Ігноруємо кожен інгредієнт
- }
- }
- if (!found) {
- cout << "Рецепт не знайдено." << endl;
- }
- inFile.close();
- }
- };
- // Основна програма
- int main() {
- Recipe recipe("Піца");
- // Додавання інгредієнтів до рецепту
- recipe.addIngredient(Ingredient("Тісто", 0.5, 20.0)); // 0.5 кг, 20 грн/кг
- recipe.addIngredient(Ingredient("Томатний соус", 0.2, 15.0)); // 0.2 кг, 15 грн/кг
- recipe.addIngredient(Ingredient("Сир", 0.3, 50.0)); // 0.3 кг, 50 грн/кг
- // Виведення інформації про рецепт
- recipe.displayRecipe();
- // Запис рецепту у файл
- ofstream outFile("recipes.txt");
- recipe.writeToFile(outFile);
- outFile.close();
- // Пошук рецепту у файлі
- string searchName;
- cout << "Введіть назву рецепту для пошуку: ";
- getline(cin, searchName);
- Recipe::searchRecipe("recipes.txt", searchName);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement