INF.04-02-24.01-SG

Rok: 2024

Zadanie egzaminacyjne

UWAGA: katalog z rezultatami pracy oraz płytę należy opisać numerem zdającego, którym został podpisany arkusz, czyli numerem PESEL lub w przypadku jego braku numerem paszportu. Dalej w zadaniu numer ten jest nazwany numerem zdającego.

Wykonaj aplikację konsolową oraz mobilną według wskazań. Wykonaj dokumentację do obu aplikacji zgodnie z opisem w części III instrukcji do zadania. Do pracy w systemie operacyjnym wykorzystaj konto Egzamin bez hasła.

Utwórz folder i nazwij go numerem zdającego. W folderze utwórz podfoldery: konsola, mobilna, dokumentacja. Po wykonaniu każdej aplikacji, jej pełny kod (cały folder projektu) spakuj do archiwum. Następnie pozostaw w podfolderze jedynie pliki źródłowe, których treść była modyfikowana, plik uruchomieniowy, jeśli jest to możliwe oraz spakowane archiwum.

Część I. Aplikacja konsolowa

Napisz program implementujący klasę z narzędziami dla typu łańcuchowego (string).

Założenia do programu:

  • Program wykonywany w konsoli
  • Zastosowany obiektowy język programowania zgodny z zainstalowanym  na stanowisku egzaminacyjnym: C++ lub C#, lub Java, lub Python
  • Klasa ma charakter biblioteki narzędziowej, nie jest przewidziane powoływanie obiektów tej klasy, wszystkie jej metody są statyczne i są widzialne poza klasą

Klasa zawiera dwie metody:

  • Metoda licząca wszystkie samogłoski:
    • Jako parametr przyjmuje zmienną typu tekstowego
    • Zwraca liczbę samogłosek znajdujących się w parametrze
    • Przez samogłoski rozumie się znaki: „aąeęiouóyAĄEĘIOUÓY”
    • W przypadku, gdy parametrem jest pusty łańcuch znaków lub null, metoda zwraca 0
  • Metoda usuwająca powtórzenia znaków występujące obok siebie:
    • Jako parametr przyjmuje łańcuch, w którym będą szukane powtórzenia
    • Zwraca łańcuch bez powtórzeń
    • W przypadku, gdy parametrem jest pusty łańcuch lub null, metoda zwraca pusty łańcuch
    • Wszystkie znaki łańcucha są sprawdzane, czy znak następny jest tym samym znakiem.

Jeśli tak, jest on pomijany w wyjściowym łańcuchu znaków. Przykłady:

Łańcuch wejściowyŁańcuch wyjściowyCo zostało zmienione?
Przykłd tekstuPrzykład tekstupodwójna spacja → pojedyncza spacja
Abba;;;to zespółAba;to zespółpodwójne bb → pojedyncze b potrójne ;;; → pojedyncze ;

W programie głównym należy przetestować obie metody, wczytując łańcuch z klawiatury i wyświetlając liczbę samogłosek oraz łańcuch po eliminacji duplikatów

  • Program powinien podejmować zrozumiałą komunikację z użytkownikiem
  • W programie może być zastosowane angielskie lub polskie nazewnictwo
  • Program powinien być zapisany czytelnie, z zachowaniem zasad czystego formatowania kodu, należy stosować znaczące nazwy zmiennych, klasy i metod
  • Dokumentację aplikacji należy utworzyć zgodnie z opisem w części III treści zadania.

Kod aplikacji przygotuj do nagrania na płytę. W podfolderze konsola zapisz archiwum całego projektu o nazwie konsola.zip, plik z kodem źródłowym programu oraz plik uruchomieniowy, jeżeli istnieje.

Część II. Aplikacja mobilna

Za pomocą środowiska programistycznego dostępnego na stanowisku egzaminacyjnym wykonaj aplikację mobilną obsługującą zapisy na wizytę u weterynarza.

Obraz 1a.
Środowisko AndroidStudio, stan początkowy.
Emulacja Pixel 5
Obraz 1b.
Środowisko MAUI, stan początkowy.
Emulacja Pixel 5
Obraz 2a.
Środowisko MAUI
Zmiana wartości maksymalnej suwaka
Obraz 2b.
Środowisko MAUI
Po zatwierdzeniu, komunikat w oknie
Obraz 2c.
Środowisko Android Studio
Po zatwierdzeniu, komunikat pod przyciskiem

