Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <iomanip>
- #include <ctime>
- using namespace std;
- // Абстрактний клас Продукти
- class Product {
- public:
- virtual void displayInfo() const = 0; // Віртуальний метод для виведення інформації
- virtual int daysSinceManufacture() const = 0; // Віртуальний метод для підрахунку днів
- virtual ~Product() {} // Деструктор
- };
- // Клас для солодощів
- class Sweets : public Product {
- private:
- string name;
- double weight; // Вага в грамах
- string manufactureDate; // Дата виготовлення у форматі "YYYY-MM-DD"
- public:
- Sweets(const string& name, double weight, const string& manufactureDate)
- : name(name), weight(weight), manufactureDate(manufactureDate) {}
- void displayInfo() const override {
- cout << "Солодощі:\n";
- cout << "Назва: " << name << "\n";
- cout << "Вага: " << weight << " г\n";
- cout << "Дата виготовлення: " << manufactureDate << "\n";
- }
- int daysSinceManufacture() const override {
- tm tmManufacture = {};
- strptime(manufactureDate.c_str(), "%Y-%m-%d", &tmManufacture);
- time_t tManufacture = mktime(&tmManufacture);
- time_t tNow = time(nullptr);
- return difftime(tNow, tManufacture) / (60 * 60 * 24);
- }
- };
- // Клас для молочних продуктів
- class DairyProducts : public Product {
- private:
- string name;
- string manufactureDate; // Дата виготовлення
- int shelfLife; // Термін придатності в днях
- public:
- DairyProducts(const string& name, const string& manufactureDate, int shelfLife)
- : name(name), manufactureDate(manufactureDate), shelfLife(shelfLife) {}
- void displayInfo() const override {
- cout << "Молочні продукти:\n";
- cout << "Назва: " << name << "\n";
- cout << "Дата виготовлення: " << manufactureDate << "\n";
- cout << "Термін придатності: " << shelfLife << " днів\n";
- }
- int daysSinceManufacture() const override {
- tm tmManufacture = {};
- strptime(manufactureDate.c_str(), "%Y-%m-%d", &tmManufacture);
- time_t tManufacture = mktime(&tmManufacture);
- time_t tNow = time(nullptr);
- return difftime(tNow, tManufacture) / (60 * 60 * 24);
- }
- };
- // Клас для м’ясних продуктів
- class MeatProducts : public Product {
- private:
- string name;
- string manufactureDate; // Дата виготовлення
- bool gmo; // Показник ГМО (true - є, false - немає)
- public:
- MeatProducts(const string& name, const string& manufactureDate, bool gmo)
- : name(name), manufactureDate(manufactureDate), gmo(gmo) {}
- void displayInfo() const override {
- cout << "М'ясні продукти:\n";
- cout << "Назва: " << name << "\n";
- cout << "Дата виготовлення: " << manufactureDate << "\n";
- cout << "ГМО: " << (gmo ? "Так" : "Ні") << "\n";
- }
- int daysSinceManufacture() const override {
- tm tmManufacture = {};
- strptime(manufactureDate.c_str(), "%Y-%m-%d", &tmManufacture);
- time_t tManufacture = mktime(&tmManufacture);
- time_t tNow = time(nullptr);
- return difftime(tNow, tManufacture) / (60 * 60 * 24);
- }
- };
- // Функція для пошуку продуктів у заданому діапазоні дат
- void searchByManufactureDate(const vector<Product*>& products, const string& startDate, const string& endDate) {
- cout << "Продукти, виготовлені між " << startDate << " та " << endDate << ":\n";
- for (const auto& product : products) {
- if (product->daysSinceManufacture() >= 0) { // Тільки для продукції, яка була виготовлена раніше
- tm tmManufacture = {};
- string manufactureDate = product->daysSinceManufacture() > 0 ? product->daysSinceManufacture() : "";
- strptime(manufactureDate.c_str(), "%Y-%m-%d", &tmManufacture);
- time_t tManufacture = mktime(&tmManufacture);
- tm tmStart = {};
- tm tmEnd = {};
- strptime(startDate.c_str(), "%Y-%m-%d", &tmStart);
- strptime(endDate.c_str(), "%Y-%m-%d", &tmEnd);
- time_t tStart = mktime(&tmStart);
- time_t tEnd = mktime(&tmEnd);
- if (tManufacture >= tStart && tManufacture <= tEnd) {
- product->displayInfo();
- cout << "Кількість днів з дати виготовлення: " << product->daysSinceManufacture() << " днів\n\n";
- }
- }
- }
- }
- int main() {
- vector<Product*> products; // Масив продуктів
- // Додаємо продукти в базу
- products.push_back(new Sweets("Торт", 500, "2023-10-01"));
- products.push_back(new DairyProducts("Молоко", "2023-09-15", 10));
- products.push_back(new MeatProducts("Філе курки", "2023-10-20", true));
- products.push_back(new Sweets("Карамель", 200, "2023-07-15"));
- products.push_back(new DairyProducts("Сир", "2023-08-25", 20));
- products.push_back(new MeatProducts("Сосиски", "2023-10-10", false));
- // Виведення повної інформації про продукти
- cout << "Повна інформація про продукти:\n\n";
- for (const auto& product : products) {
- product->displayInfo();
- cout << "Кількість днів з дати виготовлення: " << product->daysSinceManufacture() << " днів\n\n";
- }
- // Пошук продуктів за датою виготовлення
- string startDate, endDate;
- cout << "Введіть діапазон дат (формат YYYY-MM-DD):\n";
- cout << "Початкова дата: ";
- cin >> startDate;
- cout << "Кінцева дата: ";
- cin >> endDate;
- searchByManufactureDate(products, startDate, endDate);
- // Звільнення пам'яті
- for (auto product : products) {
- delete product;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement