Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <fstream>
  4. #include <string>
  5. #include <string.h>
  6. #include <windows.h>
  7. #include <cstring>
  8. #include <conio.h>
  9. #include <time.h>
  10. #include <stdlib.h>
  11. #include <ctime>
  12.  
  13. using namespace std;
  14.  
  15. const int M = 50;//размер массива
  16.  
  17. struct books
  18. {
  19. string fio; // фио автора
  20. string name; //название книг
  21. int year;
  22. };
  23.  
  24. struct author
  25. {
  26. string nameBook;
  27. int yearBook;
  28. };
  29.  
  30. struct perechen
  31. {
  32. int year;//год издания книги
  33. int quantity;//количество авторов, издавших книги в year год
  34. };
  35.  
  36. void inputMasBoooksFile(books x[], int& n); //ввод из файла
  37. void outputMasBook(books x[], int n); //вывод исходного массива на экран
  38. void addbooks(books x[], int& n); //добавление записи
  39. void delelteBooks(books x[], int& n); //удаление записи
  40. void sortyear(books x[], int n);//сортировка исходного массива по году
  41. void sortbookfio(books y[], int k);//сортировка исходного массива по фамилии и году издания
  42. void outputSourceMassToFile(books x[], int n);//запись исходного массива в файл
  43. void poiskyear(books x[], int n, author y[], int& m); //создание поиска
  44. void outputResultArray(author x[], int n);//вывод поиска (выходного массива) на экран
  45. void sortname(author x[], int n);//сортировка поиска (выходного массива) по названию книг
  46. void outputMasBooksFilePoisk(author x[], int n);//запись поиска (выходного массива) в файл
  47. void createPerechen(books book[], int n, perechen y[], int& m);//создание перечня
  48. void outputPerechen(perechen x[], int m);//вывод перечня на экран
  49. void outputSourcePerechenToFile(perechen x[], int m);//запись исходного перечня на экран
  50. void sortPerechYear(perechen x[], int m);//сортировка переченя по году издания в порядке возрастания.
  51. void sortPerechQuantity(perechen x[], int m);//сортировка переченя по количеству авторов в порядке убывания.
  52. void outputSortPerechenToFile(perechen x[], int m);//запись результата работы с перечнем на экран
  53.  
  54. int main()
  55. {
  56. SetConsoleCP(1251);// для ввода русского языка
  57. SetConsoleOutputCP(1251); // для вывода русского языка
  58. setlocale(LC_ALL, "rus");
  59.  
  60. books a[M];//исходный массив
  61. author b[M];//выходной массив
  62. perechen c[M];//перечень
  63.  
  64. int m, l, t, n;//m - действительный размер исходного массива; l - действительный размер выходного массива; n - действительный размер перечня
  65. bool exit = true;
  66.  
  67. while (exit)
  68. {
  69. system("CLS");
  70. cout << " МЕНЮ \n";
  71. cout << "1. Заполнить исходный массив.\n";
  72. cout << "2. Вывести исходную таблицу записей на экран.\n";
  73. cout << "3. Добавить книгу.\n";
  74. cout << "4. Удалить книгу.\n";
  75. cout << "5. Отсортировать исходный массив по году издания в порядке возрастания.\n";
  76. cout << "6. Отсортировать исходный массив по фио в алфавитном порядке, а при совпадении фио по году издания в порядке убывания.\n";
  77. cout << "7.Запись исходного массива в файл.\n";
  78. cout << "8. Для данного автора найти его самую раннюю и самую последнюю книгу по году издания(выходной массив).\n";
  79. cout << "9. Вывести результа поиска на экран.\n";
  80. cout << "10. Отсортировать выходной массив по названию книг в алфавитном порядке.\n";
  81. cout << "11.Запись результата поиска в файл.\n";
  82. cout << "12.Составить перечень.\n";
  83. cout << "13.Вывести перечень на экран.\n";
  84. cout << "14.Записать исходный перечень в файл.\n";
  85. cout << "15.Отсортировать перечень по году издания в порядке возрастания.\n";
  86. cout << "16.Отсортировать перечень по количеству авторов в порядке убывания.\n";
  87. cout << "17.Записать результат работы с перечнем в файл.\n";
  88. cout << "18.Завершить работу.\n";
  89. cout << "Ваш выбор (1-18): ";
  90. cin >> t;
  91. switch (t)
  92. {
  93. case 1:
  94. inputMasBoooksFile(a, m);
  95. break;
  96. case 2:
  97. outputMasBook(a, m);
  98. break;
  99. case 3:
  100. addbooks(a, m);
  101. break;
  102. case 4:
  103. delelteBooks(a, m);
  104. break;
  105. case 5:
  106. sortyear(a, m);
  107. break;
  108. case 6:
  109. sortbookfio(a, m);
  110. break;
  111. case 7:
  112. outputSourceMassToFile(a, m);
  113. break;
  114. case 8:
  115. poiskyear(a, m, b, l);
  116. break;
  117. case 9:
  118. outputResultArray(b, l);
  119. break;
  120. case 10:
  121. sortname(b, l);
  122. break;
  123. case 11:
  124. outputMasBooksFilePoisk(b, l);
  125. break;
  126. case 12:
  127. createPerechen(a, m, c, n);
  128. break;
  129. case 13:
  130. outputPerechen(c, n);
  131. break;
  132. case 14:
  133. outputSourcePerechenToFile(c, n);
  134. break;
  135. case 15:
  136. sortPerechYear(c, n);
  137. break;
  138. case 16:
  139. sortPerechQuantity(c, n);
  140. break;
  141. case 17:
  142. outputSortPerechenToFile(c, n);
  143. break;
  144. case 18:
  145. exit = false;
  146. break;
  147. default:
  148. cout << "Нет такого номера меню.\n";
  149. break;
  150. }
  151. if (t != 18)
  152. system("pause");
  153. }
  154.  
  155. cout << "Конец работы.\n";
  156. return 0;
  157. }
  158. //1
  159. void inputMasBoooksFile(books x[], int& n)//ввод данных из файла
  160. {
  161. char file[20];
  162. string iniz;
  163. n = 0;
  164.  
  165. ifstream fin;
  166. cout << "Введите имя входного файла: ";
  167. cin >> file;
  168.  
  169. strcat_s(file, ".txt");
  170.  
  171. fin.open(file);
  172. if (fin.fail())
  173. {
  174. cout << "Ошибка! Файл не открывается!\n\n";
  175. return;
  176. }
  177.  
  178. while (!fin.eof())
  179. {
  180. fin >> x[n].fio >> iniz >> x[n].name >> x[n].year;
  181. x[n].fio = x[n].fio + " ";
  182. x[n].fio = x[n].fio + iniz;
  183. n++;
  184. }
  185.  
  186. n--;
  187.  
  188. fin.close();
  189.  
  190. cout << "\n\tФайл введен.\n\n";
  191. }
  192. //2
  193. void outputMasBook(books x[], int n)//вывод результата в текстовый файл
  194. {
  195. if (n == 0)
  196. {
  197. cout << "\n\tМассив пуст.\n\n";
  198. return;
  199. }
  200.  
  201. cout << " _____________________________________________________________________________\n";
  202. cout << "| Список книг |\n";
  203. cout << "|_____________________________________________________________________________|\n";
  204. cout << "|№ | Фамилия и инициалы | Название |Год издания|\n";
  205.  
  206. for (int i = 0; i < n; i++)
  207. cout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].fio << "|" << setw(30) << x[i].name << "|" << setw(11) << x[i].year << "|\n";
  208.  
  209. cout << "|_____________________________________________________________________________|\n\n";
  210. }
  211. //3
  212. void addbooks(books x[], int& n)//добавление строки
  213. {
  214. books t;
  215. string iniz;
  216.  
  217. if (n == M)
  218. {
  219. cout << "Массив заполнен!\n\n";
  220. return;
  221. }
  222. cout << "Фамилия: ";
  223. cin >> t.fio;
  224.  
  225. cout << "Инициалы: ";
  226. cin >> iniz;
  227.  
  228. t.fio = t.fio + " ";
  229. t.fio = t.fio + iniz;
  230.  
  231. cout << "Название: ";
  232. cin >> t.name;
  233.  
  234. cout << "Год издания: ";
  235. cin >> t.year;
  236.  
  237. x[n++] = t;
  238.  
  239. cout << "\n\tЗапись добавлена.\n\n";
  240. }
  241. //4
  242. void delelteBooks(books x[], int& n)//удаление строки
  243. {
  244. if (n == 0)
  245. {
  246. cout << "\n\tМассив пуст.\n\n";
  247. return;
  248. }
  249.  
  250. int j;
  251. char ch;
  252. bool exit = true;
  253.  
  254. outputMasBook(x, n);
  255.  
  256. cout << "Номер удаляемой строки: ";
  257. cin >> j;
  258.  
  259. j--;
  260.  
  261. if (j < 0 || j >= n)
  262. {
  263. cout << "Нет такой строки!\n\n";
  264. return;
  265. }
  266.  
  267. while (exit)
  268. {
  269. cout << j + 1 << "-я строка:\n";
  270. cout << x[j].fio << " " << x[j].name << " " << x[j].year << " " << endl;
  271. cout << "Удалить: 'y' или 'д'(да)/ 'n' или 'н'(нет)? -> ";
  272.  
  273. cin >> ch;
  274.  
  275. switch (ch)
  276. {
  277. case 'n':
  278. case 'N':
  279. case 'н':
  280. case 'Н':
  281. cout << "\n\tЗапись не удалена.\n\n";
  282. return;
  283. case 'y':
  284. case 'Y':
  285. case 'д':
  286. case 'Д':
  287. for (int i = j + 1; i < n; i++)
  288. x[i - 1] = x[i];
  289. n--;
  290.  
  291. exit = false;
  292. break;
  293. default:
  294. cout << "\n\nНеправильно введен символ! Пожалуйста, повторите попытку...\n";
  295. }
  296. }
  297.  
  298. cout << "\n\tЗапись удалена.\n\n";
  299. }
  300. //5
  301. void sortyear(books x[], int n) //сортировка по году издания в порядке возрастания
  302. {
  303. if (n == 0)
  304. {
  305. cout << "\n\tМассив пуст.\n\n";
  306. return;
  307. }
  308.  
  309. for (int j = 0; j < n; j++)
  310. {
  311. for (int i = 0; i < n; i++)
  312. {
  313. if (x[j].year < x[i].year)
  314. {
  315. books t = x[i];
  316. x[i] = x[j];
  317. x[j] = t;
  318. }
  319. }
  320. }
  321.  
  322. cout << "\n\tЗаписи отсортированы по году издания в порядке возрастания.\n\n";
  323. }
  324. //6
  325. void sortbookfio(books y[], int n)
  326. {
  327. if (n == 0)
  328. {
  329. cout << "\n\tМассив пуст.\n\n";
  330. return;
  331. }
  332.  
  333. for (int i = 0; i < n; i++)
  334. for (int j = 0; j < n; j++)
  335. if (y[i].fio <= y[j].fio)
  336. {
  337. if (y[i].fio == y[j].fio)
  338. {
  339. if (y[i].year > y[j].year)
  340. {
  341. books t = y[i];
  342. y[i] = y[j];
  343. y[j] = t;
  344. }
  345. }
  346. else
  347. {
  348. books t = y[i];
  349. y[i] = y[j];
  350. y[j] = t;
  351. }
  352. }
  353.  
  354. cout << "\n\tЗаписи отсортированы по фио в алфавитном порядке и году издания в порядке убывания.\n\n";
  355. }
  356. //7
  357. void outputSourceMassToFile(books x[], int n)//вывод в файл сортировки
  358. {
  359. if (n == 0)
  360. {
  361. cout << "\n\tМассив пуст.\n\n";
  362. return;
  363. }
  364.  
  365. char file[20];
  366. ofstream fout;
  367.  
  368. cout << "\n\tВведите имя выходного файла: ";
  369. cin >> file;
  370.  
  371. strcat_s(file, ".txt");
  372.  
  373. fout.open(file);
  374.  
  375. if (fout.fail())
  376. {
  377. cout << "Ошибка! Файл не открывается!\n\n";
  378. return;
  379. }
  380.  
  381. fout << " _____________________________________________________________________________\n";
  382. fout << "| Список книг |\n";
  383. fout << "|_____________________________________________________________________________|\n";
  384. fout << "|№ | Фамилия и инициалы | Название |Год издания|\n";
  385.  
  386. for (int i = 0; i < n; i++)
  387. fout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].fio << "|" << setw(30) << x[i].name << "|" << setw(11) << x[i].year << "|\n";
  388.  
  389. fout << "|_____________________________________________________________________________|\n";
  390.  
  391. cout << "\n\tИсходный массив выведен в файл " << file << ".\n\n";
  392. }
  393. //8
  394. void poiskyear(books x[], int n, author y[], int& m)//Поиск самой ранней и самой поздней книг данного автора
  395. {
  396. int s = 0;
  397. m = 0;
  398. string fio, iniz;
  399. int earlybook, latebook;
  400.  
  401. outputMasBook(x, n);
  402.  
  403. cout << "\tВведите автора: ";
  404. cout << "\nФамилия: ";
  405. cin >> fio;
  406.  
  407. cout << "Инициалы: ";
  408. cin >> iniz;
  409.  
  410. fio = fio + " ";
  411. fio = fio + iniz;
  412.  
  413. for (int i = 0; i < n; i++)
  414. if (fio != x[i].fio)
  415. s++;
  416.  
  417. if (s == n)
  418. {
  419. cout << "Такого автора нет.\n\n";
  420. return;
  421. }
  422.  
  423. for (int i = 1; i < n; i++)
  424. if (fio == x[i].fio)
  425. {
  426. earlybook = x[i].year;
  427. latebook = x[i].year;
  428. break;
  429. }
  430.  
  431. //находим минимальный и максимальный год для данного автора
  432. for (int i = 0; i < n; i++)
  433. {
  434. if ((fio == x[i].fio) && (earlybook > x[i].year))
  435. earlybook = x[i].year;//минимальное
  436. if ((fio == x[i].fio) && (x[i].year > latebook))
  437. latebook = x[i].year; //максимальное
  438. }
  439.  
  440. for (int i = 0; i < n; i++)
  441. if ((fio == x[i].fio) && ((earlybook == x[i].year) || (x[i].year == latebook)))
  442. {
  443. y[m++].nameBook = x[i].name;
  444. if (x[i].year == earlybook)
  445. y[m - 1].yearBook = x[i].year;
  446. if (x[i].year == latebook)
  447. y[m - 1].yearBook = x[i].year;
  448. }
  449.  
  450. cout << "\n\tПоиск завершен.\n\n";
  451. }
  452. //9
  453. void outputResultArray(author x[], int n)
  454. {
  455. if (n == 0)
  456. {
  457. cout << "\n\tМассив пуст.\n\n";
  458. return;
  459. }
  460.  
  461. cout << " ______________________________________________ \n";
  462. cout << "| Список книг |\n";
  463. cout << "|______________________________________________|\n";
  464. cout << "|№ | Название |Год издания|\n";
  465.  
  466. for (int i = 0; i < n; i++)
  467. cout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].nameBook << "|" << setw(11) << x[i].yearBook << "|\n";
  468.  
  469. cout << "|______________________________________________|\n\n";
  470. }
  471. //10
  472. void sortname(author x[], int n) //сортировка по названию книги в алфавитном порядке
  473. {
  474. if (n == 0)
  475. {
  476. cout << "\n\tМассив пуст.\n\n";
  477. return;
  478. }
  479.  
  480. for (int j = 0; j < n; j++)
  481. {
  482. for (int i = 0; i < n; i++)
  483. {
  484. if (x[i].nameBook > x[j].nameBook)
  485. {
  486. author t = x[i];
  487. x[i] = x[j];
  488. x[j] = t;
  489. }
  490. }
  491. }
  492.  
  493. cout << "\n\tЗаписи отсортированы по названию книг в алфавитном порядке.\n\n";
  494. }
  495. //11
  496. void outputMasBooksFilePoisk(author x[], int n)// вывод поиска в файл
  497. {
  498. if (n == 0)
  499. {
  500. cout << "\n\tМассив пуст.\n\n";
  501. return;
  502. }
  503.  
  504. char file[20];
  505. ofstream fout;
  506.  
  507. cout << "\n\tВведите имя выходного файла: ";
  508. cin >> file;
  509.  
  510. strcat_s(file, ".txt");
  511. fout.open(file);
  512.  
  513. if (fout.fail())
  514. {
  515. cout << "Ошибка! Файл не открывается!\n\n";
  516. return;
  517. }
  518.  
  519. fout << " ______________________________________________ \n";
  520. fout << "| Список книг |\n";
  521. fout << "|______________________________________________|\n";
  522. fout << "|№ | Название |Год издания|\n";
  523.  
  524. for (int i = 0; i < n; i++)
  525. fout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].nameBook << "|" << setw(11) << x[i].yearBook << "|\n";
  526.  
  527. fout << "|______________________________________________|\n";
  528.  
  529. cout << "\n\tМассив выведен в файл " << file << "\n\n";
  530. }
  531. //12
  532. void createPerechen(books x[], int n, perechen y[], int& m)
  533. {
  534. int flag;//флаг, показывающий, что нашлись совпадения по году
  535.  
  536. m = 0;
  537.  
  538. for (int i = 0; i < n; i++)
  539. {
  540. flag = 0;
  541.  
  542. for (int j = 0; j < m; j++)
  543. {
  544. if (x[i].year == y[j].year)//если год издания книги из book совпал с годом издания из перечня, то ...
  545. {
  546. y[j].quantity++;//увеличиваем количество авторов на 1
  547. flag = 1;//показываем, что замена была
  548. }
  549. }
  550. if (flag == 0)//если замен не было, то
  551. {
  552. y[m].year = x[i].year;//присваиваем году издания из перечня год издания из book
  553. y[m].quantity = 1;//устанавливаем количество авторов на 1
  554. m++;//увеличиваем размер перечня
  555. }
  556. }
  557. cout << "\n\tПеречень составлен\n\n";
  558. }
  559. //13
  560. void outputPerechen(perechen x[], int m)
  561. {
  562. if (m == 0)
  563. {
  564. cout << "\n\tПеречень пуст.\n\n";
  565. return;
  566. }
  567.  
  568. cout << " ___________________________\n";
  569. cout << "| Перечень |\n";
  570. cout << "|__________________________|\n";
  571. cout << "|№ |Год издания|Количество|\n";
  572.  
  573. for (int i = 0; i < m; i++)
  574. cout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
  575.  
  576. cout << " ___________________________\n\n";
  577. }
  578. //14
  579. void sortPerechYear(perechen x[], int m)
  580. {
  581. if (m == 0)
  582. {
  583. cout << "\n\tПеречень пуст.\n\n";
  584. return;
  585. }
  586.  
  587. for (int j = 0; j < m; j++)
  588. {
  589. for (int i = 0; i < m; i++)
  590. {
  591. if (x[j].year < x[i].year)
  592. {
  593. perechen t = x[i];
  594. x[i] = x[j];
  595. x[j] = t;
  596. }
  597. }
  598. }
  599.  
  600. cout << "\n\tПеречень отсортирован по году издания в порядке возрастания.\n\n";
  601. }
  602. //15
  603. void sortPerechQuantity(perechen x[], int m)
  604. {
  605. if (m == 0)
  606. {
  607. cout << "\n\tПеречень пуст.\n\n";
  608. return;
  609. }
  610.  
  611. for (int j = 0; j < m; j++)
  612. {
  613. for (int i = 0; i < m; i++)
  614. {
  615. if (x[j].quantity > x[i].quantity)
  616. {
  617. perechen t = x[i];
  618. x[i] = x[j];
  619. x[j] = t;
  620. }
  621. }
  622. }
  623.  
  624. cout << "\n\tПеречень отсортирован по количеству авторов в порядке убывания.\n\n";
  625. }
  626. //16
  627. void outputSourcePerechenToFile(perechen x[], int m)
  628. {
  629. if (m == 0)
  630. {
  631. cout << "\n\tПеречень пуст.\n\n";
  632. return;
  633. }
  634.  
  635. char file[20];
  636. ofstream fout;
  637.  
  638. cout << "Введите имя выходного файла: ";
  639. cin >> file;
  640.  
  641. strcat_s(file, ".txt");
  642. fout.open(file);
  643.  
  644. if (fout.fail())
  645. {
  646. cout << "Ошибка! Файл не открывается!\n\n";
  647. return;
  648. }
  649.  
  650.  
  651. fout << " ___________________________\n";
  652. fout << "| Перечень |\n";
  653. fout << "|__________________________|\n";
  654. fout << "|№ |Год издания|Количество|\n";
  655.  
  656. for (int i = 0; i < m; i++)
  657. fout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
  658.  
  659. fout << " ___________________________\n\n";
  660.  
  661. cout << "\n\tИсходный перечень выведен в файл " << file << ".\n\n";
  662. }
  663. //17
  664. void outputSortPerechenToFile(perechen x[], int m)
  665. {
  666. if (m == 0)
  667. {
  668. cout << "\n\tПеречень пуст.\n\n";
  669. return;
  670. }
  671.  
  672. char file[20];
  673. ofstream fout;
  674.  
  675. cout << "Введите имя выходного файла: ";
  676. cin >> file;
  677.  
  678. strcat_s(file, ".txt");
  679. fout.open(file);
  680.  
  681. if (fout.fail())
  682. {
  683. cout << "Ошибка! Файл не открывается!\n\n";
  684. return;
  685. }
  686.  
  687.  
  688. fout << " ___________________________\n";
  689. fout << "| Перечень |\n";
  690. fout << "|__________________________|\n";
  691. fout << "|№ |Год издания|Количество|\n";
  692.  
  693. for (int i = 0; i < m; i++)
  694. fout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
  695.  
  696. fout << " ___________________________\n\n";
  697.  
  698. cout << "\n\tРезультат работы с перечнем выведен в файл " << file << ".\n\n";
  699. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement