Aufgabe 1 - Datenschutz und Datensicherheit · Abitur NRW Informatik GK · Haupttermin 2022

Thema: Datenschutz und Datensicherheit · Aus der Prüfung GK · Haupttermin (2022)

Aufgabenstellung

Aufgabenstellung: Buchungssystem für Schulveranstaltungen

An der Turing-Schule finden regelmäßig verschiedene Schulveranstaltungen statt (z. B. Schulmusical, Schultheater). Früher entstanden vor dem Einlass zu einer Veranstaltung zum Teil lange Warteschlangen.

Damit alle Beteiligten besser planen können, sollen Sitzplätze für eine Veranstaltung künftig vorab reservierbar sein. Deshalb wollen die Schülerinnen und Schüler des Informatikprojektkurses ein Buchungssystem für diese Veranstaltungen entwickeln.

Die Aula wird bewährterweise für jede Veranstaltung eigens bestuhlt. Die Stühle stehen dabei stets in Sitzplatzreihen, und innerhalb einer Veranstaltung hat jede Sitzplatzreihe dieselbe Anzahl an Stühlen.

Eine Person darf für eine Veranstaltung mehrere Sitzplätze reservieren. Ist eine Veranstaltung ausgebucht, kann sich die Person auf die Warteliste eintragen lassen, bei mehreren Platzwünschen auch mehrmals. Zu jeder Person wird die Telefonnummer gespeichert, allerdings nur, damit sie bei Absagen von Veranstaltungen schnell erreichbar ist.

Das folgende Implementationsdiagramm zeigt einen ersten Modellierungsentwurf zur Verwaltung der Veranstaltungen. Die Klassendokumentationen stehen im Anhang.

Anhang: Dokumentationen der verwendeten Klassen

Die Klasse Veranstaltungsverwaltung

Objekte der Klasse Veranstaltungsverwaltung verwalten Veranstaltungen.

Auszug aus der Dokumentation der Klasse Veranstaltungsverwaltung

Veranstaltungsverwaltung()

Ein Objekt der Klasse Veranstaltungsverwaltung wird initialisiert.

List<Veranstaltung> gibVeranstaltungen()

Eine Liste mit allen Veranstaltungen wird zurückgeliefert. Wenn keine Veranstaltung verwaltet wird, dann wird eine leere Liste zurückgegeben.

void fuegeHinzu(Veranstaltung pVeranstaltung)

Die im Parameter übergebene Veranstaltung wird hinzugefügt.

void reserviere(Veranstaltung pVeranstaltung, int pReihe, int pSitz, Person pPerson)

Für die Veranstaltung pVeranstaltung wird für den Platz (pReihe, pSitz) für die Person eine Reservierung vorgenommen. Falls für die entsprechende Veranstaltung an dem Platz bereits eine Reservierung vorliegt, dann wird diese überschrieben. Falls der Platz nicht existiert, pVeranstaltung null ist oder pPerson null ist, dann geschieht nichts.

void schreibeAufWarteliste(Veranstaltung pVeranstaltung, Person pPerson)

Das Personenobjekt pPerson wird an die Warteliste für die Veranstaltung pVeranstaltung angehängt. Falls pVeranstaltung null ist oder pPerson null ist, dann geschieht nichts.

Veranstaltung ermittleVeranstaltung(String pTermin, String pVeranstaltungsname)

Für den im Parameter übergebenen Termin und Veranstaltungsnamen wird das entsprechende Veranstaltungsobjekt zurückgeliefert. Falls es zu dem Termin keine Veranstaltung mit dem Namen gibt, wird null zurückgeliefert.

List<Veranstaltung> ermittleVeranstaltungen(int pMinFreiePlaetze)

Die Methode liefert eine Liste mit den Veranstaltungen zurück, bei denen mindestens so viele Plätze frei sind, wie es durch den im Parameter übergebenen Wert pMinFreiePlaetze vorgegeben wird. Wenn es keine Veranstaltung mit der Mindestzahl an freien Plätzen gibt, dann wird eine leere Liste zurückgegeben.

Die Klasse Veranstaltung

Objekte der Klasse Veranstaltung verwalten Termine, Veranstaltungsnamen und die Sitzplätze mit den entsprechenden Reservierungen der Personen.

Auszug aus der Dokumentation der Klasse Veranstaltung

Veranstaltung(String pTermin, String pVeranstaltungsname, int pAnzahlReihen, int pAnzahlPlaetzeProReihe)

Ein Objekt der Klasse Veranstaltung wird initialisiert mit dem Termin, dem Veranstaltungsnamen, der Anzahl der Sitzplatzreihen und der Anzahl der Plätze pro Reihe.

String gibTermin()

Der Termin der Veranstaltung wird zurückgeliefert.

String gibVeranstaltungsname()

Der Veranstaltungsname der Veranstaltung wird zurückgeliefert.

int gibAnzahlFreiePlaetze()

Die Anzahl der noch freien Plätze der Veranstaltung wird zurückgeliefert.

Person gibReservierung(int pReihe, int pSitz)

Das Personenobjekt mit einer Reservierung für den Platz (pReihe, pSitz) wird zurückgeliefert. Falls der Platz nicht reserviert ist, wird null zurückgeliefert.

void reserviere(int pReihe, int pSitz, Person pPerson)

Für die Veranstaltung wird für den Platz (pReihe, pSitz) für die Person eine Reservierung vorgenommen. Falls an dem Platz bereits eine Reservierung vorliegt, dann wird diese überschrieben. Falls der Platz nicht existiert oder pPerson null ist, dann geschieht nichts.

void loescheReservierung(int pReihe, int pSitz)

Für die Veranstaltung wird die Reservierung für den Platz (pReihe, pSitz) gelöscht. Falls der Platz nicht existiert, dann geschieht nichts.

void schreibeAufWarteliste(Person pPerson)

Das Personenobjekt pPerson wird an die Warteliste für die Veranstaltung angehängt. Falls pPerson null ist, dann geschieht nichts.

void macheEtwas(Person pPerson)

Diese Methode ist Bestandteil der Teilaufgabe b).

Die Klasse Person

Objekte der Klasse Person verwalten einen Namen und eine Telefonnummer einer Person.

Auszug aus der Dokumentation der Klasse Person

Person(String pName, String pTelefonnummer)

Ein Objekt der Klasse Person wird initialisiert mit dem Namen und der Telefonnummer.

String gibName()

Der Name der Person wird zurückgeliefert.

String gibTelefonnummer()

Die Telefonnummer der Person wird zurückgeliefert.

boolean istGleich(Person pPerson)

Wenn das Personenobjekt inhaltlich mit dem im Parameter übergebenen Personenobjekt pPerson gleich ist, dann wird true zurückgeliefert und sonst false. Für die Inhaltsgleichheit müssen die jeweiligen Namen und Telefonnummern übereinstimmen.

Die generische Klasse Queue

Objekte der generischen Klasse Queue (Warteschlange) verwalten beliebige Objekte vom Typ ContentType nach dem First-In-First-Out-Prinzip, d. h., das zuerst abgelegte Objekt wird als erstes wieder entnommen. Alle Methoden haben eine konstante Laufzeit, unabhängig von der Anzahl der verwalteten Objekte.

Dokumentation der Klasse Queue<ContentType>

Queue()

Eine leere Schlange wird erzeugt. Objekte, die in dieser Schlange verwaltet werden, müssen vom Typ ContentType sein.

boolean isEmpty()

Die Anfrage liefert den Wert true, wenn die Schlange keine Objekte enthält, sonst liefert sie den Wert false.

void enqueue(ContentType pContent)

Das Objekt pContent wird an die Schlange angehängt. Falls pContent gleich null ist, bleibt die Schlange unverändert.

void dequeue()

Das erste Objekt wird aus der Schlange entfernt. Falls die Schlange leer ist, wird sie nicht verändert.

ContentType front()

Die Anfrage liefert das erste Objekt der Schlange. Die Schlange bleibt unverändert. Falls die Schlange leer ist, wird null zurückgegeben.

Die generische Klasse List

Objekte der generischen Klasse List verwalten beliebig viele, linear angeordnete Objekte vom Typ ContentType. Auf höchstens ein Listenobjekt, aktuelles Objekt genannt, kann jeweils zugegriffen werden. Wenn eine Liste leer ist, vollständig durchlaufen wurde oder das aktuelle Objekt am Ende der Liste gelöscht wurde, gibt es kein aktuelles Objekt. Das erste oder das letzte Objekt einer Liste kann durch einen Auftrag zum aktuellen Objekt gemacht werden. Außerdem kann das dem aktuellen Objekt folgende Listenobjekt zum neuen aktuellen Objekt werden.

Das aktuelle Objekt kann gelesen, verändert oder gelöscht werden. Außerdem kann vor dem aktuellen Objekt ein Listenobjekt eingefügt werden.

Dokumentation der Klasse List<ContentType>

List()

Eine leere Liste wird erzeugt.

boolean isEmpty()

