Advertisement
Viktor_Profa

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

Oct 27th, 2024
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <iomanip>
  5. #include <ctime>
  6.  
  7. using namespace std;
  8.  
  9. // Абстрактний клас Продукти
  10. class Product {
  11. public:
  12.     virtual void displayInfo() const = 0; // Віртуальний метод для виведення інформації
  13.     virtual int daysSinceManufacture() const = 0; // Віртуальний метод для підрахунку днів
  14.     virtual ~Product() {} // Деструктор
  15. };
  16.  
  17. // Клас для солодощів
  18. class Sweets : public Product {
  19. private:
  20.     string name;
  21.     double weight; // Вага в грамах
  22.     string manufactureDate; // Дата виготовлення у форматі "YYYY-MM-DD"
  23.  
  24. public:
  25.     Sweets(const string& name, double weight, const string& manufactureDate)
  26.         : name(name), weight(weight), manufactureDate(manufactureDate) {}
  27.  
  28.     void displayInfo() const override {
  29.         cout << "Солодощі:\n";
  30.         cout << "Назва: " << name << "\n";
  31.         cout << "Вага: " << weight << " г\n";
  32.         cout << "Дата виготовлення: " << manufactureDate << "\n";
  33.     }
  34.  
  35.     int daysSinceManufacture() const override {
  36.         tm tmManufacture = {};
  37.         strptime(manufactureDate.c_str(), "%Y-%m-%d", &tmManufacture);
  38.         time_t tManufacture = mktime(&tmManufacture);
  39.         time_t tNow = time(nullptr);
  40.         return difftime(tNow, tManufacture) / (60 * 60 * 24);
  41.     }
  42. };
  43.  
  44. // Клас для молочних продуктів
  45. class DairyProducts : public Product {
  46. private:
  47.     string name;
  48.     string manufactureDate; // Дата виготовлення
  49.     int shelfLife; // Термін придатності в днях
  50.  
  51. public:
  52.     DairyProducts(const string& name, const string& manufactureDate, int shelfLife)
  53.         : name(name), manufactureDate(manufactureDate), shelfLife(shelfLife) {}
  54.  
  55.     void displayInfo() const override {
  56.         cout << "Молочні продукти:\n";
  57.         cout << "Назва: " << name << "\n";
  58.         cout << "Дата виготовлення: " << manufactureDate << "\n";
  59.         cout << "Термін придатності: " << shelfLife << " днів\n";
  60.     }
  61.  
  62.     int daysSinceManufacture() const override {
  63.         tm tmManufacture = {};
  64.         strptime(manufactureDate.c_str(), "%Y-%m-%d", &tmManufacture);
  65.         time_t tManufacture = mktime(&tmManufacture);
  66.         time_t tNow = time(nullptr);
  67.         return difftime(tNow, tManufacture) / (60 * 60 * 24);
  68.     }
  69. };
  70.  
  71. // Клас для м’ясних продуктів
  72. class MeatProducts : public Product {
  73. private:
  74.     string name;
  75.     string manufactureDate; // Дата виготовлення
  76.     bool gmo; // Показник ГМО (true - є, false - немає)
  77.  
  78. public:
  79.     MeatProducts(const string& name, const string& manufactureDate, bool gmo)
  80.         : name(name), manufactureDate(manufactureDate), gmo(gmo) {}
  81.  
  82.     void displayInfo() const override {
  83.         cout << "М'ясні продукти:\n";
  84.         cout << "Назва: " << name << "\n";
  85.         cout << "Дата виготовлення: " << manufactureDate << "\n";
  86.         cout << "ГМО: " << (gmo ? "Так" : "Ні") << "\n";
  87.     }
  88.  
  89.     int daysSinceManufacture() const override {
  90.         tm tmManufacture = {};
  91.         strptime(manufactureDate.c_str(), "%Y-%m-%d", &tmManufacture);
  92.         time_t tManufacture = mktime(&tmManufacture);
  93.         time_t tNow = time(nullptr);
  94.         return difftime(tNow, tManufacture) / (60 * 60 * 24);
  95.     }
  96. };
  97.  
  98. // Функція для пошуку продуктів у заданому діапазоні дат
  99. void searchByManufactureDate(const vector<Product*>& products, const string& startDate, const string& endDate) {
  100.     cout << "Продукти, виготовлені між " << startDate << " та " << endDate << ":\n";
  101.     for (const auto& product : products) {
  102.         if (product->daysSinceManufacture() >= 0) { // Тільки для продукції, яка була виготовлена раніше
  103.             tm tmManufacture = {};
  104.             string manufactureDate = product->daysSinceManufacture() > 0 ? product->daysSinceManufacture() : "";
  105.             strptime(manufactureDate.c_str(), "%Y-%m-%d", &tmManufacture);
  106.             time_t tManufacture = mktime(&tmManufacture);
  107.             tm tmStart = {};
  108.             tm tmEnd = {};
  109.             strptime(startDate.c_str(), "%Y-%m-%d", &tmStart);
  110.             strptime(endDate.c_str(), "%Y-%m-%d", &tmEnd);
  111.             time_t tStart = mktime(&tmStart);
  112.             time_t tEnd = mktime(&tmEnd);
  113.  
  114.             if (tManufacture >= tStart && tManufacture <= tEnd) {
  115.                 product->displayInfo();
  116.                 cout << "Кількість днів з дати виготовлення: " << product->daysSinceManufacture() << " днів\n\n";
  117.             }
  118.         }
  119.     }
  120. }
  121.  
  122. int main() {
  123.     vector<Product*> products; // Масив продуктів
  124.  
  125.     // Додаємо продукти в базу
  126.     products.push_back(new Sweets("Торт", 500, "2023-10-01"));
  127.     products.push_back(new DairyProducts("Молоко", "2023-09-15", 10));
  128.     products.push_back(new MeatProducts("Філе курки", "2023-10-20", true));
  129.     products.push_back(new Sweets("Карамель", 200, "2023-07-15"));
  130.     products.push_back(new DairyProducts("Сир", "2023-08-25", 20));
  131.     products.push_back(new MeatProducts("Сосиски", "2023-10-10", false));
  132.  
  133.     // Виведення повної інформації про продукти
  134.     cout << "Повна інформація про продукти:\n\n";
  135.     for (const auto& product : products) {
  136.         product->displayInfo();
  137.         cout << "Кількість днів з дати виготовлення: " << product->daysSinceManufacture() << " днів\n\n";
  138.     }
  139.  
  140.     // Пошук продуктів за датою виготовлення
  141.     string startDate, endDate;
  142.     cout << "Введіть діапазон дат (формат YYYY-MM-DD):\n";
  143.     cout << "Початкова дата: ";
  144.     cin >> startDate;
  145.     cout << "Кінцева дата: ";
  146.     cin >> endDate;
  147.  
  148.     searchByManufactureDate(products, startDate, endDate);
  149.  
  150.     // Звільнення пам'яті
  151.     for (auto product : products) {
  152.         delete product;
  153.     }
  154.  
  155.     return 0;
  156. }
  157.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement