Skip to content

22. Aplikacja do organizacji konkursów szkolnych

This content is not available in your language yet.

Aplikacja do organizacji konkursów szkolnych

Aplikacja webowa do zarządzania konkursami szkolnymi: tworzenie konkursów, rejestracja uczestników, wprowadzanie wyników i automatyczne generowanie rankingu.

  • Sortowania tablicy rekordów po wyniku (usort())
  • Walidacji danych uczestnika (imię, klasa, wynik)
  • Obsługi wielu konkursów w jednym pliku JSON
  • Generowania rankingu z numeracją miejsc
  • Wyświetlania wyróżnień (złoto, srebro, brąz)
  1. Tworzenie konkursu — nazwa, data, kategoria, max wynik
  2. Rejestracja uczestnika — imię, nazwisko, klasa, szkoła
  3. Wprowadzanie wyników — przypisanie punktów uczestnikowi
  4. Generowanie rankingu — sortowanie malejące po punktach
  5. Wyświetlanie podium — wyróżnienie miejsc 1–3
{
"contests": [
{
"id": 1,
"name": "Olimpiada Informatyczna 2026",
"date": "2026-03-15",
"max_score": 100,
"status": "active"
}
],
"participants": [
{
"id": 1,
"contest_id": 1,
"name": "Jan Kowalski",
"class": "3TI",
"school": "ZSE Łódź",
"score": 87,
"registered_at": "2026-02-10"
}
]
}

Wymagane funkcje:

  • Formularz rejestracji uczestnika
  • Wprowadzanie wyniku (liczba 0–100)
  • Lista uczestników z wynikami
  • Prosty ranking (posortowana lista)
  • Zapis do JSON z walidacją
Ocena: 3.0
  • Directorykonkursy/
    • index.php
    • konkurs.php
    • uczestnicy.php
    • ranking.php
    • Directoryincludes/
      • functions.php
      • auth.php
    • Directorydata/
      • contests.json
      • participants.json
    • Directorycss/
      • style.css

Generowanie rankingu:

function generateRanking(array $participants): array {
usort($participants, fn($a, $b) => $b['score'] <=> $a['score']);
foreach ($participants as $i => &$p) {
$p['place'] = $i + 1;
}
return $participants;
}

Wyróżnienie podium:

function getPlaceClass(int $place): string {
return match($place) {
1 => 'gold',
2 => 'silver',
3 => 'bronze',
default => ''
};
}

Walidacja wyniku:

$score = filter_var($_POST['score'] ?? '', FILTER_VALIDATE_INT, [
'options' => ['min_range' => 0, 'max_range' => $contest['max_score']]
]);
if ($score === false) {
$errors[] = "Wynik musi być liczbą całkowitą w zakresie 0–{$contest['max_score']}";
}