Cześć, muszę w ponizszym kodzie zadeklarować 3 wartosci poczatkowe(imie, nazwisko, wiek). Dlugo juz nad tym siedze i ciagle nie wiem jak to zrobic, raz program nie dziala, a raz wcale nie wyswietla tych wartosci.
#include<iostream>
#include<conio.h>
#include<string>
#include <cstdlib>
using namespace std;
struct Wizytowka // struktura reprezentujaca pojedyncza wizytowke
{
string imie;
string nazwisko;
int wiek;
Wizytowka *nastepny; // wskaznik na nastepny element na liscie
Wizytowka *poprzedni;// wskaznik na poprzedni element na liscie
Wizytowka() // konstruktor - wywolywany przy tworzeniu obiektu
{
// wczytujemy dane
cout << "Podaj imie: ";
cin >> imie;
cout << "Podaj nazwisko: ";
cin >> nazwisko;
cout << "Podaj wiek: ";
cin >> wiek;
// wskazniki ustawiamy na NULL
nastepny = NULL;
}
void wypisz()
{
cout << "Imie: " << imie << ", Nazwisko: " << nazwisko << ", Wiek: " << wiek << endl;
}
};
void dodaj_wizytowke(Wizytowka **korzen)
{
Wizytowka *nowa = new Wizytowka; // utworzenie nowej wizytowki
Wizytowka *pomoc = (*korzen), *pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
while (pomoc != NULL && (pomoc->nazwisko).compare(nowa->nazwisko) == -1) // dopoki nie wyszlismy za liste i nazwisko na liscie jest przed nowym nazwiskiem poruszamy sie dalej
{
pomoc1 = pomoc; // pomoc1 zawsze wskazuje poprzednika pomoc
pomoc = pomoc->nastepny;
}
if (pomoc != NULL && (pomoc->nazwisko).compare(nowa->nazwisko) == 0) // wizytowka z podanym nazwiskiem juz istanieje
{
cout << "Wizytowka " << nowa->nazwisko << " juz istanieje w wizytowniku\n";
delete nowa; // usuniecie obiektu
}
else if ((*korzen) == NULL || (pomoc == (*korzen) && (pomoc->nazwisko).compare(nowa->nazwisko) == 1)) // nowy element bedzie korzeniem listy
{
nowa->nastepny = (*korzen);
(*korzen) = nowa;
}
else // dodajemy osobe w srodku lub na koncu listy
{
pomoc1->nastepny = nowa;
nowa->nastepny = pomoc;
}
}
void wyszukaj_wizytowke(Wizytowka *korzen, string a)
{
while (korzen != NULL && (korzen->nazwisko).compare(a) != 0) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
korzen = korzen->nastepny;
if (korzen == NULL)
cout << "Nie ma wizytowki " << a << endl;
else
korzen->wypisz();
}
void wypisz_wizytownik(Wizytowka *korzen)
{
cout << "Zawartosc wizytownika:\n";
while (korzen != NULL)
{
korzen->wypisz(); // wypisanie wizytowki
korzen = korzen->nastepny; // przejscie na kolejny element
}
}
bool usun_wizytowke(Wizytowka **korzen, string a)
{
if ((*korzen) == NULL) // lista jest pusta
return false;
Wizytowka *pomoc = (*korzen), *pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
while (pomoc != NULL && (pomoc->nazwisko).compare(a) != 0) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
{
pomoc1 = pomoc;
pomoc = pomoc->nastepny;
}
if (pomoc == NULL) // wyszlismy za liste - nie ma takiego nazwiska na liscie
return false;
else if (pomoc == (*korzen)) // usuwamy koniec
{
(*korzen) = (*korzen)->nastepny;
delete pomoc;
}
else // usuwamy z srodka lub konca listy
{
pomoc1->nastepny = pomoc->nastepny;
delete pomoc;
}
return true;
}
int main()
{
char instrukcja;
string nazwisko;
Wizytowka *korzen = NULL; // korzen listy - wskaznik na pierwszy element
for (;;) {
cout << "MENU GLOWNE (wybierz jedna z ponizszych opcji)\n"
<< "1 - Dodaj osobe\n"
<< "2 - Wyszukanie osoby\n"
<< "3 - Wypisz wszystkie osoby\n"
<< "4 - Usuniecie osoby\n"
<< "5 - Koniec programu\n";
instrukcja = getch();
switch (instrukcja)
{
case '1':
dodaj_wizytowke(&korzen);
break;
case '2':
cout << "Podaj nazwisko: ";
cin >> nazwisko;
wyszukaj_wizytowke(korzen, nazwisko);
break;
case '3':
wypisz_wizytownik(korzen);
break;
case '4':
cout << "Podaj nazwisko: ";
cin >> nazwisko;
if (!usun_wizytowke(&korzen, nazwisko))
cout << "Nie odnaleziono wizytowki z podanym nazwiskiem" << endl;
else
cout << "Wizytowka z podanym nazwiskiem zostala usunieta" << endl;
break;
case '5':
exit(0);
default:
cout << "Musisz wybrac jedna z mozliwych opcji!!!";
break;
}
getch();
system("cls");
}
return 0;
}