Arkusz INF.04 : 2025 - czerwiec - zad. 02

Oznaczenie: INF.04-02-25.06-SG   Limit czasu: 180 minut

Zadanie egzaminacyjne

UWAGA!
Numer, którym został podpisany arkusz egzaminacyjny (PESEL lub w przypadku jego braku, numer paszportu) jest w zadaniu nazywany numerem zdającego.

Wykonaj aplikację konsolową oraz desktopową i testy jednostkowe dla aplikacji konsolowej według wskazań. Wykorzystaj konto Egzamin bez hasła.

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

Część I. Aplikacja konsolowa

Za pomocą narzędzi do tworzenia aplikacji konsolowych utwórz program implementujący algorytm szyfru Cezara.

Założenia aplikacji:

  • Zastosowany obiektowy język programowania zgodny z zainstalowanym na stanowisku egzaminacyjnym: C++ lub C#, lub Java, lub Python
  • Podejście obiektowe lub strukturalne
  • Szyfrowanie odbywa się w osobnej metodzie lub funkcji, która zawiera:
    • Dwa argumenty: tekst jawny oraz klucz (przy podejściu obiektowym dopuszcza się bez parametrów)
    • Wartość zwracaną: tekst zaszyfrowany
    • Implementację algorytmu szyfrowania kodem Cezara
  • W programie należy stosować znaczące, angielskie lub polskie nazewnictwo
  • Program powinien być zapisany czytelnie, z zachowaniem zasad czystego formatowania kodu
  • Do kodu należy dołączyć testy jednostkowe opisane w części III zadania egzaminacyjnego

Opis algorytmu:

Szyfr Cezara polega na zamianie każdej litery tekstu jawnego na literę tekstu szyfrowanego przesuniętego w alfabecie o stałą liczbę znaków zwaną kluczem.

Przykładowo dla klucza k = 3, każdą literę alfabetu z Tabeli 1 należy zamienić odpowiednią literą z Tabeli 2. Natomiast dla klucza k = -3, każdą literę alfabetu z Tabeli 1 należy zamienić odpowiednią literą z Tabeli 3.

Tabela 1. Szyfrowane litery

Tabela 2. Litery z tabeli 1 po zaszyfrowaniu kluczem k = 3

Tabela 3. Litery z tabeli 1 po zaszyfrowaniu kluczem k = -3

Założenia dotyczące algorytmu:

  • Szyfr działa jedynie dla małych liter podstawowego alfabetu łacińskiego, przedstawionego w Tabeli 1 (kody ASCII od 97 do 122)
  • Znak spacji pozostaje w zaszyfrowanym tekście bez zmian
  • Tekst jawny i zaszyfrowany są dowolnego typu napisowego, ich długość zależy od wczytanego tekstu
  • Klucz szyfrowania jest liczbą całkowitą (wartości dodatnie i ujemne, może być większy od 26). Dla klucza k = 0 tekst jawny jest równy tekstowi zaszyfrowanemu
  • Tekst oraz klucz są wczytywane z klawiatury w programie głównym
  • W podejściu obiektowym szyfrowany tekst i klucz mogą być polami klasy
  • Nie jest wymagana walidacja tekstu jawnego – zakłada się, że wprowadzono go bez błędów (tylko małe litery i spacje)

Sprawdź działanie metody lub funkcji. Program powinien nawiązać czytelną komunikację z użytkownikiem. Po uruchomieniu programu wykonaj zrzuty ekranu dokumentujące interakcje programu dla różnych wartości klucza (0, ujemna, dodatnia). Zrzuty ekranu powinny obejmować cały obszar ekranu, z widocznym paskiem zadań oraz środowiskiem programistycznym. Liczba zrzutów ekranu powinna odpowiadać wszystkim możliwym interakcjom użytkownika z programem. Zrzuty ekranu zapisz w folderze konsolowa pod nazwami konsola1.png, konsola2.png, itd.

Kod aplikacji przygotuj do nagrania na płytę. W folderze 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.

Część II. Aplikacja desktopowa

Za pomocą dostępnego na stanowisku egzaminacyjnym środowiska programistycznego wykonaj aplikację desktopową będącą interfejsem graficznym programu utworzonego w konsoli. Na Obrazie 2 przedstawiono ideę aplikacji desktopowej. W zależności od użytego środowiska programistycznego wygląd może nieznacznie się różnić. Do wykonania zadania można posłużyć się funkcją / metodą z aplikacji konsolowej.

Obraz 1. Stan początkowy

Obraz 2. Działanie aplikacji

