SHARE
TWEET

Untitled

a guest Dec 8th, 2019 122 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <fstream>
  5. using namespace std;
  6. struct Product
  7. {
  8.     string name;
  9.     int sale;
  10.     int remains;
  11.     int cost;
  12. };
  13.  
  14. //перегрузка на вывод
  15. ostream& operator << (ostream& os, Product& i)
  16. {
  17.     os << i.name << ' ';
  18.     os << i.sale << ' ';
  19.     os << i.remains << ' ';
  20.     os << i.cost << ' ';
  21.     return os;
  22. }
  23.  
  24. //печать каждого элемента
  25. ostream& operator << (ostream& os, vector<Product> v)
  26. {
  27.     for (auto i : v)
  28.         cout << i;
  29. }
  30.  
  31. //перегрузка на ввод
  32. istream& operator >> (istream& is, Product& i)
  33. {
  34.     is >> i.name;
  35.     is >> i.sale;
  36.     is >> i.remains;
  37.     is >> i.cost;
  38.  
  39.     return is;
  40. }
  41.  
  42. //создаем новую базу с количеством записей N
  43. void NewStruct(int n)
  44. {
  45.     ofstream file("out.txt");
  46.     Product objectStruct;
  47.     for (int i = 0; i < n; ++i)
  48.     {
  49.         cout << "Запись " << i+1 << endl;
  50.         cin >> objectStruct;
  51.         if (objectStruct.remains < 0 || objectStruct.sale < 0)
  52.         {
  53.             cout << "Запись не корректна\n";
  54.             n++;
  55.             continue;
  56.         }
  57.         file << objectStruct << endl;
  58.  
  59.     }
  60.     file.close();
  61. }
  62.  
  63. //запись в файл всего вектора
  64. void WriteInFile (vector<Product>& product, int size)
  65. {
  66.     ofstream file("out.txt");
  67.     for (int i = 0; i < size; i++)
  68.         file << product[i] << endl;
  69.     file.close();
  70. }
  71.  
  72. // обновляем всю базу. для необходимости возвращаем размер базы
  73. int update (vector<Product>& product)
  74. {
  75.     product.clear(); //чистим весь вектор
  76.     Product objectStruct;
  77.     ifstream file("out.txt");
  78.     while(!file.eof()) // проходимся до конца файла
  79.     {
  80.         file >> objectStruct; // записываем каждую строку в 1 обьекс структуры
  81.         product.push_back(objectStruct); // добавляем этот обьект в вектор структур
  82.     }
  83.     product.erase(product.end()); // удаляем последний элемент т.к он копирует предпоследний элемент
  84.     file.close();
  85.     return product.size();
  86. }
  87. int main(int argc, char const *argv[])
  88. {
  89.     bool mode = true;
  90.     int answer;
  91.     vector<Product> product;
  92.     int size = update(product);
  93.     Product objectStruct; //создаем 1 обьект структуры
  94.     while (mode)
  95.     {
  96.         cout << "\n\n\nМеню:\n";
  97.         cout << "1. Создать файл с заданной структурой записи.\n";
  98.         cout << "2. Выдать на экран содержимое файла.\n";
  99.         cout << "3. Выдать на экран наименования товаров, проданных полностью в виде:\n — наименование товара;\n — количество проданных штук.\n";
  100.         cout << "4. Сформировать файл, содержащий наименование товара и общую стоимость проданного товара.\n";
  101.         cout << "5. Вновь сформированный файл распечатать.\n";
  102.         cout << "6. Добавить запись в исходный файл.\n";
  103.         cout << "7. Удалить все записи товаров, проданных полностью.\n";
  104.         cout << "8. Корректировка файла: для заданного наименования товара изменить количество штук (продано, осталось).\n";
  105.         cout << "9. Выход\n";
  106.         cout << "Выберите вариант: ";
  107.         cin >> answer;
  108.         switch(answer)
  109.         {
  110.             case 1:
  111.             {
  112.                 cout << "Количество новых записей - ";
  113.                 cin >> answer;
  114.                 NewStruct(answer);
  115.                 break;
  116.             }
  117.             case 2:
  118.             {
  119.                 update(product);
  120.                 cout << "Содержимое файла >\n";
  121.                 for (auto i : product)
  122.                     cout << i << endl;
  123.                 break;
  124.             }
  125.             case 3:
  126.             {
  127.                 for(auto i : product)
  128.                 {
  129.                     if (i.remains == 0)
  130.                     {
  131.                         cout << " Наименование товара - " << i.name;
  132.                         cout << " Количество проданных штук - " << i.sale << endl;
  133.                     }
  134.                 }
  135.                 break;
  136.             }
  137.             case 4:
  138.             {
  139.                 ofstream file("out2.txt");
  140.                 for (auto i : product)
  141.                 {
  142.                     file << i.name << ' ';
  143.                     file << i.cost * i.sale << endl;
  144.                 }
  145.                 file.close();
  146.                 cout << "Готово. Откройте файл out2.txt";
  147.                 break;             
  148.             }
  149.             case 5:
  150.             {
  151.                 cout << "Содержимое файла >\n";
  152.                 ifstream file("out2.txt");
  153.                 for (int i = 0; i < product.size(); i++)
  154.                 {
  155.                     file >> objectStruct.name;
  156.                     file >> objectStruct.cost;
  157.                     cout << objectStruct.name << "  " << objectStruct.cost << endl;
  158.                 }
  159.                 file.close();
  160.                 break;
  161.             }
  162.             case 6:
  163.             {
  164.                 cin >> objectStruct;
  165.                 ofstream file("out.txt", ios_base::app); //открываем файл в режиме добавления
  166.                 file << objectStruct << endl;
  167.                 file.close();
  168.                 break;             
  169.             }
  170.             case 7:
  171.             {
  172.                 size = update(product);
  173.                 for (int i = 0; i < size; ++i)
  174.                 {  
  175.                     if (product[i].remains == 0)
  176.                     {
  177.                         product.erase(product.begin() + i); // удаление обьекта[0 + i]
  178.                         size = product.size(); // обновляем размер
  179.                         cout << "Готово";
  180.                     }
  181.                 }
  182.                 WriteInFile(product, product.size());
  183.                 break;             
  184.             }
  185.             case 8:
  186.             {
  187.                 string name_product;
  188.                 cout << "Название товара - ";
  189.                 cin >> name_product;
  190.  
  191.                 int remains_product;
  192.                 cout << "Остаток товара - ";
  193.                 cin >> remains_product;
  194.  
  195.                 int sale_product;
  196.                 cout << "Проданных товаров - ";
  197.                 cin >> sale_product;
  198.  
  199.                 if (remains_product < 0 || sale_product < 0)
  200.                     break;
  201.  
  202.                 size = update(product);
  203.                 for (int i = 0; i < size; ++i)
  204.                 {
  205.                     if (product[i].name == name_product)
  206.                     {
  207.                         product[i].remains = remains_product;
  208.                         product[i].sale =  sale_product;
  209.                     }
  210.                 }
  211.                 WriteInFile(product, size);
  212.                 break;             
  213.             }
  214.             case 9:
  215.             {
  216.                 mode = false;
  217.                 cout << "Выходим.\n";
  218.                 break;
  219.             }
  220.             default:
  221.             {
  222.                 cout << "Ошибка\n";
  223.                 mode = false;
  224.             }
  225.         }
  226.     }
  227.     return 0;
  228. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top