Advertisement
NickAndNick

https://otvet.mail.ru/question/237547482

Mar 21st, 2024
809
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.74 KB | Software | 0 0
  1. #include <algorithm>
  2. #include <chrono>
  3. #include <iostream>
  4. #include <sstream>
  5. #include <string>
  6. #include <vector>
  7.  
  8. using namespace std;
  9. using namespace std::chrono;
  10.  
  11. struct Date {
  12.     int dd;
  13.     int mm;
  14.     int yyyy;
  15.     Date() : dd(1), mm(1), yyyy(1992) {
  16.         set_current();
  17.     }
  18.     int difference() const {
  19.         const auto today = sys_days{ floor<days>(system_clock::now()) };
  20.         const auto target = sys_days{ year_month_day{year(yyyy), month(mm), day(dd)} };
  21.         return (today - target).count();
  22.     }
  23. private:
  24.     void set_current() {
  25.         auto now = system_clock::now();
  26.         auto date = floor<days>(current_zone()->to_local(now));
  27.         dd = static_cast<unsigned>(year_month_day{ date }.day());
  28.         mm = static_cast<unsigned>(year_month_day{ date }.month());
  29.         yyyy = static_cast<int>(year_month_day{ date }.year());
  30.     }
  31.     friend istream& operator>>(istream& inp, Date& date) {
  32.         cout << "Введите дату через пробел в формате ДД ММ ГГГГ: ";
  33.         inp >> date.dd >> date.mm >> date.yyyy;
  34.         inp.ignore(0x1000, '\n');
  35.         return inp;
  36.     }
  37.     friend ostream& operator<<(ostream& out, const Date& date) {
  38.         string date_string;
  39.         if (date.dd < 10) date_string = "0";
  40.         date_string += to_string(date.dd) + ".";
  41.         if (date.mm < 10) date_string += "0";
  42.         date_string += to_string(date.mm) + "." + to_string(date.yyyy);
  43.         return out << date_string;
  44.     }
  45. };
  46.  
  47. struct Goods {
  48.     string name;
  49.     unsigned quantity;
  50.     float price;
  51.     Date date;
  52.     Goods() : name("-"), quantity(0), price(0.0F) {}
  53. private:
  54.     friend istream& operator>>(istream& inp, Goods& goods) {
  55.         cout << "Введите наименование товара: ";
  56.         getline(inp, goods.name);
  57.         cout << "Введите количество товара: ";
  58.         inp >> goods.quantity;
  59.         inp.ignore(0x1000, '\n');
  60.         cout << "Введите цену товара: ";
  61.         inp >> goods.price;
  62.         inp.ignore(0x1000, '\n');
  63.         return inp >> goods.date;
  64.     }
  65.     friend ostream& operator<<(ostream& out, const Goods& goods) {
  66.         out << goods.name << ' ' << goods.quantity << ' '
  67.             << goods.price << ' ' << goods.date;
  68.         return out;
  69.     }
  70.     friend bool operator<(const Goods& a, const Goods& b) {
  71.         return a.name < b.name;
  72.     }
  73. };
  74.  
  75. class Warehouse {
  76. public:
  77.     void add(const Goods& goods) {
  78.         this->goods.push_back(goods);
  79.     }
  80.     vector<Goods> select(const float price) const {
  81.         vector<Goods> selection;
  82.         Date current;
  83.         for (const auto& record : goods) {
  84.             if (record.date.difference() > limit && record.price > price) {
  85.                 selection.push_back(record);
  86.             }
  87.         }
  88.         sort(begin(selection), end(selection));
  89.         return selection;
  90.     }
  91. private:
  92.     static constexpr auto limit = 30;
  93.     vector<Goods> goods;
  94. };
  95.  
  96. static Warehouse create() {
  97.     Warehouse warehouse;
  98.     cout << "Введите размер списка: ";
  99.     size_t limit;
  100.     cin >> limit;
  101.     cin.ignore(0x1000, '\n');
  102.     Goods goods;
  103.     for (size_t i = 0; i < limit; ++i) {
  104.         cin >> goods;
  105.         warehouse.add(goods);
  106.     }
  107.     return warehouse;
  108. }
  109.  
  110. static void show(const vector<Goods>& goods) {
  111.     puts("Вывод результатов:");
  112.     size_t n = 0;
  113.     for (const auto& record : goods) {
  114.         cout << ++n << ". " << record << '\n';
  115.     }
  116. }
  117.  
  118. int main() {
  119.     cout.setf(ios::fixed);
  120.     cout.precision(2);
  121.     system("chcp 1251 > nul");
  122.     auto warehouse = create();
  123.     auto result = warehouse.select(100000);
  124.     show(result);
  125.     system("pause > nul");
  126. }
  127.  
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement