Czego się nauczysz?
- Obsługi formularzy HTML z dynamicznym wyborem trybu
- Operacji matematycznych na procentach
- Walidacji danych liczbowych w PHP
- Zapisu i odczytu historii operacji z plikow JSON
Stworzysz Kalkulator procentow - aplikacje umozliwiajaca wykonywanie różnych obliczen procentowych. Użytkownik wybiera tryb obliczen (np. “ile to X% z Y”, “X jest jakim procentem Y”, “wzrost o X%”), wprowadza wartości liczbowe, a system automatycznie oblicza i wyświetla wynik. Historia wszystkich obliczen jest zapisywana do pliku JSON.
Czego się nauczysz?
W prawdziwej pracy...
Obliczenia procentowe sa wszedzie - rabaty w sklepach, marze w systemach sprzedazy, wskazniki wzrostu w raportach finansowych, VAT w fakturach. Każdy system e-commerce, aplikacja bankowa czy narzedzie analityczne wymaga precyzyjnych obliczen procentowych. Umiejetnosc tworzenia takich kalkulatorow to podstawa w pracy programisty.
Formularz z wyborem trybu Użytkownik wybiera rodzaj obliczenia z listy rozwijanej (np. “Oblicz X% z liczby Y”) i wprowadza odpowiednie wartości liczbowe.
Obliczenie wyniku System przelicza wartości zgodnie z wybranym trybem i wyświetla wynik w czytelnej formie z odpowiednim opisem.
Zapis do historii Każde obliczenie jest zapisywane do pliku JSON wraz z trybem, wartosciami wejsciowymi, wynikiem i data wykonania.
Przykładowa struktura pliku JSON:
{ "calculations": [ { "id": 1, "mode": "percent_of", "description": "Ile to X% z Y", "value_a": 20, "value_b": 150, "result": 30, "created_at": "2026-02-13 10:30:00" }, { "id": 2, "mode": "what_percent", "description": "X jest jakim % z Y", "value_a": 25, "value_b": 100, "result": 25, "created_at": "2026-02-13 11:45:00" }, { "id": 3, "mode": "increase_by", "description": "Wzrost o X%", "value_a": 100, "value_b": 15, "result": 115, "created_at": "2026-02-13 12:00:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Użytkownik wchodzi na strone i widzi formularz. Wpisuje procent 20 i liczbe 150. Po kliknieciu “Oblicz” widzi wynik: “20% z 150 to 30”. Obliczenie zostaje zapisane do pliku JSON.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Użytkownik wybiera z listy tryb “X jest jakim % z Y”, wpisuje 25 i 100. Widzi wynik: “25 stanowi 25% z 100”. Pod formularzem wyświetla się tabela z ostatnimi obliczeniami. Przy błędnych danych (np. dzielenie przez zero) widzi komunikat “Wartość Y musi być różna od zera”.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Użytkownik wybiera tryb “Różnica procentowa” i wpisuje 80 oraz 100. Widzi wynik: “Różnica miedzy 80 a 100 to -20%”. Może przefiltrowac historie, żeby zobaczyc tylko obliczenia typu “wzrost”. Na dole strony widzi raport: “Najczesciej używany tryb: X% z Y | Liczba obliczen: 47”.
Walidacja danych wejsciowych:
$value_a = filter_var($_POST['value_a'], FILTER_VALIDATE_FLOAT);$value_b = filter_var($_POST['value_b'], FILTER_VALIDATE_FLOAT);
if ($value_a === false || $value_b === false) { $errors[] = "Wprowadz poprawne wartości liczbowe";}Obliczenia procentowe - różne tryby:
function calculatePercent($mode, $a, $b) { switch ($mode) { case 'percent_of': // Ile to X% z Y: (X / 100) * Y return ($a / 100) * $b;
case 'what_percent': // X jest jakim % z Y: (X / Y) * 100 if ($b == 0) return null; // dzielenie przez zero return ($a / $b) * 100;
case 'increase_by': // Wzrost o X%: Y + (Y * X / 100) return $b + ($b * $a / 100);
case 'decrease_by': // Spadek o X%: Y - (Y * X / 100) return $b - ($b * $a / 100);
default: return null; }}Zapis do JSON:
$data = json_decode(file_get_contents('history.json'), true) ?? ['calculations' => []];$data['calculations'][] = [ 'id' => count($data['calculations']) + 1, 'mode' => $mode, 'value_a' => $value_a, 'value_b' => $value_b, 'result' => $result, 'created_at' => date('Y-m-d H:i:s')];file_put_contents('history.json', json_encode($data, JSON_PRETTY_PRINT));Formatowanie wyniku:
$formatted_result = number_format($result, 2, ',', ' ');echo "Wynik: " . $formatted_result . "%";Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niz niedokonczony C!