Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Książka kontaktów z użyciem struktur

Ostatnio zmodyfikowano 2020-12-06 17:14
Autor Wiadomość
wwojtas
Temat założony przez niniejszego użytkownika
Książka kontaktów z użyciem struktur
» 2020-12-04 22:27:11
uszanowanko !

Od dwóch miesięcy uczę się programować i proszę o pomoc przy tworzeniu książki kontaktow...
co jest nie tak z id?
Jak wczytać kontakty?
czy funkcja wczytaj_kontakty musi cokolwiek zwracać?

mimo, że w pliku tekstowym są 2 kontakty wprowadzone to i tak pokazuje 0 lub niewłaściwą wartość?

Tylko proszę nie pisać coś typu: "kolego użyj wektorów" lub coś innego... jeszcze tego nie przerobiłem.

Z góry serdecznie dziękuję !


C/C++
#include <iostream>
#include <windows.h>  
//sleep();
#include <fstream>

using namespace std;

struct ksiazka_kontaktow
{
   
int id;
   
string imie;
   
string nazwisko;
   
string nr_tel;
   
string email;
   
string adres;
};


int wczytaj_kontakty( ksiazka_kontaktow kontakt[ ] )
{
   
string linia;
   
fstream plik;
   
plik.open( "ksiazka_kontaktow.txt", ios::in );
   
   
int nr_linii = 1;
   
int i = 1;
   
int ilosc_kontaktow = 0;
   
   
if( plik.good() == false ) cout << "Nie mozna otworzyc pliku!";
   
   
else
   
{
       
for( int i = 0; !plik.eof(); i++ )
       
{
           
getline( plik, linia );
           
kontakt[ i ].id = atoi( linia.c_str() );
           
getline( plik, linia );
           
kontakt[ i ].imie = linia;
           
getline( plik, linia );
           
kontakt[ i ].nazwisko = linia;
           
getline( plik, linia );
           
kontakt[ i ].nr_tel = linia;
           
getline( plik, linia );
           
kontakt[ i ].email = linia;
           
getline( plik, linia );
           
kontakt[ i ].adres = linia;
           
           
if( nr_linii == 7 ) ilosc_kontaktow++;
           
       
}
       
// ilosc_kontaktow++;
   
}
   
   
cout << "Ilosc kontaktow w ksiazce: " << ilosc_kontaktow << endl;
   
system( "pause" );
   
plik.close();
   
   
return ilosc_kontaktow;
}


int wpisz_kontakt( ksiazka_kontaktow kontakt[ ], int ilosc_kontaktow )
{
   
string imie, nazwisko, nr_tel, email, adres;
   
string linia;
   
int id = 0;
   
   
fstream plik;
   
plik.open( "ksiazka_kontaktow.txt", ios::out | ios::app );
   
   
system( "cls" );
   
cout << "Podaj imie: ";
   
cin.sync();
   
getline( cin, imie );
   
cout << "Podaj nazwisko: ";
   
cin.sync();
   
getline( cin, nazwisko );
   
cout << "Podaj numer telefonu: ";
   
cin.sync();
   
getline( cin, nr_tel );
   
   
cout << "Podaj email: ";
   
cin >> email;
   
cout << "Podaj adres: ";
   
cin.sync();
   
getline( cin, adres );
   
   
id = ilosc_kontaktow + 1;
   
   
kontakt[ ilosc_kontaktow ].id = id;
   
kontakt[ ilosc_kontaktow ].imie = imie;
   
kontakt[ ilosc_kontaktow ].nazwisko = nazwisko;
   
kontakt[ ilosc_kontaktow ].nr_tel = nr_tel;
   
kontakt[ ilosc_kontaktow ].email = email;
   
kontakt[ ilosc_kontaktow ].adres = adres;
   
   
cout << endl << endl;
   
   
cout << "Kontakt wpisany!" << endl;
   
cout << endl;
   
cout << "Twoj nowy kontakt to: " << endl;
   
cout << kontakt[ ilosc_kontaktow ].imie << " " << kontakt[ ilosc_kontaktow ].nazwisko << endl;
   
cout << kontakt[ ilosc_kontaktow ].nr_tel << endl;
   
cout << kontakt[ ilosc_kontaktow ].email << endl;
   
cout << kontakt[ ilosc_kontaktow ].adres << endl;
   
cout << "Id kontaktu to: " << kontakt[ ilosc_kontaktow ].id << endl;
   
Sleep( 1000 );
   
   
if( plik.good() )
   
{
       
plik << id << endl;
       
plik << imie << endl;
       
plik << nazwisko << endl;
       
plik << nr_tel << endl;
       
plik << email << endl;
       
plik << adres << endl;
       
       
plik.close();
       
       
cout << "Kontakt wpisany!" << endl;
       
Sleep( 1000 );
       
system( "pause" );
   
}
   
else
   
{
       
cout << "Nie mozna otworzyc pliku i zapisac do niego kontaktu." << endl;
       
system( "pause" );
   
}
   
ilosc_kontaktow++;
   
   
return ilosc_kontaktow;
}

