Witam ! Mam problem z napisaniem pewnej funkcji :( Chodzi o funkcje "Uzupelnij_raty" w kodzie poniżej. Napisalem cos takiego ale źle działa :( ma ona za zadanie dla kazdego studenta osobno przeglądać liste z ratami i jeśli kierunek studiow w rekordzie z ratami i w rekordzie ze studentami oraz jesli wynik funkcji "kalendarz" będzie rowny 1 to ma dodawac kwoty wszystkich rat pasujacych do platnosci studenta.
Teraz niestety dziala jak sama chce :( Byłbym bardzo wdzieczny za jakąkolwiek pomoc :(
program project1;
uses CRT,Dos,SysUtils;
type TNazwa = string[50];
TPlatnosci = record
wplacone:integer;
wszystkie:integer;
pozostale:integer;
end;
TStudent = record
nazwisko:TNazwa;
imie:TNazwa;
data_ur:DateTime;
kier:TNazwa;
platnosci:TPlatnosci;
data_przyjecia:TDateTime;
end;
TRata = record
dla:TNazwa;
nr:byte;
kwota:integer;
data_raty:TDateTime;
end;
TWsk = ^TElement;
TElement = record
student:TStudent;
prev,next:TWsk;
end;
TWsk_rata = ^TElement_rata;
TElement_rata = record
raty:TRata;
prev,next:TWsk_rata;
end;
var P,K:TWsk;
P_r,K_r:TWsk_rata;
DD,DM,DR,dw:word;
{**********************************************************************}
function Dzisiejsza_data():TDateTime;
begin
GetDate(DR,DM,DD,dw);
Dzisiejsza_data:=EncodeDate(DR,DM,DD);
end;
{**********************************************************************}
function kalendarz( data_przyjecia:TDateTime; Data_raty:TDateTime; Dzisiejsza_data:TDateTime): word;
var dt:TDateTime;
k:word;
begin
k:=0;
dt:=data_raty;
if (data_przyjecia<=dt)and(dt<=Dzisiejsza_data) then k:=1;
kalendarz:=k;
end;
{*******************************************************************}
procedure Uzupelnij_raty( P_r:TWsk_rata ; P:TWsk);
var suma:integer;
W:TWsk_rata;
begin
while P<>NIL do
begin
suma:=0;
W:=P_r;
while W<>NIL do
begin
if (kalendarz(P^.student.data_przyjecia,W^.raty.data_raty,Dzisiejsza_data)=1) and (P^.student.kier = P_r^.raty.dla) then
begin
suma:=suma+ W^.raty.kwota;
end;
P^.student.platnosci.wszystkie:=suma;
W:=W^.next;
end;
P:=P^.next;
end;
end;
{*******************************************************************}
procedure Wprowadz_studenta(var x:TStudent);
var day,month,year:word;
begin
with x do
begin
write('Nazwisko: '); readln(nazwisko);
write('Imie: '); readln(imie);
write('Data urodzenia: ');
with data_ur do readln(day,month,year);
write('Kierunek studiow: '); readln(kier);
write('platnosci wplacone: '); readln(platnosci.wplacone);
platnosci.wszystkie:=0;
platnosci.pozostale:=0;
write('Data przyjecia: ');
readln(day,month,year); data_przyjecia:=EncodeDate(year,month,day);
end;
end;
{*******************************************************************}
procedure Pokaz_studenta(x:TStudent);
begin
with x do
begin
write(nazwisko); GotoXY(20,WhereY);
write(imie); GotoXY(30,WhereY);
with data_ur do write(day:2,'.',month:2,'.',year:4);
GotoXY(45,WhereY); write(kier);
GotoXY(70,WhereY); writeln(platnosci.wszystkie);
end;
end;
{*******************************************************************}
procedure Dodaj_do_listy(var P,K:TWsk ; x:Tstudent);
var Q:TWsk;
begin
New(Q);
Q^.student:=x; Q^.prev:=NIL; Q^.next:=NIL;
IF (P = NIL) and (K=NIL) then
begin
P:=Q;
K:=Q;
end
else begin
K^.next:=Q;
Q^.prev:=K;
K:=Q;
end;
end;
{*******************************************************************}
procedure Dodaj_nowe_dane(var P,K:TWsk);
var x:TStudent;
z:char;
begin
write('Czy chcesz dodac nowe dane ? (T/N) : ');
repeat
z:=UpCase(ReadKey)
until z in ['N','T'];
writeln(z);
while z='T' do
begin
Wprowadz_studenta(x);
Dodaj_do_listy(P,K,x);
write('Czy chcesz dodac nowa osobe ? (T/N) : ');
repeat
z:=UpCase(ReadKey)
until z in ['N','T'] ;
writeln(z);
end;
end;
{*******************************************************************}
procedure Wyswietl_liste(P:Twsk);
begin
while P<>NIL do
begin
Pokaz_studenta(P^.student);
P:=P^.next;
end;
end;
{*******************************************************************}
procedure Wyszukaj_nazwisko(P,K:TWsk);
var nazwisko:string[30];
il:word;
begin
il:=0;
writeln('Podaj nazwisko: '); readln(nazwisko);
while (P<>NIL) or (P=K) do
begin
if (nazwisko=P^.student.nazwisko) then
begin
Pokaz_studenta(P^.student);
il:=il+1;
end;
P:=P^.next;
end;
if il=0 then writeln('Nie znaleziono takiego nazwiska ! ');
readln;
end;
{*******************************************************************}
procedure Do_pliku(P:TWsk;n_p:string);
var plik:file of TStudent;
begin
Assign(plik,n_p); rewrite(plik);
while (P<>NIL) do
begin
write(plik,P^.student);
P:=P^.next;
end;
close(plik);
end;
{*******************************************************************}
procedure Z_pliku(var P,K:TWsk;n_p:string);
var plik:file of TStudent;
x:TStudent;
begin
Assign(plik,n_p); reset(plik);
while not EOF(plik) do
begin
read(plik,x);
Dodaj_do_listy(P,K,x);
end;
close(plik);
end;
{*******************************************************************}
function szukaj(P : TWsk; nazwisko: TNazwa) : TWsk;
begin
while (P <> nil) and (P^.student.nazwisko <> nazwisko) do
P :=P^.next;
szukaj := P;
end;
{*******************************************************************}
procedure usun_wybrany_element(var P : TWsk);
var
pom, tmp : TWSk;
nazwisko : TNazwa;
begin
write('Podaj nazwisko ucznia: ');
readln(nazwisko);
tmp := szukaj(P, nazwisko);
if tmp = nil then
write('nie ma takiego ucznia')
else
begin
if tmp = P then
begin
if (P^.next=NIL) then begin
P:=NIL;
K:=NIL;
end
else begin
P := P^.next;
P^.prev := nil;
dispose(tmp);
end;
end
else
begin
pom := P;
while pom^.next <> tmp do
pom := pom^.next;
pom^.next := tmp^.next;
if tmp^.next <> nil then
tmp^.next^.prev := pom;
dispose(tmp);
end;
end;
readln;
end;
{*******************************************************************}
procedure usun_liste(var P:TWsk);
var Q:TWsk;
begin
while P<>NIL do
begin
Q:=P;
P:=P^.next;
dispose(Q);
end;
end;
{******************************************************************}
procedure Wprowadz_rate(var x:TRata);
var day,month,year:word;
begin
with x do
begin
write('Dla kieruku: '); readln(dla);
write('Numer raty - w czasie trwania studiów: '); readln(nr);
write('Kwota: '); readln(kwota);
write('Data raty: ');
readln(day,month,year); data_raty:=EncodeDate(year,month,day);
end;
end;
{*******************************************************************}
procedure Pokaz_rate(x:TRata);
var day,month,year:word;
begin
with x do
begin
write(dla); GotoXY(27,WhereY);
write(nr);GotoXY(30,WhereY);
write(kwota); GotoXY(40,WhereY);
DecodeDate(data_raty,year,month,day);write(day:2,'.',month:2,'.',year:4);
end;
writeln;
end;
{*******************************************************************}
procedure Dodaj_do_listy_rat(var P_r,K_r:TWsk_rata ; x:TRata);
var Q:TWsk_rata;
begin
New(Q);
Q^.raty:=x; Q^.prev:=NIL; Q^.next:=NIL;
IF (P_r = NIL) and (K_r=NIL) then
begin
P_r:=Q;
K_r:=Q;
end
else begin
K_r^.next:=Q;
Q^.prev:=K_r;
K_r:=Q;
end;
end;
{*******************************************************************}
procedure Dodaj_rate(var P_r,K_r:TWsk_rata);
var x:TRata;
z:char;
begin
write('Czy chcesz dodac nowa rate ? (T/N) : ');
repeat
z:=UpCase(ReadKey)
until z in ['N','T'];
writeln(z);
while z='T' do
begin
Wprowadz_rate(x);
Dodaj_do_listy_rat(P_r,K_r,x);
write('Czy chcesz dodac nowa rate ? (T/N) : ');
repeat
z:=UpCase(ReadKey)
until z in ['N','T'] ;
writeln(z);
end;
end;
{*********************************************************************}
procedure Do_pliku_rat( P_r:TWsk_rata; n_p:string);
var plik:file of TRata;
begin
Assign(plik,n_p); rewrite(plik);
while (P_r<>NIL) do
begin
write(plik,P_r^.raty);
P_r:=P_r^.next;
end;
close(plik);
end;
{***********************************************************************}
procedure Wyswietl_liste_rat(P_r:Twsk_rata);
begin
while P_r<>NIL do
begin
Pokaz_rate(P_r^.raty);
P_r:=P_r^.next;
end;
writeln;
readln;
end;
{***********************************************************************}
procedure Z_pliku_raty(var P_r,K_r:TWsk_rata;n_p:string);
var plik:file of TRata;
x:TRata;
begin
Assign(plik,n_p); reset(plik);
while not EOF(plik) do
begin
read(plik,x);
Dodaj_do_listy_rat(P_r,K_r,x);
end;
close(plik);
end;
begin
P:=NIL; K:=NIL;
P_r:=NIL; K_r:=NIL;
ClrScr;
Z_pliku(P,K,'C:\Users\Karol\Documents\Lazarus projekty\projekt PP\studenci.dat');
Z_pliku_raty(P_r,K_r,'C:\Users\Karol\Documents\Lazarus projekty\projekt PP\raty.dat');
{writeln('Dodawanie rat: ');
Dodaj_rate(P_r,K_r);}
writeln('Lista rat : ');
Wyswietl_liste_rat(P_r);
{writeln('---------------------------------------------------------');
writeln('Lista studentow : ' );
Wyswietl_liste(P);
writeln('----------------------------------------------------------');
Dodaj_nowe_dane(P,K);}
writeln('----------------------------------------------------------');
Uzupelnij_raty(P_r,P);
writeln('Lista studentow: ' );
Wyswietl_liste(P);
{writeln('----------------------------------------------------------');
writeln('Wyszukaj po nazwisku: ');
Wyszukaj_nazwisko(P,K);
writeln('----------------------------------------------------------');
writeln('usuwanie srtudenta po nazwisku : ');
usun_wybrany_element(P);}
//Usun_liste(P) ;
//riteln('Lista usunieta');
writeln('----------------------------------------------------------');
Do_pliku(P,'C:\Users\Karol\Documents\Lazarus projekty\projekt PP\studenci.dat');
Do_pliku_rat(P_r,'C:\Users\Karol\Documents\Lazarus projekty\projekt PP\raty.dat');
//writeln('Lista studentow : ' );
//Wyswietl_liste(P); }
ReadKey;
end.