Результаты экзаменационной сессии студентов представлены в таблице, создать файл, содержащий данные этой таблицы и выводящий таблицу студентов(их данные), получивших из программирования оценки более 3 в С++
#include
#include
#include
using namespace std;
struct grade {
int math, algebra, programming, os;
};
struct student {
string FIO;
grade grades {0, 0, 0, 0};
};
void writeStrip(int count) {
for (int i = 0; i < count; i++)
cout << "-";
cout << endl;
}
void printAllStudents(student *students, int size) {
int fioWidth = 20;
int gradesWidth = 10;
writeStrip(fioWidth + gradesWidth * 4);
cout
<< setw(fioWidth) << "FIO|"
<< setw(gradesWidth) << "Math|"
<< setw(gradesWidth) << "Algebra|"
<< setw(gradesWidth) << "Programming|"
<< setw(gradesWidth) << "OS|"
<< endl;
writeStrip(fioWidth + gradesWidth * 4);
fioWidth--; gradesWidth--;
for (size_t i = 0; i < size; i++)
{
cout
<< setw(fioWidth) << students[i].FIO << "|"
<< setw(gradesWidth) << students[i].grades.math << "|"
<< setw(gradesWidth) << students[i].grades.algebra << "|"
<< setw(gradesWidth) << students[i].grades.programming << "|"
<< setw(gradesWidth) << students[i].grades.os << "|"
<< endl;
}
fioWidth++; gradesWidth++;
writeStrip(fioWidth + gradesWidth * 4);
}
void printStudentsWithGoodProgramming(student* students, int size) {
int cutSize = 0;
for (size_t i = 0; i < size; i++)
if (students[i].grades.programming > 3)
cutSize++;
student* cutStudents = new student[cutSize];
for (size_t i = 0; i < cutSize; i++)
cutStudents[i] = student();
for (size_t i = 0, j = 0; i < size; i++)
{
if (students[i].grades.programming < 4)
continue;
cutStudents[j] = students[i];
j++;
}
printAllStudents(cutStudents, cutSize);
cout << "Number: " << cutSize;
delete[] cutStudents;
}
int main() {
cout << "Number of students: ";
int size = 1;
do {
if (size < 1 || size > 100)
cout << "Incorrect number of students: ";
cin >> size;
} while (size < 1 || size > 100);
student* students = new student[size];
for (size_t i = 0; i < size; i++) {
cout << "FIO " << (i + 1) << " student: ";
cin.ignore();
getline(cin, students[i].FIO);
cout << "Enter math grade: ";
cin >> students[i].grades.math;
cout << "Enter physics grade: ";
cin >> students[i].grades.algebra;
cout << "Enter programming grade: ";
cin >> students[i].grades.programming;
cout << "Enter os grade: ";
cin >> students[i].grades.os;
}
cout << "Table of all students:" << endl;
printAllStudents(students, size);
cout << "The table of students who have a grade more than 3 in programming:" << endl;
printStudentsWithGoodProgramming(students, size);
delete[] students;
return 0;
}
Answers & Comments
Код:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main() {
// Открытие файла с данными
ifstream fin("students.txt");
// Проверка открытия файла
if (!fin) {
cerr << "Ошибка открытия файла" << endl;
return 1;
}
// Вектор для хранения данных студентов
vector<string> students;
// Считывание данных из файла
string line;
while (getline(fin, line)) {
// Разбиение строки на поля по разделителю ";"
string name, subject;
int programming_grade;
stringstream ss(line);
getline(ss, name, ';');
getline(ss, subject, ';');
ss >> programming_grade;
// Проверка оценки по программированию
if (subject == "Программирование" && programming_grade > 3) {
students.push_back(line);
}
}
// Вывод таблицы данных студентов
cout << "Список студентов с оценкой по программированию более 3:" << endl;
for (string student : students) {
cout << student << endl;
}
// Закрытие файла
fin.close();
return 0;
}
В этом коде открываем файл "students.txt", считываем данные построчно, проверяем оценки студентов по программированию и добавляем данные нужных студентов в вектор "students". Затем выводим таблицу данных нужных студентов. В конце закрываем файл.