Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <iomanip>
- using namespace std;
- int takeNum(int Min, int Max) {
- const string error = "Проверьте корректность введенных данных!\n";
- bool isIncorrect;
- int num;
- do {
- isIncorrect = false;
- cin >> num;
- if (cin.fail()) {
- isIncorrect = true;
- cout << error;
- cin.clear();
- while (cin.get() != '\n');
- }
- if (!isIncorrect && cin.get() != '\n') {
- cin.clear();
- while (cin.get() != '\n');
- cout << error;
- isIncorrect = true;
- }
- if (!isIncorrect && (num < Min || num > Max)) {
- isIncorrect = true;
- cout << error;
- }
- } while (isIncorrect);
- return num;
- }
- struct Student {
- void input_Student();
- void output_Student();
- float averageGrade();
- int bookNum;
- string secondname;
- int groupNum;
- int grade[5];
- ~Student() {
- cout << "Студент " << secondname << " удален.";
- }
- };
- void Student::input_Student() { // функция-член
- cout << "Введите номер зачетной книжки студента: ";
- bookNum = takeNum(1, 2147483647);
- cout << "Введите фамилию студента: ";
- cin >> secondname;
- cout << "Введите номер группы студента: ";
- groupNum = takeNum(1, 2147483647);
- cout << "Введите оценки студента по пяти предметам: \n";
- for (int i = 0; i < 5; i++) {
- cout << i + 1 << " экзамен = ";
- grade[i] = takeNum(1, 2147483647);
- }
- }
- void Student::output_Student() { // функция-член
- cout << setw(22) << right << bookNum;
- cout << setw(14) << right << secondname;
- cout << setw(10) << right << groupNum;
- cout << setw(10);
- //cout << bookNum << "\t" << secondname << "\t" << groupNum << "\t";
- for (int i = 0; i < 5; i++)
- cout << grade[i] << " ";
- cout << endl;
- }
- float Student::averageGrade() {
- float sum = 0;
- for (int i = 0; i < 5; i++)
- sum += grade[i];
- return sum / 5;
- }
- void sortByGroupNum(Student*& student, int& size) { //сортировка по группе пузырьком
- for (int i = 0; i < size - 1; ++i) {
- for (int j = 0; j < size - i - 1; ++j) {
- if (student[j].groupNum > student[j + 1].groupNum) {
- Student temp = student[j];
- student[j] = student[j + 1];
- student[j + 1] = temp;
- }
- }
- }
- }
- void sortByAverageGrade(Student*& student, int& size) {
- for (int i = 0; i < size - 1; ++i) {
- for (int j = 0; j < size - i - 1; ++j) {
- if (student[j].averageGrade() < student[j + 1].averageGrade()) {
- Student temp = student[j];
- student[j] = student[j + 1];
- student[j + 1] = temp;
- }
- }
- }
- }
- void outIfAverageGrage(Student*& student, int& size) {
- bool isExists = false;
- for (int i = 0; i < size; i++) {
- if (student[i].averageGrade() > 4) {
- if (!isExists) {
- cout << setw(23) << right << "Номер зачетной книжки|"; // таблица setw смещение границы
- cout << setw(15) << right << "Фамилия студента|";
- cout << setw(10) << right << "Номер группы|";
- cout << setw(20) << right << "Оценки за экзамены|\n";
- }
- isExists = true;
- student[i].output_Student();
- }
- }
- if (!isExists)
- cout << "Таких студентов не существует.\n";
- }
- void outIfDidntPass(Student*& student, int& size) {
- bool isExists = false;
- int count, j;
- for (int i = 0; i < size; i++) {
- count = 0;
- j = 0;
- while ((count < 3) && (j < 5)) {
- if (student[i].grade[j] < 4)
- count++;
- j++;
- }
- if (count > 2) {
- if (!isExists) {
- cout << setw(23) << right << "Номер зачетной книжки|"; // таблица setw смещение границы
- cout << setw(15) << right << "Фамилия студента|";
- cout << setw(10) << right << "Номер группы|";
- cout << setw(20) << right << "Оценки за экзамены|\n";
- isExists = true;
- }
- student[i].output_Student();
- }
- }
- if (!isExists)
- cout << "Таких студентов не существует.\n";
- }
- void findBookNumStudent(Student*& student, int& size) {
- int num;
- bool isExists = false;
- cout << "Введите номер зачетной книжки студента: ";
- num = takeNum(1, 2147483647);
- for (int i = 0; i < size; i++) {
- if (student[i].bookNum == num) {
- if (!isExists) {
- cout << "Студент найден!\n";
- cout << setw(23) << right << "Номер зачетной книжки|"; // таблица setw смещение границы
- cout << setw(15) << right << "Фамилия студента|";
- cout << setw(10) << right << "Номер группы|";
- cout << setw(20) << right << "Оценки за экзамены|\n";
- }
- isExists = true;
- student[i].output_Student();
- }
- }
- if (!isExists)
- cout << "Такого студента не существует.\n";
- }
- void editStudentInformation(Student*& student, int& size) {
- int editNum, choice;
- bool isExists = false;
- cout << "Введите номер зачетной книжки студента, информацию которого вы хотите изменить: ";
- editNum = takeNum(1, 2147483647);
- for (int i = 0; i < size; i++) {
- if (student[i].bookNum == editNum) {
- cout << "Студент найден!";
- while (true) {
- cout << "Можно изменить:\n";
- cout << "1. Фамилию\n";
- cout << "2. Номер группы\n";
- cout << "3. Оценки за экзамены\n";
- cout << "4. Выход\n";
- cout << "Введите номер выбранного действия: ";
- choice = takeNum(1, 2147483647);
- switch (choice) {
- case 1:
- cin >> student[i].secondname;
- break;
- case 2:
- student[i].groupNum = takeNum(1, 2147483647);
- break;
- case 3:
- for (int j = 0; j < 5; j++) {
- cout << j + 1 << " экзамен = ";
- student[i].grade[j] = takeNum(1, 2147483647);
- }
- break;
- case 4:
- return;
- default:
- cout << "Ошибка ввода! Введите то число, которое есть в меню\n";
- break;
- }
- }
- }
- }
- if (!isExists)
- cout << "Такого студента не существует.\n";
- }
- void menu_Program(Student *&student, int &size) {
- while (true) {
- int choice;
- cout << "Текстовое меню:\n";
- cout << "1. Ввод данных о студентах\n";
- cout << "2. Вывод информации о студентах\n";
- cout << "3. Упорядочить студентов по возрастанию номера группы\n";
- cout << "4. Упорядочить студентов по убыванию среднего балла за экзамены\n";
- cout << "5. Вывести студентов, средний балы которых больше 4\n";
- cout << "6. Вывести студентов, которые не сдали сессию\n";
- cout << "7. Найти студента по номеру зачетной книжки\n";
- cout << "8. Изменить информацию студента по номеру зачетной книжки\n";
- cout << "9. Выход\n";
- cout << "Введите номер выбранного действия: ";
- choice = takeNum(1, 2147483647);
- switch (choice) {
- case 1:
- system("cls");
- cout << "Введите количество студентов: ";
- size = takeNum(1, 2147483647);
- student = new Student[size];
- for (int i = 0; i < size; i++) {
- student[i].input_Student();
- }
- break;
- case 2:
- system("cls");
- cout << "Информация о всех студентах:\n";
- cout << setw(23) << right << "Номер зачетной книжки|"; // таблица setw смещение границы
- cout << setw(15) << right << "Фамилия студента|" ;
- cout << setw(10) << right << "Номер группы|";
- cout << setw(20) << right << "Оценки за экзамены|\n";
- for (int i = 0; i < size; ++i) {
- student[i].output_Student();
- }
- break;
- case 3:
- system("cls");
- sortByGroupNum(student, size);
- cout << "Готово ✓" << endl;
- break;
- case 4:
- system("cls");
- sortByAverageGrade(student, size);
- cout << "Готово ✓" << endl;
- break;
- case 5:
- system("cls");
- outIfAverageGrage(student, size);
- break;
- case 6:
- system("cls");
- outIfDidntPass(student, size);
- break;
- case 7:
- system("cls");
- findBookNumStudent(student, size);
- break;
- case 8:
- system("cls");
- editStudentInformation(student, size);
- break;
- case 9:
- delete[] student;
- cout << "Программа завершена!";
- return;
- default:
- cout << "Ошибка ввода! Введите то число, которое есть в меню\n";
- break;
- }
- }
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- Student* student = nullptr; // неявный конструктор
- int size = 0;
- menu_Program(student, size);
- delete[] student;
- }
Add Comment
Please, Sign In to add comment