Advertisement
Guest User

Untitled

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