Advertisement
Guest User

Untitled

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