dariagalich

Untitled

Dec 13th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string>
  4. #include <iomanip>
  5. #include <conio.h>
  6. #include <fstream>
  7. #include <locale.h>
  8. #include <windows.h>
  9. #include <io.h>
  10. #include <fcntl.h>
  11. using namespace std;
  12. //----КОНСТАНТЫ----------
  13. const int up = 72,
  14. down = 80,
  15. right_btn = 77,
  16. left_btn = 75,
  17. enter = 13,
  18. esc = 27,
  19. del = 83,
  20. d_n = 20;
  21. const string items[9] =
  22. {
  23. "Создать список или добавить новый эл-т ",
  24. " Удаление всех элементов списка ",
  25. " Просмотр списка ",
  26. " Запись данных в файл ",
  27. " Чтение из файла ",
  28. " Изменить ",
  29. " Поиск ",
  30. " Старые книги ",
  31. " Выход "
  32. };
  33. const string items2[4] =
  34. {
  35. "Поиск по автору книги ",
  36. "Поиск по названию книги",
  37. "Поиск по жанру книги",
  38. "Выход(esc)"
  39. };
  40. const string items3[3] =
  41. {
  42. "Запись в текстовый файл",
  43. "Запись в бинарный файл"
  44. "Выход(esc)"
  45. };
  46. const string items4[3] =
  47. {
  48. "Чтение из текстового файла",
  49. "Чтение из бинарного файла",
  50. "Выход(esc)"
  51. };
  52. //=======ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ===============
  53. string filename;
  54. int num_pages = 5, // Кол-во элементов на одной странице
  55. width = 0, // Ширина окна
  56. height = 0; // Высота окна
  57. int kol_el = 0;// Кол-во элементов
  58. //-------------------------------------------
  59. struct info
  60. {
  61. string autor;
  62. string name;
  63. string izdatelstvo;
  64. string janr;
  65. string cost;
  66. int d = 0, m = 0, g = 0;
  67. };
  68. struct book
  69. {
  70. info inf;
  71. book* next = 0;
  72. book* pred = 0;
  73. };
  74. //-------------------------------------------
  75. book vvod_book();
  76. book* dob(book* end, const book& s);
  77. book* dob_first(const book& s);
  78. book* udal(book* beg);
  79. book* list(book* beg, int active, int page, int k);
  80. //book* delete_el(book * beg, int num_del);
  81. void cls();
  82. void gotoxy(int xpos, int ypos);
  83. void print(const book& s);
  84. void prosmotr(book* beg);
  85. void old_book(book beg);
  86. void sort_cost(book** beg);
  87. void sort_data(book* beg);
  88. void searchname(book* beg);
  89. void searchautor(book* beg);
  90. void searchjanr(book* beg);
  91. wchar_t* UnicodeString(string input);
  92. int change(book* beg, string& user_autor, string& new_user_autor);
  93. int read_file(string filename, book** beg, book** end);
  94. int write_file(string filename, book* temp);
  95. int write_file_binary(string filename, book* beg);
  96. int read_file_binary(string filename, book** beg, book** end);
  97. int menu(int& active, const string items[], int num_el);
  98. void SetColor(int text, int bg);
  99.  
  100. //===========основная программа===================================================
  101. int main()
  102. {
  103. // меняем размер шрифта
  104. CONSOLE_FONT_INFOEX cfi;
  105. cfi.cbSize = sizeof(cfi);
  106. cfi.nFont = 0;
  107. cfi.dwFontSize.X = 0; // Width of each character in the font
  108. cfi.dwFontSize.Y = 24; // Height
  109. cfi.FontFamily = FF_DONTCARE;
  110. cfi.FontWeight = FW_NORMAL;
  111. SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
  112. //----------------------------------
  113. HANDLE hCon;
  114. // вытаскиваем ширину и высоту
  115. hCon = GetStdHandle(-12);
  116. CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
  117. if (GetConsoleScreenBufferInfo(hCon, &consoleInfo))
  118. {
  119. width = consoleInfo.srWindow.Right - consoleInfo.srWindow.Left + 1;
  120. height = consoleInfo.srWindow.Bottom - consoleInfo.srWindow.Top + 1;
  121. }
  122. //======================================================================
  123. system("cls");
  124. ShowWindow(GetConsoleWindow(), SW_MAXIMIZE); // полноэкранный режим
  125. setlocale(LC_ALL, "Rus");
  126. system("color 8F");
  127. book* beg = NULL,
  128. * end = NULL, input;
  129. string filename;
  130. int Num, current = 1;
  131. string user_autor, new_user_autor;
  132. int num_e = 0;
  133. while (1) {
  134. system("cls");
  135. switch (menu(current, items, 9))
  136. {
  137. case 1://создание списка или добовление нового эл-та в список
  138. system("cls");
  139. if (beg)
  140. end = dob(end, vvod_book());
  141. else
  142. {
  143. beg = dob_first(vvod_book());
  144. end = beg;
  145. }
  146. kol_el++;
  147. break;
  148. case 2://удаление всех элементов в списке
  149. system("cls");
  150. beg = udal(beg);//(beg,num_del);
  151. cout << "Нажмите любую клавишу" << endl;
  152. cin.get();
  153. break;
  154. case 3://просмотр
  155. system("cls");
  156. prosmotr(beg);
  157. list(beg, 0, 0, 0);
  158. break;
  159. case 4://запись в файл
  160. {
  161. system("cls");
  162. int current = 1;
  163. cout << "Выберите формат файла в который хотите записать:";
  164. switch (menu(current, items3, 3))
  165. {
  166. case 1://Запись в текстовый файл
  167. system("cls");
  168. write_file(filename, beg);
  169. break;
  170. case 2://Запись в бинарный файл
  171. write_file_binary(filename, beg);
  172. cin.get();
  173. break;
  174. case 27:break;
  175. }
  176. }
  177. break;
  178. case 5://чтение из файла
  179. {
  180. system("cls");
  181. int current = 1;
  182. cout << "Выберите формат файла в который хотите записать:";
  183. switch (menu(current, items4, 3))
  184. {
  185. case 1://чтение из текстового файла
  186. system("cls");
  187. read_file(filename, &beg, &end);
  188. break;
  189. case 2://чтение из бинарного файла
  190. read_file_binary(filename, &beg, &end);
  191. cin.get();
  192. break;
  193. case 27:break;
  194. }
  195. }
  196.  
  197. break;
  198. case 6://редактирование списка
  199. system("cls");
  200. cout << "Введите автора, которого вы хотите изменить " << endl;
  201. cin >> user_autor;
  202. cout << "Введите нового атвора: " << endl;
  203. cin >> new_user_autor;
  204. Num = change(beg, user_autor, new_user_autor);
  205. if (Num == 1) cout << "Автор успешно перезаписан." << endl;
  206. else cout << "Автор не найден!" << endl;
  207. system("pause");
  208. change(beg, user_autor, new_user_autor);
  209. cin.get();
  210. break;
  211. case 7://поиск
  212. {
  213. system("cls");
  214. int current = 1;
  215. switch (menu(current, items2, 4))
  216. {
  217. case 1://поск по автору
  218. system("cls");
  219. searchautor(beg);
  220. cin.get();
  221. break;
  222. case 2:
  223. system("cls");
  224. searchname(beg);//поиск по названию книги
  225. cin.get();
  226. break;
  227. case 3:
  228. searchjanr(beg);
  229. break;
  230. case 27:break;
  231. }
  232. break;
  233. }
  234. case 8://старые книги
  235. if (!beg)
  236. {
  237. MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
  238. break;
  239. }
  240. old_book(*beg);
  241. break;
  242. case 9: return 0;
  243. }
  244. }
  245. return 0;
  246. }
  247.  
  248. //-----------------------------------------------------------------------------
  249. int change(book* beg, string& user_autor, string& new_user_autor)
  250. {
  251. book* temp = beg;
  252. while (temp != NULL)
  253. {
  254. if (temp->inf.autor == user_autor)
  255. {
  256. temp->inf.autor = new_user_autor;
  257. return 1;
  258. }
  259. else
  260. {
  261. temp = temp->next;
  262.  
  263. }
  264. }
  265. return 0;
  266. }
  267. //------------------------------------------------------------------------------
  268. void searchjanr(book* beg)
  269. {
  270. book* temp = beg;
  271. char fname[d_n];
  272. int fl = 0;
  273.  
  274. system("cls");
  275.  
  276. if (!beg)
  277. {
  278. MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
  279. return;
  280. }
  281.  
  282. cout << "Введите название жанра для поиска" << endl;
  283. cin >> fname;
  284. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  285. cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  286. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  287. while (temp)
  288. {
  289. if (fname == temp->inf.janr)
  290. {
  291. print(*temp);
  292. fl = 1;
  293. }
  294. temp = temp->next;
  295. }
  296. if (fl != 1)
  297. {
  298. cout << "Книги с таким жанром не найдено" << endl;
  299. }
  300. system("pause");
  301. }
  302. //------------------------------------------------------------------------------
  303. void searchname(book* beg)
  304. {
  305. book* temp = beg;
  306. char fname[d_n];
  307. int fl = 0;
  308.  
  309. system("cls");
  310.  
  311. if (!beg)
  312. {
  313. MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
  314. return;
  315. }
  316.  
  317. cout << "Введите название книги для поиска" << endl;
  318. cin >> fname;
  319. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  320. cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  321. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  322. while (temp)
  323. {
  324. if (fname == temp->inf.name)
  325. {
  326. print(*temp);
  327. fl = 1;
  328. }
  329. temp = temp->next;
  330. }
  331. if (fl != 1)
  332. {
  333. cout << "Книги с таким названием не найдено" << endl;
  334. }
  335. system("pause");
  336. }
  337. //-----------------------------------------------------------------------------
  338. void searchautor(book* beg)
  339. {
  340. book* temp = beg;
  341. int fl = 0;
  342. char fa[d_n];
  343. system("cls");
  344. if (!beg)
  345. {
  346. MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
  347. return;
  348. }
  349. cout << "Введите автора для поиска" << endl;
  350. cin >> fa;
  351.  
  352. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  353. cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  354. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  355. while (temp)
  356. {
  357. if (fa == temp->inf.autor)
  358. {
  359. print(*temp);
  360. fl = 1;
  361. }
  362. temp = temp->next;
  363. }
  364. if (fl != 1) {
  365. cout << "Книги с таким автором не найдено" << endl;
  366. }
  367. system("pause");
  368. }
  369. //-----------------------------------------------------------------------------
  370. void old_book(book beg)
  371. {
  372. book* temp = &beg;
  373. sort_data(&beg);
  374. system("cls");
  375.  
  376. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  377. cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  378. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  379. for (int i = 0; i < 5; i++) {
  380. print(*temp);
  381. temp = temp->next;
  382. }
  383.  
  384. system("pause");
  385. return;
  386.  
  387. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  388. cin.get();
  389. }
  390. //-----------------------------------------------------------------------------
  391. void prosmotr(book* beg)
  392. {
  393. int k = 1;
  394. if (!beg)
  395. {
  396. cout << "список пустой" << endl;
  397. cin.get();
  398. return;
  399. }
  400. book* temp = beg;
  401. cout << "+—|—————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  402. cout << "|№| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  403. cout << "+—|—————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  404. while (temp)
  405. {
  406. cout << "|" << k++ << "|";
  407. print(*temp);
  408. temp = temp->next;
  409.  
  410. }
  411. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  412. cin.get();
  413. }
  414. //-----------------------------------------------------------------------------
  415. book vvod_book()
  416. {
  417. book s;
  418. cout << "Введите автора:" << endl;
  419. while (1)
  420. {
  421. cin >> s.inf.autor;
  422. //if (atoi(s.autor)==0)
  423. if ((s.inf.autor[0] >= '0') && (s.inf.autor[0] <= '9'))
  424. break;
  425. cout << "Ошибка ввода!" << endl;
  426. }
  427. cout << "Введите название книги:" << endl;
  428. while (1)
  429. {
  430. cin >> s.inf.name;
  431. //if (atoi(s.name)==0)
  432. break;
  433. cout << "Ошибка ввода!" << endl;
  434. }
  435. cout << "Введите издательство:" << endl;
  436. while (1)
  437. {
  438. cin >> s.inf.izdatelstvo;
  439. //if (atoi(s.izdatelstvo) == 0)
  440. break;
  441. cout << "Ошибка ввода!" << endl;
  442. }
  443. cout << "Введите жанр:" << endl;
  444. while (1)
  445. {
  446. cin >> s.inf.janr;
  447. //if (atoi(s.janr) == 0)
  448. break;
  449. cout << "Ошибка ввода!" << endl;
  450. }
  451. cout << "Введите дату поступления:" << endl;
  452. cout << "Введите день:";
  453. while (1)
  454. {
  455. cin >> s.inf.d;
  456. if ((s.inf.d >= 1) && (s.inf.d <= 31))
  457. break;
  458. cout << "Ошибка ввода!Ведите правильную дату!" << endl;
  459. }
  460. cout << "Введите месяц:";
  461. while (1)
  462. {
  463. cin >> s.inf.m;
  464. if ((s.inf.m >= 1) && (s.inf.m <= 12))
  465. break;
  466. cout << "Ошибка ввода!Ведите правильную дату!" << endl;
  467. }
  468. cout << "Введите год:";
  469. while (1)
  470. {
  471. cin >> s.inf.g;
  472. if ((s.inf.g >= 1900) && (s.inf.g <= 2050))
  473. break;
  474. cout << "Ошибка ввода!Ведите правильную дату!" << endl;
  475. }
  476. cout << "Введите стоимость книги:" << endl;
  477. cin >> s.inf.cost;
  478.  
  479. kol_el++;
  480. return s;
  481. }
  482. //-----------------------------------------------------------------------------
  483. void print(const book& s)
  484. {
  485. cout << s.inf.autor << setw(18 - (s.inf.autor).length()) << "|";
  486. cout << s.inf.name << setw(21 - (s.inf.name).length()) << "|";
  487. cout << s.inf.izdatelstvo << setw(19 - (s.inf.izdatelstvo).length()) << "|";
  488. cout << s.inf.janr << setw(17 - (s.inf.janr).length()) << "|";
  489. if (s.inf.d < 10) {
  490. cout << 0 << s.inf.d << ".";
  491. }
  492. else {
  493. cout << s.inf.d << ".";
  494. }
  495. if (s.inf.m < 10) {
  496. cout << 0 << s.inf.m << ".";
  497. }
  498. else {
  499. cout << s.inf.m << ".";
  500. }
  501. cout << s.inf.g << setw(9) << "|";
  502. cout << s.inf.cost << setw(16 - (s.inf.cost).length()) << "|" << endl;
  503.  
  504. }
  505. //--------------ф-я добавления или создания эл-та-------------------------------
  506. book* dob(book* end, const book& s)
  507. {
  508. book* newE = new book;
  509. *newE = s;
  510. newE->next = 0;
  511. newE->pred = end;
  512. end->next = newE;
  513. end = newE;
  514. return end;
  515. }
  516. //--------------создание первого эл-та------------------------------
  517. book* dob_first(const book& s)
  518. {
  519. book* beg = new book;
  520. *beg = s;
  521. beg->next = 0;
  522. beg->pred = 0;
  523. return beg;
  524. }
  525. //-----------------------------------------------------------------------------
  526. int read_file(string filename, book** beg, book** end)
  527. {
  528. cout << "Введите название файла" << endl;
  529. cin >> filename;
  530. ifstream fin(filename, ios::in);
  531. if (!fin) {
  532.  
  533. MessageBox(0, L"Невозможно открыть файл!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
  534. return 0;
  535.  
  536. }
  537. book s;
  538. *beg = 0;
  539. fin.seekg(0, ios::beg);
  540. while (fin >> s.inf.autor)
  541. {
  542. fin >> s.inf.name;
  543. fin >> s.inf.izdatelstvo;
  544. fin >> s.inf.janr;
  545. fin >> s.inf.d;
  546. fin >> s.inf.m;
  547. fin >> s.inf.g;
  548. fin >> s.inf.cost;
  549.  
  550.  
  551. if (*beg) {
  552. *end = dob(*end, s);
  553. }
  554. else {
  555. *beg = dob_first(s); *end = *beg;
  556. }
  557.  
  558. kol_el++;
  559. }
  560. cout << "Считывание прошло успешно" << endl;
  561. cin.get();
  562. cin.get();
  563. return 0;
  564. }
  565. //-----------------------------------------------------------------------------
  566. int write_file(string filename, book* temp)
  567. {
  568. cout << "Введите название файла" << endl;
  569. cin >> filename;
  570. ofstream fout(filename, ios_base::app); // открытие файла
  571. if (!fout)
  572. {
  573. cout << "Не могу открыть файл для записи" << endl;
  574. return 1;
  575. }
  576. while (temp)// пока temp!=0 выводим эл-ты в файл
  577. {
  578. fout << temp->inf.autor << endl;
  579. fout << temp->inf.name << endl;
  580. fout << temp->inf.izdatelstvo << endl;
  581. fout << temp->inf.janr << endl;
  582. fout << temp->inf.d << endl;
  583. fout << temp->inf.m << endl;
  584. fout << temp->inf.g << endl;
  585. fout << temp->inf.cost << endl;
  586. temp = temp->next;
  587. }
  588. cout << "Данные сохранены в файле: " << filename << endl;
  589. cout << "==============================" << endl;
  590. cout << "Нажмите любую клавишу" << endl;
  591. cin.get();
  592. return 0;
  593. }
  594. //-----------------------------------------------------------------------------
  595. int write_file_binary(string filename, book* beg)
  596. {
  597. cout << "Введите название файла" << endl;
  598. cin >> filename;
  599. book* temp = beg;
  600. ofstream fout(filename + ".dat", ios::binary); // открытие файла
  601. if (!fout)
  602. {
  603. cout << "Не могу открыть файл для записи" << endl;
  604. return 1;
  605. }
  606. while (temp) {
  607. fout.write((char*)&temp->inf, sizeof temp->inf);
  608. temp = temp->next;
  609. }
  610. fout.close();
  611. cout << "Данные сохранены в файле: " << filename << endl;
  612. cout << "==============================" << endl;
  613. cout << "Нажмите любую клавишу" << endl;
  614. cin.get();
  615. return 0;
  616. }
  617.  
  618. // ==========ЧТЕНИЕ ИЗ БИНАРНОГО ФАЙЛА==========
  619. int read_file_binary(string filename, book** beg, book** end)
  620. {
  621. cout << "Введите название файла" << endl;
  622. cin >> filename;
  623. ifstream fin(filename + ".dat", ios::binary);
  624.  
  625. if (!fin) {
  626. MessageBox(0, L"Нет файла!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
  627. return 1;
  628. }
  629.  
  630. fin.seekg(ios_base::beg);
  631. book* t = new book;
  632. t->next = NULL;
  633. t->pred = NULL;
  634. *beg = 0;
  635.  
  636. while (fin.read((char*)&t->inf, sizeof t->inf))
  637. {
  638. if (*beg)
  639. *end = dob(*end, *t);
  640. else {
  641. *beg = dob_first(*t);
  642. *end = *beg;
  643. }
  644. }
  645. fin.close();
  646. cout << "Чтене прошло успешно" << endl;
  647. cout << "==============================" << endl;
  648. cout << "Нажмите любую клавишу" << endl;
  649. return 0;
  650. }
  651.  
  652. //-----------------------------------------------------------------------------
  653. book* udal(book* beg)
  654. {
  655. book* temp;
  656. if (!beg)
  657. {
  658. cout << "список пустой" << endl;
  659. cin.get();
  660. return 0;
  661. }
  662. while (beg)
  663. {
  664. temp = beg;
  665. beg = beg->next;
  666. delete temp;
  667. }
  668. cout << "==============================" << endl;
  669. cout << "====удаление прошло успешно===" << endl;
  670. cout << "==============================" << endl;
  671. return beg;
  672. }
  673. //----------------------------------------------------------------
  674. void sort_data(book* beg)
  675. {
  676. book* temp_i = beg, * temp_j = beg;
  677. for (; temp_i; temp_i = temp_i->next)
  678. {
  679. for (temp_j = temp_i; temp_j; temp_j = temp_j->next)
  680. {
  681. if (temp_i->inf.g != temp_j->inf.g)
  682. {
  683. if (temp_i->inf.g > temp_j->inf.g)
  684. {
  685. swap(temp_i->inf, temp_j->inf);
  686. continue;
  687. }
  688. }
  689. else if (temp_i->inf.m != temp_j->inf.m)
  690. {
  691. if (temp_i->inf.m > temp_j->inf.m)
  692. {
  693. swap(temp_i->inf, temp_j->inf);
  694. continue;
  695. }
  696. }
  697. else if (temp_i->inf.d > temp_j->inf.d)
  698. {
  699. swap(temp_i->inf, temp_j->inf);
  700. continue;
  701. }
  702. }
  703. }
  704. cout << "Сортировка прошла успешно" << endl;
  705. system("pause");
  706. }
  707. //----------------------------------------
  708. void sort_cost(book** beg) {
  709. book* temp_i = *beg,
  710. * temp_j = *beg;
  711.  
  712. for (; temp_i; temp_i = temp_i->next) {
  713. for (temp_j = temp_i; temp_j; temp_j = temp_j->next) {
  714. if (stoi(temp_i->inf.cost) > stoi(temp_j->inf.cost)) {
  715. swap(temp_i->inf, temp_j->inf);
  716. }
  717. }
  718. }
  719.  
  720. cout << "Сортировка прошла успешно" << endl;
  721. system("pause");
  722. }
  723. // ==========ШАБЛОН ПЕЧАТИ МЕНЮ==========
  724. void print_menu(int sym, const string items[], const int N_ITEMS)
  725. {
  726. for (int i = 1; i <= N_ITEMS; i++)
  727. {
  728. SetColor(15, 8);
  729. gotoxy((width / 2) - 10, (height / 2) + i - 3); // ставим меню в центр
  730. if (i == sym)
  731. {
  732. SetColor(16, 3);
  733. }
  734. cout << items[i - 1] << endl;
  735. SetColor(15, 8);
  736. }
  737. }
  738. // ==========МЕНЮ==========
  739. int menu(int& active, const string items[], int num_el)
  740. {
  741. wint_t buf;
  742. while (1)
  743. {
  744. cls();
  745. print_menu(active, items, num_el);
  746.  
  747. buf = _getwch();
  748. switch (buf)
  749. {
  750. case up: // клавиша вверх
  751. if (active > 1) active--;
  752. break;
  753. case down: // клавиша вниз
  754. if (active < num_el) active++;
  755. break;
  756. case enter: // клавиша enter
  757. return active;
  758. case esc: // клавиша escape
  759. return -1;
  760. }
  761. }
  762. }
  763. // ==========УСТАНОВКА ЦВЕТА ТЕКСТА И ФОНА==========
  764. void SetColor(int text, int bg)
  765. {
  766. HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  767. SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | text));
  768. }
  769. // ==========ПЕРЕМЕЩЕНИЕ КУРСОРА НА ВЫБРАННУЮ ПОЗИЦИЮ==========
  770.  
  771. void gotoxy(int xpos, int ypos)
  772. {
  773. COORD scrn;
  774. HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
  775. scrn.X = xpos; scrn.Y = ypos;
  776. SetConsoleCursorPosition(hOuput, scrn);
  777. }
  778. //=====================================
  779. wchar_t* UnicodeString(string input) {
  780. const char* orig = input.c_str();
  781. size_t origsize = strlen(orig) + 1;
  782. const size_t newsize = 100;
  783. size_t convertedChars = 0;
  784. wchar_t* wcstring = new wchar_t[newsize];
  785. mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);
  786. return wcstring;
  787. }
  788. // ==========ОЧИСТКА ЭКРАНА БЕЗ МЕРЦАНИЯ==========
  789. void cls() {
  790. HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);
  791. COORD cd;
  792. cd.X = 0;
  793. cd.Y = 0;
  794. SetConsoleCursorPosition(hd, cd);
  795. }
  796. /*// ==========УДАЛЕНИЕ==========
  797. book* delete_el(book* beg,int k)
  798. {
  799. book* temp;
  800. book* buf;
  801. int c=1;
  802. if (!beg) {
  803. MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
  804. return 0;
  805. }
  806.  
  807. temp = beg;
  808.  
  809. // если один элемент в списке
  810. if (beg->next == 0) {
  811. delete temp;
  812. return 0;
  813. }
  814.  
  815. while (temp) {
  816. if (num_del == stoi(temp->inf.autor)) { // если введённый номер совпал с шифром задания
  817. buf = temp->next;
  818.  
  819. // если удаляется второй элемент
  820. if (temp->pred == 0) {
  821. buf->pred = 0;
  822. delete temp;
  823. return buf;
  824. }
  825.  
  826. if (buf != 0) buf->pred = temp->pred; // если следующий элемент не 0
  827.  
  828. buf = temp->pred;
  829. buf->next = temp->next;
  830. delete temp;
  831. return beg;
  832. }
  833. temp = temp->next;
  834. }
  835. MessageBox(0, L"Произошла ошибка!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
  836. return beg;
  837.  
  838. }*/
  839. book* list(book* beg, int active, int page, int k)
  840. {
  841. book* temp = beg,
  842. * buf_temp = beg,
  843. * buf_el = beg;
  844.  
  845. int c = 0,
  846. key = 0,
  847. first_page = 2; // переменная для первой страницы, если это первая страница, тогда 1, в остальных случаях = 2
  848.  
  849. k = 1;
  850. page = 1;
  851. active = 1;
  852.  
  853. while (1)
  854. {
  855. if (!beg)
  856. {
  857. MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
  858. return beg;
  859. }
  860.  
  861. if (k != kol_el + 1 && first_page != 1)
  862. {
  863. cout << "+—|—————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  864. cout << "|№| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  865. cout << "+—|—————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  866.  
  867. do {
  868.  
  869. // находим первый элемент с предыдущей страницы
  870. if (k % 5 == 0 && page != 1) {
  871. buf_el = temp;
  872.  
  873. for (int j = 0; j < 4; j++, temp = temp->pred) {
  874. buf_temp = temp->pred;
  875. }
  876. temp = buf_el;
  877. }
  878.  
  879. cout << "|" << k++ << "|";
  880. print(*temp);
  881. temp = temp->next;
  882. } while (temp && k % 5 != 0);
  883.  
  884. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  885. }
  886.  
  887. c = _getwch();
  888. key = _getwch();
  889.  
  890. switch (key) {
  891. case right_btn:
  892. first_page = 2;
  893. if (k != kol_el + 1) {
  894. page++;
  895. system("cls");
  896. }
  897. break;
  898. case left_btn:
  899. if (page != 1) {
  900. system("cls");
  901. k -= 8;
  902. page--;
  903. temp = buf_temp;
  904. }
  905. else first_page = 1;
  906. break;
  907. case esc:
  908. break;
  909. }
  910. }
  911. }
Advertisement
Add Comment
Please, Sign In to add comment