[C++] Książka telefoniczna na wskaźnikach (lista jednokierunkowa)
Ostatnio zmodyfikowano 2012-01-27 15:30
hello_world Temat założony przez niniejszego użytkownika |
[C++] Książka telefoniczna na wskaźnikach (lista jednokierunkowa) » 2012-01-22 19:55:18 Witam wszystkich Mam problem z kodem, który tworzę sam. Niestety mój poziom wiedzy z c/c++ jest bardzo podstawowy i uzupełniam go na bieżąco. Po prostu w koncu dopadło mnie zaliczenie. Muszę stworzyć mini program (ksiazka telefoniczna). Mam wybór oprzeć go o plik lub bazę danych. Moje dotychczasowe wypociny to: #include <iostream> #include <string>
using namespace std;
void dodaj_osobe(); void wyszukaj_nazwisko(); void wyszukaj_telefon(); void pokaz_wszystkie(); void usun_osobe(); void usun_wszystkich(); void edytuj_osobe();
struct osoba { char imie[ 20 ]; char nazwisko[ 30 ]; char miasto[ 25 ]; char ulica[ 30 ]; char telefon[ 9 ]; osoba * next; }; osoba * poczatek = NULL;
int main() { int tmp = 0; do { cout << "\n\t KSIĄŻKA TELEFONICZNA v0.1" << endl; cout << "" << endl; cout << "Aby używać książkę telefoniczną wybierz odpowiednie liczby" << endl; cout << "" << endl; cout << "\t 1. Dodaj osobę" << endl; cout << "\t 2. Wyszukaj osobę po nazwisku" << endl; cout << "\t 3. Wyszukaj osobę po nr. telefonu" << endl; cout << "\t 4. Pokaż wszystkie osoby" << endl; cout << "\t 5. Usun osobę" << endl; cout << "\t 6. Usuń wszystkie osoby" << endl; cout << "\t 7. Edytuj osobę" << endl; cout << "\t 0. Zakoncz program" << endl; cin >> tmp; cout << "\t << Wybrałeś/aś opcję " << tmp << " >> " << endl; cout << "" << endl; switch( tmp ) { case 0: cout << "\t << KONIEC PROGRAMU >>" << endl; break; case 1: dodaj_osobe(); break; case 2: wyszukaj_nazwisko(); break; case 3: wyszukaj_telefon(); break; case 4: pokaz_wszystkie(); break; case 5: usun_osobe(); break; case 6: usun_wszystkich(); break; case 7: edytuj_osobe(); break; default: cout << "\t << Wybrałeś/aś opcję różną od 1-7 >>" << endl; cout << "\t << Wybierz jeszcze raz odpowiednią opcję >>" << endl; cout << "" << endl; break; } } while( tmp != 0 ); return 0; }
void dodaj_osobe() { osoba * nowa = new osoba; nowa->next = NULL; cout << "Podaj imię \t"; cin >> nowa->imie; cout << "Podaj nazwisko \t"; cin >> nowa->nazwisko; cout << "Podaj miasto \t"; cin >> nowa->miasto; cout << "Podaj ulicę \t"; cin >> nowa->ulica; cout << "Podaj numer telefonu \t"; cin >> nowa->telefon; if( poczatek == NULL ) { poczatek = nowa; } else { osoba * szukaj = poczatek; while( szukaj->next != NULL ) { szukaj = szukaj->next; } szukaj->next = nowa; } }
void wyszukaj_nazwisko() { cout << "\t Wybrałes opcje wyszukania przez nazwisko" << endl; }
void wyszukaj_telefon() { cout << "\t Wybrałes opcje wyszukania przez telefon" << endl; }
void pokaz_wszystkie() { if( poczatek == NULL ) { osoba * pokaz = poczatek; while( pokaz->next != NULL ) { cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; pokaz = pokaz->next; } cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; } }
void usun_osobe() { cout << "\t Wybrałes opcje usuniecia osoby" << endl; }
void usun_wszystkich() { cout << "\t Wybrałes opcje usunięcia wszystkich" << endl; }
void edytuj_osobe() { cout << "\t Wybrałes opcje edycji osoby" << endl; }
Jak widać program jest dopiero zaczęty ale już mam problem z funkcją wyświetlania. Nie zwraca mi nic, pomimo że wprowadzam dane. Nie mogę dostrzec błędu. |
|
pekfos |
» 2012-01-22 19:59:32 while( pokaz->next != NULL ) { cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; pokaz = pokaz->next; } cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; Możesz to uprościć. zamiast sprawdzać pokaz->next sprawdzaj pokaz. Wtedy już nie wyświetlaj nic poza pętlą. |
|
hello_world Temat założony przez niniejszego użytkownika |
» 2012-01-22 20:24:49 Niestety dalej po wpisaniu osoby i proby wybrania opcji 4 nie wyswietla się
|
|
malan |
» 2012-01-22 20:30:40 void pokaz_wszystkie() { if( poczatek == NULL ) { osoba * pokaz = poczatek; while( pokaz->next != NULL ) { cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; pokaz = pokaz->next; } cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; } } Dlaczego poczatek == NULL ? Jesteś pewny, że ten warunek jest poprawny? Poza tym: if( ) { osoba * pokaz = poczatek; while( pokaz != NULL ) { cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; pokaz = pokaz->next; } } |
|
hello_world Temat założony przez niniejszego użytkownika |
» 2012-01-22 20:59:14 Dlaczego poczatek == NULL ? Jesteś pewny, że ten warunek jest poprawny? |
Usuniecie tej lini nie poprawia wyswietlania W sumie ten wskaźnik chyba powinien odwoływać się do początku osób więc można by go pominąć PS gdzie mogę przeczytać o znacznikach używanych na tym forum bo widzę że dezorientuję pracę moderatorów |
|
pekfos |
» 2012-01-22 21:02:30 Nie zawsze coś jest na liście. Zostaw ten warunek (po poprawieniu) PS: Kurs STC |
|
hello_world Temat założony przez niniejszego użytkownika |
» 2012-01-22 21:25:36 @pekfos Pomogła zmiana przypisania na negację Ale po wpisaniu pierwszej osoby dalej nic nie wyswietlało dopiero po wpisaniu drugiej pokazywało pierwszą wpisaną Dodałem ten kod w if i pomogło teraz od razu pokazuje Czyli ten kod jest dobry void pokaz_wszystkie() { if( poczatek != NULL ) { osoba * pokaz = poczatek; while( pokaz->next != NULL ) { cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; pokaz = pokaz->next; } cout << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; } } |
|
hello_world Temat założony przez niniejszego użytkownika |
» 2012-01-23 20:29:02 Witam Przechodzę do następnej funkcji która mnie zblokowala. Chodzi o funkcję usun_osobę. Chciałbym zrealizzować to w oparciu o funkcję wyszukaj_telefon(). niestety nie wiem jak sobie poradzić od czego zacząć. Na razie wywołuję funkcję wyszukaj_telefon() w funkcji usun_osobę(). czy ktoś może mnie naprowadzić jak wyszukaną osobę usunąć z listy? #include <iostream> #include <string>
using namespace std;
void dodaj_osobe(); void wyszukaj_nazwisko(); void wyszukaj_telefon(); void pokaz_wszystkie(); void usun_osobe(); void usun_wszystkich(); void edytuj_osobe();
struct osoba { char imie[ 20 ]; char nazwisko[ 30 ]; char miasto[ 25 ]; char ulica[ 30 ]; char telefon[ 9 ]; osoba * next; }; osoba * poczatek = NULL;
int main() { int tmp = 0; do { cout << "\n\t KSIĄŻKA TELEFONICZNA v0.1" << endl; cout << "" << endl; cout << "Aby używać książkę telefoniczną wybierz odpowiednie liczby" << endl; cout << "" << endl; cout << "\t 1. Dodaj osobę" << endl; cout << "\t 2. Wyszukaj osobę po nazwisku" << endl; cout << "\t 3. Wyszukaj osobę po nr. telefonu" << endl; cout << "\t 4. Pokaż wszystkie osoby" << endl; cout << "\t 5. Usun osobę" << endl; cout << "\t 6. Usuń wszystkie osoby" << endl; cout << "\t 7. Edytuj osobę" << endl; cout << "\t 0. Zakoncz program" << endl; cin >> tmp; cout << "\t << Wybrałeś/aś opcję " << tmp << " >> " << endl; cout << "" << endl; switch( tmp ) { case 0: cout << "\t << KONIEC PROGRAMU >>" << endl; break; case 1: dodaj_osobe(); break; case 2: wyszukaj_nazwisko(); break; case 3: wyszukaj_telefon(); break; case 4: pokaz_wszystkie(); break; case 5: usun_osobe(); break; case 6: usun_wszystkich(); break; case 7: edytuj_osobe(); break; default: cout << "\t << Wybrałeś/aś opcję różną od 1-7 >>" << endl; cout << "\t << Wybierz jeszcze raz odpowiednią opcję >>" << endl; cout << "" << endl; break; } } while( tmp != 0 ); return 0; }
void dodaj_osobe() { osoba * nowa = new osoba; nowa->next = NULL; cout << "Podaj imię \t"; cin >> nowa->imie; cout << "Podaj nazwisko \t"; cin >> nowa->nazwisko; cout << "Podaj miasto \t"; cin >> nowa->miasto; cout << "Podaj ulicę \t"; cin >> nowa->ulica; cout << "Podaj numer telefonu \t"; cin >> nowa->telefon; if( poczatek == NULL ) { poczatek = nowa; } else { osoba * szukaj = poczatek; while( szukaj->next != NULL ) { szukaj = szukaj->next; } szukaj->next = nowa; } }
void wyszukaj_nazwisko() { string szukacz; cout << "Podaj nazwisko do wyszukania \t"; cin >> szukacz; osoba * pokaz = poczatek; while( pokaz->next != NULL ) { if( pokaz->nazwisko == szukacz ) { cout << "Imię: " << pokaz->imie << endl << "Nazwisko: " << pokaz->nazwisko << endl << "Miasto: " << pokaz->miasto << endl << "Ulica: " << pokaz->ulica << endl << "Telefon: " << pokaz->telefon << endl; } pokaz = pokaz->next; } if( pokaz->nazwisko == szukacz ) { cout << "Imię: " << pokaz->imie << endl << "Nazwisko: " << pokaz->nazwisko << endl << "Miasto: " << pokaz->miasto << endl << "Ulica: " << pokaz->ulica << endl << "Telefon: " << pokaz->telefon << endl; } else { cout << "Brak takiej osoby" << endl; } }
void wyszukaj_telefon() { string szukacz; cout << "Podaj numer telefonu do wyszukania \t"; cin >> szukacz; osoba * pokaz = poczatek; while( pokaz->next != NULL ) { if( pokaz->telefon == szukacz ) { cout << "Imię: " << pokaz->imie << endl << "Nazwisko: " << pokaz->nazwisko << endl << "Miasto: " << pokaz->miasto << endl << "Ulica: " << pokaz->ulica << endl << "Telefon: " << pokaz->telefon << endl; } pokaz = pokaz->next; } if( pokaz->telefon == szukacz ) { cout << "Imię: " << pokaz->imie << endl << "Nazwisko: " << pokaz->nazwisko << endl << "Miasto: " << pokaz->miasto << endl << "Ulica: " << pokaz->ulica << endl << "Telefon: " << pokaz->telefon << endl; } else { cout << "Brak takiej osoby" << endl; } }
void pokaz_wszystkie() { if( poczatek != NULL ) { osoba * pokaz = poczatek; while( pokaz->next != NULL ) { cout << "-----\n" << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; pokaz = pokaz->next; } cout << "-----\n" << pokaz->imie << endl; cout << pokaz->nazwisko << endl; cout << pokaz->miasto << endl; cout << pokaz->ulica << endl; cout << pokaz->telefon << endl; } }
void usun_osobe() { wyszukaj_telefon(); }
void usun_wszystkich() { cout << "\t Wybrałes opcje usunięcia wszystkich" << endl; }
void edytuj_osobe() { cout << "\t Wybrałes opcje edycji osoby" << endl; }
|
|
« 1 » 2 3 4 |