Witam,
tworzę (a właściwie modyfikuję) stworzoną wcześniej przeze mnie książkę adresową. Zamiast struktur tablic ma być wektor struktur. Poniżej wklejam kod:
#include <iostream>
#include <windows.h>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
struct Adresat
{
int id = 0;
string imie = "", nazwisko = "", nr_tel = "", email = "", adres = "";
};
int policzAdresatow (FILE * plik)
{
int ilosc = 0;
fstream plikTekstowy;
plikTekstowy.open("KsiazkaAdresowa.txt", ios::in);
if (plikTekstowy.good() == true)
{
string line;
ifstream file("KsiazkaAdresowa.txt");
while(getline(file, line))
{
ilosc++;
}
plikTekstowy.close();
}
return ilosc;
}
int wprowadzanieDanych(vector <Adresat> adresaci, int iloscAdresatow)
{
Adresat ulatwienie;
ulatwienie.id = iloscAdresatow + 1;
string imie, nazwisko, nr_tel, email, adres;
cout << "Podaj imie: ";
cin >> ulatwienie.imie;
cout << "Podaj nazwisko: ";
cin >> ulatwienie.nazwisko;
cout << "Podaj numer telefonu: ";
cin.sync();
getline(cin, ulatwienie.nr_tel);
cout << "Podaj email: ";
cin >> ulatwienie.email;
cout << "Podaj adres: ";
cin.sync();
getline(cin, ulatwienie.adres);
adresaci.push_back(ulatwienie);
cout << "ilosc " << iloscAdresatow;
fstream plik;
plik.open("KsiazkaAdresowa.txt", ios::out | ios::app);
if (plik.good())
{
plik << adresaci[iloscAdresatow].id << "|";
plik << adresaci[iloscAdresatow].imie << "|";
plik << adresaci[iloscAdresatow].nazwisko << "|";
plik << adresaci[iloscAdresatow].nr_tel << "|";
plik << adresaci[iloscAdresatow].email << "|";
plik << adresaci[iloscAdresatow].adres << "|";
plik << endl;
plik.close();
cout << "Przyjaciel dopisany do ksiazki adresowej" << endl;
Sleep(1000);
}
else
{
cout << "Nie mozna otworzyc pliku: KsiazkaAdresowa.txt" << endl;
}
iloscAdresatow++;
return iloscAdresatow;
}
Adresat pobierzDaneAdresata(string daneAdresata)
{
Adresat pobrane;
int id = 0;
string imie, nazwisko, nr_tel, email, adres;
string bufor [6] = daneAdresata;
for(int i= 0 ; i < 6; i++)
{
getline(cin,bufor[i], '|');
pobrane.id = atoi(bufor[0].c_str());
pobrane.imie = bufor[1];
pobrane.nazwisko = bufor[2];
pobrane.nr_tel = bufor[3];
pobrane.email = bufor[4];
pobrane.adres = bufor[5];
}
return pobrane;
}
void wczytajAdresatowZPliku(vector<Adresat> &adresaci)
{
Adresat jedenAdresat;
string daneAdresata = "";
fstream plikTekstowy;
plikTekstowy.open("KsiazkaAdresowa.txt", ios::in);
if (plikTekstowy.good() == true)
{
while (getline(plikTekstowy, daneAdresata))
{
jedenAdresat = pobierzDaneAdresata(daneAdresata);
adresaci.push_back(jedenAdresat);
cout << adresaci.size();
}
plikTekstowy.close();
}
}
/*void wyswietlAdresatow (vector <Adresat> &adresaci, int iloscAdresatow)
{
cout << "ilosc " << iloscAdresatow;
for (int i = 0; i < iloscAdresatow; i++)
{
cout << endl;
cout << "ID: " << adresaci[i].id << endl;
cout << adresaci[i].imie << " " << adresaci[i].nazwisko << endl;
cout << "Telefon: " << adresaci[i].nr_tel << endl;
cout << "Email: " << adresaci[i].email << endl;
cout << "Adres: " << adresaci[i].adres << endl;
cout << endl;
}
}
int szukajPoImieniu(vector <Adresat> &adresaci,int iloscAdresatow)
{
string imie;
cin >> imie;
for( int i = 0; i < iloscAdresatow; i++)
{
if (adresaci[i].imie == imie)
{
cout << adresaci[i].id << ".";
cout << adresaci[i].imie;
cout << adresaci[i].nazwisko;
cout << adresaci[i].nr_tel;
cout << adresaci[i].email;
cout << adresaci[i].adres;
cout << endl;
}
}
system("pause");
return 0;
}
int szukajPoNazwisku(vector <Adresat> &adresaci,int iloscAdresatow)
{
string nazwisko;
cin >> nazwisko;
for( int i = 0; i < iloscAdresatow; i++)
{
if (adresaci[i].nazwisko == nazwisko)
{
cout << adresaci[i].id << ".";
cout << adresaci[i].nazwisko;
cout << adresaci[i].imie;
cout << adresaci[i].nr_tel;
cout << adresaci[i].email;
cout << adresaci[i].adres;
cout << endl;
}
}
system("pause");
return 0;
}*/
int main()
{
vector <Adresat> adresaci;
int iloscAdresatow = 0;
char wybor;
FILE * plik;
plik = fopen( "KsiazkaAdresowa.txt", "r" );
while(1)
{
system("cls");
iloscAdresatow = policzAdresatow(plik);
cout << "1. Dodaj adresata" << endl;
cout << "2. Wyszukaj po imieniu" << endl;
cout << "3. Wyszukaj po nazwisku" << endl;
cout << "4. Wyswietl wszystkich adresatow" << endl;
cout << "5. Usun adresata" << endl;
cout << "6. Edytuj adresata" << endl;
cout << "9. Zakoncz program" << endl;
cout << "Twoj wybor: ";
cin >> wybor;
cout << endl;
if (wybor == '1')
{
iloscAdresatow = wprowadzanieDanych(adresaci, iloscAdresatow);
Sleep(1000);
}
else if (wybor == '2')
{
//szukajPoImieniu(adresaci,iloscAdresatow);
}
else if (wybor == '3')
{
//szukajPoNazwisku(adresaci,iloscAdresatow);
}
else if (wybor == '4')
{
wczytajAdresatowZPliku(adresaci);
wyswietlAdresatow(adresaci,iloscAdresatow);
}
else if (wybor == '5')
{
}
else if (wybor == '6')
{
}
else if (wybor == '9')
{
cout << "Dziekuje za skorzystanie z ksiazki adresowej Lista Schindlera" << endl;
cout << endl;
exit(0);
}
}
return 0;
}
Program ma zapisywać ludzi do pliku ale po wpisaniu pierwszej osoby program się wysypuje i zapisuje randomowe liczby do pliku. Już prosiłem o pomoc w jednym przypadku na forum tutaj: https://4programmers.net/Forum/C_i_C++/337741-c_wczytywanie_danych_wektor_struktur?p=1663271#id1663271. Z odczytem też jest problem - mimo, że jest kilka wpisów to nie chce odczytać mi ani jednego rekordu :/ już dwa dni nad tym dumam, kombinuję i nie mogę znaleźć błędu :/