program pozyczka; uses crt, dos; type TOsoba = record // rekord, w ktorym przechowywane sa dane osoby imie: string; // tu jest jego imie nazwisko: string; // tu nazwisko pozyczka: integer; // tu pozyczka rata: integer; // tu ile jedna rata zaplacil: integer; // no a tu ile rat juz splacil termin: integer; dzien, miesiac, rok: word; // jednym sˆowem - data :] end; var Baza: array[0..250] of TOsoba; // tablica tych rekordow menu: integer; // to co wpisal w menu O, L: integer; // O - biezacy wpis, L - liczba wpisow Sciezka: string; // sciezka do wczytywanego pliku function OdejmijDate(D1, M1, R1, D2, M2, R2): integer; var Tymcz: integer; begin if (R1 = R2) then begin Result := 0; end else begin Tymcz := R1 - R2; Result := Tymcz * 365; end; if not (M1 = M2) then begin Tymcz := M1 - M2; Result := Tymcz * 31 + Result; end; if not (D1 = D2) then begin Tymcz := D1 - D2; Result := Result + Tymcz; end; end; procedure Wyswietl; var d, m, r, w: word; czas: integer; begin if (L < 0) then Writeln('Nie ma zadnego wpisu.') else begin Write('Imie: '); Writeln(Baza[O].imie); Write('Nazwisko: '); Writeln(Baza[O].nazwisko); Write('Pozyczka: '); Writeln(Baza[O].pozyczka); Write('Splacil '); Write(Baza[O].zaplacil); Write(' rat o wysokosci '); Write(Baza[O].rata); Writeln(' zl.'); Write('Razem zaplacil juz '); Write(Baza[O].rata * Baza[O].zaplacil); Writeln(' zl.'); Write('Pozostalo do zaplacenia: '); Write(Baza[O].pozyczka - Baza[O].rata * Baza[O].zaplacil); Write(' zl.'); GetDate(r, m, d, w); czas := OdejmijDate(d, m, r, Baza[O].dzien, Baza[O].miesiac, Baza[O].rok); if (czas > 0) then Writeln; end; end; procedure NowyWpis; var pierwszy: boolean; // czy pierwszy raz uzytkownik wpisuje ile ma rata i pozyczka bo moze wpisac wieksza rate niz pozyczke i wtedy mu pisze, ze rata nie moze byc wieksza niz pozyczka w: word; begin L := L + 1; Write('Imie: '); Readln(Baza[L].imie); Write('Nazwisko: '); Readln(Baza[L].nazwisko); pierwszy := true; Repeat if not pierwszy then Writeln('Rata nie powinna byc wieksza niz kredyt. Wpisz jeszcze raz.'); Write('Pozyczka: '); Readln(Baza[L].pozyczka); Write('Rata: '); Readln(Baza[L].rata); pierwszy := false; Until Baza[L].rata <= Baza[L].pozyczka; Write('Dni do splacenia kredytu: '); Readln(Termin); Baza[L].zaplacil := 0; GetDate(Baza[L].rok, Baza[L].miesiac, Baza[L].dzien, w); Zapisz; end; procedure Poprzedni; begin if (O > 0) then begin O := O - 1; end else begin Writeln('Nie ma poprzedniego :)'); Readln; end; end; procedure Nastepny; begin if (O < L) then begin O := O + 1; end else begin Writeln('Nie ma nastepnego :)'); Readln; end; end; procedure UsunBiezacy; var i: integer; // zmienna steruajaca w petli for begin L := L - 1; for i := O to L do Baza[i] := Baza[i + 1]; end; procedure SplacRate; var Reszta: integer; // jak zbiegnie jakas reszta z raty, to ta zmienna sie przydaje begin Baza[O].zaplacil := Baza[O].zaplacil + 1; if (Baza[O].pozyczka <= Baza[O].zaplacil * Baza[O].rata) then begin UsunBiezacy; Reszta := Baza[O].zaplacil * Baza[O].rata - Baza[O].pozyczka; Write('Wszystkie raty zostaly splacone.'); if not (Reszta = 0) then begin Write(' Z ostatniej raty zbieglo '); Write(Reszta); Write(' zl.'); end; Writeln; end else Writeln('Rata zostala splacona.'); Readln; end; procedure Zapisz; var Plik: text; // plik i: integer; // zmienna steruajca begin Assign(Plik, Sciezka); Rewrite(Plik); Writeln(Plik, L); for i := 0 to L do begin Writeln(Plik, Baza[i].imie); Writeln(Plik, Baza[i].nazwisko); Writeln(Plik, Baza[i].pozyczka); Writeln(Plik, Baza[i].rata); Writeln(Plik, Baza[i].zaplacil); Writeln(Plik, Baza[i].termin); Writeln(Plik, Baza[i].dzien); Writeln(Plik, Baza[i].miesiac); Writeln(Plik, Baza[i].rok); end; Close(Plik); end; procedure Wczytaj; var Plik: text; // plik i: integer; // zmienna steruajaca begin Write('Sciezka do pliku: '); Readln(Sciezka); Assign(Plik, Sciezka); Reset(Plik); Readln(Plik, L); for i := 0 to L do begin Readln(Plik, Baza[i].imie); Readln(Plik, Baza[i].nazwisko); Readln(Plik, Baza[i].pozyczka); Readln(Plik, Baza[i].rata); Readln(Plik, Baza[i].zaplacil); Readln(Plik, Baza[i].termin); Readln(Plik, Baza[i].dzien); Readln(Plik, Baza[i].miesiac); Readln(Plik, Baza[i].rok); end; end; begin L := -1; O := 0; Wczytaj; Repeat ClrScr; if L > -1 then Wyswietl else Writeln('Narazie nie ma zadnych wpisow.'); Writeln; Writeln('1) Nowy wpis'); Writeln('2) Poprzedni'); Writeln('3) Nastepny'); Writeln('4) Usun biezacy'); Writeln('5) Splac rate'); Writeln('6) Wczytaj'); Writeln('7) Wyszukaj osoby nieplacace'); Writeln('8) Koniec'); Readln(menu); ClrScr; Case menu of 1: NowyWpis; 2: Poprzedni; 3: Nastepny; 4: UsunBiezacy; 5: SplacRate; 6: Wczytaj; 7: Szukaj; end; Until menu = 8; Zapisz; end.