Mój program zapisuje dane do pliku i jedną z funkcji jest usuwanie adresata. Po wpisaniu id osoby powinna być ona usunięta z pliku. Jak na razie mój program w funkcji usunAdresata nadpisuje plik, po czym linia adresaci.erase (itr) powinna go usuwać, a tego nie robi. Program usuwa wybrana osobe, ale tez nadpisuje plik. Jak się pozbyć tego nadpisywania?
#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++;
pomoc.idAdresata++;
return iloscOsob + 1;
}
vector <Adresat> rozdzielDaneAdresatowNaPojedynczeDane (vector <Adresat> &adresaci, string liniaDoOdczytania, char znakPionowejKreski) {
Adresat adresat;
int nrLinii = 1;
//int idAdresata = 0;
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]);
}
}
plikDoOdczytu.close();
}
void aktualizujPoUsusnieciu (Adresat pomoc) {
fstream plik;
plik.open("ksiazkaZAdresami.txt", ios::out);
if (plik.good() == true) {
for (int pozycjaWektora = 0; pozycjaWektora < adresaci.size(); pozycjaWektora++) {
plik << adresaci[pozycjaWektora].idAdresata << "|" << adresaci[pozycjaWektora].imie << "|" << adresaci[pozycjaWektora].nazwisko << "|" << adresaci[pozycjaWektora].nrTel << "|" << adresaci[pozycjaWektora].email << "|" << adresaci[pozycjaWektora].adres << "|" << endl;
}
plik.close();
}
}
int usunAdresata (vector <Adresat> &adresaci) {
wczytajPlikZDanymiAdresatow(adresaci);
int wybraneID;
char potwierdzenieUsuniecia;
vector <Adresat> ::iterator itr = adresaci.begin();
vector <Adresat> ::iterator itrEnd = adresaci.end();
cout << "Podaj id adresata, ktorego chcesz usunac:";
cin >> wybraneID;
for (itr; itr != itrEnd; ++itr) {
if (itr->idAdresata == wybraneID) {
cout << "Czy na pewno chcesz usunac tego adresata? Jesli tak, kliknij t";
cin >> potwierdzenieUsuniecia;
if (potwierdzenieUsuniecia == 't') {
//aktualizujPoUsusnieciu(*itr);
adresaci.erase (itr);
aktualizujPoUsusnieciu(*itr);
cout << "Kontakt zostal usuniety";
Sleep(800);
return 0;
}
}
}
}
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 << "5. Usun 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;
}