Witam, piszę program 'książka adresowa'. Chcę dodać opcję usuwania osoby poprzez podanie liczby porządkowej. Po wpisaniu ID użytkownika, którego chcę usunąć np. ID = 2, program usuwa użytkownika z ID 1 i ID 2. Wiem, że błąd tkwi w funkcji erase, ale nie mam pomysłu jak to zapisać poprawnie.
#include <iostream>
#include <fstream>
#include <windows.h>
#include <cstdlib>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
struct Adresat
{
string imie, nazwisko, nrTel, email, adres;
int idAdresata = 0;
};
std::vector <Adresat> adresaci;
int dodajOsobeDoKsiazki (int iloscOsob = 0)
{
Adresat pomoc;
string imie = " ", nazwisko = " ", nrTel = " ", email = " ", adres = " ";
int idAdresata = iloscOsob + 1;
std::string s = std::to_string(idAdresata);
cout << "Podaj imie: ";
cin >> imie;
cin.sync();
cout << "Podaj nazwisko: ";
cin >> nazwisko;
cin.sync();
cout << "Podaj nr telefonu: ";
cin >> nrTel;
cin.sync();
cout << "Podaj email: ";
cin >> email;
cin.sync();
cout << "Podaj swoj adres: ";
getline(cin, adres);
pomoc.idAdresata = adresaci.size() + 1;
pomoc.imie = imie;
pomoc.nazwisko = nazwisko;
pomoc.nrTel = nrTel;
pomoc.email = email;
pomoc.adres = adres;
//dodaj osobe do wektora
adresaci.push_back(pomoc);
//zapisz do pliku
fstream plikDoZapisu;
plikDoZapisu.open("ksiazkaZAdresami.txt", ios::out | ios::app);
if (plikDoZapisu.good() == true)
{
plikDoZapisu << pomoc.idAdresata << "|" << pomoc.imie << "|" << pomoc.nazwisko << "|" << pomoc.nrTel << "|" << pomoc.email << "|" << pomoc.adres << "|" << endl;
plikDoZapisu.close();
}
else
{
cout << "Nie udalo sie otworzyc pliku";
system("pause");
}
cout << "Osoba zostala dodana do ksiazki adresowej" << endl;
system("pause");
iloscOsob++;
return iloscOsob + 1;
}
vector <Adresat> rozdzielDaneAdresatowNaPojedynczeDane (vector <Adresat> &adresaci, string liniaDoOdczytania, char znakPionowejKreski)
{
Adresat adresat;
int nrLinii = 1;
stringstream ss(liniaDoOdczytania);
string pojedynczaDana = " ";
while (getline(ss, pojedynczaDana, znakPionowejKreski))
{
switch (nrLinii)
{
case 1:
adresat.idAdresata = (atoi(pojedynczaDana.c_str()));
break;
case 2:
adresat.imie = pojedynczaDana;
break;
case 3:
adresat.nazwisko = pojedynczaDana;
break;
case 4:
adresat.nrTel = pojedynczaDana;
break;
case 5:
adresat.email = pojedynczaDana;
break;
case 6:
adresat.adres = pojedynczaDana;
break;
}
nrLinii++;
}
adresaci.push_back(adresat);
return adresaci;
}
int wczytajPlikZDanymiAdresatow (vector <Adresat> &adresaci)
{
int idAdresata = 0;
vector <string> pojedynczyKontakt;
string liniaTekstu;
int nrLinii = 1;
int iloscOsob = 0;
fstream plikDoOdczytu;
string ostatniaOsobaWPliku = " ";
plikDoOdczytu.open("ksiazkaZAdresami.txt", ios::in);
if (plikDoOdczytu.good() == true)
{
while (getline(plikDoOdczytu, liniaTekstu))
{
adresaci = rozdzielDaneAdresatowNaPojedynczeDane(adresaci, liniaTekstu, '|');
}
}
plikDoOdczytu.close();
}
void usunAdresata ()
{
int idUsuwanejOsoby;
char potwierdzenieWyboru;
cout << "Podaj id adresata, ktorego chcesz usunac: ";
cin.sync();
cin >> idUsuwanejOsoby;
cin.sync();
vector <Adresat> ::iterator itr = adresaci.begin();
for (itr; itr != adresaci.end(); ++itr)
{
if (itr->idAdresata == idUsuwanejOsoby)
{
cout << itr->idAdresata << "|" << itr->imie << "|" << itr->nazwisko << "|" << itr->nrTel << "|" << itr->email << "|" << itr->adres << endl;
Sleep(1000);
cout << "Czy na pewno chcesz usunac tego adresata? Kliknij t: " << endl;
cin >> potwierdzenieWyboru;
if (potwierdzenieWyboru == 't')
{
adresaci.erase(itr);
//break;
cout << "Kontakt zostal usuniety";
Sleep(1500);
//zapisac zmiany do pliku
fstream plikPoUsunieciuOsoby;
plikPoUsunieciuOsoby.open("KsiazkaZAdresami.txt", ios::out | ios::trunc);
if (plikPoUsunieciuOsoby.good()) //plik poprawny
{
for (itr; itr != adresaci.end(); itr++)
{
plikPoUsunieciuOsoby << itr->idAdresata << "|" << itr->imie << "|" << itr->nazwisko << "|" << itr->nrTel << "|" << itr->email << "|" << itr->adres << endl;
}
plikPoUsunieciuOsoby.close();
}
adresaci.clear(); // czyszcze wektor aby rozmiar wektora byl 0
}
else if (potwierdzenieWyboru != 't')
{
cout << "Blad! Wcisnales zly klawisz!";
}
break;
}
}
}
int main()
{
int liczbaZapisanychOsob = 0;
char twojWybor;
char wyborWMenu;
char checStworzeniaPliku;
int iloscOsob = 0;
//tworzenie pliku
ifstream plik;
plik.open("KsiazkaZAdresami.txt");
if (plik) //sprawdzam czy plik istnieje
{
cout << "Plik istnieje";
}
else //jesli nie istnieeje, stwarzam nowy
{
cout << "Plik nie istnieje, jesli chccesz stworzyc nowy plik, klinkij n" << endl;
cin >> checStworzeniaPliku;
string nowyPlik;
nowyPlik = "KsiazkaZAdresami.txt";
ofstream plikDoStworzenia(nowyPlik.c_str());
}
liczbaZapisanychOsob = wczytajPlikZDanymiAdresatow (adresaci);
while (1)
{
system("cls");
cout << "Witaj w ksiazce adresowej!" << endl;
cout << "Wybierz opcje: " << endl;
cout << "1. Dodaj adresata" << endl;
cout << "5. Usun adresata" << endl;
cin >> twojWybor;
if (twojWybor == '1')
{
dodajOsobeDoKsiazki(liczbaZapisanychOsob);
}
else if (twojWybor == '5')
{
usunAdresata();
}
}
return 0;
}