Применение паттернов проетирования в базу данных C++

Здраствуйте, я делаю базу данных в консольном приложении на С++. У меня есть файлы с данными, которые нужно отфильтровать. Основным условием есть использование паттернов проектирования в моем проекте. Проект я делаю с использованием хедеров, где создаю классы и методы классов, а в .cpp файлах я их описываю. В чем же ПРОБЛЕМА. Компилятор выдает 2 какие-то ошыбки, что не может найти определения для функций DataSportsReading и DataSave, указанных в вашем основном файле, хотя вроде методы описаны неплохо. Помогите разобратся) Код файлов .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 = new ISportsmen_Data* [_sizet];
     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;
default:
             cout << "Пункт введен не верно" << endl;
             system("pause");
             system("cls");
             Menu(userType);
             break;

         }
     }

     system("cls");
     cout << "Работа окончена!" << endl;

     return 0;

}

Файл Sportsmen.h, здесь я реализовал паттерн проектирования Фабрика

#include <iostream>
#include <string>
#include <fstream>
#include <Windows.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 "="

};

Sportmen.cpp

#include "Sportsmen.h"

Sportsmen_Data::Sportsmen_Data() {
    sport_data.sport_init = "";
    sport_data.sport_sportclub = "";
    sport_data.sport_vydsportu = "";
    sport_data.sport_coach = "";
    sport_data.sport_rozryad = 0;
    sport_data.sport_boolcomp = "";
    sport_data.sport_pryzovi = 0;

}

Sportsmen_Data::Sportsmen_Data(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;
}

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(ISportsmen_Data** arrSportsmen, int& mass);
void DataSportsReading(ISportsmen_Data** arrSportsmen, int& mass, const string& fileName);
void showSports(ISportsmen_Data* arrSportsmen, int mass);
void Copy(ISportsmen_Data* arrSportsmen_n, ISportsmen_Data* arrSportsmen_o, int mass);
void addSportsmen(ISportsmen_Data** arrSportsmen, int& mass);
void findSportsByClub(ISportsmen_Data* arrSportsmen, int mass);
void DataSave(ISportsmen_Data* arrSportsmen, int mass, const string& fileName);

SportsmenFunctions.cpp(реализация методов созданных в .h файле)

#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 Sportsmen_Data[mass];
        for (int i = 0; i < mass; i++) {
            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');
            (*arrSportsmen)[i].DataEntry(sportsmen);
            // 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";
}
}
}

Код ошыбки

Серьезность Код Описание    Проект  Файл    Строка  Состояние подавления
Ошибка  LNK2019 ссылка на неразрешенный внешний символ "void __cdecl DataSportsReading(class ISportsmen_Data * *,int &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?DataSportsReading@@YAXPEAPEAVISportsmen_Data@@AEAHAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) в функции main.   Kursova robota  D:\Курсова С++\KURSOVA\Kursova robota\Kursova robota.obj    1

Серьезность Код Описание    Проект  Файл    Строка  Состояние подавления
Ошибка  LNK2019 ссылка на неразрешенный внешний символ "void __cdecl DataSave(class ISportsmen_Data *,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?DataSave@@YAXPEAVISportsmen_Data@@HAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) в функции main.   Kursova robota  D:\Курсова С++\KURSOVA\Kursova robota\Kursova robota.obj    1   
    

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