Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.90 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <string>
  4. #include <iomanip>
  5. #include <fstream>
  6. #include <Windows.h>
  7.  
  8. using namespace std;
  9.  
  10. const int N = 100;
  11. const int L = 20;
  12.  
  13. struct toys {
  14. string name;
  15. int value;
  16. int minAge;
  17. int maxAge;
  18. };
  19.  
  20. struct perToys {
  21. int kolvo;
  22. int minAge;
  23. int maxAge;
  24. };
  25.  
  26. //прототипы функций
  27. void InputArrFile(toys x[], int &k);
  28. void OutputInArrConsole(toys x[], int k);
  29. void OutputOutArrConsole(toys x[], int k);
  30. void FindToys(toys x[], int k, toys y[], int &l);
  31. void AddToy(toys x[], int &n);
  32. void DeleteToy(toys x[], int &k);
  33. void SortInArrValue(toys x[], int k);
  34. void SortOutArrValue(toys x[], int k);
  35. void SortOutArrAlf1(toys x[], int k);
  36. void SortOutArrAlf2(toys x[], int k);
  37. void OutputArrFile(toys x[], int k);
  38.  
  39.  
  40.  
  41. int prompt_menu_item() {
  42. int variant;
  43. cout << "----------------------------------------------" << endl;
  44. cout << "| МЕНЮ |" << endl;
  45. cout << "----------------------------------------------" << endl;
  46. cout << "|" << setw(45) << "1.Ввод массива структур через файл |" << endl;
  47. cout << "|" << setw(45) << "2.Вывод исх. массива структур в консоль |" << endl;
  48. cout << "|" << setw(45) << "3.Поиск записей в массиве структур |" << endl;
  49. cout << "|" << setw(45) << "4.Вывод вых. массива структур в консоль |" << endl;
  50. cout << "|" << setw(45) << "5.Добавить запись |" << endl;
  51. cout << "|" << setw(45) << "6.Удалить запись |" << endl;
  52. cout << "|" << setw(45) << "7.Сортировка исх. массива по стоимости |" << endl;
  53. cout << "|" << setw(45) << "8.Сортировка вых. массива по алфавиту1 |" << endl;
  54. cout << "|" << setw(45) << "9.Сортировка вых. массива по алфавиту2 |" << endl;
  55. cout << "|" << setw(45) << "10.Вывод исх. массива структур в файл |" << endl;
  56. cout << "|" << setw(45) << "11.Вывод вых. массива структур в файл |" << endl;
  57. cout << "|" << setw(45) << "12.Создать перечень игрушек |" << endl;
  58. cout << "|" << setw(45) << "13.Вывод перечня в консоль|" << endl;
  59. cout << "|" << setw(45) << "14.Сортировка перечня по диапазону|" << endl;
  60. cout << "|" << setw(45) << "15.Сортировка перечня по кол-ву|" << endl;
  61. cout << "|" << setw(45) << "16.Вывод перечня в файл|" << endl;
  62. cout << "|" << setw(45) << "17.Выход из программы |" << endl << endl;
  63.  
  64. cout << "Выберите пункт меню: ";
  65. cin >> variant;
  66. return variant;
  67. }
  68.  
  69. //добавить запись в массив
  70. void AddToy(toys x[], int &n) {
  71. system("cls");
  72. toys t;
  73. if (n == N) {
  74. cout << "Массив заполнен\n";
  75. system("pause");
  76. return;
  77. }
  78. cout << "Введите название игрушки номер [" << n + 1 << "]: ";
  79. cin >> t.name;
  80. cout << "Введите стоимость игрушки: ";
  81. cin >> t.value;
  82. cout << "Введите мин. возраст: ";
  83. cin >> t.minAge;
  84. cout << "Введите макс. возраст: ";
  85. cin >> t.maxAge;
  86. x[n] = t;
  87. n++;
  88. cout << "Запись добавлена\n";
  89. system("pause");
  90. }
  91.  
  92. //удаление записи из массива
  93. void DeleteToy(toys x[], int &k) {
  94. system("cls");
  95. int i, j;
  96. bool fl;
  97. OutputInArrConsole(x, k);
  98. cout << "Номер удаляемой строки: "; cin >> j;
  99. j--;
  100. if (j < 0 || j >= k) {
  101. cout << "Нет такой строки"; system("pause"); return;
  102. }
  103. cout << j + 1 << "-я строка: \n";
  104. cout << x[j].name << " " << x[j].value << endl;
  105. cout << "Удалить? (1/0): "; cin >> fl;
  106. if (fl == false) return;
  107. for (i = j + 1; i < k; i++)
  108. x[i - 1] = x[i];
  109. k--;
  110. cout << "Запись удалена\n";
  111. system("pause");
  112. }
  113.  
  114. // поиск элемента в массиве структур
  115. void FindToys(toys x[], int k, toys y[], int &l) {
  116. system("cls");
  117. l = 0;
  118. bool find = false;
  119. int vozrast;
  120. cout << "Поиск игрушки в массиве" << endl;
  121. cout << "Введите возраст: ";
  122. cin >> vozrast;
  123. cout << "---------------------------------------------------" << endl;
  124. cout << "|№ | Название игрушки | Стоимость | Мин. | Макс. | " << endl;
  125. cout << "---------------------------------------------------" << endl;
  126. for (int i = 0; i < k; i++) {
  127. if (x[i].minAge <= vozrast and x[i].maxAge >= vozrast) {
  128. cout << "|" << setw(3) << i + 1 << "|" << setw(18) << x[i].name << "|" << setw(11) << x[i].value << "|" << setw(6) << x[i].minAge << "|" << setw(7) << x[i].maxAge << "|" << endl;
  129. find = true;
  130. y[l] = x[i];
  131. l++;
  132. }
  133. }
  134. if (find == false) cout << "Ни одной записи не найдено." << endl;
  135.  
  136. system("pause");
  137. }
  138.  
  139. void OutputInArrConsole(toys x[], int k) {
  140. system("cls");
  141. cout << "---------------------------------------------------" << endl;
  142. cout << "|№ | Название игрушки | Стоимость | Мин. | Макс. | " << endl;
  143. cout << "---------------------------------------------------" << endl;
  144. for (int i = 0; i < k; i++) {
  145. cout << "|" << setw(3) << i + 1 << "|" << setw(18) << x[i].name << "|" << setw(11) << x[i].value << "|" << setw(6) << x[i].minAge << "|" << setw(7) << x[i].maxAge << "|" << endl;
  146. }
  147. system("pause");
  148. }
  149.  
  150. //вывод массива структур в консоль
  151. void OutputOutArrConsole(toys x[], int k) {
  152. system("cls");
  153. cout << "---------------------------------------------------" << endl;
  154. cout << "|№ | Название игрушки | Стоимость | Мин. | Макс. | " << endl;
  155. cout << "---------------------------------------------------" << endl;
  156. for (int i = 0; i < k; i++) {
  157. cout << "|" << setw(3) << i + 1 << "|" << setw(18) << x[i].name << "|" << setw(11) << x[i].value << "|" << setw(6) << x[i].minAge << "|" << setw(7) << x[i].maxAge << "|" << endl;
  158. }
  159. system("pause");
  160. }
  161.  
  162. //вывод массива структур в файл
  163. void OutputArrFile(toys x[], int k) {
  164. ofstream fout;
  165. char file[L];
  166. cout << "Имя внешнего файла: "; cin >> file;
  167. fout.open(file);
  168. if (fout.fail()) {
  169. cout << file << " не открывается\n"; system("pause"); return;
  170. }
  171. fout << "---------------------------------------------------" << endl;
  172. fout << "|№ | Название игрушки | Стоимость | Мин. | Макс. | " << endl;
  173. fout << "---------------------------------------------------" << endl;
  174. for (int i = 0; i < k; i++) {
  175. fout << "|" << setw(3) << i + 1 << "|" << setw(18) << x[i].name << "|" << setw(11) << x[i].value << "|" << setw(6) << x[i].minAge << "|" << setw(7) << x[i].maxAge << "|" << endl;
  176. }
  177. fout.close();
  178. cout << "Массив сохранен в файл\n";
  179. system("pause");
  180. }
  181.  
  182. //ввод массива структур из файла
  183. void InputArrFile(toys x[], int &k) {
  184. system("cls");
  185. ifstream fin;
  186. char file[L];
  187. cout << "Имя внешнего файла: "; cin >> file;
  188. fin.open(file);
  189. if (fin.fail()) {
  190. cout << file << " не открывается\n"; system("pause"); return;
  191. }
  192. while (!fin.eof()) {
  193. fin >> x[k].name >> x[k].value >> x[k].minAge >> x[k].maxAge;
  194. if (fin.fail()) break;
  195. k++;
  196. }
  197. fin.close();
  198. cout << "Файл введен\n"; cout << k << endl;
  199. system("pause");
  200. }
  201.  
  202.  
  203. // сортировка входного массива по стоимости
  204. void SortInArrValue(toys x[], int k) {
  205. system("cls");
  206. int fl;
  207. toys t;
  208. cout << "Сортировка записей по стоимости" << endl;
  209. do {
  210. fl = 0;
  211. for (int i = 0; i < k - 1; i++)
  212. if (x[i+1].value < x[i].value) {
  213. t = x[i];
  214. x[i] = x[i + 1];
  215. x[i + 1] = t;
  216. fl = 1;
  217. }
  218. } while (fl == 1);
  219. }
  220.  
  221. // сортировка выходного массива
  222. void SortOutArrValue(toys x[], int k) {
  223. system("cls");
  224. int fl;
  225. toys t;
  226. cout << "Сортировка записей по стоимости" << endl;
  227. do {
  228. fl = 0;
  229. for(int i = 0; i<k; i++)
  230. if (x[i].value < x[i + 1].value) {
  231. t = x[i];
  232. x[i] = x[i + 1];
  233. x[i + 1] = t;
  234. fl = 1;
  235. }
  236. } while (fl == 1);
  237. }
  238.  
  239. void SortOutArrAlf1(toys x[], int k) {
  240. system("cls");
  241. int fl;
  242. toys t;
  243. cout << "Сортировка записей по алфавиту1" << endl;
  244. do {
  245. fl = 0;
  246. for(int i = 0; i < k-1; i++)
  247. for(int j = i+1; j < k; j++)
  248. if (x[i].name > x[j].name) {
  249. t = x[i];
  250. x[i] = x[j];
  251. x[j] = t;
  252. fl = 1;
  253. }
  254. } while (fl == 1);
  255. }
  256.  
  257. void SortOutArrAlf2(toys x[], int k) {
  258. system("cls");
  259. int fl;
  260. toys t;
  261. cout << "Сортировка записей по алфавиту2" << endl;
  262. do {
  263. fl = 0;
  264. for (int i = 0; i < k - 1; i++)
  265. for (int j = i+1; j < k; j++) {
  266. if (x[i].name > x[j].name) {
  267. t = x[i];
  268. x[i] = x[j];
  269. x[j] = t;
  270. fl = 1;
  271. }
  272. if (x[i].name == x[j].name) {
  273. if (x[i].minAge < x[j].minAge) {
  274. t = x[i];
  275. x[i] = x[j];
  276. x[j] = t;
  277. fl = 1;
  278. }
  279. }
  280. }
  281. } while (fl == 1);
  282. }
  283.  
  284. void CreatePerech(toys x[], int n, perToys y[], int &k) {
  285. int i, j, fl;
  286. k = 0;
  287. for (i = 0; i < n; i++) {
  288. fl = 0;
  289. for (j = 0; j < k; j++)
  290. if ((x[i].minAge == y[j].minAge) && (x[i].maxAge == y[j].maxAge)) {
  291. y[j].kolvo = y[j].kolvo + 1;
  292. fl = 1;
  293. }
  294. if (fl == 0) {
  295. y[k].minAge = x[i].minAge;
  296. y[k].maxAge = x[i].maxAge;
  297. y[k].kolvo = 1;
  298. k++;
  299. }
  300. }
  301. cout << "Перечень сформирован\n"; cout << k; cout << endl; system("pause");
  302. }
  303.  
  304. void OutputPerConsole(perToys x[], int k) {
  305. system("cls");
  306. cout << "-------------------------" << endl;
  307. cout << "| Диапазон | Количество | " << endl;
  308. cout << "-------------------------" << endl;
  309. for (int i = 0; i < k; i++) {
  310. cout << "|" << setw(7) << x[i].minAge << "-" << setw(2) << x[i].maxAge << setw(1) << "|" << setw(12) << x[i].kolvo << "|" << endl;
  311. }
  312. system("pause");
  313. }
  314.  
  315. void SortPerDiap(perToys x[], int k) {
  316. system("cls");
  317. int fl, i;
  318. perToys t;
  319. do {
  320. fl = 0; k--;
  321. for (i = 0; i < k; i++) {
  322. if (x[i].minAge == x[i + 1].minAge)
  323. if (x[i].maxAge < x[i + 1].maxAge) {
  324. t = x[i];
  325. x[i] = x[i + 1];
  326. x[i + 1] = t;
  327. fl = 1;
  328. }
  329. if (x[i].minAge > x[i + 1].minAge) {
  330. t = x[i];
  331. x[i] = x[i + 1];
  332. x[i + 1] = t;
  333. fl = 1;
  334. }
  335. }
  336. } while (fl == 1);
  337. cout << "Сортировка завершена.\n"; system("pause");
  338. }
  339.  
  340. void SortPerKolvo(perToys x[], int k) {
  341. system("cls");
  342. int fl, i;
  343. perToys t;
  344. do {
  345. fl = 0; k--;
  346. for (i = 0; i < k; i++)
  347. if (x[i].kolvo > x[i + 1].kolvo) {
  348. t = x[i];
  349. x[i] = x[i + 1];
  350. x[i + 1] = t;
  351. fl = 1;
  352. }
  353. } while (fl == 1);
  354. cout << "Сортировка завершена.\n"; system("pause");
  355. }
  356.  
  357. void OutputPerFile(perToys x[], int k) {
  358. ofstream fout;
  359. char file[L];
  360. cout << "Имя внешнего файла: "; cin >> file;
  361. fout.open(file);
  362. if (fout.fail()) {
  363. cout << file << " не открывается\n"; system("pause"); return;
  364. }
  365. fout << "-------------------------" << endl;
  366. fout << "| Диапазон | Количество | " << endl;
  367. fout << "-------------------------" << endl;
  368. for (int i = 0; i < k; i++) {
  369. fout << "|" << setw(7) << x[i].minAge << "-" << setw(2) << x[i].maxAge << setw(1) << "|" << setw(12) << x[i].kolvo << "|" << endl;
  370. }
  371. cout << "Перечень сохранен в файл\n";
  372. system("pause");
  373. }
  374.  
  375. int main() {
  376. setlocale(LC_ALL, "Russian");
  377. SetConsoleCP(1251);
  378. SetConsoleOutputCP(1251);
  379. int variant;
  380.  
  381. toys a[N], b[N];
  382. perToys c[N];
  383. int m, l, k;
  384. m = 0; l = 0; k = 0;
  385. do {
  386. system("cls");
  387. variant = prompt_menu_item();
  388.  
  389. switch (variant) {
  390. case 1: {
  391. InputArrFile(a, m); break;
  392. }
  393. case 2: {
  394. OutputInArrConsole(a, m); break;
  395. }
  396. case 3: {
  397. FindToys(a, m, b, l); break;
  398. }
  399. case 4: {
  400. OutputOutArrConsole(b, l); break;
  401. }
  402. case 5: {
  403. AddToy(a, m); break;
  404. }
  405. case 6: {
  406. DeleteToy(a, m); break;
  407. }
  408. case 7: {
  409. SortInArrValue(a, m); break;
  410. }
  411. case 8: {
  412. SortOutArrAlf1(b, l); break;
  413. }
  414. case 9: {
  415. SortOutArrAlf2(b, l); break;
  416. }
  417. case 10: {
  418. OutputArrFile(a, m); break;
  419. }
  420. case 11: {
  421. OutputArrFile(b, l); break;
  422. }
  423. case 12: {
  424. CreatePerech(a, m, c, k); break;
  425. }
  426. case 13: {
  427. OutputPerConsole(c, k); break;
  428. }
  429. case 14: {
  430. SortPerDiap(c, k); break;
  431. }
  432. case 15: {
  433. SortPerKolvo(c, k); break;
  434. }
  435. case 16: {
  436. OutputPerFile(c, k); break;
  437. }
  438. case 17: exit(EXIT_SUCCESS); break;
  439. default: cerr << "Вы выбрали неверный вариант" << endl; exit(EXIT_FAILURE);
  440. }
  441. } while (variant >= 1 && variant <= 17);
  442.  
  443. return 0;
  444. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement