Serwis używa plików cookies do analizy ruchu i poprawy działania. Szczegóły
EE.09-04-22.06-SGCzerwiec 2022 · 52 kroki · ok. 94 min · 41 kryteriów z klucza
Rozwiązanie krok po kroku: Zamówienia materiałów do sieci komputerowych (Nowoczesny kod (grid, nasłuchiwacze))
To drugi sposób rozwiązania tego samego arkusza. Wynik jest ten sam - baza firma z czterema zapytaniami i kontem zaopatrzenie, grafika sieci z przezroczystym tłem oraz strona zamowienia.html z tabelą materiałów, kolorowaniem braków, aktualizacją ilości i zamówieniami - i tak samo spełnia każde kryterium klucza. Inna jest droga:
siatka CSS zamiast float: bloki lewy i prawy stoją w znaczniku <main> z grid-template-columns: 30% 70%, a stopka nie potrzebuje clear,
zmienne CSS dla kolorów z arkusza, tabela z częściami <thead> i <tbody>,
przyciski bez numerów wierszy w kodzie: skrypt sam przypina nasłuchiwacz click do każdego przycisku (addEventListener) i znajduje jego wiersz metodą closest("tr") - dopisanie piątego materiału nie wymaga zmian w skrypcie,
textContent zamiast innerHTML i sprawdzenie wartości z okna prompt - Anuluj, tekst albo liczba ujemna nie psują tabeli,
jedna funkcja wybiera kolor dla ilości, a komunikat zamówienia składa szablon tekstowy.
Skrypt zostaje w pliku strony, na końcu <body>: klucz sprawdza kryteria R.5.1 - R.5.3 i R.5.7 „w kodzie strony”, a przy zewnętrznym pliku .js egzaminator mógłby ich tam nie znaleźć.
To arkusz EE.09 z czerwca 2022 - kwalifikacji formuły 2017, którą zastąpiła INF.03. Baza, grafika i plik z treścią tabeli pochodzą z oryginalnego archiwum CKE zad4.zip (załącznik na stronie arkusza), zapytania i zrzuty są policzone na MariaDB 10.4, a skrypt sprawdzony w przeglądarce Chrome.
Jak liczą się punkty. Klucz ma 41 kryteriów (R.1.1 - R.5.9), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 31 punktów. Przy każdym kroku jest napisane, które kryteria spełnia; klucz przyjmuje zarówno atrybut onclick, jak i nasłuchiwacz zdarzenia.
Suwak i strzałki obok niego - albo ←→ na klawiaturze - przechodzą krok po kroku; wyjaśnienie, pliki i podgląd zmieniają się razem z krokiem.
Lista „Etap” przenosi od razu do wybranego etapu.
„Rozwiązuję samodzielnie” chowa rozwiązanie kroku - najpierw własna próba, potem odsłonięcie.
„Tryb prezentacji” pokazuje same kroki, bez menu strony - na rzutnik.
Etap 1: Baza danych
Kroki 1-8 · po tym etapie masz 7 z 41 kryteriów (pkt)
Krok 1: Folder zdającego i archiwum zad4.zip
ok. 2 min
Polecenie z arkusza
Na pulpicie konta Egzamin należy utworzyć folder. Jako nazwy folderu należy użyć numeru zdającego, którym został podpisany arkusz. Rozpakowane pliki należy umieścić w tym folderze. Po skończonej pracy wszystkie wyniki należy zapisać w tym folderze.
Folder na pulpicie nazwany numerem zdającego (w tym rozwiązaniu w jego miejscu stoi Bartosz Bryniarski), do niego archiwum zad4.zip z hasłem Sieci^KomPuterowe_!. W środku: baza.sql, obraz.jpg i tabela.txt. Do tego folderu trafiają wszystkie rezultaty pracy.
Krok 2: XAMPP i baza firma
ok. 2 min
Polecenie z arkusza
Za pomocą narzędzia phpMyAdmin należy wykonać operacje na bazie danych: Utworzenie bazy danych o nazwie: firma z zestawem polskich znaków (np. utf8_unicode_ci)
Start przy Apache i MySQL, potem http://localhost/phpmyadmin, Nowa, nazwa firma. Porównywanie np. utf8mb4_polish_ci - utf8mb4 zapisuje każdy znak Unicode (także emoji, których starsze utf8 w MySQL nie mieści), a polish sortuje „ł” po „l”, a nie na końcu alfabetu.
Krok 3: Import tabel z pliku baza.sql i zrzut import.jpg
Kryteria:
R.1.1 Wykonano import tabel do bazy danych firma , czynność udokumentowano plikiem o nazwie import w formacie JPEG
ok. 3 min
Polecenie z arkusza
Import tabel do bazy firma z pliku baza.sql. Czynność należy udokumentować zrzutem ekranu, na którym powinny być widoczne elementy wskazujące na poprawnie wykonany import tabel. Zrzut należy zapisać w formacie JPEG, pod nazwą import. Powinien on obejmować cały ekran monitora, z widocznym paskiem zadań.
Baza firma, karta Import, plik baza.sql, Wykonaj. Trzy tabele: jednostki (2 wiersze), materialy (7) i producenci (4); w materialy klucze obce Producenci_id i Jednostki_id. Komunikat o sukcesie i tabele w lewym panelu na zrzucie całego ekranu: import.jpg.
Typowe błędy
Zrzut importu w JPEG, zrzuty zapytań i grants w PNG.
Podgląd strony po tym kroku
Krok 4: Zapytanie 1: materiały powyżej 9 sztuk z producentem
Kryteria: ,
R.1.2 Zapisano plik tekstowy o nazwie kwerendy zawierający co najmniej jedno zapytanie SQL, wynikające z treści zadania
R.1.3 Utworzono zapytanie 1 wybierające jedynie nazwę i ilość materiałów oraz odpowiadającą im nazwę producenta dla materiałów, których jest więcej niż 9. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT nazwa, ilosc, nazwaProd FROM materialy JOIN producenci ON Producenci_id = producenci.id WHERE ilosc > 9; (lub porównanie kluczy w WHERE) oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczne są dokładnie 3 rekordy: Skrętka U/UTP drut 20 Netrack, Wtyk 8P8C 10 Netrack, Moduł Keystone 30 UGreen
ok. 3 min
Polecenie z arkusza
Zapytanie 1: wybierające jedynie nazwę i ilość materiałów oraz odpowiadającą im nazwę producenta dla materiałów, których jest więcej niż 9. Należy wykorzystać relację
Każda klauzula w osobnej linii - przy złączeniach łatwiej wtedy znaleźć błąd. JOIN … ON materialy.Producenci_id = producenci.id to relacja z obrazu 1, a WHERE ilosc > 9 - „więcej niż 9”. Wynik: 3 rekordy (Skrętka U/UTP drut 20 Netrack, Wtyk 8P8C 10 Netrack, Moduł Keystone 30 UGreen), zgodnie z kluczem. Zapytanie do kwerendy.txt, zrzut: kw1.png.
Krok 5: Zapytanie 2: materiał, producent i jednostka
Kryteria:
R.1.4 Utworzono zapytanie 2 wybierające jedynie nazwę materiału i odpowiadającą jej nazwę producenta oraz nazwę jednostki. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT nazwa, nazwaProd, nazwaJedn FROM materialy JOIN producenci ON Producenci_id = producenci.id JOIN jednostki ON Jednostki_id = jednostki.id; (lub porównanie kluczy w WHERE, dowolna kolejność łączenia tabel) oraz wynik działania zapytania udokumentowano zrzutem, na którym widocznych jest dokładnie 7 rekordów z nazwami produktów i odpowiadającymi im nazwami producentów i jednostek
ok. 2 min
Polecenie z arkusza
Zapytanie 2: wybierające jedynie nazwę materiału i odpowiadającą jej nazwę producenta oraz nazwę jednostki. Należy wykorzystać relację
Dwa złączenia - po jednym na każdą relację. Wynik: 7 rekordów, każdy materiał z producentem i jednostką. Zrzut: kw2.png.
kwerendy.txtTekstzmienione: 6 linii
-- Zapytanie 1SELECT nazwa, ilosc, nazwaProdFROM materialyJOIN producenci ON materialy.Producenci_id = producenci.idWHERE ilosc > 9;-- Zapytanie 2SELECT nazwa, nazwaProd, nazwaJednFROM materialyJOIN producenci ON materialy.Producenci_id = producenci.idJOIN jednostki ON materialy.Jednostki_id = jednostki.id;
Podgląd strony po tym kroku
Krok 6: Zapytanie 3: użytkownik zaopatrzenie
Kryteria:
R.1.5 Utworzono zapytanie 3 tworzące użytkownika o nazwie zaopatrzenie na localhost z hasłem Z@op@trzenie. W pliku z kwerendami lub na zrzucie istnieje zapis np.: CREATE USER 'zaopatrzenie'@'localhost' IDENTIFIED BY 'Z@op@trzenie'; oraz wynik działania zapytania udokumentowano zrzutem z komunikatem o poprawnie wykonanej operacji, hasło widoczne jest jawnie (niezaszyfrowane)
ok. 2 min
Polecenie z arkusza
Zapytanie 3: tworzące użytkownika o nazwie zaopatrzenie na localhost z hasłem Z@op@trzenie
CREATE USER z nazwą i komputerem w apostrofach, hasło jawnie po IDENTIFIED BY (klucz wymaga, by było widoczne na zrzucie albo w pliku). Zrzut: kw3.png.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT nazwa, ilosc, nazwaProdFROM materialyJOIN producenci ON materialy.Producenci_id = producenci.idWHERE ilosc > 9;-- Zapytanie 2SELECT nazwa, nazwaProd, nazwaJednFROM materialyJOIN producenci ON materialy.Producenci_id = producenci.idJOIN jednostki ON materialy.Jednostki_id = jednostki.id;-- Zapytanie 3CREATE USER 'zaopatrzenie'@'localhost' IDENTIFIED BY 'Z@op@trzenie';
Podgląd strony po tym kroku
Krok 7: Zapytanie 4: prawa do rekordów w bazie firma
Kryteria:
R.1.6 Utworzono zapytanie 4 nadające prawa umożliwiające przeglądanie, aktualizację, dodawanie i usuwanie rekordów dla utworzonego użytkownika na wszystkich tabelach bazy firma. W pliku z kwerendami lub na zrzucie istnieje zapis np.: GRANT SELECT, INSERT, UPDATE, DELETE ON firma.* TO 'zaopatrzenie'@'localhost'; oraz wynik działania zapytania udokumentowano zrzutem z komunikatem o poprawnie wykonanym zapytaniu
ok. 2 min
Polecenie z arkusza
Zapytanie 4: nadające prawa umożliwiające przeglądanie, aktualizację, dodawanie i usuwanie rekordów dla utworzonego użytkownika na wszystkich tabelach bazy firma
Cztery prawa do rekordów - SELECT, INSERT, UPDATE, DELETE - i nic więcej: zasada najmniejszych uprawnień. ON firma.* to wszystkie tabele jednej bazy. Sprawdzone logowaniem na nowe konto: odczyt działa, DROP TABLE kończy się odmową. Zrzut: kw4.png.
Typowe błędy
GRANT ALL PRIVILEGES albo ON *.* daje znacznie więcej, niż wymaga arkusz.
kwerendy.txtTekstzmienione: 5 linii
-- Zapytanie 1SELECT nazwa, ilosc, nazwaProdFROM materialyJOIN producenci ON materialy.Producenci_id = producenci.idWHERE ilosc > 9;-- Zapytanie 2SELECT nazwa, nazwaProd, nazwaJednFROM materialyJOIN producenci ON materialy.Producenci_id = producenci.idJOIN jednostki ON materialy.Jednostki_id = jednostki.id;-- Zapytanie 3CREATE USER 'zaopatrzenie'@'localhost' IDENTIFIED BY 'Z@op@trzenie';-- Zapytanie 4GRANT SELECT, INSERT, UPDATE, DELETEON firma.*TO 'zaopatrzenie'@'localhost';
Podgląd strony po tym kroku
Krok 8: SHOW GRANTS i zrzut grants.png
Kryteria:
R.1.7 Sprawdzono prawa użytkownika zaopatrzenie, co udokumentowano zrzutem ekranu o nazwie grants.png na którym widać prawa SELECT, UPDATE, INSERT i DELETE dla użytkownika zaopatrzenie dla firma.* (*.* też poprawnie, gdy aktywna jest baza firma)
ok. 2 min
Polecenie z arkusza
Po wykonaniu zapytań 3, 4 należy wydać polecenie SHOW GRANTS FOR 'zaopatrzenie'@'localhost'; Następnie należy wykonać zrzut ekranu z rezultatem polecenia i zapisać go pod nazwą grants.png. Zrzut powinien obejmować cały ekran monitora z widocznym paskiem zadań.
Dwa wiersze wyniku: USAGE (samo logowanie) i prawa z zapytania 4 dla firma.*. Zrzut z rozwiniętymi Pełnymi tekstami: grants.png.
Podgląd strony po tym kroku
Etap 2: Grafika i strona HTML
Kroki 9-27 · po tym etapie masz 19 z 41 kryteriów (pkt)
Krok 9: Grafika: tło przezroczyste
ok. 3 min
Polecenie z arkusza
Cechy grafiki z pliku obraz: Tło przezroczyste
W GIMP-ie Warstwa → Przezroczystość → Dodaj kanał alfa, potem Kolory → Kolor na alfę z bielą - jasne krawędzie dostają częściową przezroczystość, więc kontur zostaje gładki na każdym tle.
Podgląd strony po tym kroku
Krok 10: Grafika: szerokość 300 px z zachowaniem proporcji
ok. 2 min
Polecenie z arkusza
Obraz przeskalowany z zachowaniem proporcji do szerokości 300 px
Obraz → Skaluj obraz z zamkniętym łańcuchem: 510 × 640 px → 300 × 376 px (klucz: 376 ±2).
Krok 11: Grafika: zapis jako obraz.png
Kryteria:
R.2.1 Grafikę w pliku obraz przeskalowano z zachowaniem proporcji do szerokości 300 px, odpowiadająca temu wysokość 376 px (± 2 px), obraz zapisano z zachowaniem przezroczystości
ok. 1 min
Polecenie z arkusza
Grafika zapisana pod nazwą obraz w formacie obsługującym przezroczystość
Plik → Wyeksportuj jako…obraz.png. PNG zapisuje przezroczystość z pełną paletą kolorów (GIF ma tylko 256 kolorów i przezroczystość „wszystko albo nic”).
Podgląd strony po tym kroku
Krok 12: Plik zamowienia.html
Kryteria:
R.2.2 Witrynę internetową zapisano w pliku o nazwie zamowienia.html
ok. 1 min
Polecenie z arkusza
Cechy witryny: Składa się ze strony o nazwie zamowienia.html
Nowy plik zamowienia.html w folderze zdającego.
zamowienia.htmlHTMLnowy plik
Podgląd strony po tym kroku (zamowienia.html)
Krok 13: Szkielet HTML5
ok. 1 min
Polecenie z arkusza
Zapisana w języku HTML5
<!DOCTYPE html> i szkielet <html>, <head>, <body>.
Jawnie zastosowany właściwy standard kodowania polskich znaków
<meta charset="UTF-8"> jako pierwszy znacznik w <head>. Druga linia, viewport, każe telefonowi wyświetlić stronę w szerokości ekranu zamiast pomniejszonej wersji „komputerowej” - arkusz jej nie wymaga.
R.2.3 Zapisano jawnie standard kodowania polskich znaków i deklarację HTML5 <!DOCTYPE HTML> oraz zadeklarowano dla witryny język polski (np. lang = 'pl')
R.3.5 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl4.css , formatowanie pochodzi jedynie z tego arkusza lub skryptu Uwaga: kryterium to nie jest spełnione również, gdy zdający źle przypisał co najmniej jeden selektor do bloku (np. kropka zamiast #)
ok. 1 min
Polecenie z arkusza
Tytuł strony widoczny na karcie przeglądarki: „Zamówienia hurtowe”
<title> i od razu <link> do styl4.css - wszystkie style strony będą w tym pliku.
Krok 17: Bloki: baner, główna część z dwiema sekcjami, stopka
Kryteria:
R.2.5 Wygląd strony zdefiniowano dzieląc ją na bloki: banera, lewy, prawy i stopkę. Zastosowano znaczniki sekcji
ok. 2 min
Polecenie z arkusza
Podział strony na: blok banera, obok siebie bloki lewy i prawy, blok stopki. Podział zrealizowany za pomocą znaczników sekcji
<header> i <footer> jak w wersji podstawowej, a bloki lewy i prawy - dwa znaczniki <section> - stoją we wspólnym <main>, czyli głównej treści strony. <main> będzie siatką z dwiema kolumnami: obie sekcje ustawi obok siebie jedna reguła CSS, bez float na sekcjach i clear na stopce.
Krok 21: Blok lewy: grafika z tekstem alternatywnym
Kryteria:
R.2.7 W bloku lewym umieszczono obraz o nazwie obraz z tekstem alternatywnym „sieć komputerowa"
ok. 1 min
Polecenie z arkusza
Grafika o nazwie obraz z tekstem alternatywnym „sieć komputerowa”
<img> z alt z arkusza. Atrybuty width i height z prawdziwymi wymiarami pliku pozwalają przeglądarce zarezerwować miejsce na obraz, zanim się wczyta - tekst pod nim nie „skacze” w dół.
R.2.9 Pierwszy wiersz tabeli jest wierszem nagłówkowym o zawartości: „Produkt”, „Jednostka”, „Dostępna ilość”, „Aktualizacja”, „Zamówienie”. Zastosowano znaczniki <th>
ok. 2 min
Polecenie z arkusza
Zawartość bloku prawego: tabela o 5 wierszach i 5 kolumnach, z czego pierwszy wiersz zawiera komórki nagłówkowe. Zawartość jest zgodna z obrazem 2. Zawartość komórek nagłówkowych: „Produkt”, „Jednostka”, „Dostępna ilość”, „Aktualizacja”, „Zamówienie”
Wiersz nagłówkowy w <thead>, wiersze z danymi trafią do <tbody>. Podział przydaje się skryptowi: tbody tr to dokładnie wiersze z materiałami, bez nagłówka. Atrybut scope="col" mówi czytnikowi ekranu, że komórka <th> jest nagłówkiem kolumny - przy każdej liczbie przeczyta wtedy „Dostępna ilość”.
R.2.8 W bloku prawym umieszczono tabelę o pięciu wierszach i pięciu kolumnach, zastosowano znaczniki <table>, <tr>, <td>
ok. 4 min
Polecenie z arkusza
Zawartość komórek wierszy 2 ÷ 5: w trzech pierwszych kolumnach znajdują się napisy widoczne na obrazie 2, napisy należy skopiować z pliku tabela.txt wypakowanego z archiwum
Każda linia tabela.txt to wiersz <tr> w <tbody>, każdy napis rozdzielony średnikiem - komórka <td>. Komórki nie mają identyfikatorów: skrypt znajdzie je po położeniu w wierszu. Plik jest w kodowaniu Windows-1250 - przy krzakach zmień kodowanie w edytorze przed kopiowaniem.
w czwartej kolumnie znajdują się przyciski o treści „Aktualizuj”, wciśnięcie dowolnego przycisku powoduje wywołanie funkcji aktualizującej
Przycisk dostaje type="button" - zwykły przycisk, który niczego nie wysyła (domyślny typ submit w formularzu przeładowałby stronę). Atrybut data-action="update" to własna etykieta: atrybuty zaczynające się od data- przeglądarka zostawia w spokoju, a skrypt wybierze po niej wszystkie przyciski aktualizujące jednym selektorem. Zamiast onclick z numerem wiersza w każdym przycisku - wywołanie funkcji przypnie skrypt.
R.2.10 W czwartej kolumnie umieszczono przyciski o treści "Aktualizuj" oraz w piątej kolumnie przyciski o treści "Zamów". Przycisków jest tyle, ile wierszy tabeli (nie licząc wiersza nagłówkowego)
ok. 1 min
Polecenie z arkusza
w piątej kolumnie znajdują się przyciski o treści „Zamów”, wciśnięcie dowolnego przycisku powoduje wywołanie funkcji zamawiającej
Tak samo, z etykietą data-action="order". Cztery przyciski każdego rodzaju, po jednym w wierszu.
Krok 26: Stopka: odnośnik otwierany w nowej karcie
Kryteria:
R.3.2 Na stronie umieszczono odnośnik, którego kliknięcie inicjuje otwarcie strony http://sieci.pl/ w nowej karcie przeglądarki
ok. 1 min
Polecenie z arkusza
Zawartość bloku stopki: Odnośnik do strony http://sieci.pl/ otwierany w nowej karcie przeglądarki i podpisany „Nasza strona internetowa”
target="_blank" otwiera nową kartę, a rel="noopener noreferrer" odcina obcej stronie dostęp do karty, z której ją otwarto (window.opener), i nie przekazuje jej adresu strony źródłowej.
R.2.6 W bloku banera zapisano nagłówek h1: "Sieci komputerowe", w bloku lewym h2: "Aktualizacja i zamówienia materiałów" oraz paragraf: "Do wewnętrznego użytku firmy", w stopce paragraf z numerem zdającego
ok. 1 min
Polecenie z arkusza
Paragraf o treści „Stronę przygotował: ”, dalej wstawiony numer zdającego
Na egzaminie numer PESEL, w tym rozwiązaniu Bartosz Bryniarski.
Kroki 28-38 · po tym etapie masz 30 z 41 kryteriów (pkt)
Krok 28: Zmienne z kolorami i formatowanie domyślne
Kryteria:
R.4.1 Ustawiono formatowanie domyślne dla wszystkich selektorów CSS (*): krój czcionki Verdana, (czcionka Verdana jako pierwsza) wyrównanie tekstu do środka
ok. 2 min
Polecenie z arkusza
Styl CSS zdefiniowany w całości w zewnętrznym pliku o nazwie styl4.css. Formatowanie domyślne dla wszystkich selektorów CSS: krój czcionki Verdana, wyrównanie tekstu do środka
Trzy kolory z arkusza dostają nazwy w zmiennych CSS na :root (element <html>): --dark, --pale, --light. Reguły niżej odwołują się do nich przez var(--dark) - zmiana odcienia to jedna linia zamiast pięciu.
Selektor * z krojem Verdana jako pierwszym (klucz R.4.1 tak wymaga) i zapasowym sans-serif, gdyby Verdany nie było w systemie, oraz wyśrodkowanie tekstu.
Krok 30: Bloki lewy i prawy obok siebie: siatka 30% i 70%
Kryteria: ,
R.3.1 Układ bloków po uruchomieniu strony w przeglądarce jest zgodny z Obrazem 2 w arkuszu egzaminacyjnym lub blok lewy jest krótszy o 100 px od prawego i jest widoczna przerwa między blokiem lewym a stopką (prawidłowo zastosowano właściwości CSS układające bloki na stronie, np. float albo display flex albo grid); clear:both w stopce nie jest wymagane
R.4.4 Ustawiono szerokość 30% dla bloku lewego i 70% dla prawego (width lub grid- template-columns lub flex)
ok. 2 min
Polecenie z arkusza
Podział zrealizowany za pomocą znaczników sekcji tak, aby wygląd układu bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2
display: grid zamienia <main> w siatkę, a grid-template-columns: 30% 70% dzieli ją na dwie kolumny o szerokościach z arkusza - pierwsza sekcja trafia do pierwszej kolumny, druga do drugiej. Szerokości stoją w jednym miejscu, nie na blokach; klucz przyjmuje je w tej postaci (R.4.4) i wymienia siatkę wśród sposobów ułożenia bloków (R.3.1). align-items: start zostawia każdą sekcję w jej własnej wysokości - bez tego obie rozciągnęłyby się do wysokości wyższej.
Stopka leży za <main>, więc sama zaczyna się pod siatką - bez clear.
Krok 32: Blok prawy: tło Honeydew, wysokość i margines górny
ok. 1 min
Polecenie z arkusza
Dla bloku prawego: kolor tła Honeydew, szerokość 70%, wysokość 500 px, margines wewnętrzny górny 100 px
padding-top: 100px dolicza się do wysokości: blok prawy ma 600 px, lewy 500 px - pod lewym zostaje przerwa przed stopką, którą klucz przyjmuje (R.3.1). Siatka sama ustawia wysokość wiersza według wyższego bloku.
R.4.8 Ustawiono obramowanie połączone (border-collapse: collapse; lub border-spacing: 0) dla tabeli
R.4.9 Ustawiono obramowanie o szerokości 1px linią ciągłą w kolorze DarkGreen dla tabeli i komórek tabeli
ok. 2 min
Polecenie z arkusza
Wspólne dla selektorów tabeli i komórek tabeli (bez komórek nagłówkowych): obramowanie o szerokości 1 px linią ciągłą w kolorze DarkGreen, obramowanie połączone
Selektory znaczników table, td (klucz nie uznaje klas), linia 1 px w kolorze ze zmiennej, border-collapse: collapse - jedna linia między komórkami.
Krok 35: Tabela: marginesy automatyczne i szerokość 95%
Kryteria: ,
R.4.5 Ustawiono szerokość 95% dla selektora table
R.4.6 Ustawiono marginesy zewnętrzne (margin) auto dla tabeli
ok. 1 min
Polecenie z arkusza
Dodatkowo dla selektora tabeli: marginesy zewnętrzne automatycznie wyliczane przez przeglądarkę, szerokość 95%
Ta sama reguła table z poprzedniego kroku ma już margin: auto i width: 95% - tabela stoi na środku bloku prawego. Wszystko, co dotyczy samej tabeli, jest w jednym miejscu.
R.4.2 Ustawiono kolor tła DarkGreen dla banera i przycisku, PaleGreen dla bloku lewego i stopki, Honeydew dla bloku prawego
R.4.3 Ustawiono biały kolor czcionki dla banera i przycisku
R.4.7 Ustawiono marginesy wewnętrzne (padding): 5px dla banera i przycisku, 3px dla stopki, górny i dolny 20px oraz prawy i lewy 0 dla selektorów td i th
Krok 38: Przycisk pod kursorem i przy obsłudze klawiaturą
Kryteria:
R.4.10 W momencie, gdy kursor myszy znajdzie się na przycisku jego kolor tła zmienia się na Honeydew, a kolor czcionki na DarkGreen (np. za pomocą pseudoklasy hover)
ok. 1 min
Polecenie z arkusza
W momencie, gdy kursor myszy znajdzie się na przycisku jego kolor tła zmienia się na Honeydew, a kolor czcionki na DarkGreen
:hover z arkusza i drugi selektor :focus-visible - ten sam wygląd dostaje przycisk, do którego doszło się klawiszem Tab. Kto nie używa myszy, też widzi, który przycisk jest aktywny.
R.5.3 Do sprawdzenia braków zastosowano instrukcję warunkową sprawdzającą, czy wartość jest równa 0 lub jest z przedziału <1, 5>
ok. 2 min
Polecenie z arkusza
Jeżeli wartość jest równa 0, tło tej komórki zmienione jest na czerwone
Wybór koloru dostaje własną funkcję shortageColor: dostaje liczbę, zwraca nazwę koloru. Porównanie === sprawdza wartość i typ - "0" === 0 to fałsz, więc tekst nie przejdzie jako liczba po cichu (R.5.3).
Krok 42: Pozostałe ilości: Honeydew i wpis koloru do komórki
ok. 2 min
Polecenie z arkusza
W każdym innym przypadku tło komórki jest koloru Honeydew
Ostatni return obsługuje wszystkie pozostałe wartości. Funkcja zaznaczająca nie ma już żadnych warunków - ustawia tło komórki na to, co zwróci shortageColor (zmiana w następnym kroku). Kolor zostaje we właściwości style.backgroundColor: arkusz każe zmieniać tło komórki, a klasa CSS z kolorem wymagałaby dodatkowych reguł w styl4.css, których arkusz nie wymienia.
Krok 43: Start skryptu: numer zamówienia i zaznaczenie braków
ok. 2 min
Polecenie z arkusza
Na początku działania skryptu jest wywoływana funkcja zaznaczająca braki oraz zainicjowana jest wartością 0 zmienna przechowująca id zamówienia
let orderId = 0 na początku skryptu - let, bo numer będzie rósł. Funkcja zaznaczająca wpisuje teraz tło komórki: cell.style.backgroundColor = shortageColor(…). Jej wywołanie stoi na samym końcu skryptu, pod wszystkimi definicjami i przypięciem przycisków, więc wykonuje się od razu po wczytaniu strony. Podgląd: „2” przy skrętce linkowej na żółto.
Krok 45: Funkcja aktualizująca przypięta do przycisków
Kryteria: ,
R.3.3 Dla przynajmniej jednego przycisku do aktualizacji zdefiniowano obsługę zdarzenia kliknięcia (atrybut onClick lub słuchacz zdarzenia click lub właściwość onclick obiektu DOM)
R.5.2 Zapisano w skrypcie przynajmniej jedną funkcję, która jest przypisana do kliknięcia przycisku oraz zainicjowano wartością 0 zmienną przechowującą id zamówienia
ok. 3 min
Polecenie z arkusza
Funkcja aktualizująca – obraz 4: Wywoływana po przyciśnięciu przycisku w danym wierszu tabeli
Funkcja updateQuantity przyjmuje cały wiersz tabeli, a nie jego numer. Pod nią pętla po wszystkich przyciskach z data-action="update":
addEventListener("click", …) - nasłuchiwacz zdarzenia kliknięcia, przypięty z poziomu skryptu (klucz przyjmuje go zamiast atrybutu onclick - R.3.3),
() => updateQuantity(…) - funkcja strzałkowa wywoływana przy kliknięciu,
button.closest("tr") - najbliższy wiersz <tr>, w którym leży przycisk: przycisk sam wie, którego wiersza dotyczy.
Funkcja jest przypisana do kliknięcia, a zmienna z numerem zamówienia ustawiona na 0 (R.5.2).
Krok 46: Okno „Podaj nową ilość:” i przycisk Anuluj
Kryteria:
R.5.5 Do aktualizacji wyświetlono okno prompt i pobrano z niego wartość
ok. 2 min
Polecenie z arkusza
Wyświetla okno z polem do wpisania wartości, podpisane: „Podaj nową ilość:”
prompt z napisem z arkusza (R.5.5). Po kliknięciu Anuluj okno zwraca null - wtedy funkcja kończy się od razu i tabela zostaje bez zmian (w wersji podstawowej Anuluj czyścił komórkę i barwił ją na czerwono).
Krok 47: Sprawdzenie i wpis nowej ilości do wiersza
Kryteria:
R.5.6 Po wciśnięciu przycisku do aktualizacji w dowolnym wierszu tabeli i wprowadzeniu wartości, jest ona widoczna w kolumnie "Dostępna ilość" tego wiersza
ok. 3 min
Polecenie z arkusza
Podaną w oknie wartość wpisuje do odpowiedniego wiersza, kolumny „Dostępna ilość”
Najpierw sprawdzenie: trim() zdejmuje spacje z brzegów, a pusty napis, wartość nie będąca liczbą całkowitą (Number.isInteger daje fałsz dla NaN i ułamków) albo liczba ujemna kończą się komunikatem bez zmian w tabeli.
Potem wpis do trzeciej komórki tego wiersza przez textContent - wartość zawsze zostaje tekstem, nigdy kodem HTML. Sprawdzone w Chrome: 0 przy skrętce drucianej pojawia się w kolumnie „Dostępna ilość” (R.5.6), a „abc” albo <img onerror> kończą się komunikatem i niczego nie zmieniają.
Krok 48: Ponowne zaznaczenie braków po aktualizacji
Kryteria:
R.5.4 Przy załadowaniu strony oraz po aktualizacji wartości w tabeli, komórka zawierająca ilość ma tło czerwone, gdy wartość w niej jest równa 0 lub tło żółte, gdy wartość jest z przedziału <1, 5> lub Honeydew w innych przypadkach, należy sprawdzić w przeglądarce wszystkie stany
ok. 1 min
Polecenie z arkusza
Wywołuje funkcję zaznaczającą braki
Po zmianie wartości kolory liczą się od nowa: 0 daje tło czerwone, liczby 1-5 żółte, pozostałe Honeydew - sprawdzone w Chrome dla 0, 1, 5, 6 i 20 (R.5.4).
Krok 50: Komunikat zamówienia i przypięcie przycisków „Zamów”
Kryteria: , ,
R.3.4 Dla przynajmniej jednego przycisku do zamawiania zdefiniowano obsługę zdarzenia kliknięcia (atrybut onClick lub słuchacz zdarzenia click lub właściwość onclick obiektu DOM)
R.5.8 Po wciśnięciu dowolnego przycisku do zamawiania wyświetlany jest komunikat o treści: „Zamówienie nr: <id zamówienia> Produkt: <nazwa produktu>”. Pola zapisane w <> wypełniane są kolejno wartością id zamówienia oraz nazwą produktu z kolumny „Produkt” danego wiersza tabeli
R.5.9 Komunikat o złożeniu zamówienia wyświetlany jest w oknie alert
ok. 3 min
Polecenie z arkusza
Wyświetla komunikat o treści: „Zamówienie nr: <id zamówienia> Produkt: <nazwa produktu>”. Pola zapisane w <> wypełniane są automatycznie wartością id_zamowienia oraz nazwą produktu z kolumny „Produkt” danego wiersza tabeli
Nazwa produktu to pierwsza komórka wiersza (cells[0]). Komunikat składa szablon tekstowy w odwróconych apostrofach: ${orderId} i ${product} wstawiają wartości w miejsce znaczników, a spacje stoją tam, gdzie widać je w napisie - nie da się ich zgubić między plusami. Druga pętla przypina placeOrder do przycisków „Zamów” (R.3.4).
Sprawdzone w Chrome: dwa kliknięcia przy skrętce drucianej dają „Zamówienie nr: 1 Produkt: Skrętka U/UTP drut” i „Zamówienie nr: 2 Produkt: Skrętka U/UTP drut” - obraz 5 (R.5.8, R.5.9).
Krok 51 · po tym etapie masz 41 z 41 kryteriów (pkt)
Krok 51: Co jest inaczej i którą wersję wybrać na egzaminie
ok. 3 min
Obie wersje dają komplet 41 punktów. Różnice:
wersja podstawowa
wersja nowoczesna
układ
float: left sekcji, clear stopki
<main> z grid-template-columns: 30% 70%
kolory
wpisane w każdej regule
zmienne --dark, --pale, --light
tabela
wiersze wprost w <table>
<thead> i <tbody>, scope="col"
przyciski
onclick="updateQuantity(1)" w każdym
data-action i addEventListener w pętli
skąd skrypt zna wiersz
numer w atrybucie i identyfikatory quantity1…product4
closest("tr") i cells[n]
kolorowanie
drabinka if / else if / else w pętli
funkcja shortageColor zwracająca kolor
wpis do komórki
innerHTML (wykonuje wstrzyknięty HTML)
textContent
Anuluj w oknie
czyści komórkę, tło czerwone
nic się nie zmienia
tekst w oknie
trafia do kolumny ilości
komunikat, wartość bez zmian
komunikat
sklejanie +
szablon tekstowy ${…}
odnośnik
target="_blank"
do tego rel="noopener noreferrer"
przycisk
:hover
:hover i :focus-visible, kursor „rączki”
Na egzaminie wersja podstawowa trzyma się metod z tabeli 1 arkusza i łatwiej ją napisać bez dokumentacji. Nowoczesna działa bez zmian po dopisaniu kolejnego materiału, nie psuje tabeli po kliknięciu Anuluj i nie wykonuje kodu wpisanego w okno - a klucz przyjmuje obie.
Krok 52 · po tym etapie masz 41 z 41 kryteriów (pkt)
Krok 52: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
Po zakończeniu pracy utwórz w folderze z numerem, którym został podpisany arkusz, plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowałeś poprawność działania witryny. Nagraj płytę z rezultatami pracy.
W przeglądarka.txt nazwa przeglądarki. W folderze z numerem zdającego: grants.png, import.jpg, kw1.png - kw4.png, kwerendy.txt, obraz.png, przeglądarka.txt, styl4.css i zamowienia.html. Nagraj płytę, sprawdź jej odczyt i opisz ją numerem zdającego.
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
To jedno z możliwych rozwiązań. Egzaminator ocenia spełnienie kryteriów z klucza odpowiedzi, a nie zgodność z tym kodem - inna, poprawna droga też daje punkty.
Autor rozwiązania: Bartosz Bryniarski. Licencja CC BY-NC 4.0 - kopiowanie i przeróbki do celów niekomercyjnych, z podaniem autora i źródła (link do tej strony) (zasady wykorzystania). Treść arkusza i klucza oceniania pochodzi z CKE.