• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyszukiwanie osoby po imieniu

VPS Starter Arubacloud
0 głosów
454 wizyt
pytanie zadane 6 czerwca 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)

Mam do napisania program, który będzie dodawał osoby do ksiązki adresowej, następnie po wpisaniu imienia bądź nazwiska ma znaleźć daną osobę. Problem polega na tym, że jeśli zapiszę jedną osobę, program ją znajduje, ale jesli zapiszę już dwie osoby, to program znajduje pierwszą, ale nie chce znaleźć drugiej i mówi, że nie ma takiej osoby. Tak samo jest z nazwiskiem.

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <sstream>

using namespace std;

struct daneOsob
{
    string imie, nazwisko, email, adres, numerTelefonu;
    int idOsoby;
};

/*string konwersjaIntNaString (int liczba)
{
    ostringstream ss;
    ss << liczba;
    string str = ss.str();

    return str;
}*/

int zapisywanieOsoby (daneOsob osoby[], int iloscOsob)
{
    string imie, nazwisko, email, adres, numerTelefonu;
    int id;

    cout << "Dodawanie osoby: ";
    cout << "Podaj imie: ";
    cin >> imie;
    cout << "Podaj nazwisko: ";
    cin >> nazwisko;
    cout << "Podaj numer telefonu: ";
    cin.sync();  //oproznanie buforu po poprzednim cin spróbuj cin.ignore()
    getline(cin, numerTelefonu);
    cout << "Podaj email: ";
    cin >> email;
    cout << "Podaj adres: ";
    cin.ignore();
    getline(cin, adres);

    id = iloscOsob + 1;

    osoby[iloscOsob].imie = imie;
    osoby[iloscOsob].nazwisko = nazwisko;
    osoby[iloscOsob].email = email;
    osoby[iloscOsob].adres = adres;
    osoby[iloscOsob].numerTelefonu = numerTelefonu;
    osoby[iloscOsob].idOsoby = iloscOsob + 1;
    cout << "Osoba zostala dodana.\n";
    Sleep(1500);

    return iloscOsob + 1;



}



int wyszukiwanieOsobyPoImieniu (daneOsob osoby[], int iloscOsob)
{
    string imie;
    int i = 0;
    cout << "Podaj imie: ";

    while (i < iloscOsob)
    {
        cin >> imie;
        if(osoby[i].imie == imie)
        {
            cout << "Znaleziono osoby o takim imieniu: \n";
            cout << osoby[i].imie << " " << endl;
            Sleep(3000);
            return osoby[i].idOsoby;
        }
        i++;
    }

    cout << "Nie ma uzytkownikow z takim imieniem!" << endl;
    Sleep(3000);
    return 0;

}

int wyszukiwanieOsobyPoNazwisku (daneOsob osoby[], int iloscOsob)
{
    string nazwisko;
    int i = 0;
    cout << "Podaj nazwisko: ";


    while (i < iloscOsob)
        {
            cin >> nazwisko;
            if(osoby[i].nazwisko == nazwisko)
            {
                cout << "Znaleziono osoby o takim nazwisku: \n";
                cout << osoby[i].nazwisko << endl;
                Sleep(3000);
                return osoby[i].idOsoby;
            }

            else
            {
                cout << "Nie ma uzytkownikow z takim nazwiskiem!" << endl;
                cout << osoby[i].nazwisko;
                Sleep(3000);
                return 0;
            }
            i++;


        }
}

void wyswietlanieWszystkichOsob (daneOsob osoby[], int iloscOsob)
{
    int i = 0;
    cout << "Wszystkie osoby: \n";
    while (i < iloscOsob)
    {
        cout << osoby[i].imie << " " << osoby[i].nazwisko << " " << osoby[i].numerTelefonu << " " << osoby[i].email << " " << osoby[i].adres << endl;
        Sleep(3000);
        i++;
    }
}

int main()
{
    string imie, nazwisko;
    int IDOsoby;
    int iloscOsob = 0;
    daneOsob osoby[1000];
    int wybor;

    //iloscOsob = wczytajOsobyZPliku(osoby);

    while (true)
    {
        system("cls");
        cout << "Witaj w ksiazce adresowej!" << endl;
        cout << "Wybierz opcje: " << endl;
        cout << "1. Zapisz osobe" << endl;
        cout << "2. Wyszukuj osoby po imieniu" << endl;
        cout << "3  Wyszukuj osoby po nazwisku" << endl;
        cout << "4. Wyswietl wszystie osoby" << endl;
        cout << "5. Wyjdz z ksiazki" << endl;

        cin >> wybor;
        switch (wybor)
        {
        case 1:
        {
           iloscOsob = zapisywanieOsoby (osoby, iloscOsob);  //funkcja ma zapisywac osobe
            break;
        }
        case 2:
            {
                cout << wyszukiwanieOsobyPoImieniu (osoby, iloscOsob);
                break;
            }
        case 3:
            {
                wyszukiwanieOsobyPoNazwisku(osoby, iloscOsob);
                break;
            }

        case 4:
        {
            wyswietlanieWszystkichOsob (osoby, iloscOsob);
            break;
        }

        case 5:
            {
                exit(0);
                break;
            }

        default:

            break;
        }
    }

    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 6 czerwca 2020 przez draghan VIP (106,230 p.)
wybrane 9 czerwca 2020 przez magda_19
 
Najlepsza

Z tego co widzę, to Twój program znajduje osoby które są głębiej na liście. Może problem tkwi w tym, że w funkcjach wyszukujących masz w pętli zawarte pobieranie danych od użytkownika i trzeba podać takie samo imię / nazwisko przy każdej iteracji, tzn. jak w bazie znajduje się 15 osób a ktoś chce znaleźć akurat osobę która jest ostatnia na liście, musi podać 15 razy tę samą daną.

    while (i < iloscOsob)
    {
        cin >> nazwisko;
        // ...
     }

Spróbuj wyciągnąć ten cin nad while.

1
komentarz 9 czerwca 2020 przez magda_19 Gaduła (3,080 p.)
Dzięki, pomogło ;)

Podobne pytania

0 głosów
1 odpowiedź 1,846 wizyt
pytanie zadane 9 lutego 2020 w C i C++ przez dario Nowicjusz (200 p.)
0 głosów
1 odpowiedź 95 wizyt
0 głosów
1 odpowiedź 226 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...