Witam.

Mam zrobić program w formie listy w pascalu.

program ma dodawać i usuwać dane , wyszukiwać i modyfikować.
status wypożyczenia ma być wprowadzany w modyfikacji.

Nie chce mi jednak on wyjść.

Czekam na pomysły lub fragment kodu wraz z wyjaśnieniem gdzie mam go wkleić.

Pozdrawiam i dzięki za odp.

program baza;

type
PElem=^TElem;
TElem= record
Tytul,
Nazwisko,
Imie,
status: string[30];
Nast:^TElem;
end;

var P,w, Elem, X,NastDoUsu,PoprzElem: ^TElem;
c ,n: integer;
s, a:string;

procedure wprowadzanie();
begin
P:=nil;
repeat
begin
New(Elem);
Write('Podaj nazwisko ');
Readln(Elem^.Nazwisko);
 Write('Podaj imie ');
Readln(Elem^.Imie);
Write('Podaj tytul ');
Readln(Elem^.Tytul);

if Elem^.Nazwisko <>'' then
begin
Elem^.Nast:=P;
P:=Elem;
end;
end;
until Elem^.Nazwisko='';
Dispose(Elem);

end;

procedure szukanie();
begin
 Elem:=P;
              WriteLn('Podaj dane, ktore chcesz znalezc:  ');
              readln(s);
              while Elem<>NIL do
                          Begin
                          if (Elem^.Nazwisko = s) then

                          Writeln(Elem^.Nazwisko);
                          Elem:=Elem^.Nast;
                          End;
              WriteLn('koniec ');
              end;
       Procedure usuwanie();
begin
Elem:=W;
NastDoUsu:=Elem^.Nast;
writeln('nazwisko do usuniecia: ',Elem^.nazwisko);
{writeln('nazwisko do usuniecia: ',Elem^.nazwisko);}
Dispose(Elem);
if PoprzElem<>NIL then {jesli wyszukany element nie jest pierwszy}
begin
Elem:=PoprzElem;
{writeln('nazwisko przed elementem do usuniecia: ',Elem^.nazwisko);}
Elem^.Nast:=NastDoUsu;
end;
{Elem:=Elem^.Nast;
writeln('nazwisko nastepne: ',Elem^.nazwisko);}
end;



             procedure edycja();
              begin
              Elem:=P;
              WriteLn('Podaj nazwe ksiazki, ktora chcesz zmienic:  ');
              readln(s);
              while Elem<>NIL do
                          Begin
                          if (Elem^.Nazwisko = s) then
                           begin
                           ReadLn(s) ;
                           Elem^.Nazwisko :=s;
                           end;
                          Elem:=Elem^.Nast;
                          End;
              WriteLn('koniec');
              end;


begin
repeat
writeln('')  ;
writeln('**************************************');
writeln('wprowadzanie danych 1 ');
writeln('wyswietlanie danych 2');
writeln('wyszukiwanie danych 3');
writeln('usuwanie danych 4');
writeln('edycja danych 5');
writeln('zamnkniecie programu 6');
writeln('**************************************');
writeln('')  ;
readln(c);
case c of
1:begin

wprowadzanie();



end;
             2:
               begin
                    Elem:=P;
                    while Elem<>NIL do
                          Begin
                          Writeln(Elem^.Nazwisko);
                          Elem:=Elem^.Nast;
                          End;
               end;

              3:
              begin
               szukanie();
              writeln('usuwanie danych 1');
              writeln('modyfikacja 2') ;
              readln(n);
              case n of
              1:begin
                  usuwanie();


              end;

              2: begin
               edycja();
              end;
                  end;end;
              4:
              begin
                usuwanie();

              end;

              5:
              begin
               edycja();
              end;

    end;

until (c =6 );



end.