Przejdź do głównej treści
INF.03-08-24.01-SGStyczeń 2024 · 36 kroków · ok. 68 min · 37 kryteriów z klucza

Rozwiązanie krok po kroku: Salon fryzjerski w XAMPP (Wersja podstawowa)

Rozwiązanie buduje witrynę salonu fryzjerskiego: baza fryzjer i cztery zapytania - warunek „albo” (OR), liczba i maksimum w grupie (COUNT, MAX), złączenie tabel (JOIN) i nowa kolumna (ALTER TABLE ... ADD), potem dwa obrazy przeskalowane do zadanej szerokości, dwie strony (index.html i fryzura.html) z trzema blokami po lewej i dwoma po prawej, style w styl8.css i skrypt JavaScript na stronie promocji: po wybraniu długości włosów i kliknięciu przycisku pokazuje cenę strzyżenia o 10 zł niższą niż w cenniku.

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ą. Strona główna powstaje w całości, a fryzura.html powstaje z jej kopii - różni się tylko drugim blokiem lewym. Skrypt jest najpierw pisany najprościej (onclick, osobny if dla każdego pola), a na końcu zostaje przerobiony na wersję z prawdziwych projektów.

To jest wersja podstawowa. W zakładce „Nowoczesny kod (grid, JS w pliku)” jest drugi sposób rozwiązania tego samego arkusza: siatka CSS z kolumnami 72% i 28% zamiast float i clear (bloki w kodzie w naturalnej kolejności), kolory w zmiennych CSS i skrypt w osobnym pliku z addEventListener i cennikiem w jednym obiekcie - obie wersje są zgodne z kluczem.

Baza i grafiki pochodzą z prawdziwego archiwum materialy8 (załącznik do arkusza, hasło w treści zadania). Zapytania i zrzuty są policzone na MariaDB 10.4 - tej samej, która jest w XAMPP. Skrypt jest sprawdzony dla każdej długości włosów i dla przypadku, gdy nic nie zaznaczono; w podglądzie strony fryzura.html można wybierać pola i klikać „Odkryj promocję”.

Jak liczą się punkty. Klucz ma 37 kryteriów (R.1.1 - R.5.6), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 28 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.

  1. Etap 1: Baza danych

    Kroki 1-7 · po tym etapie masz 6 z 37 kryteriów (pkt)

    Krok 1: Baza danych fryzjer

    Kryteria:

    R.1.1 Wykonano import tabel do bazy danych fryzjer czynność udokumentowano plikiem o nazwie import w formacie PNG

    ok. 2 min
    Polecenie z arkusza

    Utwórz bazę danych o nazwie fryzjer.

    Rozpakuj materialy8.7z z pulpitu (hasło XSaloon[Fryz]) do folderu z numerem zdającego: egzamin2.sql, obraz1.jpg i obraz2.jpg. W phpMyAdmin: Nowa, nazwa fryzjer.

  2. Krok 2: Import tabel z pliku egzamin2.sql

    Kryteria:

    R.1.1 Wykonano import tabel do bazy danych fryzjer czynność udokumentowano plikiem o nazwie import w formacie PNG

    ok. 2 min
    Polecenie z arkusza

    Do bazy fryzjer zaimportuj tabele z pliku egzamin2.sql z rozpakowanego archiwum.

    Import → egzamin2.sql. W zadaniu potrzebne są dwie tabele z obrazu 1: uslugi (z rodzajem: 1 - kosmetyczne, 2 - fryzjerskie, 3 - inne, oraz kluczem obcym kadra_id) i kadra (pracownicy).

  3. Krok 3: Zrzut ekranu import.png

    Kryteria:

    R.1.1 Wykonano import tabel do bazy danych fryzjer 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 pod nazwą import. Nie kadruj zrzutu. Zrzut powinien obejmować cały ekran monitora, z widocznym paskiem zadań. Na zrzucie powinny być widoczne elementy wskazujące na poprawnie wykonany import tabel.

    Print Screen i zapis jako import.png. Zrzuty zapytań mają być w JPEG (kw1.jpg - kw4.jpg) i zawierać treść zapytania.

  4. Krok 4: Zapytanie 1: fryzjerzy i styliści

    Kryteria: ,

    R.1.2 Zapisano plik kwerendy.txt zawierający co najmniej jedno zapytanie SQL, wynikające z treści zadania

    R.1.3 Wykonano zapytanie 1 wybierające jedynie pola imie, nazwisko, stanowisko z tabeli kadra dla pracowników na stanowisku fryzjer albo stylista. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT imie, nazwisko, stanowisko FROM kadra WHERE stanowisko = "fryzjer" OR stanowisko = "stylista"; oraz wynik działania udokumentowano zrzutem, na którym widoczne są jedynie dane: Aleksandra Wilk stylista, Katarzyna Nowak fryzjer

    ok. 2 min
    Polecenie z arkusza

    Zapytanie 1: wybierające jedynie pola imie, nazwisko, stanowisko z tabeli kadra dla pracowników na stanowisku fryzjer albo stylista.

    • SELECT imie, nazwisko, stanowisko FROM kadra - trzy kolumny,
    • WHERE stanowisko = 'fryzjer' OR stanowisko = 'stylista' - „albo” to OR: wystarczy, że spełniony jest jeden z warunków (krócej: stanowisko IN ('fryzjer', 'stylista')).

    Wynik: dwie osoby - Aleksandra Wilk (stylista) i Katarzyna Nowak (fryzjer), jak w kluczu. Zapytanie do kwerendy.txt, zrzut kw1.jpg.

    Typowe błędy

    AND zamiast OR szuka osoby, która jest jednocześnie fryzjerem i stylistą - wynik jest pusty.

    kwerendy.txt Tekst nowy plik
    -- Zapytanie 1
    SELECT imie, nazwisko, stanowisko FROM kadra WHERE stanowisko = 'fryzjer' OR stanowisko = 'stylista';
    Podgląd strony po tym kroku
    Podgląd strony po kroku 4
  5. Krok 5: Zapytanie 2: liczba i najwyższa cena usług fryzjerskich

    Kryteria:

    R.1.4 Wykonano zapytanie 2 jedynie dla usług fryzjerskich zliczające liczbę rekordów w tabeli uslugi oraz wskazujące najwyższą cenę usługi. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT COUNT(*), MAX(cena) FROM uslugi WHERE rodzaj = 2; oraz wynik działania udokumentowano zrzutem, na którym widoczne są liczby 3 i 50

    ok. 2 min
    Polecenie z arkusza

    Zapytanie 2: liczące liczbę usług fryzjerskich oraz wskazujące najwyższą cenę usług fryzjerskich.

    • COUNT(*) - liczba wierszy, MAX(cena) - największa cena,
    • WHERE rodzaj = 2 - usługi fryzjerskie mają rodzaj 2.

    Wynik: 3 i 50 - trzy usługi fryzjerskie, najdroższa za 50 zł. Zrzut kw2.jpg.

    kwerendy.txt Tekst zmienione: 3 linie
    -- Zapytanie 1
    SELECT imie, nazwisko, stanowisko FROM kadra WHERE stanowisko = 'fryzjer' OR stanowisko = 'stylista';
    
    -- Zapytanie 2
    SELECT COUNT(*), MAX(cena) FROM uslugi WHERE rodzaj = 2;
    Podgląd strony po tym kroku
    Podgląd strony po kroku 5
  6. Krok 6: Zapytanie 3: usługi z imieniem pracownika

    Kryteria:

    R.1.5 Wykonano zapytanie 3 wybierające nazwy usług oraz przypisane do nich imiona osób z tabeli kadra dla rodzaju usług: fryzjerskie albo inne. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT nazwa, imie FROM uslugi JOIN kadra ON kadra_id = kadra.id WHERE rodzaj > 1; (możliwe też INNER JOIN lub porównanie kluczy po WHERE, poprawny też warunek: rodzaj = 2 OR rodzaj = 3) oraz wynik działania udokumentowano zrzutem, na którym widoczne jest dokładnie 5 rekordów, dane: Ustalenie diety, Anna; Farbowanie, Katarzyna; Strzyzenie, Katarzyna; Czesanie, Katarzyna; Masaz twarzy, Piotr

    ok. 3 min
    Polecenie z arkusza

    Zapytanie 3: wybierające nazwy usług oraz przypisane do nich imiona osób z tabeli kadra dla rodzaju usług: fryzjerskie albo inne, należy posłużyć się relacją.

    • FROM uslugi JOIN kadra ON uslugi.kadra_id = kadra.id - relacja: usługa dostaje wiersz pracownika, na którego wskazuje jej kadra_id,
    • WHERE rodzaj = 2 OR rodzaj = 3 - fryzjerskie albo inne (działa też rodzaj > 1).

    Wynik: 5 usług - Ustalenie diety (Anna), Farbowanie, Strzyżenie i Czesanie (Katarzyna), Masaż twarzy (Piotr). Zrzut kw3.jpg.

    Typowe błędy

    ON kadra_id = id bez nazwy tabeli przy id daje błąd „kolumna niejednoznaczna” - obie tabele mają kolumnę id.

    kwerendy.txt Tekst zmienione: 3 linie
    -- Zapytanie 1
    SELECT imie, nazwisko, stanowisko FROM kadra WHERE stanowisko = 'fryzjer' OR stanowisko = 'stylista';
    
    -- Zapytanie 2
    SELECT COUNT(*), MAX(cena) FROM uslugi WHERE rodzaj = 2;
    
    -- Zapytanie 3
    SELECT nazwa, imie FROM uslugi JOIN kadra ON uslugi.kadra_id = kadra.id WHERE rodzaj = 2 OR rodzaj = 3;
    Podgląd strony po tym kroku
    Podgląd strony po kroku 6
  7. Krok 7: Zapytanie 4: kolumna opinia

    Kryteria:

    R.1.6 Wykonano zapytanie 4 dodające kolumnę do tabeli uslugi o nazwie opinia typu napisowego . W pliku z kwerendami lub na zrzucie istnieje zapis np.: ALTER TABLE uslugi ADD opinia TEXT; (lub ADD COLUMN, dowolny typ napisowy) oraz wynik działania udokumentowano zrzutem, na którym widoczny jest komunikat o poprawnym wykonaniu zapytania lub tabela z dodaną kolumną

    ok. 2 min
    Polecenie z arkusza

    Zapytanie 4: dodające kolumnę do tabeli uslugi o nazwie opinia typu napisowego.

    ALTER TABLE zmienia budowę tabeli, a ADD opinia TEXT dopisuje kolumnę na końcu. Typ napisowy to TEXT albo VARCHAR(...). Istniejące wiersze dostają w nowej kolumnie NULL. Zrzut kw4.jpg - komunikat albo struktura tabeli z kolumną opinia.

    kwerendy.txt Tekst zmienione: 3 linie
    -- Zapytanie 1
    SELECT imie, nazwisko, stanowisko FROM kadra WHERE stanowisko = 'fryzjer' OR stanowisko = 'stylista';
    
    -- Zapytanie 2
    SELECT COUNT(*), MAX(cena) FROM uslugi WHERE rodzaj = 2;
    
    -- Zapytanie 3
    SELECT nazwa, imie FROM uslugi JOIN kadra ON uslugi.kadra_id = kadra.id WHERE rodzaj = 2 OR rodzaj = 3;
    
    -- Zapytanie 4
    ALTER TABLE uslugi ADD opinia TEXT;
    Podgląd strony po tym kroku
    Podgląd strony po kroku 7
  8. Etap 2: Grafika i strony HTML

    Kroki 8-23 · po tym etapie masz 20 z 37 kryteriów (pkt)

    Krok 8: Obrazy: szerokość 250 i 650 px

    Kryteria:

    R.2.1 Przynajmniej jedną grafikę przeskalowano z zachowaniem proporcji. Wymiary dla obraz1.jpg szerokość 250 px i odpowiadająca temu wysokość 313 px (± 5 px) lub obraz2.jpg szerokość 650 px i odpowiadająca temu wysokość 283 px (± 5 px)

    ok. 3 min
    Polecenie z arkusza

    Plik obraz1.jpg, wypakowany z archiwum, należy przeskalować z zachowaniem proporcji tak, aby jego szerokość wynosiła dokładnie 250 px. Plik obraz2.jpg, wypakowany z archiwum, należy przeskalować z zachowaniem proporcji tak, aby jego szerokość wynosiła dokładnie 650 px.

    W GIMP-ie Obraz → Skaluj obraz z zamkniętym łańcuchem: obraz1.jpg - szerokość 250, wysokość wychodzi 312 px; obraz2.jpg - szerokość 650, wysokość 283 px, jak w kluczu (±5 px).

    Podgląd strony po tym kroku
    Podgląd strony po kroku 8
  9. Krok 9: Plik index.html w HTML5

    Kryteria:

    R.2.2 Witrynę internetową zapisano w plikach index.html i fryzura.html oraz na stronie zastosowano deklarację języka HTML5 <!DOCTYPE html>, zadeklarowano język witryny polski np. <html lang = "pl"> oraz zapisano jawnie właściwy standard kodowania polskich znaków

    ok. 1 min
    Polecenie z arkusza

    Cechy witryny: Składa się ze stron o nazwach index.html oraz fryzura.html. Obie strony różnią się jedynie drugim blokiem lewym. Strony index.html i fryzura.html zapisane w języku HTML 5.

    Zbuduj w całości index.html, a fryzura.html powstanie z jej kopii z innym drugim blokiem lewym.

    index.html HTML nowy plik
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  10. Krok 10: Język strony

    Kryteria:

    R.2.2 Witrynę internetową zapisano w plikach index.html i fryzura.html oraz na stronie zastosowano deklarację języka HTML5 <!DOCTYPE html>, zadeklarowano język witryny polski np. <html lang = "pl"> oraz zapisano jawnie właściwy standard kodowania polskich znaków

    ok. 1 min
    Polecenie z arkusza

    Ustawiony język zawartości stron na polski.

    Atrybut lang="pl".

    index.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  11. Krok 11: Kodowanie polskich znaków

    Kryteria:

    R.2.2 Witrynę internetową zapisano w plikach index.html i fryzura.html oraz na stronie zastosowano deklarację języka HTML5 <!DOCTYPE html>, zadeklarowano język witryny polski np. <html lang = "pl"> oraz zapisano jawnie właściwy standard kodowania polskich znaków

    ok. 1 min
    Polecenie z arkusza

    Jawnie zastosowany właściwy standard kodowania polskich znaków.

    <meta charset="UTF-8">.

    index.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  12. Krok 12: Tytuł strony

    Kryteria:

    R.2.3 Stronie nadano tytuł: "Fryzjerstwo"

    ok. 1 min
    Polecenie z arkusza

    Tytuł strony widoczny na karcie przeglądarki: „Fryzjerstwo”.

    <title> w <head>.

    index.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  13. Krok 13: Podpięcie arkusza stylów

    Kryteria:

    R.3.6 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl8.css , formatowanie CSS 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 styl8.css prawidłowo połączony z kodem strony.

    Nazwa z cyfrą: styl8.css.

    Typowe błędy

    styl.css bez ósemki odcina wszystkie style (R.3.6).

    index.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  14. Krok 14: Bloki strony

    Kryteria:

    R.2.4 Układ strony zdefiniowano dzieląc ją na bloki: trzy lewe, dwa prawe i stopkę. Zastosowano znaczniki sekcji

    ok. 2 min
    Polecenie z arkusza

    Podział strony na bloki: trzy bloki po lewej stronie i dwa po prawej, poniżej stopka. 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.

    Pięć <section> i <footer>. Kolejność w kodzie jest naprzemienna: lewy 1, prawy 1, lewy 2, prawy 2, lewy 3 - tak jak bloki leżą na stronie, czytane od góry. To ułatwi ułożenie ich w dwóch kolumnach mimo różnych wysokości (krok układu w CSS).

    index.html HTML zmienione: 12 linii
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
        </section>
        <section id="right1">
        </section>
        <section id="left2">
        </section>
        <section id="right2">
        </section>
        <section id="left3">
        </section>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  15. Krok 15: Pierwszy blok lewy: nagłówek-odnośnik

    Kryteria: ,

    R.2.5 W bloku pierwszym lewym zapisano nagłówek h1: "SALON FRYZJERSKI", w pierwszym prawym h4: "Ceny strzyżenia" oraz w trzecim lewym h4: "Kontakt: 444 555 666" oraz przynajmniej jeden paragraf

    R.3.3 Po wybraniu odnośnika "SALON FRYZJERSKI" otwiera się strona index.html

    ok. 1 min
    Polecenie z arkusza

    Zawartość pierwszego bloku po lewej stronie: Nagłówek pierwszego stopnia o treści „SALON FRYZJERSKI”, który jest odnośnikiem do strony index.html.

    Odnośnik stoi wewnątrz nagłówka: <h1><a href="index.html">...</a></h1> - nagłówek zostaje nagłówkiem, a jego tekst da się kliknąć (R.3.3).

    index.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
        </section>
        <section id="left2">
        </section>
        <section id="right2">
        </section>
        <section id="left3">
        </section>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  16. Krok 16: Pierwszy blok prawy: cennik

    Kryteria: , , ,

    R.2.5 W bloku pierwszym lewym zapisano nagłówek h1: "SALON FRYZJERSKI", w pierwszym prawym h4: "Ceny strzyżenia" oraz w trzecim lewym h4: "Kontakt: 444 555 666" oraz przynajmniej jeden paragraf

    R.2.6 Na stronie umieszczono tabelę o 5 wierszach i 2 kolumnach, zastosowano znaczniki <table>, <tr>, <td>

    R.2.7 Pierwszy wiersz tabeli zawiera komórki nagłówkowe, zastosowano znaczniki <tr>, <th>

    R.3.2 Po wybraniu odnośnika "Ceny strzyżenia" otwiera się strona fryzura.html

    ok. 3 min
    Polecenie z arkusza

    Zawartość pierwszego bloku po prawej stronie: Nagłówek czwartego stopnia o treści „Ceny strzyżenia”, który jest odnośnikiem do strony fryzura.html. Tabela o pięciu wierszach i dwóch kolumnach, w pierwszym wierszu znajdują się komórki nagłówkowe. Tabela jest zgodna z Tabelą 1 arkusza egzaminacyjnego.

    <h4> z odnośnikiem do strony promocji (R.3.2) i tabela z Tabeli 1: wiersz nagłówkowy <th> i cztery wiersze cen.

    index.html HTML zmienione: 23 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
        </section>
        <section id="right2">
        </section>
        <section id="left3">
        </section>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  17. Krok 17: Drugi blok prawy: zdjęcie fryzjerki

    Kryteria:

    R.2.8 Umieszczono co najmniej jedną grafikę: obraz1.jpg z tekstem alternatywnym "Fryzjerka" w bloku drugim prawym lub obraz2.jpg z tekstem alternatywnym "Strzyżenie" w bloku drugim lewym

    ok. 1 min
    Polecenie z arkusza

    Zawartość drugiego bloku po prawej stronie: Obraz o nazwie obraz1.jpg z tekstem alternatywnym „Fryzjerka”.

    Obraz z atrybutem alt.

    index.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
        </section>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  18. Krok 18: Trzeci blok lewy

    Kryteria:

    R.2.5 W bloku pierwszym lewym zapisano nagłówek h1: "SALON FRYZJERSKI", w pierwszym prawym h4: "Ceny strzyżenia" oraz w trzecim lewym h4: "Kontakt: 444 555 666" oraz przynajmniej jeden paragraf

    ok. 1 min
    Polecenie z arkusza

    Zawartość trzeciego bloku po lewej stronie: Akapit (paragraf) o treści: „Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!”. Nagłówek czwartego stopnia o treści „Kontakt: 444 555 666”.

    Akapit i <h4>.

    index.html HTML zmienione: 2 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  19. Krok 19: Stopka

    Kryteria:

    R.2.5 W bloku pierwszym lewym zapisano nagłówek h1: "SALON FRYZJERSKI", w pierwszym prawym h4: "Ceny strzyżenia" oraz w trzecim lewym h4: "Kontakt: 444 555 666" oraz przynajmniej jeden paragraf

    ok. 1 min
    Polecenie z arkusza

    Zawartość stopki: Akapit (paragraf) o treści „Autor: ”, dalej wstawiony numer zdającego.

    Na egzaminie po „Autor:” wpisujesz swój numer zdającego (PESEL), tu - autor rozwiązania.

    index.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  20. Krok 20: Drugi blok lewy strony głównej

    Kryteria:

    R.2.8 Umieszczono co najmniej jedną grafikę: obraz1.jpg z tekstem alternatywnym "Fryzjerka" w bloku drugim prawym lub obraz2.jpg z tekstem alternatywnym "Strzyżenie" w bloku drugim lewym

    ok. 1 min
    Polecenie z arkusza

    Zawartość drugiego bloku po lewej stronie dla strony index.html: Obraz o nazwie obraz2.jpg z tekstem alternatywnym „Strzyżenie”.

    Obraz z atrybutem alt.

    index.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <img src="obraz2.jpg" alt="Strzyżenie">
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (index.html)
  21. Krok 21: Strona fryzura.html z kopii

    ok. 2 min
    Polecenie z arkusza

    Zawartość drugiego bloku po lewej stronie dla strony fryzura.html (Obraz 3): Nagłówek drugiego stopnia o treści „PROMOCJA!”.

    Zapisz jako fryzura.html z kopii strony głównej - wymieniasz tylko zawartość #left2.

    fryzura.html HTML nowy plik
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <h2>PROMOCJA!</h2>
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (fryzura.html)
  22. Krok 22: Cztery pola radio

    Kryteria: ,

    R.2.9 Na stronie fryzura.html umieszczono cztery kontrolki radio z opisami: Krótkie, Średnie, Półdługie, Długie oraz jeden przycisk "Odkryj promocję"

    R.3.5 W jednym momencie można wybrać tylko jeden przycisk radio

    ok. 2 min
    Polecenie z arkusza

    Cztery pola radio, jedno pod drugim, z podpisami: Krótkie, Średnie, Półdługie, Długie. W danym momencie tylko jedno pole radio może być zaznaczone.

    To, że zaznaczyć można tylko jedno pole, robi wspólna nazwa: wszystkie cztery mają name="length" - przeglądarka traktuje je jako jedną grupę (R.3.5). Identyfikatory muszą być różne - po nich skrypt sprawdzi, które pole jest zaznaczone.

    Typowe błędy

    Różne name w każdym polu pozwalają zaznaczyć kilka naraz - R.3.5 nie jest spełnione.

    fryzura.html HTML zmienione: 4 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <h2>PROMOCJA!</h2>
            <input type="radio" name="length" id="short"><label for="short">Krótkie</label><br>
            <input type="radio" name="length" id="medium"><label for="medium">Średnie</label><br>
            <input type="radio" name="length" id="halflong"><label for="halflong">Półdługie</label><br>
            <input type="radio" name="length" id="long"><label for="long">Długie</label><br>
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (fryzura.html)
  23. Krok 23: Przycisk i akapit na wynik

    Kryteria: ,

    R.2.9 Na stronie fryzura.html umieszczono cztery kontrolki radio z opisami: Krótkie, Średnie, Półdługie, Długie oraz jeden przycisk "Odkryj promocję"

    R.3.4 Wybranie przycisku powoduje uruchomienie funkcji skryptu (obsługa zdarzenia zdefiniowana np. inline w znaczniku jako atrybut onClick lub w skrypcie JS np.: element.addEventListener("click", funkcja); lub element.onClick = …)

    ok. 1 min
    Polecenie z arkusza

    Poniżej przycisk o treści „Odkryj promocję”, którego wciśnięcie powoduje wykonanie skryptu.

    onclick="discover()" wywoła funkcję skryptu, a pusty <p id="result"> pod przyciskiem przyjmie wynik.

    fryzura.html HTML zmienione: 2 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <h2>PROMOCJA!</h2>
            <input type="radio" name="length" id="short"><label for="short">Krótkie</label><br>
            <input type="radio" name="length" id="medium"><label for="medium">Średnie</label><br>
            <input type="radio" name="length" id="halflong"><label for="halflong">Półdługie</label><br>
            <input type="radio" name="length" id="long"><label for="long">Długie</label><br>
            <button onclick="discover()">Odkryj promocję</button>
            <p id="result"></p>
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (fryzura.html)
  24. Etap 3: Styl CSS

    Kroki 24-30 · po tym etapie masz 31 z 37 kryteriów (pkt)

    Krok 24: Plik styl8.css: czcionka i wyśrodkowanie

    Kryteria:

    R.4.1 Ustawiono domyślne formatowanie wszystkich selektorów (*): krój czcionki Garamond, wyrównanie tekstu do środka

    ok. 1 min
    Polecenie z arkusza

    Ustawione domyślne wartości dla wszystkich selektorów stylu CSS: krój czcionki Garamond, wyrównanie tekstu do środka.

    Selektor uniwersalny *.

    styl8.css CSS nowy plik
    * {
        font-family: Garamond;
        text-align: center;
    }
    Podgląd strony po tym kroku (index.html)
  25. Krok 25: Bloki lewe

    Kryteria: , , ,

    R.4.2 Ustawiono kolor tła #795548 dla pierwszego bloku lewego i stopki oraz #BCAAA4 dla obu bloków prawych

    R.4.4 Ustawiono szerokość 72% dla trzech bloków lewych i 28% dla obu prawych (width lub grid- template-columns lub flex) i 80% dla selektora table

    R.4.5 Ustawiono wysokość 400px dla bloku drugiego lewego oraz obu prawych

    R.4.8 Ustawiono rozmiar czcionki 170% dla pierwszego lewego bloku oraz 200% dla selektora h4

    ok. 2 min
    Polecenie z arkusza

    Wspólne dla wszystkich bloków lewych: szerokość 72%. Dla pierwszego lewego bloku: kolor tła #795548, rozmiar czcionki 170%. Dla drugiego lewego bloku: wysokość 400 px.

    Wspólna szerokość w jednej regule, reszta osobno.

    styl8.css CSS zmienione: 10 linii
    * {
        font-family: Garamond;
        text-align: center;
    }
    #left1, #left2, #left3 {
        width: 72%;
    }
    #left1 {
        background-color: #795548;
        font-size: 170%;
    }
    #left2 {
        height: 400px;
    }
    Podgląd strony po tym kroku (index.html)
  26. Krok 26: Bloki prawe

    Kryteria: , , ,

    R.4.2 Ustawiono kolor tła #795548 dla pierwszego bloku lewego i stopki oraz #BCAAA4 dla obu bloków prawych

    R.4.3 Ustawiono biały kolor czcionki dla stopki i selektora a oraz #795548 dla obu bloków prawych

    R.4.4 Ustawiono szerokość 72% dla trzech bloków lewych i 28% dla obu prawych (width lub grid- template-columns lub flex) i 80% dla selektora table

    R.4.5 Ustawiono wysokość 400px dla bloku drugiego lewego oraz obu prawych

    ok. 1 min
    Polecenie z arkusza

    Wspólne dla obu prawych bloków: kolor tła #BCAAA4, kolor czcionki #795548, wysokość 400 px, szerokość 28%.

    72% + 28% = cała szerokość.

    styl8.css CSS zmienione: 6 linii
    * {
        font-family: Garamond;
        text-align: center;
    }
    #left1, #left2, #left3 {
        width: 72%;
    }
    #left1 {
        background-color: #795548;
        font-size: 170%;
    }
    #left2 {
        height: 400px;
    }
    #right1, #right2 {
        background-color: #BCAAA4;
        color: #795548;
        height: 400px;
        width: 28%;
    }
    Podgląd strony po tym kroku (index.html)
  27. Krok 27: Stopka

    Kryteria: , ,

    R.4.2 Ustawiono kolor tła #795548 dla pierwszego bloku lewego i stopki oraz #BCAAA4 dla obu bloków prawych

    R.4.3 Ustawiono biały kolor czcionki dla stopki i selektora a oraz #795548 dla obu bloków prawych

    R.4.6 Ustawiono marginesy wewnętrzne (padding) 20px dla stopki i selektora img oraz marginesy zewnętrzne (margin) 7px dla pola radio i margin: auto dla tabeli (dla pól radio wszystkie rozwiązania są prawidłowe oprócz zastosowania tego samego id dla wszystkich pól)

    ok. 1 min
    Polecenie z arkusza

    Dla stopki: kolor tła #795548, biały kolor czcionki, marginesy wewnętrzne 20 px.

    Selektor footer.

    styl8.css CSS zmienione: 5 linii
    * {
        font-family: Garamond;
        text-align: center;
    }
    #left1, #left2, #left3 {
        width: 72%;
    }
    #left1 {
        background-color: #795548;
        font-size: 170%;
    }
    #left2 {
        height: 400px;
    }
    #right1, #right2 {
        background-color: #BCAAA4;
        color: #795548;
        height: 400px;
        width: 28%;
    }
    footer {
        background-color: #795548;
        color: white;
        padding: 20px;
    }
    Podgląd strony po tym kroku (index.html)
  28. Krok 28: Tabela i wiersz po wskazaniu

    Kryteria: , , ,

    R.4.4 Ustawiono szerokość 72% dla trzech bloków lewych i 28% dla obu prawych (width lub grid- template-columns lub flex) i 80% dla selektora table

    R.4.6 Ustawiono marginesy wewnętrzne (padding) 20px dla stopki i selektora img oraz marginesy zewnętrzne (margin) 7px dla pola radio i margin: auto dla tabeli (dla pól radio wszystkie rozwiązania są prawidłowe oprócz zastosowania tego samego id dla wszystkich pól)

    R.4.7 Ustawiono dla tabeli obramowanie o cechach: 1px solid #795548

    R.4.10 W momencie, gdy kursor znajduje się na wierszu tabeli, jego tło zmienia się na Sienna, a kolor czcionki na biały

    ok. 2 min
    Polecenie z arkusza

    Dla selektora tabeli: marginesy zewnętrzne wyliczane automatycznie przez przeglądarkę, szerokość 80%, obramowanie linią ciągłą o szerokości 1 px i kolorze #795548. W momencie, gdy kursor znajduje się na wierszu tabeli, jego tło zmienia się na Sienna, a kolor czcionki na biały.

    tr:hover - pseudoklasa dla wiersza, więc podświetla się cały wiersz, nie pojedyncza komórka. Najedź w podglądzie na wiersz cennika.

    styl8.css CSS zmienione: 9 linii
    * {
        font-family: Garamond;
        text-align: center;
    }
    #left1, #left2, #left3 {
        width: 72%;
    }
    #left1 {
        background-color: #795548;
        font-size: 170%;
    }
    #left2 {
        height: 400px;
    }
    #right1, #right2 {
        background-color: #BCAAA4;
        color: #795548;
        height: 400px;
        width: 28%;
    }
    footer {
        background-color: #795548;
        color: white;
        padding: 20px;
    }
    table {
        margin: auto;
        width: 80%;
        border: 1px solid #795548;
    }
    tr:hover {
        background-color: Sienna;
        color: white;
    }
    Podgląd strony po tym kroku (index.html)
  29. Krok 29: Nagłówki, obrazy, odnośniki, pola radio

    Kryteria: , , ,

    R.4.3 Ustawiono biały kolor czcionki dla stopki i selektora a oraz #795548 dla obu bloków prawych

    R.4.6 Ustawiono marginesy wewnętrzne (padding) 20px dla stopki i selektora img oraz marginesy zewnętrzne (margin) 7px dla pola radio i margin: auto dla tabeli (dla pól radio wszystkie rozwiązania są prawidłowe oprócz zastosowania tego samego id dla wszystkich pól)

    R.4.8 Ustawiono rozmiar czcionki 170% dla pierwszego lewego bloku oraz 200% dla selektora h4

    R.4.9 Ustawiono dla obrazu zaokrąglenie rogów 40px (border-radius)

    ok. 2 min
    Polecenie z arkusza

    Dla selektora nagłówka czwartego stopnia: rozmiar czcionki 200%. Dla selektora obrazu: marginesy wewnętrzne 20 px, zaokrąglenie rogów 40 px. Dla selektora odnośnika: biały kolor czcionki. Dla pola radio: marginesy zewnętrzne 7 px.

    • h4, img, a - selektory znaczników, jak wymaga arkusz,
    • border-radius: 40px zaokrągla rogi obrazu,
    • input[type="radio"] - selektor atrybutu: tylko te <input>, które są polami radio, a nie każde pole formularza.
    styl8.css CSS zmienione: 13 linii
    * {
        font-family: Garamond;
        text-align: center;
    }
    #left1, #left2, #left3 {
        width: 72%;
    }
    #left1 {
        background-color: #795548;
        font-size: 170%;
    }
    #left2 {
        height: 400px;
    }
    #right1, #right2 {
        background-color: #BCAAA4;
        color: #795548;
        height: 400px;
        width: 28%;
    }
    footer {
        background-color: #795548;
        color: white;
        padding: 20px;
    }
    table {
        margin: auto;
        width: 80%;
        border: 1px solid #795548;
    }
    tr:hover {
        background-color: Sienna;
        color: white;
    }
    h4 {
        font-size: 200%;
    }
    img {
        padding: 20px;
        border-radius: 40px;
    }
    a {
        color: white;
    }
    input[type="radio"] {
        margin: 7px;
    }
    Podgląd strony po tym kroku (index.html)
  30. Krok 30: Układ: dwie kolumny o różnych wysokościach

    Kryteria:

    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 decydujące o układzie strony, np. float i clear albo display flex albo grid albo position)

    ok. 3 min
    Polecenie z arkusza

    Podział strony na bloki: trzy bloki po lewej stronie i dwa po prawej, poniżej stopka, tak aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z Obrazem 2.

    • bloki lewe: float: left i clear: left - każdy staje pod poprzednim lewym, przy lewej krawędzi,
    • bloki prawe: float: right i clear: right - każdy pod poprzednim prawym, przy prawej krawędzi,
    • stopka clear: both - pod najniższym blokiem z obu kolumn.

    Działa dzięki naprzemiennej kolejności w HTML: element pływający nie może stanąć wyżej niż poprzedni element pływający, więc pierwszy prawy blok musi być w kodzie przed drugim lewym.

    Typowe błędy

    Same float: left dla wszystkich bloków: drugi lewy blok wskoczy obok pierwszego zamiast pod niego.

    styl8.css CSS zmienione: 11 linii
    * {
        font-family: Garamond;
        text-align: center;
    }
    #left1, #left2, #left3 {
        width: 72%;
    }
    #left1 {
        background-color: #795548;
        font-size: 170%;
    }
    #left2 {
        height: 400px;
    }
    #right1, #right2 {
        background-color: #BCAAA4;
        color: #795548;
        height: 400px;
        width: 28%;
    }
    footer {
        background-color: #795548;
        color: white;
        padding: 20px;
    }
    table {
        margin: auto;
        width: 80%;
        border: 1px solid #795548;
    }
    tr:hover {
        background-color: Sienna;
        color: white;
    }
    h4 {
        font-size: 200%;
    }
    img {
        padding: 20px;
        border-radius: 40px;
    }
    a {
        color: white;
    }
    input[type="radio"] {
        margin: 7px;
    }
    #left1, #left2, #left3 {
        float: left;
        clear: left;
    }
    #right1, #right2 {
        float: right;
        clear: right;
    }
    footer {
        clear: both;
    }
    Podgląd strony po tym kroku (index.html)
  31. Etap 4: Skrypt JavaScript

    Kroki 31-34 · po tym etapie masz 37 z 37 kryteriów (pkt)

    Krok 31: Funkcja discover

    Kryteria:

    R.5.1 Skrypt napisano w języku JavaScript i zawiera on co najmniej jedną instrukcję tego języka zapisaną zgodnie ze składnią

    ok. 2 min
    Polecenie z arkusza

    Napisany w języku wykonywanym po stronie przeglądarki. Uruchamia się po wciśnięciu przycisku na stronie fryzura.html.

    Skrypt na końcu <body> strony fryzura.html, funkcja o nazwie z onclick: discover (odkryj).

    fryzura.html HTML zmienione: 4 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <h2>PROMOCJA!</h2>
            <input type="radio" name="length" id="short"><label for="short">Krótkie</label><br>
            <input type="radio" name="length" id="medium"><label for="medium">Średnie</label><br>
            <input type="radio" name="length" id="halflong"><label for="halflong">Półdługie</label><br>
            <input type="radio" name="length" id="long"><label for="long">Długie</label><br>
            <button onclick="discover()">Odkryj promocję</button>
            <p id="result"></p>
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
        <script>
            function discover() {
            }
        </script>
    </body>
    </html>
    Podgląd strony po tym kroku (fryzura.html)
  32. Krok 32: Cena dla krótkich włosów

    Kryteria: ,

    R.5.2 Skrypt wykorzystuje przynajmniej jedną metodę DOM

    R.5.3 Skrypt stosuje własność checked do sprawdzenia stanu przynajmniej jednego pola radio

    ok. 2 min
    Polecenie z arkusza

    Na podstawie wybranego przycisku radio wyświetla promocyjną cenę strzyżenia. Cena promocyjna jest o 10 zł niższa od ceny strzyżenia zawartej w Tabeli 1.

    Właściwość checked pola radio jest true, gdy to pole jest wybrane. Cenę zapisujesz jako 25 - 10 - od razu widać, skąd się wzięła (cena z Tabeli 1 minus 10 zł promocji).

    fryzura.html HTML zmienione: 4 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <h2>PROMOCJA!</h2>
            <input type="radio" name="length" id="short"><label for="short">Krótkie</label><br>
            <input type="radio" name="length" id="medium"><label for="medium">Średnie</label><br>
            <input type="radio" name="length" id="halflong"><label for="halflong">Półdługie</label><br>
            <input type="radio" name="length" id="long"><label for="long">Długie</label><br>
            <button onclick="discover()">Odkryj promocję</button>
            <p id="result"></p>
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
        <script>
            function discover() {
                let price = 0;
                if (document.getElementById("short").checked) {
                    price = 25 - 10;
                }
            }
        </script>
    </body>
    </html>
    Podgląd strony po tym kroku (fryzura.html)
  33. Krok 33: Pozostałe długości

    Kryteria:

    R.5.4 Skrypt wyznacza cenę promocyjną na podstawie zaznaczonego pola: krótkie 15, średnie 20, półdługie 30, długie 40

    ok. 2 min
    Polecenie z arkusza

    Cena promocyjna jest o 10 zł niższa od ceny strzyżenia zawartej w Tabeli 1.

    Zaznaczone jest zawsze najwyżej jedno pole radio, więc spełni się najwyżej jeden z czterech warunków. Ceny: 15, 20, 30 i 40 zł.

    fryzura.html HTML zmienione: 9 linii
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <h2>PROMOCJA!</h2>
            <input type="radio" name="length" id="short"><label for="short">Krótkie</label><br>
            <input type="radio" name="length" id="medium"><label for="medium">Średnie</label><br>
            <input type="radio" name="length" id="halflong"><label for="halflong">Półdługie</label><br>
            <input type="radio" name="length" id="long"><label for="long">Długie</label><br>
            <button onclick="discover()">Odkryj promocję</button>
            <p id="result"></p>
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
        <script>
            function discover() {
                let price = 0;
                if (document.getElementById("short").checked) {
                    price = 25 - 10;
                }
                if (document.getElementById("medium").checked) {
                    price = 30 - 10;
                }
                if (document.getElementById("halflong").checked) {
                    price = 40 - 10;
                }
                if (document.getElementById("long").checked) {
                    price = 50 - 10;
                }
            }
        </script>
    </body>
    </html>
    Podgląd strony po tym kroku (fryzura.html)
  34. Krok 34: Wynik pod przyciskiem

    Kryteria: ,

    R.5.5 Skrypt wyświetla wyznaczony wynik w akapicie pod przyciskiem według wzoru: "cena promocyjna: <wartość>” (gdzie <wartość> wyznaczono w R.5.4)

    R.5.6 Zastosowano znaczące nazewnictwo dla wszystkich zmiennych i funkcji w języku polskim lub angielskim. Nazwy odzwierciedlają cel zastosowania

    ok. 2 min
    Polecenie z arkusza

    Wynik działania wyświetla się w akapicie pod przyciskiem według wzoru: „cena promocyjna: <wartość>”, gdzie <wartość> oznacza obliczoną cenę.

    Wybierz w podglądzie „Średnie” i kliknij „Odkryj promocję” - „cena promocyjna: 20”, jak na obrazie 3. Nazwy zmiennych i funkcji są po angielsku i mówią, co przechowują (R.5.6).

    fryzura.html HTML zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <h2>PROMOCJA!</h2>
            <input type="radio" name="length" id="short"><label for="short">Krótkie</label><br>
            <input type="radio" name="length" id="medium"><label for="medium">Średnie</label><br>
            <input type="radio" name="length" id="halflong"><label for="halflong">Półdługie</label><br>
            <input type="radio" name="length" id="long"><label for="long">Długie</label><br>
            <button onclick="discover()">Odkryj promocję</button>
            <p id="result"></p>
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
        <script>
            function discover() {
                let price = 0;
                if (document.getElementById("short").checked) {
                    price = 25 - 10;
                }
                if (document.getElementById("medium").checked) {
                    price = 30 - 10;
                }
                if (document.getElementById("halflong").checked) {
                    price = 40 - 10;
                }
                if (document.getElementById("long").checked) {
                    price = 50 - 10;
                }
                document.getElementById("result").innerHTML = "cena promocyjna: " + price;
            }
        </script>
    </body>
    </html>
    Podgląd strony po tym kroku (fryzura.html)
  35. Etap 5: Dobre praktyki (poza kluczem)

    Krok 35 · po tym etapie masz 37 z 37 kryteriów (pkt)

    Krok 35: Ceny w HTML, jedno zapytanie o zaznaczone pole

    ok. 5 min
    Polecenie z arkusza

    Na podstawie wybranego przycisku radio wyświetla promocyjną cenę strzyżenia.

    Wersja z egzaminu ma dwa słabe punkty, oba sprawdzone na atrapie strony: bez wyboru pokazuje „cena promocyjna: 0”, a ceny są wpisane w skrypt drugi raz (pierwszy raz są w tabeli).

    • każde pole radio niesie cenę z cennika w data-price,
    • document.querySelector('input[name="length"]:checked') od razu znajduje zaznaczone pole grupy - zamiast czterech if; gdy nic nie zaznaczono, zwraca null i skrypt prosi o wybór,
    • rabat to stała DISCOUNT - zmiana promocji na 15 zł to jedna liczba,
    • addEventListener zamiast onclick, textContent zamiast innerHTML.

    Dla każdej długości wynik jest taki sam jak wcześniej. Stary kod zostaje w komentarzu. Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.

    fryzura.html HTML zmienione: 33 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Fryzjerstwo</title>
        <link rel="stylesheet" href="styl8.css">
    </head>
    <body>
        <section id="left1">
            <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
        </section>
        <section id="right1">
            <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
            <table>
                <tr>
                    <th>Długość włosów</th>
                    <th>Cena</th>
                </tr>
                <tr>
                    <td>Krótkie</td>
                    <td>25</td>
                </tr>
                <tr>
                    <td>Średnie</td>
                    <td>30</td>
                </tr>
                <tr>
                    <td>Półdługie</td>
                    <td>40</td>
                </tr>
                <tr>
                    <td>Długie</td>
                    <td>50</td>
                </tr>
            </table>
        </section>
        <section id="left2">
            <h2>PROMOCJA!</h2>
            <input type="radio" name="length" id="short" data-price="25"><label for="short">Krótkie</label><br>
            <input type="radio" name="length" id="medium" data-price="30"><label for="medium">Średnie</label><br>
            <input type="radio" name="length" id="halflong" data-price="40"><label for="halflong">Półdługie</label><br>
            <input type="radio" name="length" id="long" data-price="50"><label for="long">Długie</label><br>
            <button id="discover">Odkryj promocję</button>
            <p id="result"></p>
        </section>
        <section id="right2">
            <img src="obraz1.jpg" alt="Fryzjerka">
        </section>
        <section id="left3">
            <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
            <h4>Kontakt: 444 555 666</h4>
        </section>
        <footer>
            <p>Autor: Bartosz Bryniarski</p>
        </footer>
        <script>
            // wersja z egzaminu - cztery osobne if z cenami w skrypcie
            // function discover() {
            //     let price = 0;
            //     if (document.getElementById("short").checked) {
            //         price = 25 - 10;
            //     }
            //     if (document.getElementById("medium").checked) {
            //         price = 30 - 10;
            //     }
            //     if (document.getElementById("halflong").checked) {
            //         price = 40 - 10;
            //     }
            //     if (document.getElementById("long").checked) {
            //         price = 50 - 10;
            //     }
            //     document.getElementById("result").innerHTML = "cena promocyjna: " + price;
            // }
    
            const DISCOUNT = 10;
    
            function discover() {
                const selected = document.querySelector('input[name="length"]:checked');
                const result = document.getElementById("result");
                if (selected === null) {
                    result.textContent = "Wybierz długość włosów.";
                    return;
                }
                result.textContent = "cena promocyjna: " + (Number(selected.dataset.price) - DISCOUNT);
            }
    
            document.getElementById("discover").addEventListener("click", discover);
        </script>
    </body>
    </html>
    Podgląd strony po tym kroku (fryzura.html)
  36. Etap 6: Oddanie pracy

    Krok 36 · po tym etapie masz 37 z 37 kryteriów (pkt)

    Krok 36: 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 przeglądarka.txt wpisujesz nazwę przeglądarki.

    W folderze: fryzura.html, import.png, index.html, kw1.jpg - kw4.jpg, kwerendy.txt, obraz1.jpg, obraz2.jpg, przeglądarka.txt, styl8.css. Nagraj płytę, sprawdź jej odczyt i opisz ją numerem zdającego.

    przeglądarka.txt Tekst nowy plik
    Google Chrome

    Podgląd strony bez zmian - taki jak po kroku 35.

Podgląd

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: . 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.