INF.03-01-23.01-SGStyczeń 2023 · 34 kroki · ok. 63 min · 36 kryteriów z klucza
Rozwiązanie krok po kroku: Portal o farbach (Wersja podstawowa)
Rozwiązanie buduje stronę firmy malarskiej: baza malarz z farbami i planem malowania ścian i cztery zapytania (warunek, wyrażenie z dzieleniem i aliasem, złączenie tabel, a na koniec widokCREATE VIEW), grafika przeskalowana do 300 × 300 px z filtrem pikselizacji, dwie strony HTML - mieszamy.html z tabelą barw (scalone komórki nagłówkowe) i cena.html z kalkulatorem farby - oraz style w styl_1.css. W tym arkuszu nie ma PHP: skrypt działa w przeglądarce, w JavaScripcie - pobiera powierzchnię z pola liczbowego i liczy potrzebne puszki, zaokrąglając w górę.
Kroki idą zdanie po zdaniu za treścią arkusza - przy każdym jest polecenie z arkusza, a kod pokazuje dokładnie te linie, które je spełniają. Skrypt jest najpierw pisany najprościej, z atrybutem onclick i innerHTML, a na końcu zostaje przerobiony na wersję z prawdziwych projektów: słuchacz zdarzenia, sprawdzenie wpisanej wartości i textContent.
To jest wersja podstawowa. W zakładce „Nowoczesny kod (grid)” jest drugi sposób rozwiązania tego samego arkusza: bloki ustawione siatką CSS z nazwanymi obszarami (grid-template-areas) w znacznikach <nav>, <main> i <aside>, kolory w zmiennych CSS, a skrypt w osobnym pliku cena.js ze słuchaczem zdarzenia i sprawdzeniem wpisanej powierzchni - obie wersje są zgodne z kluczem.
Baza i grafika pochodzą z prawdziwego archiwum zad1 (załącznik do arkusza, hasło w treści zadania). Zrzuty wyników zapytań są odtworzone z tej bazy - na egzaminie robisz je sam, z całego ekranu. Kalkulator w podglądzie działa naprawdę - wpisz powierzchnię i kliknij „Policz”.
Jak liczą się punkty. Klucz ma 36 kryteriów (R.1.1 - R.5.5), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 27 punktów - można stracić 9 kryteriów i nadal zdać. Przy każdym kroku jest napisane, które kryteria spełnia; egzaminator ocenia spełnienie kryteriów z klucza, nie zgodność z tym kodem.
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-7 · po tym etapie masz 6 z 36 kryteriów (pkt)
Krok 1: Baza danych malarz
Kryteria:
R.1.1 Wykonano import tabel do bazy danych malarz czynność udokumentowano plikiem o nazwie import w formacie PNG
ok. 2 min
Polecenie z arkusza
Utwórz bazę danych o nazwie malarz.
Rozpakuj zad1.zip z pulpitu (hasło 2ws3ed!#) do folderu z numerem zdającego: malarz.sql i obraz.png. W phpMyAdmin: Nowa, nazwa malarz, porównywanie np. utf8mb4_polish_ci. Tabel z malarz.sql to nie zmienia: obie mają zestaw utf8mb4 zapisany we własnej definicji, a porównywanie bazy dziedziczą tylko tabele zakładane później bez własnego ustawienia.
Krok 2: Import tabel z pliku malarz.sql
Kryteria:
R.1.1 Wykonano import tabel do bazy danych malarz czynność udokumentowano plikiem o nazwie import w formacie PNG
ok. 2 min
Polecenie z arkusza
Do bazy malarz zaimportuj tabele z pliku malarz.sql z rozpakowanego archiwum.
Import → malarz.sql → Wykonaj. Dwie tabele z obrazu 1, w relacji 1..n przez pole id_farby: farby (7 kolorów z cena za puszkę i pojemnosc w litrach) i malowanie (które ściany którego pomieszczenia malujesz jaką farbą i ilu puszkami). Uwaga: kolor biały zapisano w bazie bez polskiej litery - „bialy”.
Krok 3: Zrzut ekranu import.png
Kryteria:
R.1.1 Wykonano import tabel do bazy danych malarz czynność udokumentowano plikiem o nazwie import w formacie PNG
ok. 2 min
Polecenie z arkusza
Wykonaj zrzut ekranu po imporcie. Zrzut zapisz w formacie PNG i nazwij import. Nie kadruj zrzutu. Powinien on obejmować cały ekran monitora, z widocznym paskiem zadań. Na zrzucie powinny być widoczne elementy wskazujące na poprawnie wykonany import tabel.
Print Screen, zapis jako import.png - import w PNG, zrzuty zapytań w JPEG.
Krok 4: Zapytanie 1: cena i pojemność czerwonej farby
Kryteria: ,
R.1.2 Zapisano plik kwerendy.txt zawierający co najmniej jedno zapytanie SQL, wynikające z treści zadania
R.1.3 Utworzono zapytanie 1 wybierające jedynie cenę i pojemność czerwonej puszki farby. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT cena, pojemnosc FROM farby WHERE kolor = "czerwony"; oraz wynik działania udokumentowano zrzutem, na którym widoczny jest jedynie rekord z wartościami 30 i 3
ok. 1 min
Polecenie z arkusza
Zapytanie 1: wybierające jedynie cenę i pojemność czerwonej puszki farby.
Dwie kolumny i warunek na kolorze. Wynik: 30 i 3 - jak w kluczu. Zapytanie do kwerendy.txt, zrzut kw1.jpg.
kwerendy.txtTekstnowy plik
-- Zapytanie 1SELECT cena, pojemnosc FROM farby WHERE kolor = "czerwony";
Podgląd strony po tym kroku
Krok 5: Zapytanie 2: cena jednego litra farby
Kryteria:
R.1.4 Utworzono zapytanie 2 wybierające jedynie kolor oraz cenę jednego litra farby wyliczoną z pól cena i pojemnosc dla wszystkich farb. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT kolor, cena/pojemnosc AS "cena jednostkowa" FROM farby; lub SELECT kolor, cena/pojemnosc FROM farby; oraz wynik działania udokumentowano zrzutem, na którym są widoczne nazwy farb z odpowiadającą ceną jednostkową, z zaokrągleniem lub bez, biały - 4; czerwony - 10; niebieski - 11,6; żółty - 5,5; zielony - 7,5; czarny - 25; fioletowy - 21,3
ok. 2 min
Polecenie z arkusza
Zapytanie 2: wybierające jedynie kolor oraz cenę jednego litra farby, wyliczoną z pól cena i pojemnosc dla wszystkich farb. Cena jednego litra farby powinna być podpisana jako „cena jednostkowa”.
W SELECT można wpisać nie tylko kolumnę, ale wyrażenie: cena / pojemnosc liczy cenę litra dla każdego wiersza osobno. Alias ze spacją bierze cudzysłów: AS "cena jednostkowa". MySQL dzieli liczby całkowite z dokładnością do czterech miejsc: biały 4.0000, niebieski 11.6667, fioletowy 21.3333 - wartości jak w kluczu. Zrzut: kw2.jpg.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT cena, pojemnosc FROM farby WHERE kolor = "czerwony";-- Zapytanie 2SELECT kolor, cena / pojemnosc AS "cena jednostkowa" FROM farby;
Podgląd strony po tym kroku
Krok 6: Zapytanie 3: farby dla pomieszczenia 3
Kryteria:
R.1.5 Utworzono zapytanie 3 wybierające jedynie nazwy kolorów farb i liczbę puszek dla pomieszczenia o identyfikatorze 3. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT kolor, liczba_puszek FROM malowanie JOIN farby ON malowanie.id_farby = farby.id_farby WHERE id_pomieszczenia = 3; oraz wynik działania udokumentowano zrzutem, na którym są widoczne jedynie wartości: zielony, 2; czerwony, 2
ok. 2 min
Polecenie z arkusza
Zapytanie 3: wybierające jedynie nazwy kolorów farb i liczbę puszek dla pomieszczenia o identyfikatorze 3.
Liczba puszek jest w malowanie, nazwa koloru w farby - łączysz je po id_farby. Kolumna o tej samej nazwie jest w obu tabelach, więc w warunku złączenia poprzedzasz ją nazwą tabeli. Wynik: zielony 2 i czerwony 2 - jak w kluczu. Zrzut: kw3.jpg.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT cena, pojemnosc FROM farby WHERE kolor = "czerwony";-- Zapytanie 2SELECT kolor, cena / pojemnosc AS "cena jednostkowa" FROM farby;-- Zapytanie 3SELECT kolor, liczba_puszek FROM malowanie JOIN farby ON malowanie.id_farby = farby.id_farby WHERE id_pomieszczenia = 3;
Podgląd strony po tym kroku
Krok 7: Zapytanie 4: widok pomieszczenie1
Kryteria:
R.1.6 Utworzono zapytanie 4 tworzące widok o nazwie pomieszczenie1 , w którym znajdują się jedynie pola id_sciany, id_farby, liczba_puszek dla pomieszczenia o id równym 1 . W pliku z kwerendami lub na zrzucie istnieje zapis np.: CREATE VIEW pomieszczenie1 AS SELECT id_sciany, id_farby, liczba_puszek FROM malowanie WHERE id_pomieszczenia = 1; oraz wynik działania udokumentowano zrzutem, na którym widać drzewo Widoki z widokiem o nazwie pomieszczenie1 lub jedynie dane widoku: 1, 1, 3; 2, 3, 2; 3, 1, 3; 4, 1, 2
ok. 3 min
Polecenie z arkusza
Zapytanie 4: tworzące widok (perspektywę) o nazwie pomieszczenie1, w którym znajdują się jedynie pola id_sciany, id_farby, liczba_puszek dla pomieszczenia o id równym 1. Aby udokumentować poprawność wykonania zapytania na zrzucie ekranu o nazwie kw4 powinien znajdować się otwarty widok pomieszczenie1 z drzewa Widoki.
Widok to zapisane pod nazwą zapytanie, które w bazie wygląda jak tabela: CREATE VIEW pomieszczenie1 AS SELECT ... - po AS zwykłe zapytanie z kolumnami i warunkiem z arkusza. Danych nie kopiuje: przy każdym otwarciu widok wykonuje swoje zapytanie od nowa. W phpMyAdmin pojawia się w lewym drzewie w gałęzi Widoki - klikasz go i robisz zrzut kw4.jpg z czterema wierszami: 1, 1, 3; 2, 3, 2; 3, 1, 3; 4, 1, 2.
Typowe błędy
Drugie wykonanie CREATE VIEW z tą samą nazwą kończy się błędem „Table already exists”. Poprawka widoku: CREATE OR REPLACE VIEW.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT cena, pojemnosc FROM farby WHERE kolor = "czerwony";-- Zapytanie 2SELECT kolor, cena / pojemnosc AS "cena jednostkowa" FROM farby;-- Zapytanie 3SELECT kolor, liczba_puszek FROM malowanie JOIN farby ON malowanie.id_farby = farby.id_farby WHERE id_pomieszczenia = 3;-- Zapytanie 4CREATE VIEW pomieszczenie1 AS SELECT id_sciany, id_farby, liczba_puszek FROM malowanie WHERE id_pomieszczenia = 1;
Podgląd strony po tym kroku
Etap 2: Grafika i strony HTML
Kroki 8-20 · po tym etapie masz 20 z 36 kryteriów (pkt)
Krok 8: obraz.png: 300 × 300 px i pikselizacja
Kryteria:
R.2.1 Grafikę obraz.png przeskalowano do rozmiarów dokładnie 300 px na 300 px oraz widoczny jest efekt pikselizacji
ok. 3 min
Polecenie z arkusza
Plik obraz.png należy przeskalować do rozmiarów 300 px na 300 px oraz zastosować filtr powodujący efekt pikselizacji, widoczny na obrazie 2.
Obraz ma 500 × 500 px. W GIMP-ie: Obraz → Skaluj obraz, 300 × 300 (obraz jest kwadratowy, więc łańcuch proporcji może zostać zamknięty). Potem Filtry → Rozmycie → Pikselizacja: obraz rozpada się na kwadratowe bloki jednolitego koloru - tu bloki po 15 px. Eksportuj jakoobraz.png, nadpisując plik (R.2.1).
Podgląd strony po tym kroku
Krok 9: Plik mieszamy.html w HTML5
Kryteria:
R.2.2 Witrynę internetową zapisano w plikach mieszamy.html i cena.html oraz zapisano jawnie standard kodowania polskich znaków i deklarację HTML5 <!DOCTYPE HTML> i zadeklarowano język witryny: polski np. <html lang="pl">
ok. 2 min
Polecenie z arkusza
Cechy witryny: Składa się z podstron mieszamy.html i cena.html. Podstrony różnią się jedynie blokiem środkowym. Cechy wspólne obu podstron: Zapisane w języku HTML 5.
Zbuduj całą stronę mieszamy.html, a cena.html powstanie z jej kopii - różnią się tylko blokiem środkowym. <!DOCTYPE html> i szkielet strony.
R.2.2 Witrynę internetową zapisano w plikach mieszamy.html i cena.html oraz zapisano jawnie standard kodowania polskich znaków i deklarację HTML5 <!DOCTYPE HTML> i zadeklarowano język witryny: polski np. <html lang="pl">
ok. 1 min
Polecenie z arkusza
Jawnie zastosowany właściwy standard kodowania polskich znaków.
<meta charset="UTF-8"> jako pierwszy element <head>.
R.2.2 Witrynę internetową zapisano w plikach mieszamy.html i cena.html oraz zapisano jawnie standard kodowania polskich znaków i deklarację HTML5 <!DOCTYPE HTML> i zadeklarowano język witryny: polski np. <html lang="pl">
R.3.5 Przynajmniej jedna strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl_1.css , formatowanie pochodzi jedynie z tego arkusza 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
Arkusz stylów w pliku o nazwie styl_1.css prawidłowo połączony z kodem strony.
Uwaga na nazwę: styl_1.css, z podkreśleniem i cyfrą.
Typowe błędy
styl.css (jak w większości arkuszy) zamiast styl_1.css odcina wszystkie style - klucz R.3.5 i cały rezultat R.4.
R.2.4 Układ strony zdefiniowano dzieląc ją na bloki: baner, lewy, środkowy i prawy oraz stopkę. Zastosowano znaczniki sekcji
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: na górze blok banera, poniżej trzy bloki: lewy, środkowy i prawy, na dole blok stopki. Podział zrealizowany za pomocą znaczników sekcji tak, aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z obrazem 2.
<header>, trzy <section> z identyfikatorami left, middle, right (po angielsku) i <footer> (R.2.4).
R.2.5 W banerze zapisano nagłówek h1: "Malowanie pokoi i biur”, w bloku lewym h2: "Menu", w bloku środkowym przynajmniej jeden z h2: "Barwy i ich pochodne" lub "Zapotrzebowanie na farbę" oraz w stopce h3: "MALARZ" i paragraf
ok. 1 min
Polecenie z arkusza
Zawartość banera: nagłówek pierwszego stopnia o treści: „Malowanie pokoi i biur”.
R.2.5 W banerze zapisano nagłówek h1: "Malowanie pokoi i biur”, w bloku lewym h2: "Menu", w bloku środkowym przynajmniej jeden z h2: "Barwy i ich pochodne" lub "Zapotrzebowanie na farbę" oraz w stopce h3: "MALARZ" i paragraf
R.2.6 W bloku lewym umieszczono listę punktowaną z dwoma elementami, zastosowano znaczniki <ul>, <li>
R.3.2 Po wybraniu odnośnika "Mieszamy" otwiera się podstrona mieszamy.html oraz po wybraniu odnośnika "Wyceniamy" otwiera się podstrona cena.html
ok. 2 min
Polecenie z arkusza
Zawartość bloku lewego: Nagłówek drugiego stopnia o treści: „Menu”. Lista punktowana (nieuporządkowana) z elementami: Odnośnik o treści: „Mieszamy”, prowadzący do strony mieszamy.html. Odnośnik o treści: „Wyceniamy” prowadzący do strony cena.html.
Lista <ul>, a w każdym <li> odnośnik do drugiej podstrony. Ścieżki względne - same nazwy plików z tego samego folderu (R.2.6, R.3.2). W podglądzie kliknięcia są zablokowane.
R.2.5 W banerze zapisano nagłówek h1: "Malowanie pokoi i biur”, w bloku lewym h2: "Menu", w bloku środkowym przynajmniej jeden z h2: "Barwy i ich pochodne" lub "Zapotrzebowanie na farbę" oraz w stopce h3: "MALARZ" i paragraf
ok. 1 min
Polecenie z arkusza
Zawartość stopki: nagłówek trzeciego stopnia o treści: „MALARZ”, paragraf (akapit) „Stronę opracował:”, dalej wstawiony numer zdającego.
<h3> i paragraf. Na egzaminie po dwukropku wpisujesz swój numer zdającego (PESEL).
R.2.5 W banerze zapisano nagłówek h1: "Malowanie pokoi i biur”, w bloku lewym h2: "Menu", w bloku środkowym przynajmniej jeden z h2: "Barwy i ich pochodne" lub "Zapotrzebowanie na farbę" oraz w stopce h3: "MALARZ" i paragraf
R.2.8 W bloku środkowym mieszamy.html umieszczono tabelę 3x3, zastosowano znaczniki <table>, <tr>, <td>, opcjonalnie <th>
R.2.9 Zdefiniowano komórki nagłówkowe, z czego pierwsze dwie są połączone, zastosowano znaczniki <th> oraz atrybut colspan=2
ok. 3 min
Polecenie z arkusza
Zawartość bloku środkowego podstrony mieszamy.html: nagłówek drugiego stopnia o treści: „Barwy i ich pochodne”, tabela o trzech kolumnach i trzech wierszach, której treść jest zgodna z obrazem 2. Pierwszy wiersz zawiera komórki nagłówkowe, z czego komórka pierwsza i druga są połączone.
Pierwszy wiersz: komórka nagłówkowa „Składowe” połączona z drugą - colspan="2" - i „Wynik”. Dwa kolejne wiersze to zwykłe komórki <td>: żółty + czerwony = pomarańczowy, czerwony + niebieski = fioletowy (R.2.8, R.2.9).
Krok 20: Strona cena.html: pole liczbowe i przycisk
Kryteria: , ,
R.2.10 W bloku środkowym cena.html umieszczono pole edycyjne i przycisk, oznaczenie metra kwadratowego zapisano z indeksem górnym
R.3.3 Pole edycyjne jest typu numerycznego
R.3.4 Dla przycisku zdefiniowano obsługę zdarzenia kliknięcia (atrybut onClick lub słuchacz zdarzenia click, lub właściwość onclick obiektu DOM)
ok. 3 min
Polecenie z arkusza
Zawartość bloku środkowego podstrony cena.html – obraz 3: Nagłówek drugiego stopnia o treści: „Zapotrzebowanie na farbę”. Pole edycyjne typu numerycznego poprzedzone napisem „Powierzchnia malowania (m2):”. Oznaczenie metra kwadratowego zapisane z indeksem górnym. Przycisk „Policz”, po jego wybraniu uruchamia się skrypt.
Zapisz mieszamy.html jako cena.html i podmień zawartość bloku środkowego:
napis przed polem w <label for="area">; „m²” to m<sup>2</sup> - indeks górny (R.2.10),
<input type="number"> - pole numeryczne: przeglądarka przyjmie tylko liczbę i doda strzałki (R.3.3),
przycisk z onclick="countCans()" - kliknięcie wywoła funkcję JavaScript, którą zaraz napiszesz (R.3.4),
pusty akapit <p id="result"> - tu skrypt wpisze wynik.
Na razie kliknięcie kończy się błędem w konsoli przeglądarki - funkcji jeszcze nie ma.
Kroki 21-28 · po tym etapie masz 31 z 36 kryteriów (pkt)
Krok 21: Plik styl_1.css: krój czcionki
Kryteria:
R.4.1 Ustawiono domyślne formatowanie wszystkich selektorów (*): krój czcionki Cambria
ok. 1 min
Polecenie z arkusza
Ustawione domyślne wartości dla wszystkich selektorów stylu CSS: krój czcionki Cambria.
Utwórz styl_1.css; selektor * (R.4.1).
styl_1.cssCSSnowy plik
* {font-family: Cambria;}
Podgląd strony po tym kroku (mieszamy.html)
Krok 22: Baner i stopka
Kryteria: , , ,
R.4.2 Ustawiono kolor tła #829EB9 dla banera i stopki, #B3C6D9 dla bloku lewego i prawego, #E0E9F1 dla bloku środkowego
R.4.3 Ustawiono biały kolor czcionki dla banera i stopki
R.4.6 Ustawiono marginesy wewnętrzne (padding) 10px dla banera i stopki, wewnętrzny górny 100px dla bloków lewego, środkowego i prawego oraz dla tabeli margin:auto;
R.4.7 Ustawiono wyrównanie tekstu do środka dla bloków banera, stopki, środkowego
ok. 1 min
Polecenie z arkusza
Wspólne dla banera i stopki: kolor tła: #829EB9, biały kolor czcionki, tekst wyśrodkowany, marginesy wewnętrzne: 10 px.
R.4.2 Ustawiono kolor tła #829EB9 dla banera i stopki, #B3C6D9 dla bloku lewego i prawego, #E0E9F1 dla bloku środkowego
R.4.4 Ustawiono szerokość 25% dla bloku lewego i prawego, 50% dla środkowego (width lub grid- template-columns lub flex), 80% dla selektora table i 100% dla selektora img
R.4.5 Ustawiono wysokość 400px dla bloków lewego, środkowego i prawego
R.4.6 Ustawiono marginesy wewnętrzne (padding) 10px dla banera i stopki, wewnętrzny górny 100px dla bloków lewego, środkowego i prawego oraz dla tabeli margin:auto;
ok. 1 min
Polecenie z arkusza
Wspólne dla bloków lewego i prawego: kolor tła: #B3C6D9, wysokość 400 px, szerokość: 25%, margines wewnętrzny górny: 100 px.
padding-top - tylko górny margines wewnętrzny. Wysokość bloku na stronie to 400 px treści plus 100 px marginesu.
R.4.2 Ustawiono kolor tła #829EB9 dla banera i stopki, #B3C6D9 dla bloku lewego i prawego, #E0E9F1 dla bloku środkowego
R.4.4 Ustawiono szerokość 25% dla bloku lewego i prawego, 50% dla środkowego (width lub grid- template-columns lub flex), 80% dla selektora table i 100% dla selektora img
R.4.5 Ustawiono wysokość 400px dla bloków lewego, środkowego i prawego
R.4.6 Ustawiono marginesy wewnętrzne (padding) 10px dla banera i stopki, wewnętrzny górny 100px dla bloków lewego, środkowego i prawego oraz dla tabeli margin:auto;
R.4.7 Ustawiono wyrównanie tekstu do środka dla bloków banera, stopki, środkowego
ok. 1 min
Polecenie z arkusza
Dla bloku środkowego: kolor tła: #E0E9F1, wysokość 400 px, szerokość: 50%, tekst wyśrodkowany, margines wewnętrzny górny: 100 px.
25% + 50% + 25% = 100% szerokości - bez poziomych marginesów, żeby bloki zmieściły się obok siebie.
R.4.4 Ustawiono szerokość 25% dla bloku lewego i prawego, 50% dla środkowego (width lub grid- template-columns lub flex), 80% dla selektora table i 100% dla selektora img
R.4.6 Ustawiono marginesy wewnętrzne (padding) 10px dla banera i stopki, wewnętrzny górny 100px dla bloków lewego, środkowego i prawego oraz dla tabeli margin:auto;
R.4.8 Ustawiono obramowanie dla tabeli i selektora td: 1px solid DimGray, obramowanie połączone border-collapse: collapse; (nie jest wymagane dla th)
ok. 2 min
Polecenie z arkusza
Dla selektora tabeli: obramowanie linią ciągłą o szerokości 1 px i kolorze DimGray, szerokość 80%, marginesy zewnętrzne automatycznie wyliczane przez przeglądarkę, obramowanie połączone w jedną linię.
margin: auto - „marginesy wyliczane przez przeglądarkę”: przy ustalonej szerokości (80%) przeglądarka dzieli wolne miejsce po równo na lewo i prawo, więc tabela staje na środku. border-collapse: collapse łączy ramki komórek w jedną linię.
R.4.8 Ustawiono obramowanie dla tabeli i selektora td: 1px solid DimGray, obramowanie połączone border-collapse: collapse; (nie jest wymagane dla th)
R.4.9 Gdy kursor myszy znajdzie się jedynie na komórce tabeli jej kolor tła zamienia się na SteelBlue a kolor czcionki na biały (td:hover)
ok. 2 min
Polecenie z arkusza
Dla selektora komórki tabeli i komórki nagłówkowej: obramowanie linią ciągłą o szerokości 1 px i kolorze DimGray, obramowanie połączone w jedną linię. Gdy kursor myszy znajdzie się na komórce tabeli jej kolor tła zamienia się na SteelBlue a kolor czcionki na biały.
td, th - ramki komórek. td:hover zmienia wygląd tylko zwykłej komórki pod kursorem; komórki nagłówkowe zostają bez zmian (klucz R.4.9: „jedynie na komórce tabeli”). Najedź na komórkę w podglądzie.
R.4.4 Ustawiono szerokość 25% dla bloku lewego i prawego, 50% dla środkowego (width lub grid- template-columns lub flex), 80% dla selektora table i 100% dla selektora img
R.4.10 Ustawiono dla obrazu zaokrąglenie rogów 20px (border-radius)
ok. 1 min
Polecenie z arkusza
Dla selektora obrazu: szerokość 100%, zaokrąglenie rogów 20 px.
Obraz wypełnia szerokość bloku prawego - jest wtedy wyższy niż blok i może zachodzić na stopkę, co klucz wprost dopuszcza (R.3.1).
R.3.1 Układ bloków po uruchomieniu przynajmniej jednej strony w przeglądarce jest zgodny z obrazem 2 w arkuszu (prawidłowo zastosowano właściwości CSS układające bloki na stronie, np. float i clear albo display flex albo grid). Dopuszcza się zachodzenie obrazu z bloku prawego na stopkę.
ok. 2 min
Polecenie z arkusza
Podział zrealizowany za pomocą znaczników sekcji tak, aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z obrazem 2.
section { float: left; } - trzy bloki obok siebie; footer { clear: both; } - stopka pod nimi (R.3.1).
Kroki 29-32 · po tym etapie masz 36 z 36 kryteriów (pkt)
Krok 29: Funkcja countCans wywoływana przyciskiem
Kryteria:
R.5.1 Skrypt napisano w języku JavaScript, zawiera on przynajmniej jedną instrukcję języka zgodną ze składnią
ok. 2 min
Polecenie z arkusza
Skrypt wykonywany po stronie przeglądarki, na podstronie cena.html ma za zadanie: Pobrać z pola edycyjnego wielkość powierzchni do pomalowania.
Skrypt JavaScript piszesz w <script> na końcu <body> strony cena.html - wykonuje się w przeglądarce, bez serwera. Zdefiniuj funkcję o tej samej nazwie, co w onclick przycisku: countCans (policz puszki). Na razie jest pusta - kliknięcie „Policz” nie powoduje już błędu, ale niczego nie robi.
R.5.2 Skrypt pobiera z pola edycyjnego wielkość powierzchni do pomalowania
ok. 1 min
Polecenie z arkusza
Pobrać z pola edycyjnego wielkość powierzchni do pomalowania.
document.getElementById("area") znajduje pole po identyfikatorze (tabela 1 arkusza), a .value to jego zawartość. Zapisz ją w zmiennej area (powierzchnia) zadeklarowanej słowem let (R.5.2).
R.5.3 Do obliczenia liczby puszek wykonywane jest dzielenie pola powierzchni przez 4
R.5.4 Obliczona liczba puszek jest liczbą całkowitą, zawsze zaokrągloną do góry (dowolną metodą)
ok. 2 min
Polecenie z arkusza
Na podstawie pobranej wartości wyliczyć minimalną liczbę puszek wystarczającą do pomalowania tej powierzchni, przy założeniu, że: Jedna puszka zawiera 1 litr farby. 1 litr farby wystarcza do pomalowania powierzchni 4 m2. Obliczona liczba puszek jest liczbą naturalną, zaokrągloną w górę, np. do pomalowania powierzchni 6 m2, potrzeba 2 puszek, a nie 1,5.
Puszka (1 litr) maluje 4 m², więc liczba puszek to powierzchnia podzielona przez 4 (R.5.3). Puszek nie kupuje się w ułamkach: 6 / 4 = 1,5 to w praktyce 2 puszki. Math.ceil zaokrągla zawsze w górę (R.5.4). Pole ma wartość tekstową („10”), ale operator / w JavaScripcie sam zamienia ją na liczbę.
Typowe błędy
Math.round(6 / 4) daje 2, ale Math.round(5 / 4) daje 1 - za mało farby. Zaokrąglenie „do najbliższej” nie jest zaokrągleniem w górę; parseInt i Math.floor obcinają w dół.
R.5.5 Pod przyciskiem wyświetlony jest wynik działania skryptu, w postaci tekstu: „Liczba potrzebnych puszek: <wynik>”, gdzie <wynik> został obliczony skryptem
ok. 2 min
Polecenie z arkusza
Obliczony wynik jest wyświetlony pod przyciskiem i poprzedzony napisem o treści: „Liczba potrzebnych puszek: ” – obraz 3.
Wynik wpisujesz do pustego akapitu result przez innerHTML (tabela 1). Wpisz w podglądzie 10 i kliknij „Policz”: „Liczba potrzebnych puszek: 3” - jak na obrazie 3 (10 / 4 = 2,5, w górę 3) (R.5.5).
Krok 33 · po tym etapie masz 36 z 36 kryteriów (pkt)
Krok 33: Słuchacz zdarzenia, sprawdzenie wartości i textContent
ok. 4 min
Polecenie z arkusza
Przycisk „Policz”, po jego wybraniu uruchamia się skrypt.
Trzy poprawki z prawdziwych projektów:
addEventListener("click", countCans) zamiast atrybutu onclick w HTML: zachowanie przycisku jest w skrypcie, a HTML opisuje tylko wygląd. Przycisk dostaje identyfikator count.
Sprawdzenie wartości: puste pole albo liczba ujemna dawały „Liczba potrzebnych puszek: 0”. Number() zamienia tekst na liczbę (puste pole to 0), a warunek wypisuje prośbę o poprawną powierzchnię.
textContent zamiast innerHTML - wpisujesz zwykły tekst, więc nic nie zostanie zinterpretowane jako HTML.
Stara linia z innerHTML zostaje w komentarzu. Na egzaminie wystarczy wersja wcześniejsza - klucz przyjmuje onclick (R.3.4) i tego nie sprawdza.
Krok 34 · po tym etapie masz 36 z 36 kryteriów (pkt)
Krok 34: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
Po zakończeniu pracy utwórz w folderze z numerem zdającego plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowana była poprawność działania witryny. Nagraj płytę z rezultatami pracy. W folderze z numerem zdającego powinny się znajdować pliki: cena.html, import.png, kw1.jpg, kw2.jpg, kw3.jpg, kw4.jpg, kwerendy.txt, mieszamy.html, obraz.png, przeglądarka.txt, styl_1.css, ewentualnie inne przygotowane pliki.
W przeglądarka.txt wpisujesz nazwę przeglądarki, w której sprawdzasz strony. Strony w tym arkuszu nie wymagają serwera - otwierają się wprost z dysku.
Sprawdź listę plików z arkusza, 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.