Advertisement
Guest User

Untitled

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