Opis wyglądu aplikacji:

  • Tytuł okna „Szyfrowanie. Wykonane przez ”, dalej wstawiony numer zdającego
  • Kolor tła okna CadetBlue (#5F9EA0)
  • Kontrolki rozmieszczone zgodnie z Obrazem 1, z określonym formatowaniem:
    • Napisy: „Podaj wartość klucza”, „Podaj tekst”, „Tekst zaszyfrowany” w kolorze czcionki AntiqueWhite (#FAEBD7)
    • Pole edycyjne do wprowadzania wartości klucza
    • Pole edycyjne wielowierszowe do wprowadzania tekstu z włączonym zawijaniem wierszy
    • Pole, w którym wyświetlony jest zaszyfrowany tekst o cechach:
      • Kolor czcionki AliceBlue (#F0F8FF)
      • Obramowanie: linia ciągła koloru AntiqueWhite (#FAEBD7), rogi zaokrąglone
    • Przyciski o kolorze tła LightBlue (#ADD8E6)

Założenia dotyczące działania aplikacji:

  • Klucz szyfrowania i tekst szyfrowany są pobierane z odpowiednich kontrolek
  • Szyfrowanie odbywa się po wprowadzeniu tekstu i klucza i wybraniu przycisku „Zaszyfruj”
  • Jeżeli w polu przeznaczonym na wpisanie klucza nie została wpisana wartość liczbowa całkowita, po naciśnięciu przycisku, do szyfrowania, należy zastosować wartość klucza 0
  • Po wybraniu przycisku „Zapisz szyfr w pliku”, zostanie otwarte systemowe okno dialogowe (Obraz 3) do zapisu pliku. W pliku ma zostać zapisany zaszyfrowany tekst.

Obraz 3. Zapisywanie szyfru do pliku

Aplikacja powinna być zapisana czytelnie, z zasadami czystego formatowania kodu, należy stosować znaczące nazwy zmiennych i funkcji.

Podejmij próbę kompilacji i uruchomienia aplikacji. Wykonaj zrzuty ekranu dokumentujące wszystkie stany aplikacji. Zrzuty ekranu powinny obejmować cały obszar ekranu, z widocznym paskiem zadań oraz środowiskiem programistycznym. Zrzuty zapisz w folderze desktopowa pod nazwami desktop1.png, desktop2.png, itd.

Kod aplikacji przygotuj do nagrania na płytę. W folderze desktopowa powinno znaleźć się archiwum całego projektu o nazwie desktopowa.zip, skopiowane z projektu pliki źródłowe, które były modyfikowane w czasie egzaminu (interfejs użytkownika i logika aplikacji) oraz plik wykonywalny, jeżeli istnieje.

Część III. Testy jednostkowe

Wykonaj testy jednostkowe funkcji lub metody realizującej szyfr Cezara z aplikacji konsolowej. Do napisania testów wykorzystaj dostępną na stanowisku egzaminacyjnym bibliotekę do testów jednostkowych dla języka programowania, w którym została napisana aplikacja konsolowa. W testach jednostkowych należy sprawdzić przypadki testowe opisane w Tabeli 4.

Tabela 4. Scenariusz testowania z przypadkami testowymi

Nazwy metod testujących należy dobrać tak, aby wyrażały cel danego testu. Nazwy metod należy zapisać zgodnie z konwencją nazewnictwa w danym języku programowania.

Każdy przypadek testowy powinien być sprawdzany za pomocą asercji oddzielną metodą. Metody testujące należy zapisać w oddzielnym pliku w lokalizacji zgodnej z wymaganiami danego języka programowania i wykorzystanej biblioteki do zapisu testów jednostkowych.

Po napisaniu metod testujących, uruchom wszystkie metody. Wykonaj zrzut/zrzuty ekranu dokumentujące uruchomienie testów, zrzuty zapisz w folderze testy pod nazwami test1.png, test2.png, itd. Na zrzutach powinny być widoczne wyniki działania metod testujących. Zrzuty ekranu powinny obejmować cały obszar ekranu, z widocznym paskiem zadań oraz środowiskiem programistycznym.

Jeżeli metoda szyfrująca została napisana w części I niepoprawnie, testy powinny wykazać błędy. W tej części egzaminu ocenie podlegać będzie zapis i uruchomienie testu, a nie metoda szyfrująca.

W folderze testy zapisz bezpośrednio pliki, których treść była modyfikowana oraz zrzuty ekranu. Utwórz archiwum ZIP zawierające cały projekt i zapisz je w folderze testy.

Utwórz plik z dokumentacją i nazwij go egzamin. Dokument powinien zawierać informacje o narzędziach wykorzystanych na egzaminie:

  • Nazwę systemu operacyjnego
  • Nazwy środowisk programistycznych
  • Nazwy języków programowania

Dokument egzamin zapisz w folderze z numerem zdającego.

UWAGA!
Nagraj płytę z rezultatami pracy. W folderze z numerem zdającego powinny znajdować się podfoldery desktopowa, konsolowa, testy oraz plik egzamin. W folderze desktopowa: spakowany cały projekt aplikacji desktopowej, pliki ze źródłami interfejsu i logiki, opcjonalnie plik wykonywalny, zrzuty ekranu. W folderze konsolowa: spakowany cały projekt aplikacji konsolowej, pliki źródłowe, opcjonalnie plik wykonywalny, zrzuty ekranu. W folderze testy: spakowany projekt z testami, pliki z zapisem metod testujących, zrzuty ekranu. Opisz płytę numerem zdającego i pozostaw na stanowisku, zapakowaną w pudełku wraz z arkuszem egzaminacyjnym.

Czas przeznaczony na wykonanie zadania wynosi 180 minut.

Ocenie podlegać będą 4 rezultaty:

  • implementacja, kompilacja, uruchomienie programów
  • aplikacja konsolowa
  • aplikacja desktopowa
  • testy aplikacji.