Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <iomanip>
- #include <ctime>
- using namespace std;
- struct date {
- int day;
- int month;
- int year;
- };
- struct goods {
- wstring name;
- unsigned quantity;
- float price;
- date dt;
- };
- typedef goods * PGOODS;
- void ru();
- PGOODS create_list(PGOODS, const size_t);
- void show_list(PGOODS, const size_t);
- void print_record(PGOODS);
- void select_list(PGOODS, const size_t, const int _month = 1, const float _price = 100000.0f);
- void sort_list(PGOODS, const size_t, const size_t);
- void uswap(goods &, goods &);
- int main() {
- ru();
- wcout << L" Введите размер списка: ";
- size_t size;
- cin >> size;
- PGOODS ptr = NULL;
- if ((ptr = create_list(ptr, size)) != NULL) {
- system("cls");
- show_list(ptr, size);
- select_list(ptr, size);
- delete[] ptr;
- ptr = NULL;
- }
- cin.get(); cin.get();
- return 0;
- }
- PGOODS create_list(PGOODS _goods, const size_t _size) {
- _goods = new goods [_size];
- if (_goods) {
- for (size_t n = 0; n < _size; n++) {
- fflush(stdin);
- wcout << L"\n Введите наименование товара: ";
- getline(wcin, _goods[n].name);
- wcout << L" Введите количество товара: ";
- cin >> _goods[n].quantity;
- wcout << L" Введите цену товара: ";
- cin >> _goods[n].price;
- wcout << L" Введите число поступления товара: ";
- cin >> _goods[n].dt.day;
- wcout << L" Введите месяц поступления товара: ";
- cin >> _goods[n].dt.month;
- wcout << L" Введите год поступления товара: ";
- cin >> _goods[n].dt.year;
- }
- } else wcout << L" Не удалось создать список!\n";
- return _goods;
- }
- void show_list(PGOODS _goods, const size_t _size) {
- if (_goods) {
- PGOODS next = _goods;
- for (size_t n = 0; n < _size; n++) print_record(next++);
- } else wcout << L" Список не существует!\n";
- cout << endl;
- }
- void print_record(PGOODS _goods) {
- streamsize sign = 2, name = 36, quantity = 12, price = 14, date = 4;
- wcout << setw(name) << left << _goods->name;
- cout << setw(quantity) << right << _goods->quantity
- << setw(price) << fixed << setprecision(sign) << _goods->price;
- cout << setw(date);
- if (_goods->dt.day < 10) cout << '0';
- cout << _goods->dt.day << '.';
- if (_goods->dt.month < 10) cout << '0';
- cout << _goods->dt.month << '.'
- << _goods->dt.year << endl;
- }
- void sort_list(PGOODS _goods, const size_t _beg, const size_t _end) {
- int n = (int)_beg, m = (int)_end;
- goods mid;
- mid.name = _goods[(_beg + _end) >> 1].name;
- do {
- while (_goods[n].name < mid.name && n < (int)_end) ++n;
- while (_goods[m].name > mid.name && m > (int)_beg) --m;
- if (n <= m) {
- if (n < m) uswap(_goods[n], _goods[m]);
- ++n;
- --m;
- }
- } while (n <= m);
- if ((int)_beg < m) sort_list(_goods, _beg, m);
- if (n < (int)_end) sort_list(_goods, n, _end);
- }
- void uswap(goods & _a, goods & _b) {
- goods temp = _a;
- _a = _b;
- _b = temp;
- }
- void select_list(PGOODS _goods, const size_t _size, const int _month, const float _price) {
- wcout << L"\n\t\t\t\tОтсортированный запрос:\n\n";
- bool empty = true;
- if (_goods && _size) {
- const time_t term = _month * 31 * 24 * 60 * 60;
- if (_size > 1) sort_list(_goods, 0, _size - 1);
- time_t t;
- tm * ctm;
- for (size_t n = 0; n < _size; n++) {
- tm current = { 0, 0, 0, _goods[n].dt.day, _goods[n].dt.month - 1, _goods[n].dt.year - 1900 };
- time_t beg = mktime(¤t);
- time(&t);
- ctm = localtime(&t);
- time_t end = mktime(ctm);
- if (end - beg > term && _price < _goods[n].price) {
- print_record(&_goods[n]);
- if (empty) empty = false;
- }
- }
- }
- if (empty) wcout << L"\n\tДанные отсутствуют!\n";
- }
- void ru() {
- wcout.imbue(locale("rus_rus.866"));
- wcin.imbue(locale("rus_rus.866"));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement