Advertisement
MARSHAL327

Untitled

Dec 2nd, 2019
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 24.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <fstream>
  4. #include <string>
  5. #include <windows.h>
  6. #include <conio.h>
  7. #include <stdio.h>
  8. #include <cwchar>
  9. #include <winuser.h>
  10. #include <tchar.h>
  11. using namespace std;
  12. //===============================================Global_Elemenst================================================
  13. string File_name;
  14. float total_elements = 0;
  15. int num_pages = 5,
  16. width = 0,
  17. height = 0,
  18. num_el = 0;
  19. //===============================================Menu_Names===============================================
  20. const string items[13] = {
  21.     "   Add              ",
  22.     "   Delete All       ",
  23.     "   Delete First     ",
  24.     "   View             ",
  25.     "   Read File(txt)   ",
  26.     "   Save File(txt)   ",
  27.     "   Read File(bin)   ",
  28.     "   Save File(bin)   ",
  29.     "   Search           ",
  30.     "   Sort             ",
  31.     "   My Function      ",
  32.     "   Delete By Number ",
  33.     "   Exit             " };
  34. //===============================================Sort_Names===============================================
  35. const string sort_items[6] = {
  36.     " Name     ",
  37.     " Birthday ",
  38.     " Sex      ",
  39.     " Weight   ",
  40.     " Rank     ",
  41.     " Team     " };
  42. //===============================================Buttons===============================================
  43. const int up = 72,
  44. down = 80,
  45. right_btn = 77,
  46. left_btn = 75,
  47. enter = 13,
  48. esc = 27,
  49. del = 83;
  50. //===============================================Data============================
  51. struct info {
  52.     string Name;
  53.     string Birthday;
  54.     string Sex;
  55.     string Weight;
  56.     string Rank;
  57.     string Team;
  58. };
  59. //===============================================List============================
  60. struct Sportsman {
  61.     info D;
  62.     Sportsman* next = 0;
  63.     Sportsman* prev = 0;
  64. };
  65. //===============================================Interface===============================================
  66. Sportsman* Add(Sportsman* right, const Sportsman& S);
  67. Sportsman* Add_first(const Sportsman& S);
  68. Sportsman* Del(Sportsman* left);
  69. Sportsman Information();
  70. void Print(const Sportsman& S);
  71. void Watch(Sportsman* left);
  72. void Read_File(string File_name, Sportsman** left, Sportsman** right);
  73. void Write_File(string File_name, Sportsman* left);
  74. void SetColor(int text, int bg);
  75. void print_menu(int sym, const string items[], const int N_ITEMS);
  76. void cls();
  77. void gotoxy(int xpos, int ypos);
  78. int menu(int& active, const string items[], int num_el);
  79. int Read_Bin_File(string filename, Sportsman** left, Sportsman** right);
  80. void Write_Bin_File(string File_name, Sportsman* left);
  81. void clearRow(int row);
  82. void Search(Sportsman* left);
  83. void Sort(Sportsman* left, int sort_active);
  84. void My_Function(Sportsman* left);
  85. //Sportsman* delete_By_Number(Sportsman* left);
  86. //===============================================_Main_===============================================
  87. int main() {
  88.     SetColor(7, 0);
  89.     Sportsman* left = 0,
  90.         * right = 0;
  91.     //========================================Width/height_OF_Window=======================================
  92.     HANDLE hCon;
  93.     hCon = GetStdHandle(-12);
  94.     CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
  95.     if (GetConsoleScreenBufferInfo(hCon, &consoleInfo))
  96.     {
  97.         width = consoleInfo.srWindow.Right - consoleInfo.srWindow.Left + 1;
  98.         height = consoleInfo.srWindow.Bottom - consoleInfo.srWindow.Top + 1;
  99.     }
  100.     //========================================Open_Full_Winodw=======================================
  101.     ShowWindow(GetConsoleWindow(), SW_MAXIMIZE);
  102.     //============================================Case======================================================
  103.     int current = 1;
  104.     int sort_active = 0;
  105.     int current_sort = 1;
  106.     Read_File("1.txt", &left, &right);
  107.     while (1)
  108.     {
  109.         switch (menu(current, items, 13))
  110.         {
  111.         case 1:
  112.             system("cls");
  113.             if (left) right = Add(right, Information());
  114.             else {
  115.                 left = Add_first(Information());
  116.                 right = left;
  117.             } break;
  118.         case 2:
  119.             system("cls");
  120.             while (left)
  121.                 left = Del(left);
  122.             cout << "Press any key" << endl;
  123.             cin.get();
  124.             break;
  125.         case 3:
  126.             system("cls");
  127.             left = Del(left);
  128.             cout << "Press any key" << endl;
  129.             cin.get();
  130.             break;
  131.         case 4:
  132.             system("cls");
  133.             Watch(left);
  134.             break;
  135.  
  136.         case 5:
  137.             system("cls");
  138.             cout << "Choose Name of the File" << endl;
  139.             cin >> File_name;
  140.             Read_File(File_name, &left, &right);
  141.             break;
  142.         case 6:
  143.             system("cls");
  144.             cout << "Choose Name of the File" << endl;
  145.             cin >> File_name;
  146.             Write_File(File_name, left);
  147.             break;
  148.         case 7:
  149.             system("cls");
  150.             cout << "Choose Name of the File" << endl;
  151.             cin >> File_name;
  152.             Read_Bin_File(File_name, &left, &right);
  153.             break;
  154.         case 8:
  155.             system("cls");
  156.             cout << "Choose Name of the File" << endl;
  157.             cin >> File_name;
  158.             Write_Bin_File(File_name, left);
  159.             break;
  160.         case 9:
  161.             system("cls");
  162.             Search(left);
  163.             system("pause");
  164.             break;
  165.         case 10:
  166.             system("cls");
  167.             sort_active = menu(current_sort, sort_items, 6);
  168.             MessageBox(0, L"It was sorted!", L"Information", MB_ICONINFORMATION | MB_SETFOREGROUND);
  169.             Sort(left, sort_active);
  170.             break;
  171.         case 11:
  172.             system("cls");
  173.             My_Function(left);
  174.             break;
  175.         /*case 12:
  176.             system("cls");
  177.             left = delete_By_Number(left);
  178.             break;*/
  179.         case -1:
  180.         case 13:
  181.             return 0;
  182.             break;
  183.         }
  184.     }
  185. }
  186. //=============================================Functions============================
  187. //=============================================Add==================================
  188. Sportsman* Add(Sportsman * right, const Sportsman & S) {
  189.     Sportsman* newE = new Sportsman;
  190.     *newE = S;
  191.     newE->next = 0;
  192.     newE->prev = right;
  193.     right->next = newE;
  194.     right = newE;
  195.     return right;
  196. }
  197. //=============================================Add_First==============================
  198. Sportsman* Add_first(const Sportsman & S) {
  199.     Sportsman* left = new Sportsman;
  200.     *left = S;
  201.     left->next = 0;
  202.     left->prev = 0;
  203.     return left;
  204. }
  205. //=============================================Delete=============================================
  206. Sportsman* Del(Sportsman * left) {
  207.     Sportsman* temp;
  208.     if (!left) { cout << "Empty" << endl; return 0; }
  209.     else {
  210.         temp = left;
  211.         left = left->next;
  212.         delete temp;
  213.     }
  214.     total_elements--;
  215.     return left;
  216. }
  217. //=============================================Information=============================================
  218. Sportsman Information() {
  219.     struct Sportsman S;
  220.     boolean logic = 1;
  221.     cout << "Choose Name(15 Symbols)" << endl;
  222.     int max_length = 15;
  223.     do {
  224.         getline(cin, S.D.Name);
  225.         for (int i = 0; i < S.D.Name.length(); i++) {
  226.             if (isdigit(S.D.Name[i])) {
  227.                 MessageBox(0, L"Wrong name!", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND);
  228.                 gotoxy(0, 1);
  229.                 clearRow(2);
  230.                 break;
  231.             }
  232.             else if (S.D.Name.length() <= max_length) {
  233.                 logic--;
  234.                 break;
  235.             }
  236.             else {
  237.                 MessageBox(0, L"Wrong name!", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND);
  238.                 gotoxy(0, 1);
  239.                 clearRow(2);
  240.                 break;
  241.             }
  242.         }
  243.  
  244.     } while (logic);
  245.     cout << "Choose Birthday (1900-2010)" << endl;
  246.     do {
  247.         int length = 0;
  248.         int pospos = 0;
  249.         int posarrays[8] = { 0, 1, 3, 4, 6, 7, 8, 9 };
  250.         int pos = posarrays[pospos];
  251.         S.D.Birthday = "__.__.____";
  252.         cout << S.D.Birthday;
  253.         while (length != 8) {
  254.             int ch = _getch();
  255.             if (ch == 8 && length != 0) {
  256.                 length--;
  257.                 S.D.Birthday[pos - ((length == 3 || length == 1) ? 2 : 1)] = '_'; // пропускаем точки
  258.                 gotoxy(0, 3);
  259.                 pospos--;
  260.                 pos = posarrays[pospos];
  261.                 cout << S.D.Birthday;
  262.             }
  263.             else if (ch >= '0' && ch <= '9') {
  264.                 length++;
  265.                 S.D.Birthday[pos] = ch;
  266.                 gotoxy(0, 3);
  267.                 pospos++;
  268.                 pos = posarrays[pospos];
  269.                 cout << S.D.Birthday;
  270.             }
  271.         }
  272.         int Day = stoi(S.D.Birthday.substr(0, 2));
  273.         int Month = stoi(S.D.Birthday.substr(3, 2));
  274.         int Year = stoi(S.D.Birthday.substr(6, 4));
  275.         int days_in_month[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
  276.         if (Year % 4 == 0)
  277.             days_in_month[2] = 29;
  278.         if ((Month < 1) || (Month > 12))
  279.             MessageBox(0, L"Wrong Month!", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND);
  280.         else if ((Day < 1) || (Day > days_in_month[Month]))
  281.             MessageBox(0, L"Wrong Day!", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND);
  282.         else if ((Year > 2010) || (Year < 1900))
  283.             MessageBox(0, L"Wrong Year!", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND);
  284.         else break;
  285.         gotoxy(0, 3);
  286.         clearRow(4);
  287.     } while (true);
  288.     cout << "\nChoose Sex (M/F)" << endl;
  289.     do {
  290.         getline(cin, S.D.Sex);
  291.         if ((S.D.Sex == "M") || (S.D.Sex == "F"))
  292.             break;
  293.         else
  294.             MessageBox(0, L"There is no Sex like that!", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND);
  295.         gotoxy(0, 5);
  296.         clearRow(6);
  297.     } while (true);
  298.     cout << "Choose Weight (40..150)" << endl;
  299.     do {
  300.         try {
  301.             getline(cin, S.D.Weight);
  302.             int Max_Weight = 3;
  303.             int count = 0;
  304.             for (int i = 0; i < S.D.Weight.length(); i++) {
  305.                 if (!(S.D.Weight[i] >= '0' && S.D.Weight[i] <= '9'))
  306.                     throw 1;
  307.             }
  308.             if (!(stoi(S.D.Weight) >= 40 && stoi(S.D.Weight) <= 150))
  309.                 throw 1;
  310.             break;
  311.  
  312.         }
  313.         catch (int X) {
  314.             if (X == 1) {
  315.                 MessageBox(0, L"Wrong Weight", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND);
  316.             }
  317.             gotoxy(0, 7);
  318.             clearRow(8);
  319.         }
  320.     } while (true);
  321.     cout << "Choose Rank (1..5)" << endl;
  322.     do {
  323.         try {
  324.             getline(cin, S.D.Rank);
  325.             for (int i = 0; i < S.D.Rank.length(); i++) {
  326.                 if (!(S.D.Rank[i] >= '0' && S.D.Rank[i] <= '9'))
  327.                     throw 1;
  328.             }
  329.             if (!(stoi(S.D.Rank) >= 1 && stoi(S.D.Rank) <= 5))
  330.                 throw 1;
  331.             break;
  332.  
  333.         }
  334.         catch (int X) {
  335.             if (X == 1) {
  336.                 MessageBox(0, L"Wrong Rank", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND);
  337.             }
  338.             gotoxy(0, 9);
  339.             clearRow(10);
  340.         }
  341.     } while (true);
  342.     cout << "Choose Team (15 Symbols)" << endl;
  343.     do {
  344.         getline(cin, S.D.Team);
  345.         if (S.D.Team.length() <= max_length)
  346.             break;
  347.         else
  348.             MessageBox(0, L"To many Symbols!", L"Warning", MB_ICONWARNING | MB_SETFOREGROUND); {
  349.             gotoxy(0, 11);
  350.             clearRow(12); }
  351.     } while (true);
  352.  
  353.     total_elements++;
  354.     return S;
  355. }
  356. // =======================================Clear_Row==========
  357. void clearRow(int row)
  358. {
  359.     DWORD a;
  360.     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  361.     COORD coord = { 0, row - 1 };
  362.     CONSOLE_SCREEN_BUFFER_INFO csbi;
  363.     GetConsoleScreenBufferInfo(hStdOut, &csbi);
  364.     FillConsoleOutputCharacter(hStdOut, ' ', 80, coord, &a);
  365. }
  366. // ===================================Gotoxy==========================
  367. void gotoxy(int xpos, int ypos)
  368. {
  369.     COORD scrn;
  370.     HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
  371.     scrn.X = xpos; scrn.Y = ypos;
  372.     SetConsoleCursorPosition(hOuput, scrn);
  373. }
  374. //=================================SetColor================================
  375. void SetColor(int text, int bg) {
  376.     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  377.     SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | text));
  378. }
  379. //=================================Print_Menu=================================
  380. void print_menu(int sym, const string items[], const int N_ITEMS) {
  381.     for (int i = 1; i <= N_ITEMS; i++) {
  382.         SetColor(7, 0);
  383.         gotoxy((width / 2) - 6, (height / 2) + i - 3);
  384.         if (i == sym) {
  385.             SetColor(7, 12);
  386.         }
  387.         cout << items[i - 1] << endl;
  388.         SetColor(7, 0);
  389.     }
  390. }
  391. //=================================Menu=================================
  392. int menu(int& active, const string items[], int num_el) {
  393.     wint_t buf;
  394.     do {
  395.         system("cls");
  396.         print_menu(active, items, num_el);
  397.         buf = _getwch();
  398.         switch (buf) {
  399.         case up:
  400.             if (active > 1) active--;
  401.             break;
  402.         case down:
  403.             if (active < num_el) active++;
  404.             break;
  405.         case enter:
  406.             return active;
  407.         case esc:
  408.             return -1;
  409.         case del:
  410.             return -active;
  411.         }
  412.     } while (1);
  413. }
  414.  
  415. // ==========АНАЛОГ setw()==========
  416. string sets(size_t size) {
  417.     string res_s;
  418.     for (int i = 0; i < size; i++) {
  419.         res_s += " ";
  420.     }
  421.     return res_s;
  422. }
  423. //===============================================Print=============================================
  424. void Print(const Sportsman & S) {
  425.     if (num_el >= 9 && num_el <= 99) {
  426.         cout << " " << ++num_el << "  ";
  427.     }
  428.     else if (num_el >= 100 && num_el <= 999) {
  429.         cout << " " << ++num_el << " ";
  430.     }
  431.     else {
  432.         cout << " " << ++num_el << "   ";
  433.     }
  434.     cout << "|" << S.D.Name << setw(30 - S.D.Name.length()) << " | ";
  435.     cout << S.D.Birthday << " | ";
  436.     cout << " " << S.D.Sex << "  | ";
  437.     cout << S.D.Weight << setw(9 - S.D.Weight.length()) << " | ";
  438.     cout << S.D.Rank << "    | ";
  439.     cout << S.D.Team << setw(20 - S.D.Team.length()) << " | " << endl;
  440. }
  441.  
  442. int key = 0;
  443.  
  444. //===============================================Watch=============================================
  445. void Watch(Sportsman * left) {
  446.     if (!left) { cout << "Empty" << endl; cin.get(); return; }
  447.     Sportsman* temp     = left,
  448.         * first_prev_el = left,
  449.         * temp_el       = left,
  450.         * first_temp_el = left;
  451.  
  452.     int count_el_on_page = 0,
  453.         i                = 0,
  454.         first_el         = 0,
  455.         page             = 1,
  456.         fl               = 0,
  457.         keycode          = 0;
  458.  
  459.     do {
  460.         float total_pages = ceil(total_elements / 10);
  461.  
  462.         if (count_el_on_page != total_elements) {
  463.             cout << " №   " << "|";
  464.             cout << "Name" << setw(25) << "|";
  465.             cout << " Birthday" << setw(4) << "|";
  466.             cout << " Sex " << "|";
  467.             cout << " Weight " << "|";
  468.             cout << " Rank " << "|";
  469.             cout << " Team " << setw(14) << "|" << endl;
  470.             cout << "==========================================================================================" << endl;
  471.  
  472.             for (; temp; temp = temp->next) {
  473.                 if (count_el_on_page == (page - 1) * 10 + 1) {
  474.                     first_temp_el = temp->prev;
  475.                 }
  476.                 if (page != 1) {
  477.                     if (first_el != 1) {
  478.                         temp_el = temp;
  479.                         for (int j = 0; j < 10; j++, temp = temp->prev) {
  480.                             first_prev_el = temp->prev;
  481.                         }
  482.                         temp = temp_el;
  483.                         first_el++;
  484.                     }
  485.                 }
  486.  
  487.                 Print(*temp);
  488.                 count_el_on_page++;
  489.                 if (count_el_on_page % 10 == 0) {
  490.                     temp = temp->next;
  491.                     break;
  492.                 }
  493.             }
  494.             cout << "==========================================================================================" << endl;
  495.             cout << "               " << "Page " << page << " of " << setprecision(0) << total_pages;
  496.         }
  497.         int control = _getwch();
  498.         if (control == esc) {
  499.             num_el = 0;
  500.             return;
  501.         }
  502.         keycode = _getwch();
  503.  
  504.         switch (keycode) {
  505.         case right_btn:
  506.             if (count_el_on_page != total_elements) {
  507.                 system("cls");
  508.                 page++;
  509.                 first_el = 0;
  510.             }
  511.             break;
  512.         case left_btn:
  513.             if (page >= 2) {
  514.                 page--;
  515.             }
  516.             num_el = (page - 1) * 10;
  517.             first_el = 0;
  518.             count_el_on_page = (page - 1) * 10;
  519.             temp = first_prev_el;
  520.             system("cls");
  521.             break;
  522.         default:
  523.             temp = first_temp_el;
  524.             system("cls");
  525.             break;
  526.         }
  527.     } while (1);
  528.  
  529. }
  530. //===============================================CLS=============================================
  531. void cls() {
  532.     HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);
  533.     COORD cd;
  534.     cd.X = 0;
  535.     cd.Y = 0;
  536.     SetConsoleCursorPosition(hd, cd);
  537. }
  538. //===============================================Read_File=============================================
  539. void Read_File(string File_name, Sportsman * *left, Sportsman * *right) {
  540.     total_elements = 0;
  541.  
  542.     ifstream File_in;
  543.     File_in.open(File_name);
  544.     if (!File_in) {
  545.         MessageBox(0, L"Trere is no File!", L"ERROR", MB_ICONERROR | MB_SETFOREGROUND);
  546.         return;
  547.     }
  548.     Sportsman S;
  549.     *left = 0;
  550.     while (getline(File_in, S.D.Name)) {
  551.         getline(File_in, S.D.Birthday);
  552.         getline(File_in, S.D.Sex);
  553.         getline(File_in, S.D.Weight);
  554.         getline(File_in, S.D.Rank);
  555.         getline(File_in, S.D.Team);
  556.         if (*left)
  557.             * right = Add(*right, S);
  558.         else {
  559.             *left = Add_first(S); *right = *left;
  560.         }
  561.         total_elements++;
  562.     }
  563.     File_in.close();
  564.     return;
  565. }
  566. //===============================================Write_File=============================================
  567. void Write_File(string File_name, Sportsman * left) {
  568.     ofstream File_out;
  569.     File_out.open(File_name);
  570.     if (!File_out) {
  571.         MessageBox(0, L"Trere is no File!", L"ERROR", MB_ICONERROR | MB_SETFOREGROUND);
  572.         return;
  573.     }
  574.     while (left) {
  575.         File_out << left->D.Name << endl;
  576.         File_out << left->D.Birthday << endl;
  577.         File_out << left->D.Sex << endl;
  578.         File_out << left->D.Weight << endl;
  579.         File_out << left->D.Rank << endl;
  580.         File_out << left->D.Team << endl;
  581.         left = left->next;
  582.     }
  583.     File_out.close();
  584.     return;
  585. }
  586. //===================================================Bin_File(Read)=========================
  587. int Read_Bin_File(string filename, Sportsman * *left, Sportsman * *right) {
  588.     total_elements = 0;
  589.     ifstream file_read;
  590.     file_read.open(filename, ios::binary);
  591.  
  592.     if (!file_read) {
  593.         MessageBox(0, L"There is no file!", L"Error", MB_ICONERROR | MB_SETFOREGROUND);
  594.         return 1;
  595.     }
  596.     file_read.seekg(ios_base::beg);
  597.     Sportsman* S = new Sportsman;
  598.     S->next = NULL;
  599.     S->prev = NULL;
  600.     *left = 0;
  601.  
  602.     while (file_read.read((char*)& S->D, sizeof(S->D))) {
  603.         if (*left)
  604.             * right = Add(*right, *S);
  605.         else {
  606.             *left = Add_first(*S); *right = *left;
  607.         }
  608.         total_elements++;
  609.     }
  610.  
  611.     file_read.close();
  612.     return 0;
  613. }
  614. //===================================================Bin_File(Write)=========================
  615. void Write_Bin_File(string File_name, Sportsman * left) {
  616.     ofstream File_Bin_Write;
  617.     File_Bin_Write.open(File_name, ios::binary | ios::out);
  618.     if (!File_Bin_Write) {
  619.         MessageBox(0, L"Trere is no File!", L"ERROR", MB_ICONERROR | MB_SETFOREGROUND);
  620.         return;
  621.     }
  622.     while (left) {
  623.         File_Bin_Write.write((char*)& left->D, sizeof left->D);
  624.         left = left->next;
  625.     }
  626.     File_Bin_Write.close();
  627.     return;
  628. }
  629. //==================================================Search======================================================
  630. void Search(Sportsman * left) {
  631.     cout << "Choose Information to Search" << endl;
  632.     string search_sm;
  633.     getline(cin, search_sm);
  634.     Sportsman* temp = left;
  635.     int count = 0;
  636.     cout << "====================================================================================" << endl;
  637.     while (temp) {
  638.         if (search_sm == temp->D.Name || search_sm == temp->D.Birthday || search_sm == temp->D.Sex || search_sm == temp->D.Weight || search_sm == temp->D.Team || search_sm == temp->D.Rank) {
  639.             Print(*temp);
  640.             count++;
  641.         }
  642.         temp = temp->next;
  643.     }
  644.     if (count == 0)
  645.         cout << "Nothing found" << endl;;
  646.     cout << "====================================================================================" << endl;
  647. }
  648. //====================================================Sort===========================================
  649. void Sort(Sportsman * left, int sort_active) {
  650.     Sportsman* temp = left;
  651.     Sportsman* temp_i = left;
  652.     Sportsman* temp_j = left;
  653.     int Day_i = stoi(temp_i->D.Birthday.substr(0, 2));
  654.     int Month_i = stoi(temp_i->D.Birthday.substr(3, 2));
  655.     int Year_i = stoi(temp_i->D.Birthday.substr(6, 4));
  656.     int Day_j = stoi(temp_j->D.Birthday.substr(0, 2));
  657.     int Month_j = stoi(temp_j->D.Birthday.substr(3, 2));
  658.     int Year_j = stoi(temp_j->D.Birthday.substr(6, 4));
  659.     switch (sort_active) {
  660.     case 1:
  661.         for (Sportsman* temp_i = left; temp_i; temp_i = temp_i->next)
  662.         {
  663.             for (Sportsman* temp_j = temp_i; temp_j; temp_j = temp_j->next)
  664.                 if (temp_j->D.Name > temp_i->D.Name)
  665.                 {
  666.                     info tmp = temp_j->D;
  667.                     temp_j->D = temp_i->D;
  668.                     temp_i->D = tmp;
  669.                 }
  670.         }
  671.         break;
  672.     case 2:
  673.         for (Sportsman* temp_i = left; temp_i; temp_i = temp_i->next)
  674.         {
  675.             for (Sportsman* temp_j = temp_i; temp_j; temp_j = temp_j->next) {
  676.                 Day_i = stoi(temp_i->D.Birthday.substr(0, 2));
  677.                 Month_i = stoi(temp_i->D.Birthday.substr(3, 2));
  678.                 Year_i = stoi(temp_i->D.Birthday.substr(6, 4));
  679.                 Day_j = stoi(temp_j->D.Birthday.substr(0, 2));
  680.                 Month_j = stoi(temp_j->D.Birthday.substr(3, 2));
  681.                 Year_j = stoi(temp_j->D.Birthday.substr(6, 4));
  682.                 if (Year_j < Year_i)
  683.                 {
  684.                     info tmp = temp_j->D;
  685.                     temp_j->D = temp_i->D;
  686.                     temp_i->D = tmp;
  687.                 }
  688.                 else if ((Year_j == Year_i) && (Month_j < Month_i))
  689.                 {
  690.                     info tmp = temp_j->D;
  691.                     temp_j->D = temp_i->D;
  692.                     temp_i->D = tmp;
  693.                 }
  694.                 else if (((Year_j == Year_i) && (Month_j = Month_i)) && (Day_j < Day_i))
  695.                 {
  696.                     info tmp = temp_j->D;
  697.                     temp_j->D = temp_i->D;
  698.                     temp_i->D = tmp;
  699.                 }
  700.             }
  701.         }
  702.         break;
  703.     case 3:
  704.         for (Sportsman* temp_i = left; temp_i; temp_i = temp_i->next)
  705.         {
  706.             for (Sportsman* temp_j = temp_i; temp_j; temp_j = temp_j->next)
  707.                 if (temp_j->D.Sex > temp_i->D.Sex)
  708.                 {
  709.                     info tmp = temp_j->D;
  710.                     temp_j->D = temp_i->D;
  711.                     temp_i->D = tmp;
  712.                 }
  713.         }
  714.         break;
  715.     case 4:
  716.         for (Sportsman* temp_i = left; temp_i; temp_i = temp_i->next)
  717.         {
  718.             for (Sportsman* temp_j = temp_i; temp_j; temp_j = temp_j->next)
  719.                 if (stoi(temp_j->D.Weight) > stoi(temp_i->D.Weight))
  720.                 {
  721.                     info tmp = temp_j->D;
  722.                     temp_j->D = temp_i->D;
  723.                     temp_i->D = tmp;
  724.                 }
  725.         }
  726.         break;
  727.     case 5:
  728.         for (Sportsman* temp_i = left; temp_i; temp_i = temp_i->next)
  729.         {
  730.             for (Sportsman* temp_j = temp_i; temp_j; temp_j = temp_j->next)
  731.                 if (temp_j->D.Rank > temp_i->D.Rank)
  732.                 {
  733.                     info tmp = temp_j->D;
  734.                     temp_j->D = temp_i->D;
  735.                     temp_i->D = tmp;
  736.                 }
  737.         }
  738.         break;
  739.     case 6:
  740.         for (Sportsman* temp_i = left; temp_i; temp_i = temp_i->next)
  741.         {
  742.             for (Sportsman* temp_j = temp_i; temp_j; temp_j = temp_j->next)
  743.                 if (temp_j->D.Team > temp_i->D.Team)
  744.                 {
  745.                     info tmp = temp_j->D;
  746.                     temp_j->D = temp_i->D;
  747.                     temp_i->D = tmp;
  748.                 }
  749.         }
  750.         break;
  751.     }
  752. }
  753. //====================================My_Function===========================================
  754. void My_Function(Sportsman * left) {
  755.     if (!left) {
  756.         MessageBox(0, L"Trere is no File!", L"ERROR", MB_ICONERROR | MB_SETFOREGROUND);
  757.         return;
  758.     }
  759.     Sportsman* temp = left;
  760.     int elements_in_total = 1;
  761.     while (temp) {
  762.         elements_in_total++;
  763.         temp = temp->next;
  764.     }
  765.     temp = left;
  766.     string* Mas_Teams = new string[elements_in_total];
  767.     Sort(left, 6);
  768.     string team_name = temp->D.Team;
  769.     Mas_Teams[0] = team_name;
  770.     int count_teams = 0;
  771.     while (temp) {
  772.         if (Mas_Teams[count_teams] != temp->D.Team) {
  773.             count_teams++;
  774.             Mas_Teams[count_teams] = temp->D.Team;
  775.         }
  776.         temp = temp->next;
  777.     }
  778.     int count = count_teams;
  779.     count_teams = 0;
  780.     Sort(left, 4);
  781.     int count_MF = 0;
  782.     temp = left;
  783.     int fl = 0;
  784.     while (temp) {
  785.         if (temp->D.Sex == "M") {
  786.             fl = 1;
  787.             break;
  788.         }
  789.         temp = temp->next;
  790.     }
  791.     temp = left;
  792.     if (fl == 0)
  793.         cout << "No Men" << endl;
  794.     else {
  795.         cout << "Most Man's Weight For Every Team" << endl;
  796.         cout << "====================================================================================" << endl;
  797.         while (count_teams <= count) {
  798.             if (temp->D.Sex == "M" && count_MF < 5 && Mas_Teams[count_teams] == temp->D.Team) {
  799.                 Print(*temp);
  800.                 count_MF++;
  801.             }
  802.             temp = temp->next;
  803.             if (temp == NULL) {
  804.                 if (count_MF > 0) cout << "====================================================================================" << endl;
  805.                 count_MF = 0;
  806.                 count_teams++;
  807.                 temp = left;
  808.  
  809.             }
  810.         }
  811.     }
  812.     cout << endl;
  813.     cout << endl;
  814.     cout << endl;
  815.     count_teams = 0;
  816.     Sort(left, 2);
  817.     count_MF = 0;
  818.     temp = left;
  819.     fl = 0;
  820.     while (temp) {
  821.         if (temp->D.Sex == "F") {
  822.             fl = 1;
  823.             break;
  824.         }
  825.         temp = temp->next;
  826.     }
  827.     temp = left;
  828.     if (fl == 0)
  829.         cout << "No Girls" << endl;
  830.     else {
  831.         cout << "The Oldest Girl For Every Team" << endl;
  832.         cout << "====================================================================================" << endl;
  833.         while (count_teams <= count) {
  834.             if (temp->D.Sex == "F" && count_MF < 5 && Mas_Teams[count_teams] == temp->D.Team) {
  835.                 Print(*temp);
  836.                 count_MF++;
  837.             }
  838.             temp = temp->next;
  839.             if (temp == NULL) {
  840.                 if (count_MF > 0)  cout << "====================================================================================" << endl;
  841.                 count_MF = 0;
  842.                 count_teams++;
  843.                 temp = left;
  844.  
  845.             }
  846.         }
  847.     }
  848.     system("pause");
  849.     delete[] Mas_Teams;
  850. }
  851. //==================================================================Delete_Number===================================================================================================================================================
  852. /*Sportsman* delete_By_Number(Sportsman * left) {
  853.     int  Number_To_Delete = 0;
  854.     Sportsman* temp;
  855.     Sportsman* buf;
  856.     if (!left) {
  857.         MessageBox(0, "It's Empty", "Warning", MB_ICONINFORMATION | MB_SETFOREGROUND);
  858.         return left;
  859.     }
  860.     cout << "Choose Number To Delete" << endl;
  861.     cin >> Number_To_Delete;
  862.  
  863.     if (total_elements < Number_To_Delete) {
  864.         MessageBox(0, "Trere is no Number Like That!", "ERROR", MB_ICONERROR | MB_SETFOREGROUND);
  865.         return left;
  866.     }
  867.     temp = left;
  868.     if (left->next == 0 && Number_To_Delete == 1) {
  869.         delete temp;
  870.         return 0;
  871.     }
  872.     int i = 0;
  873.     while (temp) {
  874.         if (i == Number_To_Delete) {
  875.             buf = temp->next;
  876.  
  877.             // если удаляется второй элемент
  878.             if (temp->prev == 0) {
  879.                 buf->prev = 0;
  880.                 delete temp;
  881.                 return buf;
  882.             }
  883.  
  884.             if (buf != 0) buf->prev = temp->prev; // если следующий элемент не 0
  885.  
  886.             buf = temp->prev;
  887.             buf->next = temp->next;
  888.             delete temp;
  889.             return left;
  890.         }
  891.         temp = temp->next;
  892.         i++;
  893.     }
  894.     MessageBox(0, L"Error!", L"Error", MB_ICONERROR | MB_SETFOREGROUND);
  895.     return left;
  896. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement