Програма зависает C++ база данных

Здраствуйте, я делаю базу данных в консольном приложении на С++. У меня есть файлы с данными, которые нужно отфильтровать. Основным условием есть использование паттернов проектирования в моем проекте(я использовал простейший паттерн фабрика). Проект я делаю с использованием хедеров, где создаю классы и методы классов, а в .cpp файлах я их описываю. В чем же ПРОБЛЕМА. Программа запускается, но дальше зависает и прекращает роботу. Помогите разобратся) Код файлов .cpp и .h Main файл Kursova.cpp

#include "SportsmenFunctions.h"
    
    using namespace std;
    
    int SelectUser() {
         int userType;
         cout << "Выберите тип пользователя:" << endl
             << "1. Пользователь" << endl
             << "2. Администратор" << endl
             <<"Ваш выбор:";
         cin >> userType;
         return userType;
    }
    
    int state_Menu;
    void Menu(int userType) {
         cout << "Выберите действие:" << endl
             << "1. Список спортивных клубов города" << endl
             << "2. Список спортсменов определенного клуба, занимающихся указанным видом спорта" << endl
             << "0. Выход из программы" << endl
             <<"Ваш выбор:";
         cin >> state_Menu;
    }
    
    
    int main() {
         SetConsoleCP(1251);
         SetConsoleOutputCP(1251);
    
         int userType = SelectUser();
         system("cls");
    
         Menu(userType);
    
         int _sizet = 0;
ISportsmen_Data** arrSportsmen = nullptr;
DataSportsReading(&arrSportsmen, _sizet, "Sportsmen1.txt");

    
         while (state_Menu != 0)
         {
             switch (state_Menu)
             {
             case 1:
                 system("cls");
                 showOnlySportClubs();
                 cout << endl;
                 system("pause");
                 system("cls");
                 Menu(userType);
                 break;
             case 2:
                 system("cls");
                 if (_sizet! = 0) {
                     findSportsByClub(*arrSportsmen, _sizet);
                 }
                 else {
                     cout << "Файл пуст!" << endl;
                 }
                 system("pause");
                 system("cls");
                 Menu(userType);
                 break;
case 12:
            system("cls");
            if (_sizet != 0) {
                addSportsmen(arrSportsmen, _sizet);
                DataSave(*arrSportsmen, _sizet, "Sportsmen1.txt");
            }
            else {
                cout << "Файл порожній!" << endl;
            }
            system("pause");
            system("cls");
            Menu(userType);
break;
    default:
                 cout << "Пункт введен не верно" << endl;
                 system("pause");
                 system("cls");
                 Menu(userType);
                 break;
    
             }
         }
    
         system("cls");
         cout << "Работа окончена!" << endl;
    
         return 0;
    
    }

Sportsmen.h

using namespace std;

struct Sportsmen {
    string sport_init, sport_sportclub, sport_vydsportu, sport_coach, sport_boolcomp;
    int sport_rozryad, sport_pryzovi;
};

class ISportsmen_Data {
public:
    virtual ~ISportsmen_Data() {}
    virtual void PrintSports() = 0; // print sportsmen data
    virtual void DataEntry(Sportsmen sport_data_) = 0; // overloaded function for data entering
    virtual Sportsmen GetSportsmenData() = 0; // getter sportsmen data from class
    virtual ISportsmen_Data& operator = (ISportsmen_Data& d_o) = 0; // overloading of operator "="
};

class Sportsmen_Data : public ISportsmen_Data {
protected:
    Sportsmen sport_data;
public:
    Sportsmen_Data(); //constructor without argument
    Sportsmen_Data(Sportsmen sport_data_); // constructor with argument
    ~Sportsmen_Data();// destructor

    void PrintSports();// print sportsmen data
    void DataEntry(Sportsmen sport_data_);// overloaded function for data entering

    //getter sportsmen data from class
    Sportsmen GetSportsmenData() { return sport_data; }

    //overloading of operator "="
    ISportsmen_Data& operator=(ISportsmen_Data& d_o); // overloading of operator "="

};

Sportsmen.cpp

#include "Sportsmen.h"

Sportsmen_Data::Sportsmen_Data() {
    sport_data = Sportsmen();
}

