Advertisement
MARSHAL327

Untitled

Dec 12th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 27.53 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.        
  863.         c = _getwch();
  864.         key = _getwch();
  865.         switch (key) {
  866.         case right_btn:
  867.             system("cls");
  868.             break;
  869.         case left_btn:
  870.             break;
  871.         default:
  872.             break;
  873.         }
  874.     }
  875. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement