Zadanie 20: Dwa kompletne arkusze egzaminacyjne (poziom INF.03)
Trudny / egzaminacyjnyPo co się tego uczymy?
To domknięcie całej serii dwudziestu zadań praktycznych — dwa pełne, samodzielne arkusze skonstruowane dokładnie w formacie części praktycznej egzaminu INF.03 (scenariusz, import/utworzenie bazy, seria zapytań do wykonania i udokumentowania, limit czasu, kryteria oceny). Rozwiąż każdy z nich tak, jakbyś był na prawdziwym egzaminie — z zegarem i bez podglądania rozwiązań z wcześniejszych zadań.
Treść zadania
ARKUSZ EGZAMINACYJNY nr 1 — "SnowRent"
Część praktyczna egzaminu INF.03 — wyłącznie operacje na bazie danych. Czas przeznaczony na wykonanie zadania: 150 minut.
Scenariusz: Wypożyczalnia sprzętu narciarskiego SnowRent prowadzi ewidencję sprzętu, klientów i wypożyczeń. Twoim zadaniem jest przygotowanie i obsłużenie bazy danych na potrzeby tego systemu.
Przygotowanie stanowiska:
- Uruchom usługi Apache i MySQL za pomocą XAMPP Control Panel.
- Za pomocą phpMyAdmin utwórz bazę danych o nazwie snowrent.
- Wykonaj skrypt SQL podany w bloku kodu tej strony (Zadanie 20 → Kod) — utworzy on i wypełni danymi trzy tabele: Sprzet, Klienci, Wypozyczenia.
- Wykonaj zrzut ekranu potwierdzający poprawny import (cały ekran, z widocznym paskiem zadań). Zapisz go jako import1.png.
Operacje na bazie danych — wykonaj i udokumentuj zrzutem ekranu każde zapytanie (nazwij pliki kolejno zap1.png … zap6.png):
1. Wybierz wszystkie pola z tabeli Sprzet.
2. Wybierz nazwę i cenę_za_dzien sprzętu typu "narty", posortowane rosnąco po cenie.
3. Wybierz nazwę sprzętu, którego stan_techniczny to "do przeglądu".
4. Zaktualizuj (UPDATE) cenę wypożyczenia całego sprzętu typu "deska", podwyższając ją o 15%.
5. Wyświetl dla każdego wypożyczenia: imię i nazwisko klienta, nazwę sprzętu oraz liczbę dni wypożyczenia (JOIN trzech tabel).
6. Oblicz łączny przychód wypożyczalni z wypożyczeń sprzętu typu "narty" (JOIN + WHERE + SUM z uwzględnieniem liczby dni i ceny za dzień).
Dokumentacja: Zapisz wszystkie zapytania SQL w pliku tekstowym zapytania_snowrent.txt. W dokumencie tekstowym opisz też nazwę systemu operacyjnego i wersję MySQL, na której pracowałeś.
Kryteria oceny: poprawność utworzenia i zaimportowania bazy; poprawność i skuteczność każdego z 6 zapytań; czytelność i poprawne formatowanie zapisanych zapytań SQL; kompletność wymaganej dokumentacji (zrzuty ekranu, plik tekstowy).
ARKUSZ EGZAMINACYJNY nr 2 — "DanceStudio"
Część praktyczna egzaminu INF.03 — wyłącznie operacje na bazie danych. Czas przeznaczony na wykonanie zadania: 150 minut.
Scenariusz: Centrum kursów tanecznych DanceStudio prowadzi zapisy kursantów na kursy różnych stylów tanecznych, prowadzone przez instruktorów. Twoim zadaniem jest obsłużenie bazy danych tego systemu.
Przygotowanie stanowiska:
- Uruchom usługi Apache i MySQL w XAMPP.
- Utwórz w phpMyAdmin bazę danych o nazwie dancestudio.
- Wykonaj poniższy skrypt SQL, aby utworzyć i wypełnić danymi cztery tabele: StyleTanca, Instruktorzy, Kursanci, Zapisy.
- Pobierz plik dancestudio.sql i zaimportuj go w phpMyAdmin (zakładka "Importuj", nie "SQL") — utworzy on i wypełni danymi cztery tabele: StyleTanca, Instruktorzy, Kursanci, Zapisy.
- Wykonaj zrzut ekranu potwierdzający poprawny import (cały ekran z widocznym paskiem zadań). Zapisz go jako import2.png.
Operacje na bazie danych — wykonaj i udokumentuj zrzutem ekranu każde zapytanie (zap1.png … zap7.png):
1. Wybierz wszystkie style taneczne dostępne w ofercie.
2. Wybierz imię i nazwisko wszystkich instruktorów razem z nazwą prowadzonego przez nich stylu (JOIN).
3. Wybierz kursantów, którzy zapisali się na zajęcia, ale jeszcze nie zapłacili.
4. Policz, ilu kursantów zapisało się do każdego instruktora (JOIN + GROUP BY).
5. Znajdź styl taneczny, który cieszy się największą liczbą zapisów (JOIN trzech tabel + GROUP BY + ORDER BY + LIMIT albo z użyciem podzapytania).
6. Zaktualizuj wpis, oznaczając jako opłacone (oplacone = TRUE) wszystkie zapisy kursanta o adresie e-mail "amelia.k@gmail.com".
7. Znajdź kursantów zapisanych na więcej niż jedne zajęcia (GROUP BY po kursancie + HAVING COUNT > 1).
Dokumentacja: Zapisz wszystkie zapytania SQL w pliku tekstowym zapytania_dancestudio.txt wraz z opisem środowiska pracy (system operacyjny, wersja MySQL/MariaDB).
Kryteria oceny: poprawność utworzenia i zaimportowania bazy; poprawność i skuteczność każdego z 7 zapytań, w tym poprawne rozróżnienie WHERE od HAVING; poprawność zapisu UPDATE ograniczonego właściwym warunkiem; kompletność dokumentacji.
Jak zabrać się do zadania
1. Do Arkusza 1 pobierz plik snowrent.sql z sekcji "Rozwiązanie" na dole strony.
2. Do Arkusza 2 pobierz plik dancestudio.sql (link w treści Arkusza 2).
3. Oba importuj w phpMyAdmin przez zakładkę "Importuj" (nie "SQL"), po utworzeniu odpowiednio nazwanej, pustej bazy.
4. Rozwiąż najpierw cały Arkusz 1, dopiero potem przejdź do Arkusza 2 — nie mieszaj ich.
5. Pracuj z zegarem: daj sobie realne 150 minut na każdy arkusz, tak jak na egzaminie.
Jak powinien wyglądać efekt
W obu arkuszach efektem końcowym jest komplet poprawnie wykonanych zapytań udokumentowanych zrzutami ekranu oraz plik tekstowy z zapisanymi zapytaniami SQL i opisem środowiska pracy — dokładnie tak, jak wygląda odbiór pracy egzaminacyjnej przez egzaminatora. Jeśli po 150 minutach nie skończyłeś wszystkich punktów, zanotuj, na którym utknąłeś — to cenna informacja do dalszej nauki, ważniejsza niż domknięcie arkusza na siłę bez zrozumienia.
Typowe problemy i jak sobie z nimi poradzić
Na prawdziwym egzaminie najwięcej punktów tracy się nie za błędną logikę zapytania, tylko za brak wymaganej dokumentacji (zrzutów ekranu, pliku z zapytaniami) albo za niedokładne trzymanie się podanych nazw plików i folderów — potraktuj to tak samo poważnie w obu arkuszach powyżej.
Nawiązanie do egzaminu zawodowego
Oba arkusze celowo pokrywają PEŁNY zakres jednostki INF.03.4 — od tworzenia struktury, przez wypełnianie danymi, zapytania SELECT z filtrowaniem i sortowaniem, JOIN, agregacje z GROUP BY/HAVING, po UPDATE z warunkiem. To dokładnie ten zestaw umiejętności, który jest sprawdzany w części praktycznej prawdziwego egzaminu zawodowego.
Kryteria sukcesu — sprawdź, czy wykonałeś zadanie poprawnie
Po wykonaniu każdego arkusza sprawdź, czy:
1. baza zaimportowała się w całości (właściwa liczba tabel i wierszy),
2. każde wymagane zapytanie jest wykonane i udokumentowane zrzutem ekranu o podanej nazwie,
3. plik tekstowy z zapisanymi zapytaniami SQL istnieje i zawiera opis środowiska pracy,
4. zmieściłeś się (albo wiesz, na czym dokładnie utknąłeś) w limicie 150 minut,
5. rozwiązałeś Arkusz 1 przed rozpoczęciem Arkusza 2.
Rozwiązanie — gotowa baza danych
Pobierz plik i zaimportuj go w phpMyAdmin przez zakładkę „Importuj” — dokładnie tak, jak wygląda to na prawdziwym egzaminie. Blok kodu poniżej to podgląd zawartości tego samego pliku, przydatny do sprawdzenia struktury bez otwierania go osobno.
CREATE DATABASE IF NOT EXISTS snowrent;
USE snowrent;
CREATE TABLE Sprzet (
id_sprzetu INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(80) NOT NULL,
typ VARCHAR(20) NOT NULL,
rozmiar VARCHAR(10),
cena_za_dzien DECIMAL(6,2) NOT NULL,
stan_techniczny VARCHAR(20) DEFAULT 'sprawny'
);
CREATE TABLE Klienci (
id_klienta INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
nazwisko VARCHAR(50) NOT NULL,
telefon VARCHAR(15)
);
CREATE TABLE Wypozyczenia (
id_wypozyczenia INT AUTO_INCREMENT PRIMARY KEY,
id_klienta INT NOT NULL,
id_sprzetu INT NOT NULL,
liczba_dni INT NOT NULL,
data_od DATE NOT NULL,
FOREIGN KEY (id_klienta) REFERENCES Klienci(id_klienta),
FOREIGN KEY (id_sprzetu) REFERENCES Sprzet(id_sprzetu)
);
INSERT INTO Sprzet (nazwa, typ, rozmiar, cena_za_dzien, stan_techniczny) VALUES
('Narty Atomic Redster', 'narty', '170cm', 60.00, 'sprawny'),
('Narty Rossignol Experience', 'narty', '165cm', 55.00, 'sprawny'),
('Narty Head Kore', 'narty', '175cm', 65.00, 'do przeglądu'),
('Deska Burton Custom', 'deska', '158cm', 70.00, 'sprawny'),
('Deska Salomon Pulse', 'deska', '152cm', 65.00, 'sprawny'),
('Kijki narciarskie', 'kijki', '120cm', 15.00, 'sprawny'),
('Buty narciarskie', 'buty', '42', 25.00, 'do przeglądu'),
('Buty snowboardowe', 'buty', '43', 28.00, 'sprawny');
INSERT INTO Klienci (imie, nazwisko, telefon) VALUES
('Michał','Bąk','603111222'), ('Aleksandra','Duda','603222333'),
('Kamil','Ostrowski','603333444'), ('Julia','Pawłowska','603444555');
INSERT INTO Wypozyczenia (id_klienta, id_sprzetu, liczba_dni, data_od) VALUES
(1,1,5,'2026-01-10'), (1,6,5,'2026-01-10'), (2,4,3,'2026-01-12'),
(3,2,7,'2026-01-15'), (4,5,2,'2026-01-18'), (2,8,3,'2026-01-12'),
(3,7,7,'2026-01-15'), (1,1,2,'2026-02-01');