Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.08 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 = 200;
  16. const int L = 200;
  17.  
  18. struct books
  19. {
  20. char fio[200]; // фио автора
  21. //char iniz[100]; // инициалы автор
  22. char name[200]; //название книг
  23. int year;
  24. };
  25.  
  26. void inputMasBoooksFile(books x[], int& n); //ввод из файла
  27. void outputMasBook(books x[], int n); //вывод на экран
  28. void addbooks(books x[], int& n); //добавление записи
  29. void delelteBooks(books x[], int& n); //удаление записи
  30. void sortyear(books x[], int n);
  31. void sortname(books x[], int n);
  32. int poiskyear(books x[], int n, int& earlybook, int& latebook); //создание поиска
  33. void outputMasBookSort(books y[], int k);
  34. void sortbookfio(books y[], int k);
  35. void outputMasBookFileSort(books x[], int n);
  36. void outputMasBooksFilepoisk(books x[], int a, int& earlybook, int& latebook);
  37.  
  38. int main()
  39. {
  40. SetConsoleCP(1251);// для ввода русского языка
  41. SetConsoleOutputCP(1251); // для вывода русского языка
  42. setlocale(LC_ALL, "rus");
  43. books a[M], b[L];
  44. int m = 0, l = 0, t = 0, earlybook = 2020, latebook = 0, index = -2;
  45. cout << "Введите кол-во записей: ";
  46. cin >> l;
  47. while (1)
  48. {
  49. system("CLS");
  50. cout << " МЕНЮ \n";
  51. cout << "1. Ввести записи из файла.\n";
  52. cout << "2. Вывести исходную таблицу записей на экран.\n";
  53. cout << "3. Добавить книгу.\n";
  54. cout << "4. Удалить книгу.\n";
  55. cout << "5. Отсортировать массив по году издания в порядке возрастания.\n";
  56. cout << "6. Отсортировать массив по названию книг в алфавитном порядке.\n";
  57. cout << "7. Для данного автора найти его самую раннюю и самую последнюю книгу по году издания.\n";
  58. cout << "8. Вывести сортировку на экран.\n";
  59. cout << "9. Отсортировать массив по фио в алфавитном порядке, а при совпадении фио по году издания в порядке убывания.\n";
  60. cout << "10.Вывести массив в файл.\n";
  61. cout << "11.Вывести результат поиск в файл.\n";
  62. cout << "12.Завершить работу.\n";
  63. cout << "Ваш выбор (1-12): ";
  64. cin >> t;
  65. switch (t)
  66. {
  67. case 1: inputMasBoooksFile(a, m); break;
  68. case 2: outputMasBook(a, m); break;
  69. case 3: addbooks(a, m); break;
  70. case 4: delelteBooks(a, m); break;
  71. case 5: sortyear(a, m); break;
  72. case 6: sortname(a, m); break;
  73. case 7: index = poiskyear(a, m, earlybook, latebook); break;
  74. case 8: outputMasBookSort(a, m); break;
  75. case 9: sortbookfio(a, m); break;
  76. case 10: outputMasBookFileSort(a, m); break;
  77. case 11: outputMasBooksFilepoisk(a, index, earlybook, latebook); break;
  78. case 12: cout << "Конец работы."; system("pause");
  79. return 0;
  80. default: cout << "Нет такого номера меню.\n"; system("pause"); break;
  81. }
  82. }
  83. }
  84.  
  85. void inputMasBoooksFile(books x[], int& n)//ввод данных из файла
  86. {
  87. char file[200], iniz[100];
  88. n = 0;
  89. ifstream fin;
  90. cout << "Введите имя входного файла: ";
  91. cin >> file;
  92. strcat_s(file, ".txt");
  93. fin.open(file);
  94. if (fin.fail()) {
  95. cout << "Ошибка! Файл не открывается!\n";
  96. system("pause");
  97. return;
  98. }
  99. while (!fin.eof())
  100. {
  101. fin >> x[n].fio >> iniz >> x[n].name >> x[n].year;
  102. strcat_s(x[n].fio, " ");
  103. strcat_s(x[n].fio, iniz);
  104. n++;
  105. }
  106. n--;
  107. fin.close();
  108. cout << "Файл введен.\n";
  109. system("pause");
  110. }
  111.  
  112. void outputMasBook(books x[], int n)//вывод результата в текстовый файл
  113. {
  114. cout << " __________________________________________________________________________________________\n";
  115. cout << "| Список книг |\n";
  116. cout << "|__________________________________________________________________________________________|\n";
  117. cout << "| Номер | Фамилия и инициалы | Название | Год издания |\n";
  118. for (int i = 0; i < n; i++)
  119. cout << setw(18) << i + 1 << "|" << setw(28) << x[i].fio << "|" << setw(20) << x[i].name << "|" << setw(22) << x[i].year << "|" << endl;
  120. cout << "|__________________________________________________________________________________________|\n";
  121. system("pause");
  122. }
  123.  
  124. void addbooks(books x[], int& n)//добавление строки
  125. {
  126. books t;
  127. char iniz[100];
  128. if (n == M) {
  129. cout << "Массив заполнен!\n";
  130. system("pause");
  131. return;
  132. }
  133. cout << "Фамилия: ";
  134. cin >> t.fio;
  135. cout << "Инициалы: ";
  136. cin >> iniz;
  137. strcat_s(t.fio, " ");
  138. strcat_s(t.fio, iniz);
  139. cout << "Название: ";
  140. cin >> t.name;
  141. cout << "Год издания:\n";
  142. cin >> t.year;
  143. system("pause");
  144. cout << "Запись добавлена.\n";
  145. x[n] = t;
  146. n = n + 1;
  147. system("pause");
  148. }
  149.  
  150. void delelteBooks(books x[], int& n)//удаление строки
  151. {
  152. int i, j;
  153. char ch[8];
  154. outputMasBook(x, n);
  155. cout << "Номер удаляемой строки: ";
  156. cin >> j;
  157. j--;
  158. if (j < 0 || j >= n) {
  159. cout << "Нет такой строки!\n";
  160. system("pause");
  161. return;
  162. }
  163. cout << j + 1 << "-я строка:\n";
  164. cout << x[j].fio << " " << x[j].name << " " << x[j].year << " " << endl;
  165. cout << "Удалить: yes/ no?";
  166. cin >> ch;
  167. if (strcmp(ch, "no") == 0) return;
  168. if (strcmp(ch, "yes") != 0) {
  169. cout << "Неправильно введен ответ!\n";
  170. system("pause");
  171. return;
  172. }
  173. for (i = j + 1; i < n; i++)
  174. x[i - 1] = x[i];
  175. n--;
  176. cout << "Запись удалена.\n";
  177. system("pause");
  178. }
  179.  
  180. void sortyear(books x[], int n) //сортировка по году издания в порядке возрастания
  181. {
  182. int i, j;
  183. books t;
  184. for (j = 0; j < n; j++)
  185. {
  186. for (i = 0; i < n; i++) {
  187. if (x[i].year > x[j].year) {
  188. t = x[i];
  189. x[i] = x[j];
  190. x[j] = t;
  191. }
  192. }
  193. }
  194. cout << "Записи отсортированы по году издания в порядке возрастания.\n";
  195. system("pause");
  196. }
  197.  
  198. void sortname(books x[], int n) //сортировка по названию книги в алфавитном порядке
  199. {
  200. int i, j;
  201. books t;
  202. for (j = 0; j < n; j++)
  203. {
  204. for (i = 0; i < n; i++)
  205. {
  206. if (strcmp(x[i].name, x[j].name) > 0)
  207. {
  208. t = x[i];
  209. x[i] = x[j];
  210. x[j] = t;
  211. }
  212. }
  213. }
  214. cout << "Записи отсортированы по названию книг в алфавитном порядке.\n";
  215. system("pause");
  216. }
  217.  
  218. int poiskyear(books x[], int n, int& earlybook, int& latebook)//Поиск самой ранней и самой поздней книг данного автора
  219. {
  220. int i, s = 0, a;
  221. char fio[200], iniz[100];
  222. cout << "Введите автора: ";
  223. cout << "Фамилия: ";
  224. cin >> fio;
  225. cout << "Инициалы: ";
  226. cin >> iniz;
  227. strcat_s(fio, " ");
  228. strcat_s(fio, iniz);
  229. for (i = 0; i < n; i++)
  230. if (strcmp(fio, x[i].fio) != 0)
  231. {
  232. s++;
  233. }
  234.  
  235. a = s;
  236. if (s == n)
  237. {
  238. cout << "Такого автора нет\n";
  239. system("pause");
  240. return -1;
  241. }
  242.  
  243. for (i = 0; i < n; i++)
  244. {
  245. if (strcmp(fio, x[i].fio) == 0)
  246. {
  247. earlybook = x[i].year;
  248. latebook = x[i].year;
  249. a = i;
  250. break;
  251. }
  252. }
  253.  
  254.  
  255. for (i = 0; i < n; i++)
  256. {
  257. if ((strcmp(fio, x[i].fio) == 0) && (earlybook > x[i].year)) earlybook = x[i].year;// ищем минимальное
  258. if ((strcmp(fio, x[i].fio) == 0) && (x[i].year > latebook)) latebook = x[i].year; // ищем максимальное
  259. }
  260.  
  261.  
  262. cout << " _______________________________________________________________________________________________________________\n";
  263. cout << "| Резуультат поиска |\n";
  264. cout << "|_______________________________________________________________________________________________________________|\n";
  265. cout << "| Фамилия и инициалы | Год издания самой ранней книги | Год издания самой поздней книги |\n";
  266. cout << "|" << setw(28) << x[a].fio << "|" << setw(40) << earlybook << "|" << setw(41) << latebook << "|" << endl;
  267. cout << "|_______________________________________________________________________________________________________________|\n";
  268. system("pause");
  269. return a;
  270. }
  271.  
  272.  
  273. void sortbookfio(books y[], int k)
  274. {
  275. for (int i = 1; i < k; i++)
  276. for (int j = 0; j < k - i; j++)
  277. if (strcmp(y[j].fio, y[j + 1].fio) > 0)
  278. {
  279. books c = y[j];
  280. y[j] = y[j + 1];
  281. y[j + 1] = c;
  282.  
  283. }
  284.  
  285. else if ((strcmp(y[j].fio, y[j + 1].fio) == 0))
  286. {
  287. if (y[j].year < y[j + 1].year)
  288. {
  289. {
  290. books c = y[j];
  291. y[j] = y[j + 1];
  292. y[j + 1] = c;
  293. }
  294. }
  295. }
  296. cout << "Записи отсортированы по фио в алфавитном порядке.\n";
  297. system("pause");
  298. }
  299.  
  300. void outputMasBookSort(books y[], int k)//вывод сортировки на экран
  301. {
  302. cout << " ___________________________________________________________________________________________\n";
  303. cout << "| Список книг |\n";
  304. cout << "|__________________________________________________________________________________________|\n";
  305. cout << "| Номер | Фамилия и инициалы | Название | Год издания |\n";
  306. for (int i = 0; i < k; i++)
  307. cout << setw(18) << i + 1 << "|" << setw(28) << y[i].fio << "|" << setw(20) << y[i].name << "|" << setw(22) << y[i].year << "|" << endl;
  308. cout << "|__________________________________________________________________________________________|\n";
  309. system("pause");
  310. }
  311.  
  312. void outputMasBookFileSort(books x[], int n)//вывод в файл сортировки
  313. {
  314. char file[200];
  315. ofstream fout;
  316. cout << "Введите имя выходного файла: ";
  317. cin >> file;
  318. strcat_s(file, ".txt");
  319. fout.open(file);
  320. if (fout.fail()) {
  321. cout << "Ошибка! Файл не открывается!\n";
  322. system("pause");;
  323. return;
  324. }
  325. fout << " _______________________________________________________________________________________\n";
  326. fout << "| Список книг |\n";
  327. fout << "|______________________________________________________________________________________|\n";
  328. fout << "| Номер | Фамилия и инициалы | Название | Год издания |\n";
  329. for (int i = 0; i < n; i++)
  330. fout << setw(17) << i + 1 << "|" << setw(28) << x[i].fio << "|" << setw(18) << x[i].name << "|" << setw(21) << x[i].year << "|" << endl;
  331. fout << "|______________________________________________________________________________________|\n";
  332. system("pause");
  333. cout << "Массив выведен в файл " << file << ".\n";
  334. system("pause");
  335. }
  336.  
  337.  
  338. void outputMasBooksFilepoisk(books x[], int a, int& earlybook, int& latebook)// вывод поиска в файл
  339. {
  340. if (a == -2) {
  341. cout << "Поиск не был выполнен\n";
  342. system("pause");
  343. return;
  344. }
  345. else if (a == -1) {
  346. cout << "Автора не существует\n";
  347. system("pause");
  348. return;
  349. }
  350.  
  351. char file[200];
  352. ofstream fout;
  353. cout << "Введите имя выходного файла: ";
  354. cin >> file;
  355. strcat_s(file, ".txt");
  356. fout.open(file);
  357. if (fout.fail())
  358. {
  359. cout << "Ошибка! Файл не открывается!\n";
  360. system("pause");
  361. return;
  362. }
  363. fout << " _______________________________________________________________________________________________________________\n";
  364. fout << "| Список найденных книг |\n";
  365. fout << "|_______________________________________________________________________________________________________________|\n";
  366. fout << "| Фамилия и инициалы | Год издания самой ранней книги | Год издания самой поздней книги |\n";
  367. fout << "|" << setw(28) << x[a].fio << "|" << setw(40) << earlybook << "|" << setw(41) << latebook << "|" << endl;
  368. fout << "|_______________________________________________________________________________________________________________|\n";
  369. system("pause");
  370. cout << "Массив выведен в файл " << file << ".\n";
  371. system("pause");
  372. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement