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ę ! #include <iostream> #include <windows.h> #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++; } } 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 ]
|
|
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. |
|
pekfos |
» 2020-12-05 14:57:59 Niczego nie robisz ze zmienną nr_linii. |
|
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". |
|
pekfos |
» 2020-12-05 19:23:52 if( nr_linii == 7 ) ilosc_kontaktow++;
Albo po prostu wywal tego ifa. Zmienną nr_linii też. |
|
wwojtas Temat założony przez niniejszego użytkownika |
» 2020-12-06 17:14:40 problem rozwiązany
|
|
« 1 » |