База данных из файла в стиле ООП

у меня есть файл со следующей информацией:

Иванов Н.М. 1998, инженер, группа 1
Петров П.И. 1999, инженер, группа 2
Плетнев И.С. 2001, лаборант, группа 4
Гаврилов Т.Г. 1976, техник, группа 1
Бойко А.Л. 1969, председатель, группа 1
Медведев Д.С. 2000, лаборант, группа 3
Анисин Н.М. 1966, председатель, группа 2
Петров П.П. 1971, председатель, группа 3
Андрианов М.С. 1999, лаборант, группа 1
Бердыев А.Г. 1955, председатель, группа 4
Нефедов А.Л. 1992, техник, группа 4
Чугунин И.У. 2001, лаборант, группа 2
Семенов Е.С. 1994, техник, группа 2
Панин Р.Г. 1995, техник, группа 3
Парфенов А.Л. 1998, инженер, группа 4
Буч Г.Г. 1996, инженер, группа 3

Необходимо вывести в консоль данные об инженерах , а следом, данные о НЕ председателях, отсортированных по возрастанию года рождения. Написал такой код:

class DB {
public:
    string* fio = new string;
    string* date = new string;
    string* pos = new string;
    string* gr = new string;

    DB(string fio, string date, string pos, string gr) {
        *this->fio = fio;
        *this->date = date;
        *this->pos = pos;
        *this->gr = gr;
    }

    void getIngener()
    {
        if (*this->pos == "инженер")
        {
            cout << "Name is: " << *this->fio << " |DoB is: " << *this->date << " |Position is: ";
            cout << *this->pos << " |Group is: " << *this->gr << endl;
        }
    }

    void getOther()
    {
        if (*this->pos != "председатель")
        {
            cout << "Name is: " << *this->fio << " |DoB is: " << *this->date << " |Position is: ";
            cout << *this->pos << " |Group is: " << *this->gr << endl;
        }
    }

    virtual ~DB() {
        delete fio, date, pos, gr;
    }
};
//предикат
bool cmp(DB* a, DB* b)
{
    if (*a->date < *b->date)
    {
        return true;
    }
    else
        return false;
}

void main()
{
    setlocale(LC_ALL, "rus");
    string line = "", fio = "", date = "", pos = "", gr = "";
    int count = 0, length = 0, a = 0;
    vector<DB*> box;
    ifstream in("file.txt"); // окрываем файл для чтения
    if (in.is_open())
    {
        while (getline(in, line))//считываем построчно
        {
            for (int i = 0; i < line.length(); i++)
            {
                if (line[i] == ' ')//избавляемся от разделителей, разделяем данные
                    // по переменным и записываем данные в объект, добавляя в вектор
                {
                    count++;//число разделителей 
                    switch (count)
                    {
                    case 2:
                        length = i;
                        fio = line.substr(0, length);
                        a = length + 1;
                        break;
                    case 3:
                        length = i;
                        date = line.substr(a, ((length - 1) - a));
                        a = length + 1;
                        break;
                    case 4:
                        length = i;
                        pos = line.substr(a, ((length - 1) - a));
                        a = length + 1;
                        break;
                    case 5:
                        length = i;
                        gr = line.substr(a, ((length + 3) - a));
                        a = length + 1;
                        break;
                    default:
                        break;
                    }
                }
            }
            count = 0;
            DB* obj = new DB(fio, date, pos, gr);
            box.push_back(obj);
        }
    }

    for (int i = 0; i < box.size(); i++)
    {
        box[i]->getIngener();
    }
    sort(box.begin(), box.end(), cmp);
    cout << "-------------------------------------------------\n";
    for (int i = 0; i < box.size(); i++)
    {
        box[i]->getOther();
    }
    for (int i = 0; i < box.size(); i++)
    {
        delete box[i];
    }
}

Всё работает, вопрос. Как можно его оптимизировать??


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