Работа с файлами.Создание новых файлов.Иерархия классов

232
13 января 2018, 01:53

Был класс 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);

Вопрос как мне дальше их вызывать эту группу чтоб у них можно было посмотреть студентов и тд.?

READ ALSO
Нажатие мыши WinAPI, во время перемещение курсора

Нажатие мыши WinAPI, во время перемещение курсора

Каким образом определить какая из переданных клавиш была нажата используя WPARAM

209
Обратиться к макроопределениям GET_X_LPARAM и GET_Y_LPARAM

Обратиться к макроопределениям GET_X_LPARAM и GET_Y_LPARAM

В виду необходимости, нет смысла передавать в метод оба параметра, а так же выделять динамическую память под POINTS во время обработки сообщения...

213
Отображение текста в sfml

Отображение текста в sfml

Пытаюсь отобразить текст в sfml:

276
Кириллица в pdf отчетах Jasperreports

Кириллица в pdf отчетах Jasperreports

В j2ee с помощью Jasperreports создаются отчетыВыставлен шрифт arial, на локальной машине(Tomcat 9, Windows 7) отчеты в pdf формируются корректно, а при развертывании...

208