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

lista struktur wyszukiwanie i wyswietlanie danych

Ostatnio zmodyfikowano 2017-01-11 23:04
Autor Wiadomość
mikewazowski
Temat założony przez niniejszego użytkownika
lista struktur wyszukiwanie i wyswietlanie danych
» 2017-01-11 22:58:02

mój problem polega na tym że jeśli na liście jest kilka osób o tym samym nazwisku to wyświetla tylko pierwszą z nich, a chciałabym by wyświetlało wszystkie

C/C++
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstdio>
using namespace std;
struct Dane
{
    string imie;
    string nazwisko;
    string dataur;
    string ulica;
    string miasto;
    string inne;
    int id;
};
struct Student
{
    Dane dane;
    Student * next;
    Student * prev;
    static int num_of_students;
};
int Student::num_of_students = 0;

Student * stworzelement()
{
    Student * element;
    string imie;
    string nazwisko;
    string dataur;
    string ulica;
    string miasto;
    string inne;
    int id = ++Student::num_of_students;
   
    cout << "ID: " << id << endl;
    cout << "podaj imie: ";
    cin >> imie;
    cout << "podaj nazwisko: ";
    cin >> nazwisko;
    cout << "podaj date urodzenia: ";
    cin.sync();
    getline( cin, dataur );
    cout << "podaj ulice i numer domu: ";
    cin.sync();
    getline( cin, ulica );
    cout << "podaj miasto: ";
    cin.sync();
    getline( cin, miasto );
    cout << "podaj inne dane: ";
    cin.sync();
    getline( cin, inne );
   
    element = new Student();
    element->next = NULL;
    element->prev = NULL;
    element->dane.id = id;
    element->dane.imie = imie;
    element->dane.nazwisko = nazwisko;
    element->dane.dataur = dataur;
    element->dane.ulica = ulica;
    element->dane.miasto = miasto;
    element->dane.inne = inne;
   
    return element;
}
int dodajkoniec( Student ** head )
{
    Student * pom;
    if( * head == NULL )
    {
       
        Student * tmp = stworzelement();
        * head = tmp;
        cout << "***dodano do bazy***" << endl;
    }
   
    else
    {
        Student * tmp = stworzelement();
        pom = * head;
       
        while( pom->next != NULL )
        {
            pom = pom->next;
           
        }
        tmp->prev = pom;
        pom->next = tmp;
        cout << "***dodano do bazy***" << endl;
    }
   
}

Student * wyszukaj_element( Student * head, string nazwisko ) //szuka po nazwisku
{
    Student * pom;
    pom = head;
    while( pom != NULL &&( pom->dane.nazwisko ).compare( nazwisko ) != 0 )
         pom = pom->next;
   
    return pom;
}
void wyszukaj( Student ** head ) //wyswietla po nazwisku
{
    A:
    int co;
    Student * tmp;
    Student * pom;
    string nazwisko;
    cout << "podaj nazwisko: ";
    cin >> nazwisko;
    tmp = wyszukaj_element( * head, nazwisko );
    if( tmp == NULL )
    {
        cout << "***nie ma takiej osoby na liscie***" << endl;
        cout << "1-wroc do menu" << endl << "2- kontynuuj szukanie" << endl;
        cin >> co;
        if( co == 2 )
        {
            goto A;
        }
    }
    else
    {
        // do
        {
            pocza:
            cout << endl << "Imie: " << tmp->dane.imie << endl;
            cout << "Nazwisko: " << tmp->dane.nazwisko << endl;
            cout << "ID: " << tmp->dane.id << endl;
            cout << "Data urodzenia: " << tmp->dane.dataur << endl;
            cout << "Ulica i numer domu: " << tmp->dane.ulica << endl;
            cout << "Miasto: " << tmp->dane.miasto << endl;
            cout << "Inne: " << tmp->dane.inne << endl;
           
            tmp = wyszukaj_element( * head, nazwisko );
            if( tmp != NULL ) goto pocza;
            //        break;
            //  }while (tmp!=NULL);
        }
    }
   
    int main()
    {
        //menu
    }
P-156344
michal11
» 2017-01-11 23:04:05
Po znalezieniu elementy wyszukuj od następnego, coś mniej więcej tak

C/C++
Elem * tmp = head;

while( tmp )
{
    wmp = wyszukaj( tmp.next );
}

P-156345
« 1 »
  Strona 1 z 1