Sportsmen_Data::Sportsmen_Data(Sportsmen sport_data_) {
    DataEntry(sport_data_);
}

Sportsmen_Data::~Sportsmen_Data() {
}

void Sportsmen_Data::PrintSports() {
 cout << "Фамилия и имя: " << sport_data.sport_init << endl;
 cout << "Спортивный клуб: " << sport_data.sport_sportclub << endl;
 cout << "Вид спорта:" << sport_data.sport_vydsportu << endl;
 cout << "Тренер: " << sport_data.sport_coach << endl;
 cout << "Разряд:" << sport_data.sport_rozryad << endl;
 cout << "Участвовал в соревнованиях: " << sport_data.sport_boolcomp << endl;
 cout << "Количество занятых призовых мест:" << sport_data.sport_pryzovi << endl;
}

void Sportsmen_Data::DataEntry(Sportsmen sport_data_) {
    sport_data.sport_init = sport_data_.sport_init;
    sport_data.sport_sportclub = sport_data_.sport_sportclub;
    sport_data.sport_vydsportu = sport_data_.sport_vydsportu;
    sport_data.sport_coach = sport_data_.sport_coach;
    sport_data.sport_rozryad = sport_data_.sport_rozryad;
    sport_data.sport_boolcomp = sport_data_.sport_boolcomp;
    sport_data.sport_pryzovi = sport_data_.sport_pryzovi;
}

ISportsmen_Data& Sportsmen_Data::operator=(ISportsmen_Data& d_o) {
    Sportsmen_Data* sportsmenData_o = dynamic_cast<Sportsmen_Data*>(&d_o);
    if (sportsmenData_o != nullptr) {
        sport_data = sportsmenData_o->GetSportsmenData();
    }
    return *this;
}

SportsmenFunctions.h

#include "Sportsmen.h"

//prototypes of functions
void DataEntry(Sportsmen_Data** (arrSportsmen), int& mass);
void DataSportsReading(ISportsmen_Data*** arrSportsmen, int& mass, const string& fileName);
void showSports(Sportsmen_Data* arrSportsmen, int mass);
void Copy(Sportsmen_Data* arrSportsmen_n, Sportsmen_Data* arrSportsmen_o, int mass);
void addSportsmen(Sportsmen_Data** (&arrSportsmen), int& mass);
void findSportsByClub(Sportsmen_Data* arrSportsmen, int mass);
void findSportsByRozr(Sportsmen_Data* arrSportsmen, int mass);
void findBestSports(Sportsmen_Data* arrSportsmen, int mass);
void findUnCompSports(Sportsmen_Data* arrSportsmen, int mass);
void showCompPryzery(Sportsmen_Data* arrSportsmen, int mass);
void DataSave(Sportsmen_Data* arrSportsmen, int mass, string fileName);

