Добрый вечер,
ТЗ:
Описать структуру Student, которая содержит поля:
- успеваемость (массив из пяти элементов);
1. Записи должны быть упорядочены по возрастанию номера групп [+]
2. Вывод на экран студентов, если их средний балл больше 4 [+]
3. Реализовать ручной ввода и запись в файл. А так же автоматическое чтение из (этого же) файла. [-]
Код программы: (Code::Blocks)
Код:
#include <iostream>
#include <string>
#include <windows.h>
#include <fstream>
using namespace std;
//Объявляю структуру Student
struct student {
string fio;
int group;
int scor[5];
};
// Сортировка по возрастанию номера группы
void Sort(student *studs, int &len) {
for(int i = 0; i < len - 1; i++) {
for(int j = i + 1; j < len; j++) {
if (studs[i].group>studs[j].group) {
student buf = studs[i];
studs[i] = studs[j];
studs[j] = buf;
}
}
}
}
// Подсчитывает средний балл
double avg(student st) {
double sum=0;
for (int i=0; i<5; i++) {
sum+=st.scor[i];
}
return sum/5;
}
int main() {
setlocale(LC_ALL,"rus");
cout<<"Введите количество студентов = ";
int n;
cin>>n;
student *st=new student [n];
cout<<"1 - ввод вручную | 2 - ввод с файла"<<endl;
int b;
cin>>b;
switch(b) {
case 1:
if (b==1) { // Ручной ввод списка студентов
ofstream out("Students.txt");
for (int i=0; i!=n; i++) {
cout<<"Введите ФИО: ";
cin>>st[i].fio;
out<<st[i].fio<<ends;
cout<<"Введите номер группы: ";
cin>>st[i].group;
out<< st[i].group<<ends;
cout<<"Успеваемость: "<<endl;
int j=0;
do {
cout<<"Оценка №"<<j+1<<" ";
cin>>st[i].scor[j];
out<<st[i].scor[j];
j++;
if(j==5) {out<<endl;}
} while(j!=5);
out.close();
cout<<endl;
}
}
break;
case 2: //Считывание из файла
if (b==2) {
ifstream in ("Students.txt");
for (int i=0; i!=n; i++) {
in>>st[i].fio>>st[i].group; cout<<st[i].fio<<ends<<st[i].group<<ends;
int j=0;
do {
in>>st[i].scor[j]; cout<<st[i].scor[j];
j++;
} while (j!=5);
}
in.close(); }
break;
}
cout<<endl;
Sort (st,n);
// Выводим студентов по возрастанию групп
for (int i=0; i!=n; i++) {
cout<<st[i].fio<<endl;
cout<<st[i].group<<endl;
for (int j=0; j!=5; j++) {
cout<<st[i].scor[j]<<" ";
}
cout<<endl;
}
cout<<endl;
int sum=0;
int ind;
int f=0;
cout<<"Студенты средний бал >4"<<endl; // Подсчёт среднего балла для каждого студента
for (int i=0; i!=n; i++)
if (avg(st[i])>4) {
f++;
ind=i;
cout<<st[ind].fio<<endl;
cout<<st[ind].group<<endl;
}
if (f==0) {
cout<<"No"<<endl;
}
delete[]st;
system("pause");
return 0;
}
Проблема с записью и чтением данных из файлов. А именно с этими кусками кода:
Ручной ввод и запись в файл:
Код:
case 1:
if (b==1) { // Ручной ввод списка студентов
ofstream out("Students.txt");
for (int i=0; i!=n; i++) {
cout<<"Введите ФИО: ";
cin>>st[i].fio;
out<<st[i].fio<<ends;
cout<<"Введите номер группы: ";
cin>>st[i].group;
out<< st[i].group<<ends;
cout<<"Успеваемость: "<<endl;
int j=0;
do {
cout<<"Оценка №"<<j+1<<" ";
cin>>st[i].scor[j];
out<<st[i].scor[j];
j++;
if(j==5) {out<<endl;}
} while(j!=5);
out.close();
cout<<endl;
}
}
break;
Проблема в том, что если указать структуру из, к примеру, 10 студентов. То тупо записывается в файл только данные об 1 студенте.
Также проблема со считыванием из файла.
Автоматическое считывание из файла:
Код:
case 2: //Считывание из файла
if (b==2) {
ifstream in ("Students.txt");
for (int i=0; i!=n; i++) {
in>>st[i].fio>>st[i].group; cout<<st[i].fio<<ends<<st[i].group<<ends;
int j=0;
do {
in>>st[i].scor[j]; cout<<st[i].scor[j];
j++;
} while (j!=5);
}
in.close(); }
break;
Вроде как считывает, но тоже только 1 студента.