База данных из файла в стиле ООП
у меня есть файл со следующей информацией:
Иванов Н.М. 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];
}
}
Всё работает, вопрос. Как можно его оптимизировать??