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

[C++] Książka telefoniczna na wskaźnikach (lista jednokierunkowa)

Ostatnio zmodyfikowano 2012-01-27 15:30
Autor Wiadomość
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:
C/C++
#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.
P-49153
pekfos
» 2012-01-22 19:59:32
C/C++
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ą.
P-49154
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ę
P-49156
malan
» 2012-01-22 20:30:40
C/C++
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:
C/C++
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;
    }
}
P-49157
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
P-49158
pekfos
» 2012-01-22 21:02:30
Nie zawsze coś jest na liście. Zostaw ten warunek (po poprawieniu)
C/C++
if( poczatek != NULL )
{

PS: » KursyKurs STC kurs
P-49159
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
C/C++
void pokaz_wszystkie()
{
    if( poczatek != NULL ) //zmieniłem z == na !=
    {
        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;
    }
}
P-49160
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?
C/C++
#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;
}
P-49228
« 1 » 2 3 4
  Strona 1 z 4 Następna strona