Witam.
Pracuję nad programem obsługującym bibliotekę. Utworzyłem już dwie listy: czytelników i książek. Są one wczytywane i zapisywane do plików. Mam poważny problem gdyż nie mam pojęcia w jaki sposób zrobić wypożyczenia w bazie. Utworzyłem procedure wypozycz ale umozliwia mi ona wypozyczenie tylko jednej ksiazki, następne się nadpisują. Jak zrobić procedurę obsługującą wypożyczenia? Z jakich struktur skorzystać? Bardzo proszę o pomoc.
Kod:
program project1;
type
czytelnicy=^czytelnik;
rezerw=^rez;
ksiazki=^ksiazka;
rez=record
wlasciciel:czytelnicy;
nastepna:rezerw;
data_wypozyczenia:string;
ksiazka:ksiazki;
end;
czytelnik=record
nazwisko:string[20];
nastepny:czytelnicy;
poprzedni:czytelnicy;
rezerwacja:rezerw;
end;
ksiazka=record
tytul:string[20];
nastepna_ksiazka:ksiazki;
rezerwacja:rezerw;
czy_wypozyczona:boolean;
end;
var
pierwszy_czytelnik:czytelnicy;
lista_czyt:lista_czyt_opis;
pierwsza_ksiazka:ksiazki;
pierwsza_rezerwacja:rezerw;
plik: file of ksiazka;
plik2: file of czytelnik;
rob: string;
procedure wczytaj(var glowa:czytelnicy);
var nowy:czytelnicy;
begin
assign(plik2,'dane.ele');
reset(plik2);
glowa:=nil;
while not eof (plik2) do
begin
new(nowy);
read(plik2,nowy^);
nowy^.nastepny:=glowa;
// writeln(glowa^.nazwisko);
glowa:=nowy;
end;
close(plik2);
end;
procedure wstaw(var glowa:czytelnicy);
var nazw:string;nowy:czytelnicy;
begin
writeln('podaj nazwisko');
readln(nazw);
new(nowy);
nowy^.nazwisko:=nazw;
nowy^.nastepny:=glowa;
glowa:=nowy;
end;
procedure wyswietl(glowa:czytelnicy);
begin
while glowa<>nil do
begin
writeln(glowa^.nazwisko);
glowa:=glowa^.nastepny;
end;
end;
procedure zapisz(glowa:czytelnicy);
begin
assign(plik2,'dane.ele');
rewrite(plik2);
while glowa<>nil do
begin
write(plik2,glowa^);
glowa:=glowa^.nastepny;
end;
close(plik2);
end;
procedure wczytaj_ksiazki(var glowa:ksiazki);
var nowy:ksiazki;
begin
assign(plik,'dane_ksiazki.rek');
reset(plik);
while not eof (plik) do
begin
new(nowy);
read(plik,nowy^);
nowy^.nastepna_ksiazka:=glowa;
glowa:=nowy;
end;
close(plik);
end;
procedure wyswietl_ksiazki(glowa:ksiazki);
begin
while glowa<>nil do
begin
writeln(glowa^.tytul);
glowa:=glowa^.nastepna_ksiazka;
end;
end;
procedure wstaw_ksiazke(var glowa:ksiazki);
var tyt:string;
nowy:ksiazki;
begin
writeln('podaj tytul');
readln(tyt);
new(nowy);
nowy^.tytul:=tyt;
nowy^.nastepna_ksiazka:=glowa;
glowa:=nowy;
end;
procedure zapisz_ksiazki(glowa:ksiazki);
begin
assign(plik,'dane_ksiazki.rek');
rewrite(plik);
while glowa<>nil do
begin
write(plik,glowa^);
glowa:=glowa^.nastepna_ksiazka;
end;
close(plik);
end;
function szukaj_czytelnika (nazwa:string; g:czytelnicy):czytelnicy;
begin
while g<>nil do
begin
if g^.nazwisko=nazwa then szukaj_czytelnika:=g;
g:=g^.nastepny;
end;
end;
function szukaj_ksiazki (nazwa:string; g:ksiazki):ksiazki;
begin
while g<>nil do
begin
if g^.tytul=nazwa then szukaj_ksiazki:=g;
g:=g^.nastepna_ksiazka;
end;
end;
procedure wypozycz(var glowa:czytelnicy; var glowa2:ksiazki);
var nazw:string;
tyt:string;
czytelnik:czytelnicy;
ksiazka:ksiazki;
wyp:rezerw;
begin
writeln('podaj nazwisko');
readln(nazw);
writeln('podaj tytul');
readln(tyt);
czytelnik:=szukaj_czytelnika(nazw,glowa);
ksiazka:=szukaj_ksiazki(tyt,glowa2);
new(wyp);
wyp^.wlasciciel:=czytelnik;
ksiazka^.rezerwacja:=wyp;
ksiazka^.czy_wypozyczona:=true;
wyp^.nastepna:=nil;
czytelnik^.rezerwacja:=wyp;
wyp^.ksiazka:=ksiazka;
writeln(ksiazka^.tytul);
WriteLn(czytelnik^.nazwisko);
end;
procedure wyswietl_k(glowa:rezerw);
begin
while glowa<>nil do
begin
writeln(glowa^.ksiazka^.tytul);
glowa:=glowa^.nastepna;
end;
end;
procedure wyswietl_wypozeczenie (glowa:czytelnicy);
var
czytelnik:czytelnicy;
nazw:string;
begin
writeln ('podaj nazwisko');
readln(nazw);
czytelnik:=szukaj_czytelnika(nazw,glowa);
wyswietl_k(czytelnik^.rezerwacja);
end;
procedure usun_czytelnika(g:czytelnicy);
var pomoc:czytelnicy;
nazw:string[20];
czytelnik:czytelnicy;
begin
writeln('podaj nazwisko');
readln(nazw);
czytelnik:=szukaj_czytelnika(nazw,g);
pomoc:=g;
while pomoc^.nastepny<>czytelnik do
pomoc:=pomoc^.nastepny;
pomoc^.nastepny:=czytelnik^.nastepny;
dispose(czytelnik);
end;
procedure usun_ksiazke(g:ksiazki);
var pomoc:ksiazki;
tyt:string[20];
ksiazka:ksiazki;
begin
writeln('podaj tytul');
readln(tyt);
ksiazka:=szukaj_ksiazki(tyt,g);
pomoc:=g;
while pomoc^.nastepna_ksiazka<>ksiazka do
pomoc:=pomoc^.nastepna_ksiazka;
pomoc^.nastepna_ksiazka:=ksiazka^.nastepna_ksiazka;
dispose(ksiazka);
end;
begin
lista_czyt.poczatek:=nil;
lista_czyt.koniec:=nil;
lista_czyt.dlugosc:=0;
repeat
writeln('co chcesz zrobic?');
readln(rob);
writeln;
if rob='wczytaj' then
wczytaj(pierwszy_czytelnik);
if rob='wstaw' then
wstaw(pierwszy_czytelnik);
if rob='wstaw2' then
wstaw_ksiazke(pierwsza_ksiazka);
if rob='wyswietl' then
wyswietl(pierwszy_czytelnik);
if rob='zapisz' then
zapisz(pierwszy_czytelnik);
if rob='zapisz2' then
zapisz_ksiazki(pierwsza_ksiazka);
if rob='wczytaj2' then
wczytaj_ksiazki(pierwsza_ksiazka);
if rob='wyswietl2' then
wyswietl_ksiazki(pierwsza_ksiazka);
if rob='wypozycz' then
wypozycz(pierwszy_czytelnik,pierwsza_ksiazka);
if rob='wyswietlwyp' then
wyswietl_wypozeczenie(pierwszy_czytelnik);
if rob='usun' then
usun_czytelnika(pierwszy_czytelnik);
if rob='usun2' then
usun_ksiazke(pierwsza_ksiazka);
writeln;
until rob='k';
readln;
end.