SportsmenFunctions.cpp

    #include "SportsmenFunctions.h"
    #include <sstream>
    
    //description of functions
    void DataEntry(ISportsmen_Data** arrSportsmen, int& mass) {
    Sportsmen sportsmen;
    cout << "Введите размер массива:";
    cin >> mass;
    *arrSportsmen = new Sportsmen_Data[mass];
    for (int i = 0; i < mass; i++) {
    char e; cin.get(e);
    cout << "Введите фамилию и имя:";
    getline(cin, sportsmen.sport_init, '\n');
    cout << "Введите название спортклуба:";
    getline(cin, sportsmen.sport_sportclub, '\n');
    cout << "Введите вид спорта:";
    cin >> sportsmen.sport_vydsportu;
    cout << "Введите имя и фамилию тренера:";
    getline(cin, sportsmen.sport_coach, '\n');
    cout << "Введите спортивный разряд:";
    cin >> sportsmen.sport_rozryad;
    cin.ignore(1, '\n');
    cout << "Участвовал в соревнованиях:";
    getline(cin, sportsmen.sport_boolcomp, '\n');
    cout << "Занятых скрытых мест:";
    cin >> sportsmen.sport_pryzovi;
    cin.ignore(1, '\n');
    //add new data to element of array
    (*arrSportsmen)[i].DataEntry(sportsmen);
    cout << "_______________________\n";
    }
    }
    void DataSportsReading(ISportsmen_Data*** arrSportsmen, int& mass, const string& fileName) {
    ifstream fin(fileName);
    if (fin) {
        Sportsmen sportsmen;
        string line;
        getline(fin, line);
        stringstream ss(line);
        ss >> mass;
        *arrSportsmen = new ISportsmen_Data*[mass];
        for (int i = 0; i < mass; i++) {
            (*arrSportsmen)[i] = new Sportsmen_Data();
            getline(fin, sportsmen.sport_init);
            getline(fin, sportsmen.sport_sportclub);
            getline(fin, sportsmen.sport_vydsportu);
            getline(fin, sportsmen.sport_coach);
            fin >> sportsmen.sport_rozryad;
            fin.ignore(1, '\n');
            getline(fin, sportsmen.sport_boolcomp);
            fin >> sportsmen.sport_pryzovi;
            fin.ignore(1, '\n');
            // Skip empty line between sportsmen
            if (i < mass - 1) {
                getline(fin, line);
            }
        }
    }
    else {
        cout << "Problem with file opening!" << endl;
    }
    fin.close();
}
    void showSports(ISportsmen_Data* arrSportsmen, int mass) {
    for (int i = 0; i < mass; i++) {
    cout << "Спортсмен #" << i+1 << endl;
    arrSportsmen[i].PrintSports();
    cout << "_______________________________________\n\n";
    }
    }
    
    void Copy(ISportsmen_Data* arrSportsmen_n, ISportsmen_Data* arrSportsmen_o, int mass) {
    for (int i = 0; i < mass; i++) {
    arrSportsmen_n[i] = arrSportsmen_o[i];
    }
    }
    
    void addSportsmen(ISportsmen_Data** arrSportsmen, int& mass) {
    Sportsmen_Data* new_array = new Sportsmen_Data[mass + 1];
    Copy(new_array, *arrSportsmen, mass);
    Sportsmen sportsmen;
    cout << "Введите фамилию и имя:";
    getline(cin, sportsmen.sport_init, '\n');
    cout << "Введите название спортклуба:";
    getline(cin, sportsmen.sport_sportclub, '\n');
    cout << "Введите вид спорта:";
    cin >> sportsmen.sport_vydsportu;
    cout << "Введите имя и фамилию тренера:";
    getline(cin, sportsmen.sport_coach, '\n');
    cout << "Введите спортивный разряд:";
    cin >> sportsmen.sport_rozryad;
    cin.ignore(1, '\n');
    cout << "Участвовал в соревнованиях:";
    getline(cin, sportsmen.sport_boolcomp, '\n');
    cout << "Занятых скрытых мест:";
    cin >> sportsmen.sport_pryzovi;
    cin.ignore(1, '\n');
    new_array[mass].DataEntry(sportsmen);
    delete[] * arrSportsmen;
    *arrSportsmen = new_array;
    mass++;
    }
    
    
    void findSportsByClub(ISportsmen_Data* arrSportsmen, int mass) {
    string club, sport;
    cout << "Введите спортклуб: ";
    cin >> club;
    system("cls");
    cout << "Введите вид спорта:";
    cin >> sport;
    system("cls");
    for (int i = 0; i < mass; i++) {
    if (arrSportsmen[i].GetSportsmenData().sport_sportclub == club && arrSportsmen[i].GetSportsmenData().sport_vydsportu == sport) {
    cout << "Спортсмен #" << i+1 << endl;
    arrSportsmen[i].PrintSports();
    cout << "_______________________\n";
    }
    }
    }

Я сделал отладку кода и понял, что ошибка в этом методе при начале фильтрации в файле Sportsfunctions.cpp

void findSportsByClub(ISportsmen_Data* arrSportsmen, int mass) {
    string club, sport;
    cout << "Введіть спортклуб: ";
    cin >> club;
    system("cls");
    cout << "Введіть вид спорту: ";
    cin >> sport;
    system("cls");
    for (int i = 0; i < mass; i++) {
        if (arrSportsmen[i].GetSportsmenData().sport_sportclub == club && arrSportsmen[i].GetSportsmenData().sport_vydsportu == sport) { //здесь прога останавливается
            cout << "Спортсмен #" << i + 1 << endl;
            arrSportsmen[i].PrintSports();
            cout << "_______________________\n";
        }
    }
}

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