Czego się nauczysz?
- Walidacji danych liczbowych (dystans, litry, cena)
- Wykonywania obliczeń matematycznych w PHP
- Pracy z historią rekordów i średnimi
- Formatowania liczb i walut
- Tworzenia raportów i statystyk
Stworzysz Kalkulator spalania paliwa - aplikację umożliwiającą obliczanie średniego zużycia paliwa na podstawie przejechanych kilometrów i zatankowanego paliwa. System pozwala śledzić historię tankowań, analizować koszty podróży i porównywać efektywność jazdy w różnych okresach.
Czego się nauczysz?
W prawdziwej pracy...
Kalkulatory i aplikacje do śledzenia wydatków są podstawą wielu aplikacji finansowych i lifestyle’owych. Umiejętność projektowania systemów z obliczeniami, historią danych i statystykami jest fundamentem dla każdego programisty tworzącego aplikacje użytkowe - od zarządzania flotą pojazdów firmowych po osobiste budżetowanie.
Formularz wprowadzania danych Użytkownik podaje przejechane kilometry, ilość zatankowanego paliwa (litry) i opcjonalnie cenę za litr. System oblicza średnie spalanie.
Walidacja danych System sprawdza poprawność wprowadzonych danych - czy wartości są liczbami dodatnimi, czy dystans i litry mają sens (np. nie więcej niż 500 litrów).
Obliczenie spalania System oblicza spalanie według wzoru: (litry / km) * 100 = l/100km i wyświetla wynik.
Wyświetlenie wyniku Użytkownik widzi obliczone spalanie w czytelnej formie z opcjonalnym kosztem podróży.
Przykładowa struktura pliku JSON:
{ "records": [ { "id": 1, "date": "2026-02-10", "distance": 450, "liters": 36.5, "price_per_liter": 6.25, "consumption": 8.11, "total_cost": 228.13, "notes": "Trasa A4 Kraków-Wrocław", "created_at": "2026-02-10 18:30:00" }, { "id": 2, "date": "2026-02-15", "distance": 120, "liters": 12.8, "price_per_liter": 6.30, "consumption": 10.67, "total_cost": 80.64, "notes": "Jazda miejska", "created_at": "2026-02-15 14:20:00" }, { "id": 3, "date": "2026-02-18", "distance": 380, "liters": 28.5, "price_per_liter": 6.18, "consumption": 7.50, "total_cost": 176.13, "notes": "", "created_at": "2026-02-18 20:00:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Użytkownik wpisuje dystans 450 km i zatankowane 36.5 litra. Po kliknięciu “Oblicz” widzi wynik: “Średnie spalanie: 8.11 l/100km”.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Użytkownik wpisuje dystans, litry i cenę 6.25 zł/l. System wyświetla: “Spalanie: 8.11 l/100km, Koszt: 228.13 zł”. Wpis trafia do historii. Na dole strony widać: “Średnie spalanie (wszystkie wpisy): 8.76 l/100km”.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Użytkownik widzi raport: “Luty 2026: 1250 km, 102 l, 638 zł”. Porównanie: “vs styczeń: -5% spalania, +120 km”. Wykres pokazuje trend spalania w ostatnich 30 dniach. Może filtrować: “tylko autostrada” i zobaczyć średnie 7.2 l/100km.
Walidacja danych wejściowych:
$distance = filter_var($_POST['distance'] ?? '', FILTER_VALIDATE_FLOAT);$liters = filter_var($_POST['liters'] ?? '', FILTER_VALIDATE_FLOAT);
if ($distance === false || $distance <= 0) { $errors[] = "Dystans musi być liczbą dodatnią";}
if ($liters === false || $liters <= 0) { $errors[] = "Ilość paliwa musi być liczbą dodatnią";}
if ($liters > 500) { $errors[] = "Ilość paliwa wydaje się nieprawidłowa (max 500 l)";}
if ($distance > 0 && $liters > 0 && ($liters / $distance) * 100 > 50) { $errors[] = "Spalanie wydaje się nierealistycznie wysokie";}Obliczanie spalania:
function calculateConsumption(float $distance, float $liters): float { if ($distance <= 0) { return 0; } return round(($liters / $distance) * 100, 2);}
function calculateTotalCost(float $liters, float $pricePerLiter): float { return round($liters * $pricePerLiter, 2);}
function calculateCostPer100km(float $consumption, float $pricePerLiter): float { return round($consumption * $pricePerLiter, 2);}Formatowanie wyników:
function formatConsumption(float $consumption): string { return number_format($consumption, 2, ',', ' ') . ' l/100km';}
function formatCurrency(float $amount): string { return number_format($amount, 2, ',', ' ') . ' zł';}
function formatDistance(float $km): string { return number_format($km, 0, ',', ' ') . ' km';}Średnie spalanie z historii:
function calculateAverageConsumption(array $records): float { if (empty($records)) { return 0; }
$totalDistance = 0; $totalLiters = 0;
foreach ($records as $record) { $totalDistance += $record['distance']; $totalLiters += $record['liters']; }
if ($totalDistance <= 0) { return 0; }
return round(($totalLiters / $totalDistance) * 100, 2);}Raport miesięczny (wariant C):
function getMonthlyReport(array $records, int $year, int $month): array { $monthRecords = array_filter($records, function($r) use ($year, $month) { $recordDate = strtotime($r['date']); return date('Y', $recordDate) == $year && date('n', $recordDate) == $month; });
if (empty($monthRecords)) { return [ 'distance' => 0, 'liters' => 0, 'cost' => 0, 'consumption' => 0, 'trips' => 0, ]; }
$totalDistance = array_sum(array_column($monthRecords, 'distance')); $totalLiters = array_sum(array_column($monthRecords, 'liters')); $totalCost = array_sum(array_column($monthRecords, 'total_cost'));
return [ 'distance' => $totalDistance, 'liters' => round($totalLiters, 2), 'cost' => round($totalCost, 2), 'consumption' => calculateConsumption($totalDistance, $totalLiters), 'trips' => count($monthRecords), ];}Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niż niedokończony C!