Advertisement
MARSHAL327

Untitled

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