Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <string>
- #include <iomanip>
- using namespace std;
- struct date { //структура для даты
- int dd;
- int mm;
- int yy;
- };
- struct student { //структура для студента
- string surname; //фамилия
- string name; //имя
- string patronymic; //отчество
- date date_of_birth; //дата рождения
- float m1; //оценки по пяти предметам
- float m2;
- float m3;
- float m4;
- float m5;
- float sum; //сумма
- };
- date str_to_date(string str) { //перевод строки в дату
- date x;
- string temp = str.substr(0, 2); //день
- x.dd = atoi(temp.c_str());
- temp = str.substr(3, 2); //месяц
- x.mm = atoi(temp.c_str());
- temp = str.substr(6, 4); //год
- x.yy = atoi(temp.c_str());
- return x;
- }
- vector<student> read() { //считывание данных из файла
- ifstream in; //открываем поток ввода из файла input.txt
- in.open("input.txt");
- cout << "Началось считывание из файла 'input.txt'" << endl;
- vector<student> group;
- student temp;
- string temp_date;
- //считываем до тех пор, пока это возможно
- //(пользуемся тем фактом, что поток ввода может возвращать булево значение, если что-то считывается)
- while (in >> temp.surname >> temp.name >> temp.patronymic >> temp_date >> temp.m1 >> temp.m2 >> temp.m3 >> temp.m4 >> temp.m5)
- {
- temp.date_of_birth = str_to_date(temp_date);
- temp.sum = temp.m1 + temp.m2 + temp.m3 + temp.m4 + temp.m5; //подсчет суммы
- group.push_back(temp);
- cout << "Получены данные о " << group.size() << "-м студенте" << endl;
- }
- cout << "Считывание из файла завершено" << endl;
- in.close(); //закрываем поток
- return group;
- }
- void print(vector<student> x) { //вывод в файл
- ofstream out; //открываем поток файлового вывода
- out.open("output.txt");
- cout << "Началась запись в файл 'output.txt'" << endl;
- for (int i = 0; i < x.size(); i++) {
- out << setw(13) << left << x[i].surname; //выравниваем по левому краю
- out << setw(10) << left << x[i].name; //на каждое значение отводим определенное количество символов с помощью setw
- out << setw(13) << left << x[i].patronymic;
- if (x[i].date_of_birth.dd < 10) out << left << '0' << x[i].date_of_birth.dd << '.';
- else out << left << x[i].date_of_birth.dd << '.';
- if (x[i].date_of_birth.mm < 10) out << '0' << x[i].date_of_birth.mm << '.';
- else out << x[i].date_of_birth.mm << '.';
- out << setw(6) << left << x[i].date_of_birth.yy;
- out << setw(4) << left << x[i].m1;
- out << setw(4) << left << x[i].m2;
- out << setw(4) << left << x[i].m3;
- out << setw(4) << left << x[i].m4;
- out << setw(4) << left << x[i].m5;
- out << setw(5) << left << x[i].sum << endl;
- }
- cout << "Запись данных в файл завершена" << endl;
- out.close();
- }
- void ins_sort(vector<student> &a) { //сортировка вставками по убыванию
- int n = a.size();
- for (int i = 0; i < n; i++) {
- int j = i;
- while (j > 0 && a[j].sum > a[j - 1].sum) { //перемещаем элемент влево до тех пор, пока слева от него не
- swap(a[j], a[j - 1]); //окажется больший элемент
- j--;
- }
- }
- }
- int main() {
- setlocale(LC_ALL, "rus");
- vector<student> data = read();
- ins_sort(data);
- print(data);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement