Piszę taki program, który ma zapisywać adresatów do pliku, a na podstawie podanego ID usunąć wybraną osobę. Problem w tym, że mój program nie usuwa tej osoby, którą chcę. Jeśli podam ID = 2 to usuwa osobę pierwszą i trzecią. Co mogę zmienić aby program usuwał to, co chcę?
#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;
};
string konwertujIntNaString(int NrID) {
ostringstream ss;
ss << NrID;
string str = ss.str();
return str;
}
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: ";
getline(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)) {
//cout << liniaTekstu[2];
adresaci = rozdzielDaneAdresatowNaPojedynczeDane(adresaci, liniaTekstu, '|');
//adresaci.push_back(pojedynczyKontakt[0], pojedynczyKontakt[1], pojedynczyKontakt[2], pojedynczyKontakt[3], pojedynczyKontakt[4], pojedynczyKontakt[5], pojedynczyKontakt[6]);
}
//ostatniaOsobaWPliku = liniaTekstu;
/* if (ostatniaOsobaWPliku != " ") {
idAdresata = pobierzIdDlaOstatniejOsobyWPliku(liniaTekstu, '|');
return idAdresata;
}
else
idAdresata = 0;*/
}
plikDoOdczytu.close();
// return adresaci;
}
void usunAdresata (vector <Adresat> &adresaci) {
int wyborId;
Adresat pomoc;
char potwierdzenieWyboru;
vector <string> tymczas;
string usuwanaLinia;
vector <Adresat> ::iterator itr = adresaci.begin();
vector <Adresat> ::iterator itrEnd = adresaci.end();
int usuwanaLiniaWInt;
cout << "Podaj id adresata, ktorego chcesz usunac:";
cin >> wyborId;
for (itr; itr != itrEnd; ++itr) {
if (itr->idAdresata == wyborId) {
cout << "Czy na pewno chcesz usunac tego adresata? Kliknij t: " << endl;
cin >> potwierdzenieWyboru;
if (potwierdzenieWyboru == 't') {
//otwarcie pliku starego i usuniecie adresata
ifstream in("ksiazkaZAdresami.txt");
while (getline(in, usuwanaLinia)) tymczas.push_back(usuwanaLinia);
in.close();
//zapisanie pliku bez danego adresata
ofstream out ("ksiazkaZAdresami.txt");
for (int pozycjaWektora = 0; pozycjaWektora < adresaci.size(); pozycjaWektora++) {
//if (pozycjaWektora + 1 != wyborId)
tymczas.erase(tymczas.begin() + pozycjaWektora);
out << tymczas[pozycjaWektora] << endl;
}
out.close();
cout << "Kontakt zostal usuniety" << endl;
Sleep(800);
}
}
}
}
int main() {
int liczbaZapisanychOsob = 0;
char twojWybor;
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;
cout << "6. Edytuj adresata" << endl;
cout << "9. Zakoncz program" << endl;
cin >> twojWybor;
if (twojWybor == '1') {
dodajOsobeDoKsiazki(liczbaZapisanychOsob);
} else if (twojWybor == '5') {
usunAdresata(adresaci);
} else if (twojWybor == '9') {
exit(0);
}
}
return 0;
}