Public feed #533272

Pozyczka

public text v1 · immutable
Raw Edit
·published 2007-06-03 12:02 UTC
rendered paste body
program pozyczka;

uses crt;

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
  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

procedure Wyswietl;
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.');
    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
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;

  Baza[L].zaplacil := 0;
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
  Sciezka: string;   // sciezka do pliku
  i: integer;     // zmienna steruajca
begin
  Write('Sciezka do pliku: '); Readln(Sciezka);

  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);
  end;

  Close(Plik);
end;

procedure Wczytaj;
var
  Plik: text;    // plik
  Sciezka: string;   // sciezka do pliku
  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);
  end;
end;

begin

  L := -1;
  O := 0;

  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) Zapisz do pliku');
    Writeln('7) Wczytaj z pliku');
    Writeln('8) Koniec');
    Readln(menu);

    ClrScr;

    Case menu of

      1: NowyWpis;
      2: Poprzedni;
      3: Nastepny;
      4: UsunBiezacy;
      5: SplacRate;
      6: Zapisz;
      7: Wczytaj;

    end;

  Until menu = 8;

end.