Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <chrono>
- #include <iostream>
- #include <sstream>
- #include <string>
- #include <vector>
- using namespace std;
- using namespace std::chrono;
- struct Date {
- int dd;
- int mm;
- int yyyy;
- Date() : dd(1), mm(1), yyyy(1992) {
- set_current();
- }
- int difference() const {
- const auto today = sys_days{ floor<days>(system_clock::now()) };
- const auto target = sys_days{ year_month_day{year(yyyy), month(mm), day(dd)} };
- return (today - target).count();
- }
- private:
- void set_current() {
- auto now = system_clock::now();
- auto date = floor<days>(current_zone()->to_local(now));
- dd = static_cast<unsigned>(year_month_day{ date }.day());
- mm = static_cast<unsigned>(year_month_day{ date }.month());
- yyyy = static_cast<int>(year_month_day{ date }.year());
- }
- friend istream& operator>>(istream& inp, Date& date) {
- cout << "Введите дату через пробел в формате ДД ММ ГГГГ: ";
- inp >> date.dd >> date.mm >> date.yyyy;
- inp.ignore(0x1000, '\n');
- return inp;
- }
- friend ostream& operator<<(ostream& out, const Date& date) {
- string date_string;
- if (date.dd < 10) date_string = "0";
- date_string += to_string(date.dd) + ".";
- if (date.mm < 10) date_string += "0";
- date_string += to_string(date.mm) + "." + to_string(date.yyyy);
- return out << date_string;
- }
- };
- struct Goods {
- string name;
- unsigned quantity;
- float price;
- Date date;
- Goods() : name("-"), quantity(0), price(0.0F) {}
- private:
- friend istream& operator>>(istream& inp, Goods& goods) {
- cout << "Введите наименование товара: ";
- getline(inp, goods.name);
- cout << "Введите количество товара: ";
- inp >> goods.quantity;
- inp.ignore(0x1000, '\n');
- cout << "Введите цену товара: ";
- inp >> goods.price;
- inp.ignore(0x1000, '\n');
- return inp >> goods.date;
- }
- friend ostream& operator<<(ostream& out, const Goods& goods) {
- out << goods.name << ' ' << goods.quantity << ' '
- << goods.price << ' ' << goods.date;
- return out;
- }
- friend bool operator<(const Goods& a, const Goods& b) {
- return a.name < b.name;
- }
- };
- class Warehouse {
- public:
- void add(const Goods& goods) {
- this->goods.push_back(goods);
- }
- vector<Goods> select(const float price) const {
- vector<Goods> selection;
- Date current;
- for (const auto& record : goods) {
- if (record.date.difference() > limit && record.price > price) {
- selection.push_back(record);
- }
- }
- sort(begin(selection), end(selection));
- return selection;
- }
- private:
- static constexpr auto limit = 30;
- vector<Goods> goods;
- };
- static Warehouse create() {
- Warehouse warehouse;
- cout << "Введите размер списка: ";
- size_t limit;
- cin >> limit;
- cin.ignore(0x1000, '\n');
- Goods goods;
- for (size_t i = 0; i < limit; ++i) {
- cin >> goods;
- warehouse.add(goods);
- }
- return warehouse;
- }
- static void show(const vector<Goods>& goods) {
- puts("Вывод результатов:");
- size_t n = 0;
- for (const auto& record : goods) {
- cout << ++n << ". " << record << '\n';
- }
- }
- int main() {
- cout.setf(ios::fixed);
- cout.precision(2);
- system("chcp 1251 > nul");
- auto warehouse = create();
- auto result = warehouse.select(100000);
- show(result);
- system("pause > nul");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement