INF.04-02-25.01-SGStyczeń 2025 · 24 kroki · ok. 70 min · 35 kryteriów z klucza
Rozwiązanie krok po kroku: Obsługa urządzeń domowych (Java + Android)
Rozwiązujemy arkusz z urządzeniami domowymi w wersji Java + Android Studio: w konsoli klasa bazowa urządzenia z metodą wyświetlającą komunikat i dwie klasy potomne - pralka, która przyjmuje tylko programy 1-12, i odkurzacz, który włącza się i wyłącza tylko wtedy, gdy zmienia stan; w aplikacji mobilnej ekran „Urządzenia Domowe” z obrazami pralki i odkurzacza z archiwum pliki4.zip, polem numeru prania i przyciskiem, który przełącza odkurzacz. Do tego nagłówek metody według wzoru z arkusza, zrzuty i dokument egzamin.
Kroki idą zdanie po zdaniu za treścią arkusza - każdy zaczyna się poleceniem z arkusza, a kod pokazuje dokładnie te linie, które je spełniają. Najpierw piszemy najprostszą wersję, której wymaga klucz, a w etapie „Dobre praktyki” poprawiamy to, czego klucz nie sprawdza.
Co widać w podglądzie. Wyniki programu konsolowego pochodzą z prawdziwego uruchomienia kodu z danego kroku (JDK 21) dla danych z obrazów 1 i 2 arkusza. Ekran telefonu to symulacja w przeglądarce zbudowana z pliku XML danego kroku, z obrazami z pliki4.zip; jej zachowanie odpowiada kodowi Javy z kroku - wpisz numer prania, kliknij „Zatwierdź” i „Włącz”. Każdy stan aplikacji zbudowaliśmy też w Android Studio (Gradle) i sprawdziliśmy na emulatorze Pixel 8.
Arkusz pozwala też na C++, C# albo Pythona w konsoli i na .NET MAUI w części mobilnej - ten wariant to jedna z możliwych dróg.
Jak liczą się punkty. Klucz ma 35 kryteriów (R.1.1 - R.4.8), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 27 punktów - można stracić 8 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.
Krok 1 · po tym etapie masz 0 z 35 kryteriów (pkt)
Krok 1: Folder zdającego, podfoldery i obrazy z pliki4.zip
ok. 2 min
Polecenie z arkusza
Utwórz folder i nazwij go numerem zdającego. W folderze utwórz podfoldery: konsolowa, mobilna, dokumentacja. Do wykonania zadania należy wykorzystać obrazy zawarte w archiwum pliki4.zip zabezpieczonym hasłem: Int3rn3tOfThingS
Na pulpicie zakładamy folder o nazwie z numerem PESEL, a w nim konsolowa, mobilna i dokumentacja - w tym arkuszu folder konsoli nazywa się konsolowa, nie konsola. Archiwum pliki4.zip rozpakowujemy hasłem z arkusza (wielkość liter ma znaczenie): pralka.jpg i odkurzacz.jpg, oba 300 × 300 pikseli.
Etap 2: Aplikacja konsolowa
Kroki 2-9 · po tym etapie masz 18 z 35 kryteriów (pkt)
Krok 2: Projekt konsola w Javie
ok. 3 min
Polecenie z arkusza
Napisz program implementujący klasę i dwie klasy potomne, który obsługuje działanie urządzeń domowych. Program wykonywany w konsoli. Zastosowany obiektowy język programowania zgodny z zainstalowanym na stanowisku egzaminacyjnym: C++ lub C#, lub Java, lub Python.
Wybieramy Javę - tę samą, w której napiszemy aplikację mobilną. W IntelliJ IDEA: New Project → Java, nazwa konsola. Każda z trzech klas trafi do osobnego pliku - w Javie klasa publiczna leży w pliku o swojej nazwie.
R.2.2 Klasa bazowa implementuje metodę o zasięgu public, która wyświetla treść komunikatu. Komunikat jest argumentem metody. Metoda nie zwraca wartości
R.1.3 Użyte polskie lub angielskie, znaczące nazewnictwo klas, metod, obiektów
ok. 2 min
Polecenie z arkusza
Program zawiera klasę bazową reprezentującą urządzenie oraz dwie klasy potomne reprezentujące pralkę oraz odkurzacz. Wymaganie do klasy bazowej: implementuje jedną ogólnodostępną metodę, która wyświetla treść komunikatu. Komunikat jest argumentem metody. Metoda nie zwraca wartości.
Klasa bazowa Device (urządzenie) ma jedną metodę public (ogólnodostępną), void (nic nie zwraca), z parametrem String message - komunikat do wypisania (R.2.2, R.1.3). Klasy potomne odziedziczą ją i będą wypisywać przez nią swoje komunikaty.
Krok 4: Klasa WashingMachine: prywatny numer programu i setProgram
Kryteria: , , ,
R.2.3 Klasa pralki definiuje pole numeru programu typu całkowitego o zakresie private, inicjowane wartością 0 oraz klasa odkurzacza definiuje pole stanu odkurzacza typu logicznego o zasięgu private, inicjowane wartością fałsz. (W języku Python, dla pola typu private, dwa podkreślniki przed nazwą)
R.2.4 Klasa implementuje metodę ustawienia numeru programu o zakresie public. Argumentem metody jest numer programu. Gdy numer programu jest liczbą z przedziału od 1 do 12 metoda ustawia na tą wartość pole numeru programu. W przeciwnym wypadku pole jest ustawione na wartość 0. Metoda zwraca wartość pola numeru programu
R.1.4 Użyte polskie lub angielskie, znaczące nazewnictwo pól i zmiennych. Wyjątkami od reguły są zmienne: bufor, tmp, iteratory pętli itp. Kryterium nie jest spełnione tylko wtedy, gdy nazwy zmiennych nic nie znaczą, np.: x, fun, foo, tab, tablica
R.1.5 Zastosowane typy zmiennych pasujące do problemu (np. typ boolowski jako stan, typ liczb całkowitych jako program pralki, typ tekstowy dla komunikatu ) W przypadku języka Python typ wynika z przypisanych danych
ok. 4 min
Polecenie z arkusza
Wymagania do klasy reprezentującej pralkę: definiuje pole przechowujące numer programu prania, który jest liczbą całkowitą. Pole inicjowane jest wartością 0. Instancje klasy nie mają dostępu do pola, pole nie jest widoczne w klasach dziedziczących po klasie pralki. Implementuje ogólnodostępną metodę do ustawienia numeru programu prania. Argumentem metody jest numer programu. Gdy jest on liczbą z przedziału od 1 do 12, metoda ustawia pole określające numer programu na tą wartość. W przeciwnym wypadku pole jest ustawione na wartość 0. Metoda zwraca wartość pola numeru programu.
extends Device - pralka jest urządzeniem i dziedziczy showMessage (R.2.1).
Pole private int programNumber = 0: niewidoczne z zewnątrz i w klasach potomnych - to właśnie znaczy private (R.2.3, R.1.5).
setProgram sprawdza przedział warunkiem number >= 1 && number <= 12 - oba końce należą do przedziału. W przeciwnym razie ustawia 0, a na końcu zwraca wartość pola - typ zwracany int (R.2.4).
Program główny pozna po wyniku, czy numer został przyjęty: 0 oznacza niepoprawny.
Typowe błędy
protected int programNumber - pole jest wtedy widoczne w klasach potomnych pralki, a arkusz tego zabrania (R.2.3).
R.2.3 Klasa pralki definiuje pole numeru programu typu całkowitego o zakresie private, inicjowane wartością 0 oraz klasa odkurzacza definiuje pole stanu odkurzacza typu logicznego o zasięgu private, inicjowane wartością fałsz. (W języku Python, dla pola typu private, dwa podkreślniki przed nazwą)
R.2.5 Klasa odkurzacza implementuje przynajmniej jedną metodę o zakresie public: on()lub off(). Metoda nie zwraca wartości i jest bezargumentowa. Ustawiany jest odpowiedni stan odkurzacza
R.2.6 Metody on() lub off() wywołują metodę do wyświetlenia komunikatu lub wyświetlają komunikat o włączeniu lub wyłączeniu odkurzacza, tylko wtedy, gdy jego stan uległ zmianie
ok. 3 min
Polecenie z arkusza
Wymagania do klasy reprezentującej odkurzacz: definiuje pole reprezentujące stan odkurzacza, które jest typu logicznego, inicjowane wartością false. Pole dostępne tylko w tej klasie, niedostępne w klasach potomnych. Implementuje ogólnodostępną bezargumentową metodę on(), która włącza odkurzacz. Metoda nie zwraca wartości. Włączenie polega na ustawieniu pola stanu na wartość true oraz wywołaniu metody klasy bazowej z komunikatem „Odkurzacz włączono”. Zmiana stanu i komunikat mogą być wykonane tylko i wyłącznie, gdy odkurzacz jest wyłączony.
Pole private boolean isOn = false - false to wyłączony (R.2.3). Metoda on(): public void, bez parametrów (R.2.5).
Najważniejszy jest warunek if (!isOn): stan zmieniamy i komunikat wypisujemy tylko wtedy, gdy odkurzacz był wyłączony (R.2.6). Drugie wywołanie on() na włączonym odkurzaczu nic nie zrobi. showMessage to metoda odziedziczona z Device - wywołujemy ją wprost.
Typowe błędy
on() bez warunku - przy trzech wywołaniach komunikat „Odkurzacz włączono” pojawia się trzy razy (R.2.10).
konsola/src/VacuumCleaner.javaJavanowy plik
publicclassVacuumCleanerextends Device {privateboolean isOn = false;publicvoidon() {if (!isOn) { isOn = true; showMessage("Odkurzacz włączono"); } }}
Krok 6: Metoda off(): tylko gdy odkurzacz jest włączony
Kryteria: , , ,
R.2.5 Klasa odkurzacza implementuje przynajmniej jedną metodę o zakresie public: on()lub off(). Metoda nie zwraca wartości i jest bezargumentowa. Ustawiany jest odpowiedni stan odkurzacza
R.2.6 Metody on() lub off() wywołują metodę do wyświetlenia komunikatu lub wyświetlają komunikat o włączeniu lub wyłączeniu odkurzacza, tylko wtedy, gdy jego stan uległ zmianie
R.1.1 Kod źródłowy zapisany w sposób czytelny: instrukcje w osobnych liniach, stosowane spacje pomiędzy operatorami, konsekwentnie stosowana wybrana konwencja dla nawiasów klamrowych
R.1.2 Kod zapisany z wcięciami dla zagnieżdżeń bloków
ok. 2 min
Polecenie z arkusza
Implementuje ogólnodostępną bezargumentową metodę off(), która wyłącza odkurzacz. Metoda nie zwraca wartości. Wyłączenie polega na ustawieniu pola stanu na wartość false oraz wywołaniu metody klasy bazowej z komunikatem „Odkurzacz wyłączono”. Zmiana stanu i komunikat mogą być wykonane tylko i wyłącznie, gdy odkurzacz jest włączony.
Lustrzane odbicie on(): warunek if (isOn) - wyłączamy i wypisujemy komunikat tylko wtedy, gdy odkurzacz pracuje (R.2.5, R.2.6).
konsola/src/VacuumCleaner.javaJavazmienione: 7 linii
publicclassVacuumCleanerextends Device {privateboolean isOn = false;publicvoidon() {if (!isOn) { isOn = true; showMessage("Odkurzacz włączono"); } }publicvoidoff() {if (isOn) { isOn = false; showMessage("Odkurzacz wyłączono"); } }}
Krok 7: Program główny: dwa obiekty i test pralki
Kryteria: , ,
R.2.1 Program składa się z programu głównego oraz trzech klas, jednej bazowej i dwóch dziedziczących po niej. W programie głównym są powoływane obiekty obu klas potomnych oraz wywołano na ich rzecz co najmniej jedną metodę
R.2.8 Program pyta o numer prania i wczytuje liczbę. Dla liczb 1..12 wyświetlony jest komunikat o ustawieniu programu, dla pozostałych o niepoprawnym numerze programu
R.1.7 Program podejmuje komunikację z użytkownikiem, wyświetlane komunikaty są znaczące
ok. 3 min
Polecenie z arkusza
Wymagania do programu głównego: należy zainicjować dwa obiekty typu pralka i odkurzacz. Na obiekcie typu pralka należy przetestować ustawienie programu prania z wartościami poprawnymi i niepoprawnymi. Powinny być wyświetlone odpowiednie komunikaty, patrz obrazy 1 i 2.
Tworzymy po jednym obiekcie każdej klasy potomnej (R.2.1). Numer prania wczytujemy z klawiatury i przekazujemy do setProgram. Wynik różny od 0 oznacza, że program został przyjęty (R.2.8). Wszystkie komunikaty wypisujemy odziedziczoną metodą showMessage - tak jak na obrazach 1 i 2 (R.1.7).
Podgląd to dwa prawdziwe uruchomienia z danymi z obrazów: 11 (poprawny) i 44 (niepoprawny).
konsola/src/Main.javaJavazmienione: 13 linii
import java.util.Scanner;publicclassMain {publicstaticvoidmain(String[] args) { WashingMachine washingMachine = new WashingMachine(); VacuumCleaner vacuumCleaner = new VacuumCleaner(); Scanner scanner = new Scanner(System.in); washingMachine.showMessage("Podaj numer prania 1..12");int number = scanner.nextInt();if (washingMachine.setProgram(number) != 0) { washingMachine.showMessage("Program został ustawiony"); } else { washingMachine.showMessage("Podano niepoprawny numer programu"); } }}
Wynik programu po tym kroku
> java Main
Podaj numer prania 1..12
11
Program został ustawiony
> java Main
Podaj numer prania 1..12
44
Podano niepoprawny numer programu
Krok 8: Program główny: trzy razy on(), wyładowanie, off()
Kryteria: ,
R.2.9 Program wyświetla komunikat o wyładowaniu odkurzacza
R.2.10 Niezależnie od następujących po sobie kilku wywołaniach metody on() tylko raz wyświetlany jest komunikat o włączeniu odkurzacza lub w przypadku metody off() o wyłączeniu odkurzacza
ok. 2 min
Polecenie z arkusza
Na obiekcie typu odkurzacz należy: wywołać metodę on() trzykrotnie; mimo trzykrotnego wywołania tylko raz wyświetla się komunikat – patrz obraz 1. Wywołać metodę klasy bazowej z treścią: „Odkurzacz wyładował się”. Wywołać metodę off().
Trzy wywołania on() - komunikat pojawia się raz, bo za drugim i trzecim razem odkurzacz jest już włączony (R.2.10). Komunikat o wyładowaniu wypisujemy metodą klasy bazowej wywołaną na obiekcie odkurzacza (R.2.9), na końcu off(). Wynik jest identyczny z obrazem 1 i obrazem 2.
konsola/src/Main.javaJavazmienione: 6 linii
import java.util.Scanner;publicclassMain {publicstaticvoidmain(String[] args) { WashingMachine washingMachine = new WashingMachine(); VacuumCleaner vacuumCleaner = new VacuumCleaner(); Scanner scanner = new Scanner(System.in); washingMachine.showMessage("Podaj numer prania 1..12");int number = scanner.nextInt();if (washingMachine.setProgram(number) != 0) { washingMachine.showMessage("Program został ustawiony"); } else { washingMachine.showMessage("Podano niepoprawny numer programu"); } vacuumCleaner.on(); vacuumCleaner.on(); vacuumCleaner.on(); vacuumCleaner.showMessage("Odkurzacz wyładował się"); vacuumCleaner.off(); }}
Wynik programu po tym kroku
> java Main
Podaj numer prania 1..12
11
Program został ustawiony
Odkurzacz włączono
Odkurzacz wyładował się
Odkurzacz wyłączono
> java Main
Podaj numer prania 1..12
44
Podano niepoprawny numer programu
Odkurzacz włączono
Odkurzacz wyładował się
Odkurzacz wyłączono
Krok 9: Folder konsolowa: archiwum, źródła i zrzuty
Kryteria: , ,
R.1.6 Podjęta próba uruchomienia kodu, co udokumentowano zrzutem ekranowym przedstawiającym uruchomiony program lub jego kompilację
R.2.7 Program uruchamia się w konsoli, co jest udokumentowane zrzutem ekranu
R.4.6 Zapisany przynajmniej jeden zrzut ekranu z uruchomienia lub kompilacji aplikacji konsolowej, na zrzucie widoczne jest środowisko, w którym powstała aplikacja
ok. 3 min
Polecenie z arkusza
Kod aplikacji przygotuj do nagrania na płytę. W podfolderze konsolowa powinno znaleźć się archiwum całego projektu o nazwie konsola.zip, skopiowany z projektu plik z kodem źródłowym programu oraz plik wykonywalny, jeżeli istnieje. Aplikacja konsolowa – dowolna liczba zrzutów nazwanych konsola1, konsola2, ...
Dwa zrzuty całego ekranu z IntelliJ (widoczny pasek zadań): numer poprawny i niepoprawny - konsola1, konsola2 w folderze dokumentacja (R.1.6, R.2.7, R.4.6). Folder projektu pakujemy do konsola.zip (po dopisaniu komentarza z części III), obok kopiujemy cztery pliki .java.
Kroki 10-19 · po tym etapie masz 29 z 35 kryteriów (pkt)
Krok 10: Nowy projekt Domowe i obrazy w drawable
ok. 3 min
Polecenie z arkusza
Za pomocą środowiska programistycznego dostępnego na stanowisku egzaminacyjnym wykonaj aplikację mobilną do obsługi urządzeń domowych.
New Project → szablon Empty Views Activity (z widokami w XML). Nazwa Domowe, pakiet com.example.domowe, język Java. Pliki pralka.jpg i odkurzacz.jpg kopiujemy do app/src/main/res/drawable - w XML będą dostępne jako @drawable/pralka i @drawable/odkurzacz (nazwy zasobów: małe litery, bez polskich znaków i myślników).
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Krok 11: Pionowy LinearLayout w kolorze LightBlue
Kryteria:
R.3.1 Zastosowany język znaczników XML/XAML lub inny do opisu interfejsu użytkownika oraz zastosowany układ rozkładów liniowych wertykalnych i horyzontalnych (LinearLayout lub StackLayout, lub VerticalStackLayout i HorizontalStackLayout, lub inne o tej idei ) tak, aby układ ten był zgodny z obrazem 3 arkusza egzaminacyjnego (oceniane są tylko znaczniki rozkładu )
ok. 2 min
Polecenie z arkusza
Interfejs użytkownika zapisany za pomocą języka znaczników wspieranego w danym środowisku (np. XAML, XML). Zastosowane rozkłady liniowe (Linear / Stack lub inny o tej idei), aby można było uzyskać widok taki jak na obrazach 3 i 4. Kolory tła: dla głównego rozkładu lub strony: LightBlue (#ADD8E6).
W widoku Code zamieniamy ConstraintLayout na pionowy LinearLayout (R.3.1) z tłem #ADD8E6 (R.3.3) i zostawiamy android:id="@+id/main" (używa go kod szablonu).
Plan układu z obrazów 3 i 4: pod dwoma napisami dwa poziome wiersze - po lewej obraz, po prawej pionowa kolumna z nazwą urządzenia, polem albo przyciskiem i napisami stanu.
Domowe/app/src/main/res/layout/activity_main.xmlXMLzmienione: 4 linie
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Krok 12: Napisy „Urządzenia Domowe” i „Autor:” na środku
Kryteria: , ,
R.3.2 Umieszczone: 2 etykiety „Urządzenia Domowe” i "autor: " z numerem zdającego, obrazy pralka.jpg i odkurzacz.jpg , napisy "Pralka", "Odkurzacz", pole edycyjne z podpowiedzią (placeholder lub hint ) i możliwością wpisania jedynie liczb, przyciski "Zatwierdź" i "Włącz" oraz pozostałe 3 napisy z opisem stanu urządzeń
R.3.4 Zastosowana czcionka powiększona dla napisów "Urządzenia Domowe", "Pralka", "Odkurzacz", wyśrodkowane pierwsze dwa napisy oraz nadana wysokość 150 dla przynajmniej jednego obrazu
R.3.5 Ustawione marginesy: 5 dla pierwszych dwóch napisów, 10 dla przycisków oraz dla obrazów lewy, prawy i dolny 20, górny 0
ok. 3 min
Polecenie z arkusza
Napis (etykieta) o treści: „Urządzenia Domowe”. Napis o treści: „Autor: ”, dalej wstawiony numer zdającego. Marginesy zewnętrzne: dla pierwszych dwóch napisów 5. Tekst zapisany powiększoną czcionką dla napisów „Urządzenia Domowe”, „Pralka”, „Odkurzacz”. Pierwsze dwa napisy na stronie są wyśrodkowane.
Oba napisy zajmują całą szerokość, a gravity="center" ustawia tekst na środku (R.3.4). Margines zewnętrzny layout_margin="5dp" (R.3.5). Tytuł ma powiększoną czcionkę 30sp (R.3.4).
Na egzaminie po „Autor: ” wpisujemy numer PESEL - tu stoi Bartosz Bryniarski (R.3.2).
Domowe/app/src/main/res/layout/activity_main.xmlXMLzmienione: 15 linii
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Krok 13: Wiersz pralki: obraz o wysokości 150
Kryteria: , , ,
R.3.1 Zastosowany język znaczników XML/XAML lub inny do opisu interfejsu użytkownika oraz zastosowany układ rozkładów liniowych wertykalnych i horyzontalnych (LinearLayout lub StackLayout, lub VerticalStackLayout i HorizontalStackLayout, lub inne o tej idei ) tak, aby układ ten był zgodny z obrazem 3 arkusza egzaminacyjnego (oceniane są tylko znaczniki rozkładu )
R.3.2 Umieszczone: 2 etykiety „Urządzenia Domowe” i "autor: " z numerem zdającego, obrazy pralka.jpg i odkurzacz.jpg , napisy "Pralka", "Odkurzacz", pole edycyjne z podpowiedzią (placeholder lub hint ) i możliwością wpisania jedynie liczb, przyciski "Zatwierdź" i "Włącz" oraz pozostałe 3 napisy z opisem stanu urządzeń
R.3.4 Zastosowana czcionka powiększona dla napisów "Urządzenia Domowe", "Pralka", "Odkurzacz", wyśrodkowane pierwsze dwa napisy oraz nadana wysokość 150 dla przynajmniej jednego obrazu
R.3.5 Ustawione marginesy: 5 dla pierwszych dwóch napisów, 10 dla przycisków oraz dla obrazów lewy, prawy i dolny 20, górny 0
ok. 3 min
Polecenie z arkusza
Rozkład dotyczący pralki: obraz pralka.jpg. Marginesy zewnętrzne: dla obrazów marginesy lewy, prawy i dolny 20, górny 0. Obrazy mają wysokość 150.
Poziomy LinearLayout to wiersz pralki (R.3.1). Obraz ma wysokość 150dp (R.3.4) i marginesy 20dp z lewej, prawej i od dołu, 0 od góry (R.3.5).
Szerokość wrap_content z adjustViewBounds="true" - kontrolka przyjmuje szerokość wynikającą z proporcji obrazu: obraz kwadratowy o wysokości 150dp ma szerokość 150dp. Bez adjustViewBounds szerokość wzięłaby się z rozmiaru pliku i obraz zostałby wyśrodkowany w szerszej ramce.
Domowe/app/src/main/res/layout/activity_main.xmlXMLzmienione: 18 linii
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Krok 14: Kolumna pralki: napis i pole tylko na liczby
Kryteria: , ,
R.3.2 Umieszczone: 2 etykiety „Urządzenia Domowe” i "autor: " z numerem zdającego, obrazy pralka.jpg i odkurzacz.jpg , napisy "Pralka", "Odkurzacz", pole edycyjne z podpowiedzią (placeholder lub hint ) i możliwością wpisania jedynie liczb, przyciski "Zatwierdź" i "Włącz" oraz pozostałe 3 napisy z opisem stanu urządzeń
R.3.3 Zastosowane kolory tła: dla głównego rozkładu lub strony: LightBlue (#ADD8E6), dla pola edycyjnego: SkyBlue (#87CEEB), dla przycisków: RoyalBlue (#4169E1) oraz kolor czcionki i kolor podpowiedzi Navy (#000080) dla pola edycyjnego (w MAUI nazwy kolorów obowiązkowo wielką literą )
R.3.4 Zastosowana czcionka powiększona dla napisów "Urządzenia Domowe", "Pralka", "Odkurzacz", wyśrodkowane pierwsze dwa napisy oraz nadana wysokość 150 dla przynajmniej jednego obrazu
ok. 3 min
Polecenie z arkusza
Napis o treści: „Pralka”. Pole edycyjne z podpowiedzią o treści: „Podaj nr prania 1..12” umożliwiające wpisywanie jedynie liczb. Kolory tła: dla pola edycyjnego: SkyBlue (#87CEEB). Kolor czcionki wpisanego tekstu oraz czcionki podpowiedzi dla pola edycyjnego: Navy (#000080).
Obok obrazu zagnieżdżona pionowa kolumna; layout_width="0dp" z layout_weight="1" - zajmie całą szerokość, jaka zostanie obok obrazu. W niej:
„Pralka” powiększoną czcionką 24sp (R.3.4),
pole z podpowiedzią i android:inputType="number" - klawiatura pokaże same cyfry, liter nie da się wpisać (R.3.2),
tło pola #87CEEB, kolor tekstu textColor i kolor podpowiedzi textColorHint - oba #000080 (R.3.3). To dwa osobne atrybuty: samo textColor podpowiedzi nie zmienia.
Tło ustawione kolorem zastępuje domyślne podkreślenie pola - zostaje jednolity błękitny prostokąt, jak na obrazie 4.
Typowe błędy
Brak textColorHint - podpowiedź zostaje szara, choć arkusz wymaga koloru Navy (R.3.3).
Domowe/app/src/main/res/layout/activity_main.xmlXMLzmienione: 24 linie
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ADD8E6"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Urządzenia Domowe"android:textSize="30sp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Autor: Bartosz Bryniarski"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="0dp"android:layout_marginEnd="20dp"android:layout_marginBottom="20dp"android:adjustViewBounds="true"android:contentDescription="Pralka"android:src="@drawable/pralka"/><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Pralka"android:textSize="24sp"/><EditTextandroid:id="@+id/washInput"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#87CEEB"android:hint="Podaj nr prania 1..12"android:inputType="number"android:textColor="#000080"android:textColorHint="#000080"/></LinearLayout></LinearLayout></LinearLayout>
Ekran telefonu po tym kroku
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Krok 15: Przycisk „Zatwierdź” i napis numeru prania
Kryteria: , ,
R.3.2 Umieszczone: 2 etykiety „Urządzenia Domowe” i "autor: " z numerem zdającego, obrazy pralka.jpg i odkurzacz.jpg , napisy "Pralka", "Odkurzacz", pole edycyjne z podpowiedzią (placeholder lub hint ) i możliwością wpisania jedynie liczb, przyciski "Zatwierdź" i "Włącz" oraz pozostałe 3 napisy z opisem stanu urządzeń
R.3.3 Zastosowane kolory tła: dla głównego rozkładu lub strony: LightBlue (#ADD8E6), dla pola edycyjnego: SkyBlue (#87CEEB), dla przycisków: RoyalBlue (#4169E1) oraz kolor czcionki i kolor podpowiedzi Navy (#000080) dla pola edycyjnego (w MAUI nazwy kolorów obowiązkowo wielką literą )
R.3.5 Ustawione marginesy: 5 dla pierwszych dwóch napisów, 10 dla przycisków oraz dla obrazów lewy, prawy i dolny 20, górny 0
ok. 2 min
Polecenie z arkusza
Przycisk o treści: „Zatwierdź”. Napis o treści: „Numer prania: nie podano”. Kolory tła: dla przycisków: RoyalBlue (#4169E1). Marginesy zewnętrzne: dla przycisków 10.
Przycisk z tłem #4169E1 przez backgroundTint (w Material 3 zwykłe background przycisk ignoruje) i marginesem 10dp ze wszystkich stron (R.3.3, R.3.5). Pod nim napis washText - kod zmieni go po zatwierdzeniu numeru.
Domowe/app/src/main/res/layout/activity_main.xmlXMLzmienione: 14 linii
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ADD8E6"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Urządzenia Domowe"android:textSize="30sp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Autor: Bartosz Bryniarski"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="0dp"android:layout_marginEnd="20dp"android:layout_marginBottom="20dp"android:adjustViewBounds="true"android:contentDescription="Pralka"android:src="@drawable/pralka"/><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Pralka"android:textSize="24sp"/><EditTextandroid:id="@+id/washInput"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#87CEEB"android:hint="Podaj nr prania 1..12"android:inputType="number"android:textColor="#000080"android:textColorHint="#000080"/><Buttonandroid:id="@+id/washButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:backgroundTint="#4169E1"android:text="Zatwierdź"/><TextViewandroid:id="@+id/washText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Numer prania: nie podano"/></LinearLayout></LinearLayout></LinearLayout>
Ekran telefonu po tym kroku
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Krok 16: Wiersz odkurzacza: obraz, napis, „Włącz” i dwa napisy stanu
Kryteria: ,
R.3.1 Zastosowany język znaczników XML/XAML lub inny do opisu interfejsu użytkownika oraz zastosowany układ rozkładów liniowych wertykalnych i horyzontalnych (LinearLayout lub StackLayout, lub VerticalStackLayout i HorizontalStackLayout, lub inne o tej idei ) tak, aby układ ten był zgodny z obrazem 3 arkusza egzaminacyjnego (oceniane są tylko znaczniki rozkładu )
R.3.2 Umieszczone: 2 etykiety „Urządzenia Domowe” i "autor: " z numerem zdającego, obrazy pralka.jpg i odkurzacz.jpg , napisy "Pralka", "Odkurzacz", pole edycyjne z podpowiedzią (placeholder lub hint ) i możliwością wpisania jedynie liczb, przyciski "Zatwierdź" i "Włącz" oraz pozostałe 3 napisy z opisem stanu urządzeń
ok. 3 min
Polecenie z arkusza
Rozkład dotyczący odkurzacza: obraz odkurzacz.jpg. Napis o treści: „Odkurzacz”. Przycisk o treści: „Włącz”. Napis o treści: „Odkurzacz wyłączony”. Napis o treści: „Status: naładowany”. Rozmieszczenie elementów zgodne z obrazami 3 i 4.
Drugi poziomy wiersz ma tę samą budowę co wiersz pralki (R.3.1): obraz 150dp z tymi samymi marginesami, kolumna z napisem 24sp, przyciskiem w kolorze RoyalBlue z marginesem 10dp i dwoma napisami. Napis stanu ma identyfikator vacuumStateText, a przycisk vacuumButton - kod zmieni oba (R.3.2). Ekran ma wszystkie elementy z obrazu 4.
Domowe/app/src/main/res/layout/activity_main.xmlXMLzmienione: 51 linii
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ADD8E6"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Urządzenia Domowe"android:textSize="30sp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Autor: Bartosz Bryniarski"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="0dp"android:layout_marginEnd="20dp"android:layout_marginBottom="20dp"android:adjustViewBounds="true"android:contentDescription="Pralka"android:src="@drawable/pralka"/><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Pralka"android:textSize="24sp"/><EditTextandroid:id="@+id/washInput"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#87CEEB"android:hint="Podaj nr prania 1..12"android:inputType="number"android:textColor="#000080"android:textColorHint="#000080"/><Buttonandroid:id="@+id/washButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:backgroundTint="#4169E1"android:text="Zatwierdź"/><TextViewandroid:id="@+id/washText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Numer prania: nie podano"/></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="0dp"android:layout_marginEnd="20dp"android:layout_marginBottom="20dp"android:adjustViewBounds="true"android:contentDescription="Odkurzacz"android:src="@drawable/odkurzacz"/><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Odkurzacz"android:textSize="24sp"/><Buttonandroid:id="@+id/vacuumButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:backgroundTint="#4169E1"android:text="Włącz"/><TextViewandroid:id="@+id/vacuumStateText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Odkurzacz wyłączony"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Status: naładowany"/></LinearLayout></LinearLayout></LinearLayout>
Ekran telefonu po tym kroku
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Krok 17: „Zatwierdź”: numer prania z przedziału 1-12
Kryteria: , ,
R.3.6 Program obsługuje przynajmniej jedno zdarzenie kliknięcia przycisku w sposób właściwy dla danego środowiska programistycznego. Co najmniej jeden przycisk jest powiązany ze zdarzeniem
R.3.7 Program pobiera wartości z co najmniej jednej konktrolki w sposób właściwy dla danego środowiska programistycznego
R.3.8 Po wciśnięciu przycisku „Zatwierdź” pobierana jest liczba z pola edycyjnego, jeśli jest ona z przedziału od 1 do 12 to zmieniany jest napis poniżej na: „Numer prania: <numer>”, gdzie <numer> oznacza wartość podaną w polu edycyjnym (w uruchomionej aplikacji lub na zrzucie oraz obowiązkowo w kodzie )
ok. 4 min
Polecenie z arkusza
Po wciśnięciu przycisku „Zatwierdź” pobierana jest liczba z pola edycyjnego, jeśli jest ona z przedziału od 1 do 12 to zmieniany jest napis poniżej na: „Numer prania: <numer>”, gdzie <numer> oznacza wartość podaną w polu edycyjnym (obraz 5).
Metodę confirmWash wiążemy z przyciskiem atrybutem android:onClick (R.3.6). Tekst z pola pobieramy getText().toString() (R.3.7) i zamieniamy na liczbę Integer.parseInt. Przy pustym polu parseInt("") rzuciłby wyjątek i zatrzymał aplikację - stąd warunek !text.isEmpty(). Napis zmieniamy tylko dla liczb 1-12 (R.3.8); dla innych zostaje poprzedni.
Wpisz w podglądzie 4 i kliknij „Zatwierdź” - jak na obrazie 5. Potem spróbuj 44.
Typowe błędy
Integer.parseInt bez sprawdzenia pustego pola - kliknięcie „Zatwierdź” przed wpisaniem liczby zatrzymuje aplikację z NumberFormatException.
Domowe/app/src/main/java/com/example/domowe/MainActivity.javaJavazmienione: 19 linii
R.3.9 Po wciśnięciu przycisku „Włącz”, zmienia się podpis przycisku na „Wyłącz” oraz treść napisu poniżej na: „Odkurzacz włączony”. Jeżeli kolejny raz zostanie wciśnięty przycisk, napisy wracają do stanu początkowego („Włącz” oraz „Odkurzacz wyłączony”) (w uruchomionej aplikacji lub na zrzucie oraz obowiązkowo w kodzie )
R.3.6 Program obsługuje przynajmniej jedno zdarzenie kliknięcia przycisku w sposób właściwy dla danego środowiska programistycznego. Co najmniej jeden przycisk jest powiązany ze zdarzeniem
ok. 3 min
Polecenie z arkusza
Po wciśnięciu przycisku „Włącz”, zmienia się podpis przycisku na „Wyłącz” oraz treść napisu poniżej na: „Odkurzacz włączony”. Jeżeli kolejny raz zostanie wciśnięty przycisk, napisy wracają do stanu początkowego („Włącz” oraz „Odkurzacz wyłączony”) (obraz 6).
Stan odkurzacza pamiętamy w polu boolean vacuumOn. Każde kliknięcie odwraca go: vacuumOn = !vacuumOn, a potem ustawia oba napisy według nowego stanu - podpis przycisku i opis pod nim (R.3.9). Metoda jest związana z przyciskiem przez android:onClick (R.3.6).
Kliknij w podglądzie dwa razy - jak na obrazie 6 i z powrotem.
Domowe/app/src/main/java/com/example/domowe/MainActivity.javaJavazmienione: 17 linii
Domowe/app/src/main/res/layout/activity_main.xmlXMLzmienione: 1 linia
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ADD8E6"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Urządzenia Domowe"android:textSize="30sp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Autor: Bartosz Bryniarski"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="0dp"android:layout_marginEnd="20dp"android:layout_marginBottom="20dp"android:adjustViewBounds="true"android:contentDescription="Pralka"android:src="@drawable/pralka"/><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Pralka"android:textSize="24sp"/><EditTextandroid:id="@+id/washInput"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#87CEEB"android:hint="Podaj nr prania 1..12"android:inputType="number"android:textColor="#000080"android:textColorHint="#000080"/><Buttonandroid:id="@+id/washButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:backgroundTint="#4169E1"android:onClick="confirmWash"android:text="Zatwierdź"/><TextViewandroid:id="@+id/washText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Numer prania: nie podano"/></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="0dp"android:layout_marginEnd="20dp"android:layout_marginBottom="20dp"android:adjustViewBounds="true"android:contentDescription="Odkurzacz"android:src="@drawable/odkurzacz"/><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Odkurzacz"android:textSize="24sp"/><Buttonandroid:id="@+id/vacuumButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:backgroundTint="#4169E1"android:onClick="toggleVacuum"android:text="Włącz"/><TextViewandroid:id="@+id/vacuumStateText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Odkurzacz wyłączony"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Status: naładowany"/></LinearLayout></LinearLayout></LinearLayout>
Ekran telefonu po tym kroku
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Krok 19: Uruchomienie w emulatorze, zrzuty i folder mobilna
Kryteria: ,
R.3.10 Aplikacja uruchamia się w emulatorze, co jest udokumentowane zrzutem ekranu, jej układ jest zgodny z obrazem 3 w arkuszu egzaminacyjnym
R.4.7 Zapisany przynajmniej jeden zrzut ekranu z uruchomienia lub kompilacji aplikacji mobilnej, na zrzucie widoczne jest środowisko, w którym powstała aplikacja
ok. 4 min
Polecenie z arkusza
Aplikacja mobilna – dowolna liczba zrzutów nazwanych mobile1, mobile2, ... (np. stan początkowy, po wciśnięciu przycisku Zatwierdź”, po wciśnięciu przycisku „Włącz”, następnie „Wyłącz”). W podfolderze mobilna powinno znaleźć się archiwum całego projektu o nazwie mobilna.zip, skopiowane z projektu plik (lub pliki) z kodem źródłowym interfejsu użytkownika (XAML lub XML) oraz plik źródłowy kodu skojarzonego z interfejsem użytkownika.
Uruchamiamy aplikację w emulatorze. Zrzuty całego ekranu z Android Studio do folderu dokumentacja: mobile1 - stan początkowy, mobile2 - po „Zatwierdź”, mobile3 - po „Włącz”, mobile4 - po „Wyłącz” (R.3.10, R.4.7). W folderze mobilna: mobilna.zip, activity_main.xml, MainActivity.java.
Kroki 20-21 · po tym etapie masz 35 z 35 kryteriów (pkt)
Krok 20: Nagłówek metody showMessage według listingu 1
Kryteria: , , , ,
R.4.1 Dla metody klasy bazowej z aplikacji konsolowej zapisany nagłówek w postaci komentarza zgodny z Listingiem 1 z arkusza egzaminacyjnego (nie liczymy gwiazdek ), komentarz może być wieloliniowy lub kilka jednoliniowych lub Docstrings (potrójny cudzysłów ) - w tym przypadku opis znajduje się pod nazwą metody
R.4.2 W komentarzu podana: nazwa i opis działania metody
R.4.3 W komentarzu podana: nazwa i opis wszystkich parametrów metody
R.4.4 W przypadku gdy metoda zwraca wartość, podany w komentarzu opis tej wartości. W przeciwnym przypadku zapisany void, brak itp.
R.4.5 W komentarzu podany numer zdającego
ok. 4 min
Polecenie z arkusza
W kodzie źródłowym aplikacji konsolowej za pomocą komentarza utwórz nagłówek metody klasy bazowej, według wzoru z listingu 1. Komentarz powinien znaleźć się nad lub pod nazwą metody. W miejscu nawiasów <> należy podać odpowiednie opisy.
Komentarz wieloliniowy nad metodą showMessage z polami listingu 1 (R.4.1): nazwa i opis działania (R.4.2), parametr message z opisem (R.4.3), typ zwracany - void, metoda nic nie zwraca (R.4.4) - i autor (R.4.5). Na egzaminie w polu autor wpisujemy numer PESEL - tu stoi Bartosz Bryniarski.
konsola/src/Device.javaJavazmienione: 9 linii
publicclassDevice {/* ****************************************************** nazwa: showMessage opis: wyświetla w konsoli komunikat podany jako argument parametry: message - treść komunikatu do wyświetlenia zwracany typ i opis: void - metoda nic nie zwraca autor: Bartosz Bryniarski ****************************************************** */publicvoidshowMessage(String message) { System.out.println(message); }}
Wynik programu po tym kroku
> java Main
Podaj numer prania 1..12
11
Program został ustawiony
Odkurzacz włączono
Odkurzacz wyładował się
Odkurzacz wyłączono
Krok 21: Dokument egzamin
Kryteria:
R.4.8 Dokumentacja zawiera wykorzystane oprogramowanie: nazwa systemu operacyjnego, środowiska programistycznych, emulator, języki programowania
ok. 3 min
Polecenie z arkusza
W edytorze tekstu pakietu biurowego utwórz plik z dokumentacją i nazwij go egzamin. Dokument powinien zawierać informacje o wykorzystanych w czasie egzaminu narzędziach: nazwę systemu operacyjnego, nazwy środowisk programistycznych, nazwę emulatora dla aplikacji mobilnej, nazwy języków programowania.
W Wordzie albo Writerze dokument egzamin w folderze dokumentacja: zrzuty, system, środowiska, emulator i języki (R.4.8).
egzamin.txtTekstnowy plik
Zrzuty ekranu: konsola1 - numer poprawny (11); konsola2 - numer niepoprawny (44); mobile1 - stan początkowy; mobile2 - po Zatwierdź; mobile3 - po Włącz; mobile4 - po WyłączSystem operacyjny: Windows 11Środowiska programistyczne: IntelliJ IDEA (aplikacja konsolowa), Android Studio (aplikacja mobilna)Emulator: Pixel 8 (Android 16, API 36) z Android StudioJęzyki programowania: Java (aplikacja konsolowa i mobilna), XML (układ aplikacji mobilnej)
Kroki 22-23 · po tym etapie masz 35 z 35 kryteriów (pkt)
Krok 22: Konsola: odporność na tekst zamiast liczby
ok. 2 min
Polecenie z arkusza
Program powinien podejmować zrozumiałą komunikację z użytkownikiem.
scanner.nextInt() na słowie „cztery” rzuca wyjątek InputMismatchException i kończy program. Pętla while (!scanner.hasNextInt()) pomija takie słowo i prosi ponownie.
Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.
konsola/src/Main.javaJavazmienione: 4 linie
import java.util.Scanner;publicclassMain {publicstaticvoidmain(String[] args) { WashingMachine washingMachine = new WashingMachine(); VacuumCleaner vacuumCleaner = new VacuumCleaner(); Scanner scanner = new Scanner(System.in); washingMachine.showMessage("Podaj numer prania 1..12");while (!scanner.hasNextInt()) { scanner.next(); // pomijamy słowo, które nie jest liczbą całkowitą washingMachine.showMessage("To nie jest liczba. Podaj numer prania 1..12"); }int number = scanner.nextInt();if (washingMachine.setProgram(number) != 0) { washingMachine.showMessage("Program został ustawiony"); } else { washingMachine.showMessage("Podano niepoprawny numer programu"); } vacuumCleaner.on(); vacuumCleaner.on(); vacuumCleaner.on(); vacuumCleaner.showMessage("Odkurzacz wyładował się"); vacuumCleaner.off(); }}
Wynik programu po tym kroku
> java Main
Podaj numer prania 1..12
cztery
To nie jest liczba. Podaj numer prania 1..12
4
Program został ustawiony
Odkurzacz włączono
Odkurzacz wyładował się
Odkurzacz wyłączono
Krok 23: Android: najwyżej dwie cyfry w polu numeru
ok. 2 min
Polecenie z arkusza
Pole edycyjne z podpowiedzią o treści: „Podaj nr prania 1..12” umożliwiające wpisywanie jedynie liczb.
inputType="number" wpuszcza tylko cyfry, ale nie ogranicza ich liczby. Jedenaście cyfr przekracza zakres typu int i Integer.parseInt zatrzymuje aplikację wyjątkiem NumberFormatException. Numer prania ma najwyżej dwie cyfry, więc android:maxLength="2" zamyka sprawę bez zmian w kodzie Javy.
Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.
Domowe/app/src/main/res/layout/activity_main.xmlXMLzmienione: 1 linia
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ADD8E6"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Urządzenia Domowe"android:textSize="30sp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:gravity="center"android:text="Autor: Bartosz Bryniarski"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="0dp"android:layout_marginEnd="20dp"android:layout_marginBottom="20dp"android:adjustViewBounds="true"android:contentDescription="Pralka"android:src="@drawable/pralka"/><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Pralka"android:textSize="24sp"/><EditTextandroid:id="@+id/washInput"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#87CEEB"android:hint="Podaj nr prania 1..12"android:inputType="number"android:maxLength="2"android:textColor="#000080"android:textColorHint="#000080"/><Buttonandroid:id="@+id/washButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:backgroundTint="#4169E1"android:onClick="confirmWash"android:text="Zatwierdź"/><TextViewandroid:id="@+id/washText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Numer prania: nie podano"/></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="0dp"android:layout_marginEnd="20dp"android:layout_marginBottom="20dp"android:adjustViewBounds="true"android:contentDescription="Odkurzacz"android:src="@drawable/odkurzacz"/><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Odkurzacz"android:textSize="24sp"/><Buttonandroid:id="@+id/vacuumButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:backgroundTint="#4169E1"android:onClick="toggleVacuum"android:text="Włącz"/><TextViewandroid:id="@+id/vacuumStateText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Odkurzacz wyłączony"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Status: naładowany"/></LinearLayout></LinearLayout></LinearLayout>
Ekran telefonu po tym kroku
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
Etap 6: Oddanie pracy
Krok 24 · po tym etapie masz 35 z 35 kryteriów (pkt)
Krok 24: Nagranie płyty
ok. 5 min
Polecenie z arkusza
Nagraj płytę z rezultatami pracy. W folderze z numerem zdającego powinny się znajdować podfoldery: dokumentacja, konsolowa, mobilna.
Sprawdzamy zawartość przed nagraniem:
konsolowa: konsola.zip (po dopisaniu komentarza), Device.java, WashingMachine.java, VacuumCleaner.java, Main.java,
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). Treść arkusza i klucza oceniania pochodzi z CKE.