Czego się nauczysz?
- Obsługi formularzy HTML i walidacji danych w PHP
- Operacji matematycznych i wzorow finansowych
- Formatowania liczb (waluta, procenty)
- Zapisu i odczytu danych z plikow JSON
Stworzysz Kalkulator rat kredytu - aplikacje umozliwiajaca obliczenie miesiecznej raty kredytu na podstawie podanych parametrow. Użytkownik wprowadza kwote kredytu, roczne oprocentowanie i okres spłaty, a system automatycznie oblicza rate miesieczna. Historia obliczen jest zapisywana do pliku JSON.
Czego się nauczysz?
W prawdziwej pracy...
Kalkulatory finansowe to podstawa aplikacji bankowych, porównywark kredytow i narzedzi do planowania finansow osobistych. Umiejetnosc implementacji wzorow matematycznych, walidacji danych liczbowych i prezentacji wynikow w czytelny sposób to cenne kompetencje w sektorze fintech.
Formularz wprowadzania danych Użytkownik podaje kwote kredytu, roczne oprocentowanie (w procentach) oraz okres spłaty (w miesiacach lub latach).
Obliczenie raty miesiecznej System oblicza miesieczna rate kredytu według uproszczonego wzoru (raty rowne) i wyświetla wynik.
Zapis do historii Każde obliczenie jest zapisywane do pliku JSON wraz z data, co pozwala przegladac poprzednie kalkulacje.
Przykładowa struktura pliku JSON:
{ "calculations": [ { "id": 1, "amount": 100000, "interest_rate": 8.5, "period_months": 120, "monthly_payment": 1239.86, "total_payment": 148783.20, "total_interest": 48783.20, "created_at": "2026-02-17 10:30:00" }, { "id": 2, "amount": 50000, "interest_rate": 7.0, "period_months": 60, "monthly_payment": 990.06, "total_payment": 59403.60, "total_interest": 9403.60, "created_at": "2026-02-17 11:15:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Użytkownik wchodzi na strone i widzi formularz. Wpisuje kwote 100000 zl, oprocentowanie 8% i okres 120 miesiecy. Po kliknieciu “Oblicz” widzi wynik: “Rata miesieczna: 1 213,28 zl”. Obliczenie zostaje zapisane do pliku JSON.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Użytkownik wybiera okres “10 lat” z listy (system przelicza na 120 miesiecy). Po obliczeniu widzi: “Rata: 1 213,28 zl | Całkowity koszt: 145 593,60 zl | W tym odsetki: 45 593,60 zl”. Pod formularzem widzi tabele z ostatnimi obliczeniami.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Użytkownik oblicza kredyt i klika “Pokaz harmonogram”. Widzi tabele z 120 wierszami - każdy pokazuje numer raty, część kapitałowa, część odsetkowa i saldo pozostałe. Może porownac z innym wariantem (np. krotszy okres, wyzsza rata). Eksportuje harmonogram do CSV dla doradcy.
Walidacja danych kredytu:
$amount = filter_var($_POST['amount'], FILTER_VALIDATE_FLOAT);$interestRate = filter_var($_POST['interest_rate'], FILTER_VALIDATE_FLOAT);$periodMonths = filter_var($_POST['period_months'], FILTER_VALIDATE_INT);
$errors = [];if ($amount === false || $amount <= 0) { $errors[] = "Kwota kredytu musi być liczba dodatnia";}if ($interestRate === false || $interestRate < 0 || $interestRate > 100) { $errors[] = "Oprocentowanie musi być w zakresie 0-100%";}if ($periodMonths === false || $periodMonths < 1) { $errors[] = "Okres spłaty musi wynosic minimum 1 miesiac";}Obliczenie raty miesiecznej (raty rowne - annuitetowe):
function calculateMonthlyPayment($amount, $annualRate, $months) { if ($annualRate == 0) { return $amount / $months; // Kredyt bezodsetkowy }
$monthlyRate = $annualRate / 100 / 12; // Oprocentowanie miesieczne $payment = $amount * ($monthlyRate * pow(1 + $monthlyRate, $months)) / (pow(1 + $monthlyRate, $months) - 1);
return round($payment, 2);}
$monthlyPayment = calculateMonthlyPayment($amount, $interestRate, $periodMonths);$totalPayment = $monthlyPayment * $periodMonths;$totalInterest = $totalPayment - $amount;Generowanie harmonogramu splat:
function generateSchedule($amount, $annualRate, $months, $monthlyPayment) { $schedule = []; $balance = $amount; $monthlyRate = $annualRate / 100 / 12;
for ($i = 1; $i <= $months; $i++) { $interestPart = round($balance * $monthlyRate, 2); $principalPart = round($monthlyPayment - $interestPart, 2); $balance = round($balance - $principalPart, 2);
$schedule[] = [ 'month' => $i, 'payment' => $monthlyPayment, 'principal' => $principalPart, 'interest' => $interestPart, 'balance' => max(0, $balance) ]; } return $schedule;}Formatowanie kwoty:
function formatMoney($amount) { return number_format($amount, 2, ',', ' ') . ' zl';}// Wynik: "1 213,28 zl"Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niz niedokonczony C!