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