Stan początkowy aplikacji został przedstawiony na obrazach 1a i 1b. Interakcje w aplikacji zostały przedstawione na obrazach 2a, 2b, 2c. W zależności od zastosowanego środowiska programistycznego oraz emulowanego systemu wynik końcowy może nieznacznie różnić się od przedstawionego

Elementy aplikacji:

  • Pole tekstowe z tytułem „Wizyta u weterynarza”
  • Pole edycyjne z podpowiedzią „Imię i nazwisko właściciela…”
  • Pole tekstowe „Gatunek”
  • Lista z elementami tekstowymi: „Pies”, „Kot”, „Świnka morska”
  • Jedno lub dwa pola tekstowe o treści „Ile ma lat?” oraz „0” (wartość reprezentująca wiek zwierzęcia)
  • Suwak, w postaci kontrolki Slider lub SeekBar o wartości początkowej 0 i wartości maksymalnej 20
  • Pole edycyjne z podpowiedzią „Cel wizyty”
  • Pole dedykowane do zapisu czasu z wartością początkową 4:00PM lub 16:00
  • Przycisk o treści: „OK”
  • Rozmieszczenie elementów zgodne z obrazami 1a lub1b

Działanie aplikacji:

  • Po kliknięciu gatunku z listy, wartość maksymalna suwaka zmienia się na:
    • 18 dla psa
    • 20 dla kota
    • 9 dla świnki morskiej
  • W momencie przesuwania suwaka zmienia się odpowiednio wartość wieku w polu tekstowym obok suwaka (obraz 3). Wartość wieku jest zawsze liczbą całkowitą
  • Po kliknięciu przycisku, wartości z formularza: imię i nazwisko właściciela, gatunek, wiek, cel wizyty, czas są wyświetlane w postaci napisu pod przyciskiem albo w postaci okna z komunikatem. Poszczególne wartości są rozdzielone przecinkiem (obraz 2b i 2c)
  • Formularz nie musi być walidowany
Obraz 3. Interakcje suwaka z polem tekstowym dla gatunku Pies