int wyszukaj_imie( ksiazka_kontaktow kontakt[ ], int ilosc_kontaktow )
{
   
string szukane_imie;
   
int wyszukane_kontakty = 0;
   
string linia;
   
fstream plik;
   
   
plik.open( "ksiazka_kontaktow.txt", ios::in );
   
   
if( plik.good() == false )
   
{
       
cout << "Brak kontaktow w ksiazce";
       
plik.open( "ksiazka_kontaktow.txt", ios::out );
       
plik.close();
   
}
   
   
else if( plik.good() )
   
{
       
cout << "Wyszukaj po imieniu" << endl;
       
cout << "Wpisz imie: ";
       
cin >> szukane_imie;
       
       
for( int i = 0; !plik.eof(); i++ )
       
{
           
getline( plik, linia );
           
kontakt[ i ].id = atoi( linia.c_str() );
           
getline( plik, linia );
           
kontakt[ i ].imie = linia;
           
getline( plik, linia );
           
kontakt[ i ].nazwisko = linia;
           
getline( plik, linia );
           
kontakt[ i ].nr_tel = linia;
           
getline( plik, linia );
           
kontakt[ i ].email = linia;
           
getline( plik, linia );
           
kontakt[ i ].adres = linia;
           
           
if( kontakt[ i ].imie == szukane_imie )
           
{
               
cout << "Wyszukano:" << endl;
               
cout << kontakt[ i ].id << endl;
               
cout << kontakt[ i ].imie << endl;
               
cout << kontakt[ i ].nazwisko << endl;
               
cout << kontakt[ i ].nr_tel << endl;
               
cout << kontakt[ i ].email << endl;
               
cout << kontakt[ i ].adres << endl;
               
cout << endl << endl << endl;
               
wyszukane_kontakty++;
           
}
        }
       
system( "pause" );
   
}
   
   
return wyszukane_kontakty;
}

int wyszukaj_nazwisko( ksiazka_kontaktow kontakt[ ], int ilosc_kontaktow )
{
   
string szukane_nazwisko;
   
int wyszukane_kontakty = 0;
   
string linia;
   
fstream plik;
   
   
plik.open( "ksiazka_kontaktow.txt", ios::in );
   
   
if( plik.good() == false )
   
{
       
plik.open( "ksiazka_kontaktow.txt", ios::out );
       
cout << "Brak kontaktow";
       
plik.close();
   
}
   
   
else if( plik.good() )
   
{
       
cout << "Wyszukaj po nazwisku" << endl;
       
cout << "Wpisz nazwisko: ";
       
cin >> szukane_nazwisko;
       
       
for( int i = 0; !plik.eof(); i++ )
       
{
           
getline( plik, linia );
           
kontakt[ i ].id = atoi( linia.c_str() );
           
getline( plik, linia );
           
kontakt[ i ].imie = linia;
           
getline( plik, linia );
           
kontakt[ i ].nazwisko = linia;
           
getline( plik, linia );
           
kontakt[ i ].nr_tel = linia;
           
getline( plik, linia );
           
kontakt[ i ].email = linia;
           
getline( plik, linia );
           
kontakt[ i ].adres = linia;
           
           
if( kontakt[ i ].nazwisko == szukane_nazwisko )
           
{
               
cout << "Wyszukano:" << endl;
               
cout << kontakt[ i ].id << endl;
               
cout << kontakt[ i ].imie << endl;
               
cout << kontakt[ i ].nazwisko << endl;
               
cout << kontakt[ i ].nr_tel << endl;
               
cout << kontakt[ i ].email << endl;
               
cout << kontakt[ i ].adres << endl;
               
cout << endl << endl << endl;
               
wyszukane_kontakty++;
           
}
        }
       
system( "pause" );
   
}
   
return wyszukane_kontakty;
}

