Выводится список студентов каждого факультета и курса, но сообщения дублируются C++

Всем привет! Написал программу, описывающую класс Student. Она выводит список студентов для каждого факультета и курса, но сообщения дублируются в случае, если, например, два студента относятся к одному факультету. То же самое происходит и с двумя или более студентами, которые учатся, например, на 2 курсе. Что может быть не так?

Кусочек кода (полную версию кода можно скачать здесь через Google Drive)

// Список студентов для каждого факультета и курса
void list_of_faculties_and_course(Student spisok[], int n)
{
    vector<string> faculties; //  должно быть ["IT", "Micro", "Music"] без дублей
    int idx = 0;
    faculties.push_back("-"); 
    int last_idx = faculties.size() - 1; 
    bool flag = false;
    string target = spisok[idx].get_faculty();
    
    for (int i = 0; i < n; i++)
    {
        if (spisok[i].get_faculty() != target)
            idx = i;
            target = spisok[idx].get_faculty();
            faculties.push_back("-");
            last_idx = faculties.size() - 1;
        for (int j = 0; j < n; j++)
        {
            if (target == spisok[j].get_faculty() && flag == false)
            {
                if (faculties[last_idx] != target)
                {
                    faculties[last_idx] = target;
                }
                flag = true;
            }
            if (j == n - 1)
                flag = false;
        }
    }
    
    for (int i = 0; i < faculties.size(); i++)
    {
        cout << "На факультете " << faculties[i] << " числятся следующие студенты:";
        for (int j = 0; j < n; j++)
        {
            if (spisok[j].get_faculty() == faculties[i])
                cout << endl << spisok[j].get_fullname() << endl;
        }
    }
    
    for (int i = 1; i < 5; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i == spisok[j].get_course())
            {
                cout << "На " << spisok[j].get_course() << " курсе числятся следующие студенты:\n";
                cout << spisok[j].get_fullname() << endl;
            }
        }
    }
}

Ожидаемый вывод

На факультете Information Technology числятся следующие студенты:
Ivanov Ivan Ivanovich

На факультете Microbiology числятся следующие студенты: (это сообщение не должно дублироваться 2 раза)
Alexandrov Alexandr Alexandrovich
Petrov Petr Petrovich

На факультете Music числятся следующие студенты:
Vadimov Vadim Vadimovich

На 2 курсе числятся следующие студенты:
Alexandrov Alexandr Alexandrovich

На 3 курсе числятся следующие студенты:
Petrov Petr Petrovich

На 4 курсе числятся следующие студенты:
Ivanov Ivan Ivanovich
Vadimov Vadim Vadimovich

Какой результат программа выводит на самом деле

введите сюда описание изображения


Ответы (0 шт):