Witajcie, mam pewien problem nie wiem jak zrobić abym mógł cofać osoby , czyli zrobić wskaźnik na poprzednią osobę. Moglibyście mi pomóc? O to mój kod :
// ConsoleApplication6.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
#include<string>
struct Wizytowka // struktura reprezentujaca pojedyncza wizytowke
{
string imie;
string nazwisko;
int tel;
string kraj;
Wizytowka *next, *cofamy; // wskaznik na next element na liscie
Wizytowka() // konstruktor - wywolywany przy tworzeniu obiektu
{
// wczytujemy dane
cout << " Imie: ";
cin >> imie;
cout <<endl << "Nazwisko: ";
cin >> nazwisko;
cout <<endl << "Tel:";
cin >> tel;
cout <<endl << " Kraj:";
cin >> kraj;
// wskazniki ustawiamy na NULL
next = NULL;
cofamy = NULL;
}
void wypisz()
{
cout<<endl;
cout << "Imie: " << imie <<endl;
cout<< "Nazwisko: " << nazwisko <<endl;
cout<<"Numer telefonu: " << tel << endl;
cout<<"Kraj: " << kraj<< endl;
cout << "*************************"<<endl;
}
};
void dodaj_baza(Wizytowka **kolejny)
{
Wizytowka *nowa = new Wizytowka; // utworzenie nowej wizytowki
Wizytowka *wsk_h = (*kolejny), *wsk_h1 = NULL; // wskazniki wsk_hnicze posluza do poruszania sie po liscie
while (wsk_h != NULL && (wsk_h->nazwisko).compare(nowa->nazwisko) == -1) // dopoki nie wyszlismy za liste i nazwisko na liscie jest przed nowym nazwiskiem poruszamy sie dalej
{
wsk_h1 = wsk_h; // wsk_h1 zawsze wskazuje poprzednika wsk_h
wsk_h = wsk_h->next;
}
if (wsk_h != NULL && (wsk_h->nazwisko).compare(nowa->nazwisko) == 0) // wizytowka z podanym nazwiskiem juz istanieje
{
cout << "Osoba " << nowa->nazwisko << " juz istanieje w bazie danych\n";
delete nowa; // usuniecie obiektu
}
else if ((*kolejny) == NULL || (wsk_h == (*kolejny) && (wsk_h->nazwisko).compare(nowa->nazwisko) == 1)) // nowy element bedzie kolejnyiem listy
{
nowa->next = (*kolejny);
(*kolejny) = nowa;
}
else // dodajemy wizytowke w srodku lub na koncu listy
{
wsk_h1->next = nowa;
nowa->next = wsk_h;
}
}
void szukaj_baza(Wizytowka *kolejny, string nazwisko)
{
while(kolejny != NULL && (kolejny->nazwisko).compare(nazwisko) != 0) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
kolejny = kolejny->next;
if (kolejny == NULL)
cout << "Nie ma Osoby o takim nazwisku " << nazwisko << endl;
else
kolejny->wypisz();
}
void wypisz_baze(Wizytowka *kolejny)
{
cout << "Baza Danych : "<<endl;
cout<<endl;
while(kolejny != NULL)
{
kolejny->wypisz(); // wypisanie wizytowki
kolejny = kolejny->next; // przejscie na kolejny element
}
}
void nastepny(Wizytowka *kolejny)
{
if( kolejny == NULL){
cout << " Koniec listy " <<endl;
}else{
kolejny = kolejny->next;
kolejny->wypisz();
}
}
bool usun_osobe(Wizytowka **kolejny, string a)
{
if ((*kolejny) == NULL) // lista jest pusta
return false;
Wizytowka *wsk_h = (*kolejny), *wsk_h1 = NULL; // wskazniki wsk_hnicze posluza do poruszania sie po liscie
while(wsk_h != NULL && (wsk_h->nazwisko).compare(a) != 0) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
{
wsk_h1 = wsk_h;
wsk_h = wsk_h->next;
}
if (wsk_h == NULL) // wyszlismy za liste - nie ma takiego nazwiska na liscie
return false;
else if (wsk_h == (*kolejny)) // usuwamy koniec
{
(*kolejny) = (*kolejny)->next;
delete wsk_h;
}
else // usuwamy z srodka lub konca listy
{
wsk_h1->next = wsk_h->next;
delete wsk_h;
}
return true;
}
int main()
{
Wizytowka *kolejny = NULL;
string nazwisko;
char wybor='1';
while (wybor != '0' )
{
system("cls");
cout << "*************MENU ***********************"<<endl;
cout << " 1.Dodaj Osobe do Bazy\n";
cout << " 2.Usun Osobe\n";
cout << " 3.Wyszukaj Osobe(Po nazwisku)\n";
cout << " 4.Wyszukaj Osobe ( Po numerze telefonu)\n";
cout << " 5.Wypisz \n";
cout << " 6.Przegladaj\n";
cout << " 7.Wyczyść\n";
cout << " 0.Zakoncz\n";
cin >> wybor;
switch(wybor)
{
case '1' :
{
dodaj_baza(&kolejny);
}
break;
case '2':
{
cout << "Podaj nazwisko: ";
cin >> nazwisko;
if (!usun_osobe(&kolejny, nazwisko))
cout << "Brak takiej osoby" << endl;
else
cout << "Osoba zostala usunieta" << endl;
}
break;
case '3':
{
char dod_usuw='N';
cout << "Podaj nazwisko: ";
cin >> nazwisko;
szukaj_baza(kolejny,nazwisko);
while (dod_usuw == 'N')
{
cout << "-------------------INFORMACJE-------------------------"<<endl;
cout << "Aby usunac wpisz D, aby przejsc do MENU -M" <<endl;
cout << "Opcja: ";
cin >> dod_usuw;
cout << "------------------------------------------------------"<<endl;
switch (dod_usuw)
{
case 'D':
{
usun_osobe(&kolejny, nazwisko);
cout << endl;
cout << "Osoba usunieta" << endl;
break;
}
case 'N':
case 'M':
system("PAUSE");
break;
}
}
}
break;
case '4' :
{
break;
}
case '5' :
{
if(kolejny == NULL) {
cout << " Brak osob w bazie"<<endl;
}else{
wypisz_baze(kolejny);
system("PAUSE");
}
}
break;
case '6':
{
system("cls");
kolejny->wypisz();
int z = 2;
while(z != 0 ){
cout << " Aby wyjsc wcinij 0 " << endl;
cout << "Aby przejsc do nastepnej osoby wpisz -1" <<endl;
cout << "Aby przejsc do poprzedniej -2 "<<endl;
cout << " Opcja: " ;
cin >> z;
if( z == 1) {
kolejny = kolejny -> next ;
if( kolejny == NULL ){
system("cls");
cout << " Koniec listy" <<endl;
z=0;
system("PAUSE");
} else
{
system("cls");
kolejny -> wypisz();
}
}
}
break;
}
case '7' :
{
break;
}
case '0':
{
system("PAUSE");
}
break;
}
}
}
Z góry dziękuję , jest to bardzo pilne dla mnie :)