Die Anfrage liefert den Wert true, wenn die Liste keine Objekte enthält, sonst liefert sie den Wert false.

boolean hasAccess()

Die Anfrage liefert den Wert true, wenn es ein aktuelles Objekt gibt, sonst liefert sie den Wert false.

void next()

Falls die Liste nicht leer ist, es ein aktuelles Objekt gibt und dieses nicht das letzte Objekt der Liste ist, wird das dem aktuellen Objekt in der Liste folgende Objekt zum aktuellen Objekt, andernfalls gibt es nach Ausführung des Auftrags kein aktuelles Objekt, d. h., hasAccess() liefert den Wert false.

void toFirst()

Falls die Liste nicht leer ist, wird das erste Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts.

void toLast()

Falls die Liste nicht leer ist, wird das letzte Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts.

ContentType getContent()

Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird das aktuelle Objekt zurückgegeben. Andernfalls (hasAccess() == false) gibt die Anfrage den Wert null zurück.

void setContent(ContentType pContent)

Falls es ein aktuelles Objekt gibt (hasAccess() == true) und pContent ungleich null ist, wird das aktuelle Objekt durch pContent ersetzt. Sonst bleibt die Liste unverändert.

void append(ContentType pContent)

Ein neues Objekt pContent wird am Ende der Liste eingefügt. Das aktuelle Objekt bleibt unverändert. Wenn die Liste leer ist, wird das Objekt pContent in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt (hasAccess() == false). Falls pContent gleich null ist, bleibt die Liste unverändert.

void insert(ContentType pContent)

Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird ein neues Objekt pContent vor dem aktuellen Objekt in die Liste eingefügt. Das aktuelle Objekt bleibt unverändert. Falls die Liste leer ist und es somit kein aktuelles Objekt gibt (hasAccess() == false), wird pContent in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt. Falls es kein aktuelles Objekt gibt (hasAccess() == false) und die Liste nicht leer ist oder pContent == null ist, bleibt die Liste unverändert.

void concat(List<ContentType> pList)

Die Liste pList wird an die Liste angehängt. Anschließend wird pList eine leere Liste. Das aktuelle Objekt bleibt unverändert. Falls es sich bei der Liste und pList um dasselbe Objekt handelt, pList == null oder eine leere Liste ist, bleibt die Liste unverändert.

void remove()

Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird das aktuelle Objekt gelöscht und das Objekt hinter dem gelöschten Objekt wird zum aktuellen Objekt. Wird das Objekt, das am Ende der Liste steht, gelöscht, gibt es kein aktuelles Objekt mehr (hasAccess() == false). Wenn die Liste leer ist oder es kein aktuelles Objekt gibt (hasAccess() == false), bleibt die Liste unverändert.

e)

Wenn Veranstaltungen kurzfristig abgesagt wurden, ließen sich nicht immer alle Personen rechtzeitig per Telefon erreichen. Deshalb soll ausschließlich zur schnellen Erreichbarkeit bei Absagen von Veranstaltungen zusätzlich verpflichtend die E-Mail-Adresse jeder Person gespeichert werden.

Zudem reicht der Schulleiter bei der Projektgruppe eine E-Mail zur Überprüfung ein. Diese E-Mail enthält nur Hinweise auf künftige Schulveranstaltungen. Der Schulleiter begründet sein Anliegen damit, künftig jeden Monat eine solche E-Mail als Service an alle im Buchungssystem erfassten Personen zu schicken, weil diese sich ohnehin für die Schulveranstaltungen interessierten.

Begründen Sie unter Einbeziehung eines von Ihnen gewählten Grundprinzips des Datenschutzes, weshalb der Vorschlag des Schulleiters nicht umgesetzt werden sollte. (5 Punkte)

Aufgabenstellung: Aufgabe 1 - Datenschutz und Datensicherheit · Abitur NRW Informatik GK · Haupttermin 2022

Lösung

Nach den offiziellen Korrekturhinweisen

Begründen Sie unter Einbeziehung eines von Ihnen gewählten Grundprinzips des Datenschutzes, weshalb der Vorschlag des Schulleiters nicht umgesetzt werden sollte.

Lösung: Der Vorschlag der Schulleitung verstößt gegen das Grundprinzip der Zweckbindung bzw. des Verbots mit Erlaubnisvorbehalt.

Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium

Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.

‹ Aufgabe 2 - Datenschutz und Datensicherheit · LK · Nachtermin 2023 · Aufgabe 2 - Datenschutz · GK · Nachtermin 2022 ›

Mehr Aufgaben zu Datenschutz und Datensicherheit