fstream удаление

Пишу программу, типа базы данных, нудно реализовать выборочное удаление(например удалить конкретного человека из списка) но никак не могу понять как это сделать, помогите пожалуйста

class Personnel
{
private:
    string Name;
    string SecondName;
    string ThirdName;
    string Podrazdelenie;
    int Otdel;
    string Dolznost;
    int Razryad;

public:
    string GetName()
    {
        return Name;
    }
    string GetSecondName()
    {
        return SecondName;
    }
    string GetThirdName()
    {
        return ThirdName;
    }
    string GetPodrazdelenie()
    {
        return Podrazdelenie;
    }
    int GetOtdel()
    {
        return Otdel;
    }
    string GetDolznost()
    {
        return Dolznost;
    }
    int GetRazryad()
    {
        return Razryad;
    }

    void input()
    {
        cout << "Введите имя работника\n";
        SetConsoleCP(1251);
        cin >> Name;
        SetConsoleCP(866);
        cout << "Введите фамилию работника\n";
        SetConsoleCP(1251);
        cin >> SecondName;
        SetConsoleCP(866);
        cout << "Введите отчество работника\n";
        SetConsoleCP(1251);
        cin >> ThirdName;
        SetConsoleCP(866);
        cout << "Введите подразделение работника\n";
        SetConsoleCP(1251);
        cin >> Podrazdelenie;
        SetConsoleCP(866);
        cout << "Введите отдел работника\n";
        cin >> Otdel;
        cout << "Введите должность работника\n";
        SetConsoleCP(1251);
        cin >> Dolznost;
        SetConsoleCP(866);
        cout << "Введите разряд работника\n";
        cin >> Razryad;
    }

    void output()
    {
        cout << "Имя: " << Name << " " << "Фамилия: " << SecondName << " " << "Отчество: " << ThirdName << " " << "Подразделение: " << Podrazdelenie << " " << "Отдел: " << Otdel << " " << "Должность: " << Dolznost << " " << "Разряд: " << Razryad << endl;
    }
};




int main()
{
    setlocale(LC_ALL, "ru");
    string path = "spisok.txt";
    Personnel human;
    fstream fs;
    bool check = true;
    int choise;
    string line;
    int num = 1;
    while (check) {
        cout << "1. Добавить\n";
        cout << "2. удалить\n";
        cout << "4. Посмотреть список\n";
        cout << "5. Удалить все \n";
        cin >> choise;

        switch (choise)
        {
        case 1:

            fs.open(path, fstream::in | fstream::out | fstream::app);
            if (!fs.is_open())
            {
                cout << "ошибка открытия файла";
            }
            else
            {
            human.input();
            fs <<num<<". "<< "ФИО: " << human.GetName() << " "<< human.GetSecondName() << " "<< human.GetThirdName() << " " << "Подразделение: " << human.GetPodrazdelenie() << " " << "Отдел: " << human.GetOtdel() << " " << "Должность: " << human.GetDolznost() << " " << "Разряд: " << human.GetRazryad() << endl;
            num++;
        }
        fs.close();
        break;

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

Автор решения: pagislav

Не совсем понятно при чём тут fstream, но в методе Personnel.input() используется стандартный поток ввода, чтобы читать из файла нужно передавать переменную типа ifstream и читать из файла:

void input(ifstream& in)
{
     //...
     in >> Name;
     //...
}   
//...
ifstream in;
in.open(path);

либо использовать freopen, чтобы ваш cin читал данные из файла

freopen(path, "r", stdin);

Что же касается добавления и удаления, то тут можно использовать линейный список, либо контейнеры set или vector из STL

→ Ссылка