Witam!
Mam do napisania program, który wyszukuje płyty DVD z bazy na podstawie tytułu, oraz usuwa element na podstawie tytułu.
Pierwsza wyszukiwanie tytułu działa mi elegancko, ale nie działa mi do końca funkcja, która usuwa, bo zamiast usunąć podany element to usuwa podany element oraz wszystkie elementy, które znajdują się przed nim, oprócz pierwszego. No i jest jeszcze problem jeśli podam pierwszy element listy, bo błąd wyskakuje. Muszę na początku postawić jakiś warunek, że jeśli podany element jest pierwszym do usuwamy pierwszy element. A tak przy okazji, żeby użyć funkcji pop_front() trzeba dodać jakąś specjalną bibliotekę?
Wstawiam strukturę, odpowiednie funkcje i ich wywołanie. Pomożecie mi poskładać to wszystko, żeby porządnie działało?
<span style="font-size:14px">struct dvd
{string tytul;
string rezyser;
string aktor1;
string aktor2;
string aktor3;
int rok;};
typedef struct element
{ struct dvd p;
struct element *next;
}Element;
typedef Element *Lista;
void wyswietl_element(Lista a)//funkcja wyświetla wyszukane elementy listy
{
cout<<"tytul: "<<(a->p).tytul<<endl;
cout<<"rezyser: "<<(a->p).rezyser<<endl;
cout<<"aktorzy: "<<(a->p).aktor1<<endl;
cout<<(a->p).aktor2<<endl;
cout<<(a->p).aktor3<<endl;
cout<<"rok wydania: "<<(a->p).rok<<endl;
cout<<"\n";
}
Lista wyszukaj_tytul(Lista *a,string tytul)//funkcja wyszukuje film na podstawie tytułu
{
Lista pom;
pom=(*a);
while(pom != NULL && pom->p.tytul != tytul)
pom=pom->next;
return pom;
}
void usun_tytul(Lista *b,string tytul)
{ //daj oddzielny warunek, jeśli film jest 1. elementem
if(*b==NULL)
return;
Lista t;
t=(*b)->next;
do t=t->next;
while(t->p.tytul!=tytul);
(*b)->next=t->next;
delete (t);
return;
}
case 0:{Lista pom=NULL; //wyszukiwanie filmu za pomocą tytułu
cout<<"Podaj tytul(bez znakow polskich):\n";
getline(cin, linia); getline(cin, linia);
z.tytul=linia;
pom=wyszukaj_tytul(&b,z.tytul);
if(pom==NULL)cout<<"\nPrzykro nam, ale nie mamy tego filmu w bazie.\n\n";
else wyswietl_element(pom);
break;}
case 6:{if (logi=="administrator") //usuwanie elementu
{Lista pom=NULL;
cout<<"Podaj tytul(bez znakow polskich):\n";
getline(cin, linia); getline(cin, linia);
z.tytul=linia;
pom=wyszukaj_tytul(&b,z.tytul);
if(pom==NULL)
{ cout<<"\nPrzykro nam, ale nie mamy w bazie tego filmu.\n";
break;
}
usun_tytul(&b, z.tytul);
}
else
cout<<"opcja dostepna tylko dla administratora";
break;}
</span>