Założenia aplikacji:

  • Interfejs użytkownika zapisany za pomocą języka znaczników wspieranego w danym środowisku (np. XAML, XML).
  • Zastosowany rozkład liniowy wertykalny (Linear / Stack lub inny o tej idei), z zagnieżdżonym rozkładem liniowym horyzontalnym dla kontrolek dotyczących wieku (napisy i suwak)
  • Kolor głównego rozkładu: LightGreen (#90EE90)
  • Cechy tytułu: zapisany czcionką większą niż pozostałe kontrolki, kolor tła: SeaGreen (#2E8B57), marginesy wewnętrzne 10
  • Cechy listy: wysokość dopasowana do liczby elementów
  • Aplikacja powinna być zapisana czytelnie, z zachowaniem zasad czystego formatowania kodu, należy stosować znaczące nazwy zmiennych i funkcji.

Podejmij próbę kompilacji i emulacji aplikacji. Informacje dotyczące dokumentacji i zrzutów ekranowych umieszczono w części III zadania.

Kod aplikacji przygotuj do nagrania na płytę. W podfolderze mobilna zapisz archiwum całego projektu o nazwie mobilna.zip, 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.

Część III. Dokumentacja aplikacji konsolowej

Wykonaj dokumentację do aplikacji utworzonych na egzaminie. W kodzie źródłowym aplikacji konsolowej utwórz komentarz do klasy, według wzoru z listingu 1. Komentarz powinien znaleźć się nad klasą lub pod jej nagłówkiem. W miejscu nawiasów <> należy podać odpowiednie opisy. W miejscu autor należy podać numer zdającego.

UWAGA: Dokumentację należy umieścić w komentarzu (wieloliniowym lub kilku jednoliniowych). Znajdujący się w listingu 1 wzór dokumentacji jest bez znaków początku i końca komentarza, gdyż te są różne dla różnych języków programowania

Listing 1. Wzór dokumentacji klasy (liczba gwiazdek dowolna)

************************************************ 
klasa:	<nazwa klasy>
opis:	<co klasa reprezentuje i wykonuje?> metody: <nazwa metody1 - co zwraca>
<nazwa metody2 - co zwraca> autor: <numer zdającego>
************************************************

Wykonaj zrzuty ekranu dokumentujące uruchomienie aplikacji utworzonych podczas egzaminu. Zrzuty powinny obejmować cały obszar ekranu monitora z widocznym paskiem zadań. Jeżeli aplikacja uruchamia się, na zrzucie należy umieścić okno z wynikiem działania programu oraz otwarte środowisko programistyczne z projektem lub okno terminala z kompilacją projektu. Jeżeli aplikacja nie uruchamia się z powodu błędów kompilacji, należy na zrzucie umieścić okno ze spisem błędów i widocznym otwartym środowiskiem programistycznym. Należy wykonać tyle zrzutów ile interakcji podejmuje aplikacja. Wymagane zrzuty ekranu:

  • Aplikacja konsolowa – dokumentująca interakcje dowolna liczba zrzutów o nazwach konsola1, konsola2,
  • Aplikacja mobilna – dokumentująca interakcje dowolna liczba zrzutów o nazwach mobile1, mobile2, … (co najmniej stan początkowy, zmiana wartości maksymalnej suwaka, np. dla psa, zmiany suwaka, po zatwierdzeniu przyciskiem)

W edytorze tekstu pakietu biurowego utwórz plik z dokumentacją i nazwij go egzamin. Dokument powinien zawierać podpisane zrzuty ekranu oraz zapisane informacje dotyczące narzędzi, z których korzystał zdający podczas egzaminu:

  • Nazwę systemu operacyjnego
  • Nazwy środowisk programistycznych
  • Nazwy języków programowania
  • Nazwę emulatora dla aplikacji mobilnej

Zrzuty ekranu i dokument umieść w podfolderze dokumentacja.

UWAGA: Nagraj płytę z rezultatami pracy. W folderze z numerem zdającego powinny się znajdować podfoldery: konsola, mobilna, dokumentacja. W folderze dokumentacja: pliki ze zrzutami oraz plik egzamin. W folderze konsola: spakowany cały projekt aplikacji konsolowej, pliki źródłowe, opcjonalnie plik uruchomieniowy. W folderze mobilna: spakowany cały projekt aplikacji mobilnej, pliki z kodem źródłowym interfejsu i logiki. Po nagraniu płyty sprawdź poprawność nagrania. Opisz płytę swoim numerem zdającego i pozostaw na stanowisku, zapakowaną w pudełku wraz z arkuszem egzaminacyjnym.

Pomoc dla środowiska Xamarin lub MAUI
 
Wypełnienie listy listView1.ItemsSource = lista; Gdzie:
listView1 jest kontrolką ListView lista jest obiektem typu List<string>
 
Zdarzenia klasy ListView: Focused, ItemTapped, ItemSelected, Zdarzenia klasy Slider: ValueChanged, SizeChanged, Focused
Pomoc dla środowiska AndroidStudio

Wykorzystanie adaptera do wypełnienia listy
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.textView1, tablica_elementow); listView1.setAdapter(arrayAdapter);
gdzie:
listView1 jest kontrolką ListView list_item jest rozkładem dla elementu listy textView1 jest id kontrolki w tym rozkładzie
tablica_elementow jest tablicą elementów, które powinny być wstawione do listy. Typ tablicy powinien być zgodny z typem elementów ArrayAdapter
 
Zdarzenie wybrania elementu ListView
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> myAdapter, View myView, int
myItemInt, long mylng) {
elementWybrany = (String) listView1.getItemAtPosition(myItemInt));
}
});
Gdzie listView1 jest kontrolką ListView
 
Szkielet do obsługi zdarzenia zmiany suwaka
seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override
public void onStopTrackingTouch(SeekBar seekBar) {} @Override
public void onStartTrackingTouch(SeekBar seekBar) {} @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
});
Gdzie seekBar1 jest kontrolką SeekBar