Был класс Student
и Класс Group
который содержал вектор обьектов Student
.
class Student
{
public:
Student(std::string studentInformation);
Student(std::string firstName,std::string lastName,int ntb,double mark);
std::string getFirstName();
std::string getLastName();
std::string getName();
int getNtb();
double getMark();
private:
std::string firstName; //имя
std::string lastName; //фамилия
int ntb; //номер зачётки
double mark; //cр.бал
};
Student::Student(string studentInformation)
{
stringstream studentStream(studentInformation);
studentStream >> firstName;
studentStream >> lastName;
studentStream >> ntb;
studentStream >> mark;
}
Student::Student(string firstName,string lastName,int ntb,double mark)
{
this->firstName = firstName;
this->lastName = lastName;
this->ntb = ntb;
this->mark = mark;
}
Класс Group
:
class Group
{
public:
Group(std::string filePath);//конструктор
void setNameGroup(string Name);//установить имя
string getNameGroup();
vector<Student> getValedictorian();//все студенты
vector<Student> getHonorRollStudents();//отличники
vector<Student> getFailingStudents();//троечники
void addStudent(string filePath);//добавить студентов в ФАЙЛ И ВЕКТОР
void printStudent(Student student);//вывод на экран студентов
void dellStudent(string filePath);//удалить студента из файла и вектора
private:
string nameGroup;//имя группы
vector<Student> students;//cтуденты
};
//заполнение группы из txt файла
Group::Group(string filePath)
{
ifstream studentFile(filePath);
string lineContents;
while (getline(studentFile, lineContents))
{
Student s(lineContents);
students.push_back(s);
}
studentFile.close();
}
//печать обьектов Student
void Group::printStudent(Student student)
{
cout << "Имя:" << student.getName() << endl;
cout << "Номер зачётки: " << student.getNtb() << endl;
cout << "Cр.бал: " << student.getMark() << endl;
cout << endl;
}
//все студенты
vector<Student> Group::getValedictorian()
{
for (Student s : students)
{
if (s.getMark() > 0 )
break;
else
students.push_back(s);
}
return students;
}
int main(){
Group group1(FilePath1);
group1.setNameGroup("KР - 17");
Group group2(FilePath2);
group2.setNameGroup("KБ - 17");
Group group3(FilePath3);
group3.setNameGroup("KГШИ - 17");
Group group4(FilePath4);
group4.setNameGroup("ЗИП - 17");
//менюшка с выбором действий
}
У меня было ограниченное кол-во групп, теперь мне надо сделать так, чтобы эти группы можно было добавлять и удалять. Надо сделать такой класс GroupList
который содержит в себе список этих групп. Список групп я сделаю скорее всего, а вот как потом связать эти группы с файликами, где находятся студенты у меня нет представления.
Подскажите, как это сделать?
Изменения
в конструкторе сделал ввод имя группы и путь файла студентов
Group::Group(string groupInformation)
{
stringstream studentStream(groupInformation);
studentStream >> nameGroup;
studentStream >> filePath;
ifstream studentFile(filePath);
string lineContents;
while (getline(studentFile, lineContents))
{
Student s(lineContents);
students.push_back(s);
}
studentFile.close();
}
Сам класс GroupList
class GroupList
{
public:
void printGroup(Group group);
GroupList::GroupList(string filePath);
vector<Group> getValedictorian();//все группы
private:
vector <Group> groups;
};
void GroupList::printGroup(Group group)
{
cout << "Имя:" << group.getNameGroup() << endl;
}
GroupList::GroupList(string filePath)//путь к файлу групп
{
ifstream grouptFile(filePath);
string lineContents;
while (getline(grouptFile, lineContents))
{
Group gr(lineContents);
groups.push_back(gr);
}
grouptFile.close();
/*
sort(students.begin(), students.end(), [](Student &s1, Student &s2)
{
return s1.getMark() > s2.getMark();
});
*/
}
vector<Group> GroupList::getValedictorian()
{
vector<Group> toReturn;
for (Group gr : this->groups)
{
toReturn.push_back(gr);
}
if (toReturn.size() == 0)
{
cout <<"В данной файле нет групп" << endl;
}
return toReturn;
}
В главной функции вывожу на экран так
GroupList list("group.txt");
for (Group gr: list.getValedictorian())
list.printGroup(gr);
Вопрос как мне дальше их вызывать эту группу чтоб у них можно было посмотреть студентов и тд.?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Каким образом определить какая из переданных клавиш была нажата используя WPARAM
В виду необходимости, нет смысла передавать в метод оба параметра, а так же выделять динамическую память под POINTS во время обработки сообщения...
В j2ee с помощью Jasperreports создаются отчетыВыставлен шрифт arial, на локальной машине(Tomcat 9, Windows 7) отчеты в pdf формируются корректно, а при развертывании...