Advertisement
MARSHAL327

Untitled

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