qberik

Untitled

Dec 19th, 2021 (edited)
597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 31.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <iomanip>
  4. #include <cstring>
  5. #include <fstream>
  6. #include <Windows.h>
  7. using namespace std;
  8.  
  9. const int Max_students_count{ 100 }, Max_length_of_word{ 20 };
  10.  
  11. enum Menu_commands {
  12.     Input_from_keyboard = 1,
  13.     Input_from_text_file = 2,
  14.     Input_from_binary_file = 3,
  15.     Display_entering = 4,
  16.     Output_data_to_file = 5,
  17.     Request = 6,
  18.     Convert_to_text_file = 7,
  19.     Convert_to_binary_file = 8,
  20.     Add_note = 9,
  21.     Change_note = 10,
  22.     Delete_note = 11,
  23.     Sort_database = 12,
  24.     Exit = 0
  25. };
  26.  
  27. enum Sort_commands {
  28.     Name_sorting = 1,
  29.     Surname_sorting = 2,
  30.     Year_of_admission_sorting = 3,
  31.     Course_sorting = 4,
  32.     Math_sorting = 5,
  33.     Rus_sorting = 6,
  34.     Eng_sorting = 7,
  35. };
  36.  
  37. enum Sort_by_datatype {
  38.     Int = 1,
  39.     Char = 2
  40. };
  41.  
  42. enum Type_of_sorting {
  43.     Ascending = 1,
  44.     Descending = 2
  45. };
  46.  
  47. struct Student {
  48.     char name[Max_length_of_word]{ "No name" };
  49.     char surname[Max_length_of_word]{ "No surname" };
  50.     int year_of_admission{};
  51.     int course{};
  52.     int marks[3]{};
  53.  
  54.     int year_of_born{};
  55.     char group[Max_length_of_word]{ "No group" };
  56. };
  57.  
  58. Student students[Max_students_count]{};
  59.  
  60. /* *************************************************************************************************** */
  61.  
  62. int Check_int(int min_num, int max_num); //проверка на введенное число
  63.  
  64. void Check_char(char ret_val[], int maxCountOfSymbols); //проверка на введенное слово
  65.  
  66. void Menu_items(); //вывод пунктов меню
  67.  
  68. int Input_students_count(); //вывод количества студентов
  69.  
  70. void Keyboard_input(int count_students, int maxCountOfSymbols, Student students[]); //ввод данных
  71.  
  72. void Input_from_text_file_fun(int maxCountOfSymbols, int& countOfStudents, Student students[]);
  73.  
  74. void Display_database(int countOfStudents, Student* students);
  75.  
  76. void Output_database_to_file(int countOfStudents, Student* students);
  77.  
  78. void Query(int countOfStudents, Student* students);
  79.  
  80. void Add_a_note(int& countOfStudents, int maxCountOfSymbols, Student* students);
  81.  
  82. void Change_a_note(int& countOfStudents, int maxCountOfSymbols, Student* students);
  83.  
  84. void Delete_a_note(int& countOfStudents, Student* students);
  85.  
  86. void Database_sorting(int maxCountOfSymbols, int countOfStudents, Student* students);
  87.  
  88. void Display_sorting_menu();
  89.  
  90. int Type_of_sorting();
  91.  
  92. void Sorting_int(int maxCountOfSymbols, int countOfStudents, int valueSortingType, int* sort_charact,
  93.     Student* students);
  94.  
  95. void Sorting_char(int maxCountOfSymbols, int countOfStudents, int valueSortingType, char** sort_charact,
  96.     Student* students);
  97.  
  98. void strCopy(char* dynamicSymbolsArray, char* staticSymbolsArray);
  99.  
  100. void swapInt(int& number1, int& number2);
  101.  
  102. void convertToTextFile(int countOfStudents, Student students[]);
  103.  
  104. void Convert_to_binary(int maxCountOfSymbols);
  105.  
  106. void Input_from_binary(int& countOfStudents, Student* students);
  107.  
  108. /* *************************************************************************************************** */
  109.  
  110. int main() {
  111.     SetConsoleCP(1251);
  112.     SetConsoleOutputCP(1251);
  113.  
  114.     int countOfStudents{}, menu_item = -1;
  115.     int* pointerCountOfStudents = &countOfStudents;
  116.     Student students[Max_students_count]{};
  117.  
  118.     while (menu_item != 0) {
  119.         Menu_items();
  120.  
  121.         menu_item = Check_int(0, 12);
  122.         system("cls");
  123.         switch (menu_item) {
  124.         case Exit:
  125.             break;
  126.         case Input_from_keyboard:
  127.             countOfStudents = 2;
  128.             system("cls");
  129.             Keyboard_input(countOfStudents, Max_length_of_word, students);
  130.             break;
  131.         case Input_from_text_file:
  132.             Input_from_text_file_fun(Max_length_of_word, countOfStudents, students);
  133.             break;
  134.         case Input_from_binary_file:
  135.             Input_from_binary(countOfStudents, students);
  136.             break;
  137.         case Display_entering:
  138.             Display_database(countOfStudents, students);
  139.             break;
  140.         case Output_data_to_file:
  141.             Output_database_to_file(countOfStudents, students);
  142.             break;
  143.         case Request:
  144.             Query(countOfStudents, students);
  145.             break;
  146.         case Convert_to_text_file:
  147.             convertToTextFile(countOfStudents, students);
  148.             break;
  149.         case Convert_to_binary_file:
  150.             Convert_to_binary(Max_length_of_word);
  151.             break;
  152.         case Add_note:
  153.             Add_a_note(countOfStudents, Max_length_of_word, students);
  154.             break;
  155.         case Change_note:
  156.             Change_a_note(countOfStudents, Max_length_of_word, students);
  157.             break;
  158.         case Delete_note:
  159.             Delete_a_note(countOfStudents, students);
  160.             break;
  161.         case Sort_database:
  162.             Database_sorting(Max_length_of_word, countOfStudents, students);
  163.             break;
  164.         }
  165.  
  166.         system("pause");
  167.         system("cls");
  168.     }
  169.  
  170.     return 0;
  171. }
  172.  
  173. int Check_int(int min_num, int max_num) {
  174.     int number = 0;
  175.     bool correct_num = false;
  176.     cin >> number;
  177.  
  178.     while (!(correct_num)) {
  179.         if (!((number >= min_num) && (number <= max_num))) {
  180.             cout << endl;
  181.             cout << "Вы ввели некорректное число!" << endl << " Введите число в диапазоне от " << min_num << " до "
  182.                 << max_num << " включительно: " << endl;
  183.             cin >> number;
  184.         }
  185.         else {
  186.             correct_num = true;
  187.         }
  188.     }
  189.  
  190.     cin.ignore(1, '\n');
  191.     return number;
  192. }
  193.  
  194. void Check_char(char ret_val[], int maxCountOfSymbols) {
  195.     const int Edge = 1000;
  196.     char* value = new char[Edge] {};
  197.     bool correct_val = false;
  198.     cin.getline(value, Edge);
  199.  
  200.     while (!(correct_val)) {
  201.         if ((strlen(value) < maxCountOfSymbols) && (strcmp(value, ""))) {
  202.             strCopy(ret_val, value);
  203.             correct_val = true;
  204.         }
  205.         else {
  206.             cout << endl;
  207.             cout
  208.                 << "Вы ввели некорректное значение!" << endl << "(либо данное поле пустое)" << endl <<
  209.                 "Введите корректное значение,не превышающее " << maxCountOfSymbols << " символов: " << endl;
  210.             cin.getline(value, Edge);
  211.         }
  212.     }
  213.  
  214.     delete[] value;
  215. }
  216.  
  217. void Menu_items() {
  218.     cout << "***Работа с базой данных*** " << endl;
  219.     cout << "Выберите пункт меню: " << endl;
  220.     cout << endl;
  221.  
  222.     cout << " 1) Ввод информации с клавиатуры" << endl;
  223.     cout << " 2) Ввод информации из уже созданного текстового файла" << endl;
  224.     cout << " 3) Ввод информации из уже созданного бинарного файла" << endl;
  225.     cout << " 4) Вывод данных на экран" << endl;
  226.     cout << " 5) Вывод данных в файл" << endl;
  227.     cout << " 6) Вывод распечатки информации данных по запросу" << endl;
  228.     cout << " 7) Перевод базы данных в текстовый файл" << endl;
  229.     cout << " 8) Перевод содержимого текстового файла в бинарный файл" << endl;
  230.     cout << " 9) Добавить запись" << endl;
  231.     cout << "10) Изменить запись" << endl;
  232.     cout << "11) Удалить запись" << endl;
  233.     cout << "12) Сортировать базу данных" << endl;
  234.     cout << " 0) Выход" << endl;
  235.     cout << endl;
  236. }
  237.  
  238. int Input_students_count() {
  239.     int countOfStudents{};
  240.     cout << "В  базу данных можно ввести не больше, чем " << Max_students_count << " студентов" << endl
  241.         << "Информацию о каком количестве студентов вы хотите ввести?" << endl << "Количество студентов: " << endl;
  242.  
  243.     countOfStudents = Check_int(1, 100);
  244.  
  245.     return countOfStudents;
  246. }
  247.  
  248. void Keyboard_input(int countOfStudents, int maxCountOfSymbols, Student students[]) {
  249.     cout << "Введите информацию о студентах, количество которых равно " << countOfStudents << endl << endl;
  250.     for (int i = 0; i < countOfStudents; i++) {
  251.         cout << "Имя " << i + 1 << "-го студента: " << endl;
  252.         Check_char(students[i].name, maxCountOfSymbols);
  253.         cout << "Фамилия " << i + 1 << "-го студента: " << endl;
  254.         Check_char(students[i].surname, maxCountOfSymbols);
  255.         cout << "Год поступления " << i + 1 << "-го студента: " << endl;
  256.         students[i].year_of_admission = Check_int(1900, 2021);
  257.         cout << "Курс " << i + 1 << "-го студента: " << endl;
  258.         students[i].course = Check_int(1, 5);
  259.         cout << "Оценка " << i + 1 << "-го студента по Математике: " << endl;
  260.         students[i].marks[0] = Check_int(2, 5);
  261.         cout << "Оценка " << i + 1 << "-го студента по Русскому: " << endl;
  262.         students[i].marks[1] = Check_int(2, 5);
  263.         cout << "Оценка " << i + 1 << "-го студента по Английскому: " << endl;
  264.         students[i].marks[2] = Check_int(2, 5);
  265.         system("cls");
  266.     }
  267. }
  268.  
  269.  
  270. void Input_from_binary(int& countOfStudents, Student* students) {
  271.     ifstream fin;
  272.     fin.open("database.bin", ios::binary);
  273.  
  274.     if (fin.is_open()) {
  275.         fin.read((char*)&countOfStudents, sizeof(countOfStudents));
  276.  
  277.         for (int i = 0; i < countOfStudents; i++) {
  278.             fin.read((char*)&students[i], sizeof(students[i]));
  279.         }
  280.     }
  281.     else {
  282.         system("cls");
  283.         cout << "***Ошибка открытия файла***";
  284.         system("pause");
  285.     }
  286.  
  287.     fin.close();
  288. }
  289.  
  290.  
  291. void Display_database(int countOfStudents, Student* students) {
  292.  
  293.     cout << "+------+----------------+--------------------+-------------------+--------+------------+------------+------------+"
  294.         << endl;
  295.     cout << "|" << setw(6) << "№" << "|" << setw(16) << "Имя" << "|" << setw(20) << "Фамилия" << "|" << setw(19)
  296.         << "Год поступления" << "|" << setw(8) << "Курс" << "|" << setw(12) << "Математика" << "|" << setw(12)
  297.         << "Русский" << "|" << setw(12) << "Английский" << "|" << endl;
  298. //asdasdasd
  299.  
  300.     for (int i = 0; i < countOfStudents; i++) {
  301.         cout << "+------+----------------+--------------------+-------------------+--------+------------+------------+------------+"
  302.             << endl;
  303.         cout << "|" << left << setw(6) << i + 1;
  304.         cout << "|" << left << setw(16) << students[i].name;
  305.         cout << "|" << left << setw(20) << students[i].surname;
  306.         cout << "|" << left << setw(19) << students[i].year_of_admission;
  307.         cout << "|" << left << setw(8) << students[i].course;
  308.         cout << "|" << left << setw(12) << students[i].marks[0];
  309.         cout << "|" << left << setw(12) << students[i].marks[1];
  310.         cout << "|" << left << setw(12) << students[i].marks[2] << "|";
  311.         cout << endl;
  312.  
  313.     }
  314.     cout << "+------+----------------+--------------------+-------------------+--------+------------+------------+------------+" << endl;
  315.     cout << endl;
  316. }
  317.  
  318. void Output_database_to_file(int countOfStudents, Student* students) {
  319.     ofstream fout;
  320.     const int MaxCountOfSymbolsInFileAddress{ 200 };
  321.     char fileAddress[MaxCountOfSymbolsInFileAddress]{};
  322.  
  323.     cout << "Введите адрес текстового файла (пример: D:\\Users\\example\\example.txt): " << endl;
  324.     cin.getline(fileAddress, MaxCountOfSymbolsInFileAddress);
  325.  
  326.     fout.open(fileAddress);
  327.  
  328.     if (fout.is_open()) {
  329.  
  330.         for (int i = 0; i < countOfStudents; i++) {
  331.             fout << internal << setw(6) << i + 1;
  332.             fout << internal << setw(16) << students[i].name;
  333.             fout << internal << setw(20) << students[i].surname;
  334.             fout << internal << setw(19) << students[i].year_of_admission;
  335.             fout << internal << setw(8) << students[i].course;
  336.             fout << internal << setw(12) << students[i].marks[0];
  337.             fout << internal << setw(12) << students[i].marks[1];
  338.             fout << internal << setw(12) << students[i].marks[2];
  339.  
  340.  
  341.             fout << endl;
  342.         }
  343.         fout << endl;
  344.     }
  345.     else {
  346.         system("cls");
  347.         cout << "Ошибка открытия файла.";
  348.         system("pause");
  349.     }
  350.  
  351.     fout.close();
  352. }
  353.  
  354. void Query(int countOfStudents, Student* students) {
  355.  
  356.   int num = 1000; int min_i = -1;
  357.   for( int i = 0; i < countOfStudents; i++ ){
  358.     int sum = 0;
  359.     sum+= (students)[i].marks[0];
  360.     sum+= (students)[i].marks[1];
  361.     sum+= (students)[i].marks[2];
  362.     if( sum < num ){
  363.       num = sum;
  364.       min_i = i;
  365.     }
  366.   }
  367.   cout << "Человек с минимальным средним баллов, студент под номером " << min_i + 1 << "\n" <<  ( students )[min_i].name << ' ' <<  ( students )[min_i].surname << ' ' <<  " Год поступления "<< ( students )[min_i].year_of_admission << ' ' <<  " На курсе " << ( students )[min_i].course << ' ' <<  " С оценками по математике " << ( students )[min_i].marks[0] <<  " по русскому " << ( students )[min_i].marks[1] <<  " по английскому " << ( students )[min_i].marks[2] << endl;
  368. /*
  369.     const char headerTable[7][8]{ "   ", "Surname", "Group" };
  370.  
  371.     int* serialNumbers = new int[countOfStudents] {};
  372.     int* yearsOfBirth = new int[countOfStudents] {};
  373.  
  374.     for (int i = 0; i < countOfStudents; i++) {
  375.         serialNumbers[i] = i;
  376.         yearsOfBirth[i] = students[i].year_of_born;
  377.     }
  378.  
  379.     for (int i = 1; i < 3; i++) {
  380.         for (int j = 0; j < countOfStudents - i; j++) {
  381.             if (yearsOfBirth[j] > yearsOfBirth[j + 1]) {
  382.                 swapInt(serialNumbers[j], serialNumbers[j + 1]);
  383.                 swapInt(yearsOfBirth[j], yearsOfBirth[j + 1]);
  384.             }
  385.         }
  386.     }
  387.  
  388.     cout << headerTable[0];
  389.     cout << left << setw(20) << headerTable[1];
  390.     cout << left << setw(10) << headerTable[2];
  391.     cout << "\n";
  392.  
  393.     cout << left << setw(3) << serialNumbers[countOfStudents - 1] + 1;
  394.     cout << left << setw(20) << students[serialNumbers[countOfStudents - 1]].surname;
  395.     cout << left << setw(8) << students[serialNumbers[countOfStudents - 1]].group;
  396.     cout << "\n";
  397.  
  398.     cout << left << setw(3) << serialNumbers[countOfStudents - 2] + 1;
  399.     cout << left << setw(20) << students[serialNumbers[countOfStudents - 2]].surname;
  400.     cout << left << setw(8) << students[serialNumbers[countOfStudents - 2]].group;
  401.     cout << "\n";
  402.  
  403.     delete[] serialNumbers;
  404.     delete[] yearsOfBirth;
  405.     */
  406. }
  407.  
  408. void convertToTextFile(int countOfStudents, Student students[]) {
  409.     ofstream fout;
  410.     fout.open("C:\\Users\\iamkuzmen\\Desktop\\check.txt");
  411.  
  412.     if (fout.is_open()) {
  413.         fout << countOfStudents << endl;
  414.         for (int i = 0; i < countOfStudents; i++) {
  415.             fout << students[i].name << endl;
  416.             fout << students[i].surname << endl;
  417.             fout << students[i].year_of_admission << endl;
  418.             fout << students[i].course << endl;
  419.             fout << students[i].marks[0] << endl;
  420.             fout << students[i].marks[1] << endl;
  421.             fout << students[i].marks[2] << endl;
  422.         }
  423.     }
  424.     else {
  425.         system("cls");
  426.         cout << "Ошибка открытия файла.";
  427.         system("pause");
  428.     }
  429.  
  430.     fout.close();
  431. }
  432.  
  433. void Convert_to_binary(int maxCountOfSymbols) {
  434.     Student tempStudent{};
  435.     int Students_count{};
  436.  
  437.     ifstream fin;
  438.     ofstream fout;
  439.     fin.open("database.txt");
  440.     fout.open("database.bin", ios::binary);
  441.  
  442.     if (fin.is_open() && fout.is_open()) {
  443.         fin >> Students_count;
  444.         fout.write((char*)&Students_count, sizeof(Students_count));
  445.         fin.ignore(1, '\n');
  446.  
  447.         for (int i = 0; i < Students_count; i++) {
  448.             fin.getline(tempStudent.name, maxCountOfSymbols);
  449.             fin.getline(tempStudent.surname, maxCountOfSymbols);
  450.             fin >> tempStudent.year_of_admission;
  451.             fin >> tempStudent.course;
  452.             fin >> tempStudent.marks[0];
  453.             fin >> tempStudent.marks[1];
  454.             fin >> tempStudent.marks[2];
  455.             fout.write((char*)&tempStudent, sizeof(tempStudent));
  456.         }
  457.     }
  458.     else {
  459.         system("cls");
  460.         cout << "Ошибка открытия файла.";
  461.         system("pause");
  462.     }
  463. }
  464. void Add_a_note(int& countOfStudents, int maxCountOfSymbols, Student* students) {
  465.     cout << "Введите информацию о студентах, количество которых равно " << countOfStudents + 1 << endl << endl;
  466.     cout << "Имя студента номер " << countOfStudents + 1 << ": " << endl;
  467.     Check_char(students[countOfStudents].name, maxCountOfSymbols);
  468.     cout << "Фамилия студента номер " << countOfStudents + 1 << ": " << endl;
  469.     Check_char(students[countOfStudents].surname, maxCountOfSymbols);
  470.     cout << "Год поступления студента номер " << countOfStudents + 1 << ": " << endl;
  471.     students[countOfStudents].year_of_admission = Check_int(1900, 2021);
  472.     cout << "Курс студента номер " << countOfStudents + 1 << ": " << endl;
  473.     students[countOfStudents].course = Check_int(1, 6);
  474.     cout << "Оценка по Математике номер " << countOfStudents + 1 << ": " << endl;
  475.     students[countOfStudents].marks[0] = Check_int(2, 5);
  476.     cout << "Оценка по Русскому номер " << countOfStudents + 1 << ": " << endl;
  477.     students[countOfStudents].marks[1] = Check_int(2, 5);
  478.     cout << "Оценка по Английскому номер " << countOfStudents + 1 << ": " << endl;
  479.     students[countOfStudents].marks[2] = Check_int(2, 5);
  480.  
  481.  
  482.  
  483.     countOfStudents = countOfStudents + 1;
  484.  
  485.     system("cls");
  486. }
  487.  
  488. void Change_a_note(int& countOfStudents, int maxCountOfSymbols, Student* students) {
  489.     int indexOfItemBeingModified{};
  490.  
  491.     cout << "Введите номер студента: " << endl;
  492.     indexOfItemBeingModified = Check_int(1, countOfStudents);
  493.     indexOfItemBeingModified--;
  494.  
  495.     cout << "Введите обновленную информацию о студенте" << endl;
  496.     cout << endl;
  497.     cout << "Имя студента: " << endl;
  498.     Check_char(students[indexOfItemBeingModified].name, maxCountOfSymbols);
  499.     cout << "Фамилия студента: " << endl;
  500.     Check_char(students[indexOfItemBeingModified].surname, maxCountOfSymbols);
  501.     cout << "Год поступления студента: " << endl;
  502.     students[indexOfItemBeingModified].year_of_admission = Check_int(1900, 2021);
  503.     cout << "Курс студента: " << endl;
  504.     students[indexOfItemBeingModified].course = Check_int(1, 6);
  505.     cout << "Оценка по Математике студента: " << endl;
  506.     students[indexOfItemBeingModified].marks[0] = Check_int(2, 5);
  507.     cout << "Оценка по Русскому студента: " << endl;
  508.     students[indexOfItemBeingModified].marks[0] = Check_int(2, 5);
  509.     cout << "Оценка по Английскому студента: " << endl;
  510.     students[indexOfItemBeingModified].marks[0] = Check_int(2, 5);
  511.  
  512.  
  513.  
  514.     system("cls");
  515. }
  516.  
  517. void Delete_a_note(int& countOfStudents, Student* students) {
  518.     int indexOfItemToRemove{};
  519.  
  520.     cout << "Введите номер студента: " << endl;
  521.     indexOfItemToRemove = Check_int(1, countOfStudents);
  522.     indexOfItemToRemove--;
  523.  
  524.     for (int i = indexOfItemToRemove; i < countOfStudents - 1; i++) {
  525.         strcpy_s(students[i].name, students[i + 1].name);
  526.         strcpy_s(students[i].surname, students[i + 1].surname);
  527.         students[i].year_of_admission = students[i + 1].year_of_admission;
  528.         students[i].course = students[i + 1].course;
  529.         students[i].marks[0] = students[ i + 1].marks[0];
  530.         students[i].marks[1] = students[ i + 1].marks[1];
  531.         students[i].marks[2] = students[ i + 1].marks[2];
  532.  
  533.     }
  534.  
  535.     memset(students[countOfStudents - 1].name, 0, Max_length_of_word);
  536.     memset(students[countOfStudents - 1].surname, 0, Max_length_of_word);
  537.     students[countOfStudents - 1].year_of_admission = 0;
  538.     students[countOfStudents - 1].course = 0;
  539.     students[countOfStudents - 1].marks[0] = 0;
  540.     students[countOfStudents - 1].marks[1] = 0;
  541.     students[countOfStudents - 1].marks[2] = 0;
  542.  
  543.     countOfStudents = countOfStudents - 1;
  544.  
  545.     system("cls");
  546. }
  547.  
  548. void Database_sorting(int maxCountOfSymbols, int countOfStudents, Student* students) {
  549.     int itemNumber{ -1 }, valueSortingType{}, dataTypeToSort{};
  550.     int* sort_charact_int = new int[countOfStudents] {};
  551.     char** sort_charact_char = new char* [countOfStudents] {nullptr};
  552.     for (int i = 0; i < countOfStudents; i++) {
  553.         sort_charact_char[i] = new char[maxCountOfSymbols];
  554.     }
  555.  
  556.     Display_sorting_menu();
  557.     itemNumber = Check_int(1, 6);
  558.     system("cls");
  559.  
  560.     valueSortingType = Type_of_sorting();
  561.     switch (itemNumber) {
  562.     case Name_sorting:
  563.         for (int i = 0; i < countOfStudents; i++) {
  564.             sort_charact_char[i] = students[i].name;
  565.         }
  566.         dataTypeToSort = Char;
  567.         break;
  568.     case Surname_sorting:
  569.         for (int i = 0; i < countOfStudents; i++) {
  570.             sort_charact_char[i] = students[i].surname;
  571.         }
  572.         dataTypeToSort = Char;
  573.         break;
  574.     case Year_of_admission_sorting:
  575.         for (int i = 0; i < countOfStudents; i++) {
  576.             sort_charact_int[i] = students[i].year_of_admission;
  577.         }
  578.         dataTypeToSort = Int;
  579.         break;
  580.     case Course_sorting:
  581.         for (int i = 0; i < countOfStudents; i++) {
  582.             sort_charact_int[i] = students[i].course;
  583.         }
  584.         dataTypeToSort = Int;
  585.         break;
  586.     case Math_sorting:
  587.         for (int i = 0; i < countOfStudents; i++) {
  588.             sort_charact_int[i] = students[i].marks[0];
  589.         }
  590.         dataTypeToSort = Int;
  591.     case Rus_sorting:
  592.         for (int i = 0; i < countOfStudents; i++) {
  593.             sort_charact_int[i] = students[i].marks[1];
  594.         }
  595.         dataTypeToSort = Int;
  596.     case Eng_sorting:
  597.         for (int i = 0; i < countOfStudents; i++) {
  598.             sort_charact_int[i] = students[i].marks[2];
  599.         }
  600.         dataTypeToSort = Int;
  601.     }
  602.  
  603.  
  604.     if (dataTypeToSort == Int) {
  605.         Sorting_int(maxCountOfSymbols, countOfStudents, valueSortingType, sort_charact_int, students);
  606.     }
  607.     else if (dataTypeToSort == Char) {
  608.         Sorting_char(maxCountOfSymbols, countOfStudents, valueSortingType, sort_charact_char, students);
  609.     }
  610.  
  611.     delete[] sort_charact_int;
  612.     delete[] sort_charact_char;
  613. }
  614.  
  615. void Display_sorting_menu() {
  616.     cout << "1) Сортировать по имени" << endl;
  617.     cout << "2) Сортировать по фамилии" << endl;
  618.     cout << "3) Сортировать по году поступления" << endl;
  619.     cout << "4) Сортировать по году рождения" << endl;
  620.     cout << "5) Сортировать по номеру курса" << endl;
  621.     cout << "6) Сортировать по группе студента" << endl;
  622.  
  623.     cout << endl;
  624.  
  625.     cout << "Введите номер пункта: " << endl;
  626. }
  627.  
  628. int Type_of_sorting() {
  629.     int itemNumber{};
  630.  
  631.     cout << "1) Сортировать по возрастанию" << endl;
  632.     cout << "2) Сортировать по убыванию" << endl;
  633.     cout << endl;
  634.  
  635.     cout << "Введите номер пункта: " << endl;
  636.     itemNumber = Check_int(1, 2);
  637.     system("cls");
  638.  
  639.     return itemNumber;
  640. }
  641.  
  642. void Sorting_int(int maxCountOfSymbols, int countOfStudents, int valueSortingType, int* sort_charact,
  643.     Student* students) {
  644.     char* tempName = new char[maxCountOfSymbols] {};
  645.     char* tempSurname = new char[maxCountOfSymbols] {};
  646.     char* tempGroup = new char[maxCountOfSymbols] {};
  647.  
  648.     if (valueSortingType == Ascending) {
  649.         for (int i = 1; i < countOfStudents; i++) {
  650.             for (int j = 0; j < countOfStudents - i; j++) {
  651.                 if (sort_charact[j] > sort_charact[j + 1]) {
  652.                     swapInt(sort_charact[j], sort_charact[j + 1]);
  653.                     swapInt(students[j].year_of_admission, students[j + 1].year_of_admission);
  654.                     swapInt(students[j].course, students[j + 1].course);
  655.                     swapInt(students[j].marks[0], students[j + 1].marks[0]);
  656.                     swapInt(students[j].marks[1], students[j + 1].marks[1]);
  657.                     swapInt(students[j].marks[2], students[j + 1].marks[2]);
  658.  
  659.                     strCopy(tempName, students[j].name);
  660.                     strCopy(tempSurname, students[j].surname);
  661.  
  662.                     strcpy_s(students[j].name, students[j + 1].name);
  663.                     strcpy_s(students[j].surname, students[j + 1].surname);
  664.                     strcpy_s(students[j + 1].name, tempName);
  665.                     strcpy_s(students[j + 1].surname, tempSurname);
  666.                 }
  667.             }
  668.         }
  669.     }
  670.     else if (valueSortingType == Descending) {
  671.         for (int i = 1; i < countOfStudents; i++) {
  672.             for (int j = 0; j < countOfStudents - i; j++) {
  673.                 if (sort_charact[j] < sort_charact[j + 1]) {
  674.                     swapInt(sort_charact[j], sort_charact[j + 1]);
  675.                     swapInt(students[j].year_of_admission, students[j + 1].year_of_admission);
  676.                     swapInt(students[j].course, students[j + 1].course);
  677.                     swapInt(students[j].marks[0], students[j + 1].marks[0]);
  678.                     swapInt(students[j].marks[1], students[j + 1].marks[1]);
  679.                     swapInt(students[j].marks[2], students[j + 1].marks[2]);
  680.  
  681.                     strCopy(tempName, students[j].name);
  682.                     strCopy(tempSurname, students[j].surname);
  683.  
  684.                     strcpy_s(students[j].name, students[j + 1].name);
  685.                     strcpy_s(students[j].surname, students[j + 1].surname);
  686.                     strcpy_s(students[j + 1].name, tempName);
  687.                     strcpy_s(students[j + 1].surname, tempSurname);
  688.                 }
  689.             }
  690.         }
  691.     }
  692.  
  693.     delete[] tempName;
  694.     delete[] tempSurname;
  695.     delete[] tempGroup;
  696. }
  697.  
  698. void Sorting_char(int maxCountOfSymbols, int countOfStudents, int valueSortingType, char** sort_charact,
  699.     Student* students) {
  700.     char* tempName = new char[maxCountOfSymbols] {};
  701.     char* tempSurname = new char[maxCountOfSymbols] {};
  702.     char* tempGroup = new char[maxCountOfSymbols] {};
  703.     char* temp_sort_charact = new char[maxCountOfSymbols] {};
  704.  
  705.     if (valueSortingType == Ascending) {
  706.         for (int i = 1; i < countOfStudents; i++) {
  707.             for (int j = 0; j < countOfStudents - i; j++) {
  708.                 if (sort_charact[j][0] > sort_charact[j + 1][0]) {
  709.                     swapInt(students[j].year_of_admission, students[j + 1].year_of_admission);
  710.                     swapInt(students[j].course, students[j + 1].course);
  711.                     swapInt(students[j].marks[0], students[j + 1].marks[0]);
  712.                     swapInt(students[j].marks[1], students[j + 1].marks[1]);
  713.                     swapInt(students[j].marks[2], students[j + 1].marks[2]);
  714.  
  715.                     strCopy(temp_sort_charact, sort_charact[j]);
  716.                     strCopy(tempName, students[j].name);
  717.                     strCopy(tempSurname, students[j].surname);
  718.  
  719.                     strCopy(sort_charact[j], sort_charact[j + 1]);
  720.                     strcpy_s(students[j].name, students[j + 1].name);
  721.                     strcpy_s(students[j].surname, students[j + 1].surname);
  722.  
  723.                     strCopy(sort_charact[j + 1], temp_sort_charact);
  724.                     strcpy_s(students[j + 1].name, tempName);
  725.                     strcpy_s(students[j + 1].surname, tempSurname);
  726.  
  727.  
  728.                 }
  729.             }
  730.         }
  731.     }
  732.     else if (valueSortingType == Descending) {
  733.         for (int i = 1; i < countOfStudents; i++) {
  734.             for (int j = 0; j < countOfStudents - i; j++) {
  735.                 if (sort_charact[j][0] < sort_charact[j + 1][0]) {
  736.                     swapInt(students[j].year_of_admission, students[j + 1].year_of_admission);
  737.                     swapInt(students[j].course, students[j + 1].course);
  738.                     swapInt(students[j].marks[0], students[j + 1].marks[0]);
  739.                     swapInt(students[j].marks[1], students[j + 1].marks[1]);
  740.                     swapInt(students[j].marks[2], students[j + 1].marks[2]);
  741.  
  742.                     strCopy(temp_sort_charact, sort_charact[j]);
  743.                     strCopy(tempName, students[j].name);
  744.                     strCopy(tempSurname, students[j].surname);
  745.  
  746.                     strCopy(sort_charact[j], sort_charact[j + 1]);
  747.                     strcpy_s(students[j].name, students[j + 1].name);
  748.                     strcpy_s(students[j].surname, students[j + 1].surname);
  749.  
  750.                     strCopy(sort_charact[j + 1], temp_sort_charact);
  751.                     strcpy_s(students[j + 1].name, tempName);
  752.                     strcpy_s(students[j + 1].surname, tempSurname);
  753.                 }
  754.             }
  755.         }
  756.     }
  757.  
  758.     delete[] tempName;
  759.     delete[] tempSurname;
  760.     delete[] tempGroup;
  761.     delete[] temp_sort_charact;
  762. }
  763.  
  764. void strCopy(char* symbolsArray1, char* symbolsArray2) {
  765.     for (unsigned int i = 0; i < strlen(symbolsArray1); i++) {
  766.         symbolsArray1[i] = ' ';
  767.     }
  768.  
  769.     for (unsigned int i = 0; i < strlen(symbolsArray2); i++) {
  770.         symbolsArray1[i] = symbolsArray2[i];
  771.     }
  772. }
  773.  
  774. void swapInt(int& number1, int& number2) {
  775.     int tempNumber{};
  776.  
  777.     tempNumber = number1;
  778.     number1 = number2;
  779.     number2 = tempNumber;
  780. }
  781.  
  782. void swapStrings(char* symbolsArray1, char* symbolsArray2, int maxCountOfSymbols) {
  783.     char* tempSymbolsArray = new char[maxCountOfSymbols] {};
  784. }
  785.  
  786. void Input_from_text_file_fun(int maxCountOfSymbols, int& countOfStudents, Student students[]) {
  787.     ifstream fin;
  788.     fin.open("C:\\Users\\iamkuzmen\\Desktop\\check.txt"); //ПОМЕНЯЙ ТУТ
  789.  
  790.     if (fin.is_open()) {
  791.         fin >> countOfStudents;
  792.         fin.ignore(1, '\n');
  793.         for (int i = 0; i < countOfStudents; i++) {
  794.             fin.getline(students[i].name, maxCountOfSymbols);
  795.             fin.getline(students[i].surname, maxCountOfSymbols);
  796.             fin >> students[i].year_of_admission;
  797.             fin >> students[i].course;
  798.             fin >> students[i].marks[0];
  799.             fin >> students[i].marks[1];
  800.             fin >> students[i].marks[2];
  801.         }
  802.     }
  803.     else {
  804.         system("cls");
  805.         cout << "Ошибка открытия файла.";
  806.         system("pause");
  807.     }
  808.  
  809.     fin.close();
  810. }
  811.  
Add Comment
Please, Sign In to add comment