Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Задание №3
- //Students.h
- #pragma once
- class Students
- {
- private:
- static int s_number_of_students; // количество студентов
- std::string m_student[3]; // ФИО студента
- int m_grades[3]; // оценки по предметам
- double m_evaluation; // средний балл студента
- static int m_ID; // порядковый номер студента
- public:
- Students() { readFile(); } // конструктор
- void readFile(); // считываем данные из файла для инициализации объекта
- static int getLength(); // функция возвращает количество студентов
- double averageScore(); // функция возвращает средний балл успеваемости
- friend std::ostream& operator<<(std::ostream& out, const Students& stud); // перегрузка оператора <<
- };
- //------------------------------------------------------------------------
- //Students.cpp
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <iomanip>
- #include "Students.h"
- std::ifstream in_f("C://input_data.txt"); // открываем файл для чтения здесь, для последующего чтения с места остановки
- int Students::s_number_of_students{ 1 }; // инициализация статич. переменной класса Students
- int Students::m_ID{ 1 }; // инициализация статич. переменной класса Students
- void Students::readFile() { // считываем из файла
- int i{}, j{}; // индексы массивов ФИО студента и его оценки
- static int index{ -1 }; // индекс строк файла
- if (in_f) { // если файл открылся
- while (in_f) { // пока нет ошибок и EOF, извлекаем данные
- if (++index == 0) { // если индекс первой строки файла
- s_number_of_students; // количество студентов
- in_f >> s_number_of_students; // присваиваем из файла в статич. переменную
- }
- if (in_f.peek() == '\n') { // если символ новой строки
- in_f.ignore(INT_MAX, '\n'); // очищаем поток от символа для продолжения чтения с файла
- if (index != 0) break; // и переходим к созданию объекта следующего студента
- }
- if ((in_f.peek() > '5' || in_f.peek() < '1') && i < 3) // если в потоке ФИО студента
- in_f >> m_student[i++]; // присваиваем в массив
- else // если в потоке символы оценок
- in_f >> m_grades[j++]; // присваиваем числа из файла в массив
- }
- m_evaluation = (m_grades[0] + m_grades[1] + m_grades[2]) / 3.0;
- }
- else
- std::cout << "Файл \"input_data.txt\" не обнаружен\n";
- }
- int Students::getLength() { // количество студентов
- return s_number_of_students;
- }
- double Students::averageScore() { // средний балл успеваемости
- return m_evaluation;
- }
- std::ostream& operator<<(std::ostream& out, const Students& stud) { // перегрузка оператора <<
- out << " №" << stud.m_ID++ << "\t\b" << stud.m_student[0] << " " << stud.m_student[1] << " " <<
- stud.m_student[2] << "\r\t\t\t\t\tматемат.: " << stud.m_grades[0] << ", физика: " <<
- stud.m_grades[1] << ", информат.: " << stud.m_grades[2] << std::setw(17) <<
- "ср. балл: " << std::fixed << std::setprecision(1) << stud.m_evaluation;
- return out;
- }
- //------------------------------------------------------------------------
- //main.cpp
- #include <iostream>
- #include <vector>
- #include <Windows.h>
- #include "Students.h"
- int main()
- {
- SetConsoleCP(1251); SetConsoleOutputCP(1251);
- std::vector<Students>vec_stud; // массив студентов
- for (int i{}; i < Students::getLength(); ++i) {
- Students stud; // создаем объект нового студента
- vec_stud.push_back(stud); // добавляем его в вектор
- }
- for (int j{}; j < Students::getLength() - 1; ++j) // итерация студентов
- for (int k{ j + 1 }; k < Students::getLength(); ++k) // итерация студентов
- if (vec_stud[j].Students::averageScore() < vec_stud[k].Students::averageScore()) // сравниваем значения среднего балла
- std::swap(vec_stud[j], vec_stud[k]); // меняем местами
- std::cout << "\t\bВсего студентов : " << Students::getLength() << "\n\n";
- for (const auto& element : vec_stud) // выводим отсортированный вектор
- std::cout << element << std::endl;
- return 0;
- }
- //------------------------------------------------------------------------
- //C://input_data.txt
- 10
- Пиров Николай Иванович 3 5 2
- Самохин Федор Михайлович 4 4 3
- Нестеров Лев Николаевич 1 3 4
- Абрамов Дмитрий Иванович 3 2 2
- Маркелов Петр Ильич 3 3 3
- Поздеев Сергей Павлович 4 5 5
- Семенов Михаил Васильевич 2 2 1
- Попов Александр Степанович 4 5 3
- Столетов Александр Григорьевич 5 4 4
- Кулев Сергей Петрович 5 5 5
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement