Guest User

Untitled

a guest
Dec 8th, 2019
128
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