int wyswietl_kontakty( ksiazka_kontaktow kontakt[ ], int ilosc_kontaktow )
{
   
   
string linia;
   
fstream plik;
   
plik.open( "ksiazka_kontaktow.txt", ios::in );
   
   
cout << "Ilosc kontaktow w ksiazce: " << ilosc_kontaktow << endl;
   
   
if( plik.good() == false )
   
{
       
plik.open( "ksiazka_kontaktow.txt", ios::out );
       
plik.close();
   
}
   
   
else
   
{
       
for( int i = 0; !plik.eof(); i++ )
       
{
           
           
getline( plik, linia );
           
kontakt[ i ].id = atoi( linia.c_str() );
           
cout << kontakt[ i ].id << endl;
           
           
getline( plik, linia );
           
kontakt[ i ].imie = linia;
           
cout << kontakt[ i ].imie << endl;
           
           
getline( plik, linia );
           
kontakt[ i ].nazwisko = linia;
           
cout << kontakt[ i ].nazwisko << endl;
           
           
getline( plik, linia );
           
kontakt[ i ].nr_tel = linia;
           
cout << kontakt[ i ].nr_tel << endl;
           
           
getline( plik, linia );
           
kontakt[ i ].email = linia;
           
cout << kontakt[ i ].email << endl;
           
           
getline( plik, linia );
           
kontakt[ i ].adres = linia;
           
cout << kontakt[ i ].adres << endl;
           
cout << " " << endl;
           
           
ilosc_kontaktow++;
       
}
    }
   
   
plik.close();
   
   
system( "pause" );
   
return ilosc_kontaktow;
}


int main()
{
   
ksiazka_kontaktow kontakt[ 100 ];
   
int ilosc_kontaktow = wczytaj_kontakty( kontakt );
   
int wyszukane_kontakty = 0;
   
char wybor;
   
   
while( true )
   
{
       
system( "cls" );
       
cout << "Ilosc kontaktow w ksiazce: " << ilosc_kontaktow << endl;
       
cout << "Ksiazka kontaktow: " << endl;
       
cout << "1. Wpisz kontakt" << endl;
       
cout << "2. Wyszukaj kontakt po imieniu" << endl;
       
cout << "3. Wyszukaj kontakt po nazwisku" << endl;
       
cout << "4. Wyswietl wszystkie kontakty" << endl;
       
cout << "9. Zamknij program" << endl;
       
       
cin >> wybor;
       
       
if( wybor == '1' )
       
{
           
ilosc_kontaktow = wpisz_kontakt( kontakt, ilosc_kontaktow );
       
}
       
else if( wybor == '2' )
       
{
           
wyszukane_kontakty = wyszukaj_imie( kontakt, ilosc_kontaktow );
       
}
       
else if( wybor == '3' )
       
{
           
wyszukane_kontakty = wyszukaj_nazwisko( kontakt, ilosc_kontaktow );
           
       
}
       
else if( wybor == '4' )
       
{
           
wyswietl_kontakty( kontakt, ilosc_kontaktow );
       
}
       
else if( wybor == '9' )
       
{
           
exit( 0 );
       
}
    }
   
system( "pause" );
   
   
return 0;
}


[ \ cpp ]
P-177782
DejaVu
» 2020-12-05 11:09:00
Z grubsza kod wygląda dosyć sensownie. Co Ci konkretnie nie działa? Bo kodu jest sporo, a problemy opisane powierzchownie. Jeżeli kontakty by się nie wczytywały to miałbyś komunikat z błędem. Jeżeli masz komunikat z błędem to znaczy, że plik w domyślnej lokalizacji nie istnieje.
P-177784
pekfos
» 2020-12-05 14:57:59
Niczego nie robisz ze zmienną nr_linii.
P-177786
wwojtas
Temat założony przez niniejszego użytkownika
» 2020-12-05 18:00:06
Psze.. ale szaleństwo myśli utrudnia pisanie....
Już piszę:
1. uruchamiam program
2.Po wczytaniu kontaktów z pliku (plik i dostęp - istnieje) .. i mimo tego, że kontakty są wpisane w książce, program nie zwraca mi odpowiadającej ilości kontaktów z pliku, tego właśnie nie wiem, (rozwiązałbym samodzielnie temat ale, jakoś dziwnie w przypadku tego programu debuger odmawia posłuszeństwa)

3.wydaje się że funkcja wczytująca "wczytaj_kontakty" zwraca nieprawidłową wartość  "ilosc_kontaktow".
P-177788
pekfos
» 2020-12-05 19:23:52
C/C++
if( nr_linii == 7 ) ilosc_kontaktow++;
Albo po prostu wywal tego ifa. Zmienną nr_linii też.
P-177791
wwojtas
Temat założony przez niniejszego użytkownika
» 2020-12-06 17:14:40
problem rozwiązany
P-177794
« 1 »
  Strona 1 z 1