Filage

Struct4

Mar 4th, 2024
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. int takeNum(int Min, int Max) {
  8.     const string error = "Проверьте корректность введенных данных!\n";
  9.     bool isIncorrect;
  10.     int num;
  11.     do {
  12.         isIncorrect = false;
  13.         cin >> num;
  14.         if (cin.fail()) {
  15.             isIncorrect = true;
  16.             cout << error;
  17.             cin.clear();
  18.             while (cin.get() != '\n');
  19.         }
  20.         if (!isIncorrect && cin.get() != '\n') {
  21.             cin.clear();
  22.             while (cin.get() != '\n');
  23.             cout << error;
  24.             isIncorrect = true;
  25.         }
  26.         if (!isIncorrect && (num < Min || num > Max)) {
  27.             isIncorrect = true;
  28.             cout << error;
  29.         }
  30.     } while (isIncorrect);
  31.     return num;
  32. }
  33.  
  34. struct Student {
  35.     void input_Student();
  36.     void output_Student();
  37.     float averageGrade();
  38.     int bookNum;
  39.     string secondname;
  40.     int groupNum;
  41.     int grade[5];
  42.     ~Student() {
  43.         cout << "Студент " << secondname << " удален.";
  44.     }
  45. };
  46.  
  47. void Student::input_Student() { // функция-член
  48.     cout << "Введите номер зачетной книжки студента: ";
  49.     bookNum = takeNum(1, 2147483647);
  50.     cout << "Введите фамилию студента: ";
  51.     cin >> secondname;
  52.     cout << "Введите номер группы студента: ";
  53.     groupNum = takeNum(1, 2147483647);
  54.     cout << "Введите оценки студента по пяти предметам: \n";
  55.     for (int i = 0; i < 5; i++) {
  56.         cout << i + 1 << " экзамен = ";
  57.         grade[i] = takeNum(1, 2147483647);
  58.     }
  59. }
  60.  
  61. void Student::output_Student() { // функция-член
  62.     cout << setw(22) << right << bookNum;
  63.     cout << setw(14) << right << secondname;
  64.     cout << setw(10) << right << groupNum;
  65.     cout << setw(10);
  66.     //cout << bookNum << "\t" << secondname << "\t" << groupNum << "\t";
  67.     for (int i = 0; i < 5; i++)
  68.         cout << grade[i] << " ";
  69.     cout << endl;
  70. }
  71.  
  72. float Student::averageGrade() {
  73.     float sum = 0;
  74.     for (int i = 0; i < 5; i++)
  75.         sum += grade[i];
  76.     return sum / 5;
  77. }
  78.  
  79. void sortByGroupNum(Student*& student, int& size) { //сортировка по группе пузырьком
  80.     for (int i = 0; i < size - 1; ++i) {
  81.         for (int j = 0; j < size - i - 1; ++j) {
  82.             if (student[j].groupNum > student[j + 1].groupNum) {
  83.                 Student temp = student[j];
  84.                 student[j] = student[j + 1];
  85.                 student[j + 1] = temp;
  86.             }
  87.         }
  88.     }
  89. }
  90.  
  91. void sortByAverageGrade(Student*& student, int& size) {
  92.     for (int i = 0; i < size - 1; ++i) {
  93.         for (int j = 0; j < size - i - 1; ++j) {
  94.             if (student[j].averageGrade() < student[j + 1].averageGrade()) {
  95.                 Student temp = student[j];
  96.                 student[j] = student[j + 1];
  97.                 student[j + 1] = temp;
  98.             }
  99.         }
  100.     }
  101. }
  102.  
  103. void outIfAverageGrage(Student*& student, int& size) {
  104.     bool isExists = false;
  105.     for (int i = 0; i < size; i++) {
  106.         if (student[i].averageGrade() > 4) {
  107.             if (!isExists) {
  108.                 cout << setw(23) << right << "Номер зачетной книжки|"; // таблица setw смещение границы
  109.                 cout << setw(15) << right << "Фамилия студента|";
  110.                 cout << setw(10) << right << "Номер группы|";
  111.                 cout << setw(20) << right << "Оценки за экзамены|\n";
  112.             }
  113.             isExists = true;
  114.             student[i].output_Student();
  115.         }
  116.     }
  117.     if (!isExists)
  118.         cout << "Таких студентов не существует.\n";
  119. }
  120.  
  121. void outIfDidntPass(Student*& student, int& size) {
  122.     bool isExists = false;
  123.     int count, j;
  124.     for (int i = 0; i < size; i++) {
  125.         count = 0;
  126.         j = 0;
  127.         while ((count < 3) && (j < 5)) {
  128.             if (student[i].grade[j] < 4)
  129.                 count++;
  130.             j++;
  131.         }
  132.         if (count > 2) {
  133.             if (!isExists) {
  134.                 cout << setw(23) << right << "Номер зачетной книжки|"; // таблица setw смещение границы
  135.                 cout << setw(15) << right << "Фамилия студента|";
  136.                 cout << setw(10) << right << "Номер группы|";
  137.                 cout << setw(20) << right << "Оценки за экзамены|\n";
  138.                 isExists = true;
  139.             }
  140.             student[i].output_Student();
  141.         }
  142.     }
  143.     if (!isExists)
  144.         cout << "Таких студентов не существует.\n";
  145. }
  146.  
  147. void findBookNumStudent(Student*& student, int& size) {
  148.     int num;
  149.     bool isExists = false;
  150.     cout << "Введите номер зачетной книжки студента: ";
  151.     num = takeNum(1, 2147483647);
  152.     for (int i = 0; i < size; i++) {
  153.         if (student[i].bookNum == num) {
  154.             if (!isExists) {
  155.                 cout << "Студент найден!\n";
  156.                 cout << setw(23) << right << "Номер зачетной книжки|"; // таблица setw смещение границы
  157.                 cout << setw(15) << right << "Фамилия студента|";
  158.                 cout << setw(10) << right << "Номер группы|";
  159.                 cout << setw(20) << right << "Оценки за экзамены|\n";
  160.             }
  161.             isExists = true;
  162.             student[i].output_Student();
  163.         }
  164.     }
  165.     if (!isExists)
  166.         cout << "Такого студента не существует.\n";
  167. }
  168.  
  169. void editStudentInformation(Student*& student, int& size) {
  170.     int editNum, choice;
  171.     bool isExists = false;
  172.     cout << "Введите номер зачетной книжки студента, информацию которого вы хотите изменить: ";
  173.     editNum = takeNum(1, 2147483647);
  174.     for (int i = 0; i < size; i++) {
  175.         if (student[i].bookNum == editNum) {
  176.             cout << "Студент найден!";
  177.             while (true) {
  178.                 cout << "Можно изменить:\n";
  179.                 cout << "1. Фамилию\n";
  180.                 cout << "2. Номер группы\n";
  181.                 cout << "3. Оценки за экзамены\n";
  182.                 cout << "4. Выход\n";
  183.                 cout << "Введите номер выбранного действия: ";
  184.                 choice = takeNum(1, 2147483647);
  185.                 switch (choice) {
  186.                     case 1:
  187.                         cin >> student[i].secondname;
  188.                         break;
  189.                     case 2:
  190.                         student[i].groupNum = takeNum(1, 2147483647);
  191.                         break;
  192.                     case 3:
  193.                         for (int j = 0; j < 5; j++) {
  194.                             cout << j + 1 << " экзамен = ";
  195.                             student[i].grade[j] = takeNum(1, 2147483647);
  196.                         }
  197.                         break;
  198.                     case 4:
  199.                         return;
  200.                     default:
  201.                         cout << "Ошибка ввода! Введите то число, которое есть в меню\n";
  202.                         break;
  203.                 }
  204.             }
  205.         }
  206.     }
  207.     if (!isExists)
  208.         cout << "Такого студента не существует.\n";
  209. }
  210.  
  211. void menu_Program(Student *&student, int &size) {
  212.     while (true) {
  213.         int choice;
  214.         cout << "Текстовое меню:\n";
  215.         cout << "1. Ввод данных о студентах\n";
  216.         cout << "2. Вывод информации о студентах\n";
  217.         cout << "3. Упорядочить студентов по возрастанию номера группы\n";
  218.         cout << "4. Упорядочить студентов по убыванию среднего балла за экзамены\n";
  219.         cout << "5. Вывести студентов, средний балы которых больше 4\n";
  220.         cout << "6. Вывести студентов, которые не сдали сессию\n";
  221.         cout << "7. Найти студента по номеру зачетной книжки\n";
  222.         cout << "8. Изменить информацию студента по номеру зачетной книжки\n";
  223.         cout << "9. Выход\n";
  224.         cout << "Введите номер выбранного действия: ";
  225.         choice = takeNum(1, 2147483647);
  226.         switch (choice) {
  227.             case 1:
  228.                 system("cls");
  229.                 cout << "Введите количество студентов: ";
  230.                 size = takeNum(1, 2147483647);
  231.                 student = new Student[size];
  232.                 for (int i = 0; i < size; i++) {
  233.                     student[i].input_Student();
  234.                 }
  235.                 break;
  236.             case 2:
  237.                 system("cls");
  238.                 cout << "Информация о всех студентах:\n";
  239.                 cout << setw(23) << right << "Номер зачетной книжки|"; // таблица setw смещение границы
  240.                 cout << setw(15) << right << "Фамилия студента|" ;
  241.                 cout << setw(10) << right << "Номер группы|";
  242.                 cout << setw(20) << right << "Оценки за экзамены|\n";
  243.                 for (int i = 0; i < size; ++i) {
  244.                     student[i].output_Student();
  245.                 }
  246.                 break;
  247.             case 3:
  248.                 system("cls");
  249.                 sortByGroupNum(student, size);
  250.                 cout << "Готово ✓" << endl;
  251.                 break;
  252.             case 4:
  253.                 system("cls");
  254.                 sortByAverageGrade(student, size);
  255.                 cout << "Готово ✓" << endl;
  256.                 break;
  257.             case 5:
  258.                 system("cls");
  259.                 outIfAverageGrage(student, size);
  260.                 break;
  261.             case 6:
  262.                 system("cls");
  263.                 outIfDidntPass(student, size);
  264.                 break;
  265.             case 7:
  266.                 system("cls");
  267.                 findBookNumStudent(student, size);
  268.                 break;
  269.             case 8:
  270.                 system("cls");
  271.                 editStudentInformation(student, size);
  272.                 break;
  273.             case 9:
  274.                 delete[] student;
  275.                 cout << "Программа завершена!";
  276.                 return;
  277.             default:
  278.                 cout << "Ошибка ввода! Введите то число, которое есть в меню\n";
  279.                 break;
  280.         }
  281.     }
  282. }
  283.  
  284. int main() {
  285.     setlocale(LC_ALL, "Rus");
  286.     Student* student = nullptr; // неявный конструктор
  287.     int size = 0;
  288.     menu_Program(student, size);
  289.     delete[] student;
  290. }
Add Comment
Please, Sign In to add comment