# SAE

Zusammenfassungen für das Fach SAE vorbereitend für die Abschlussprüfung Teil 1.

# New Page



# New Page



# Datenbanken

##### Manipulation von Datenbanken

<table border="1" id="bkmrk-die-insert-into-anwe" style="border-collapse: collapse; width: 100%; border-style: solid;"><tbody><tr><td style="width: 49.9383%;">Die `<strong>INSERT INTO</strong>` Anweisung wird verwendet, um einen neuen Datensatz (Zeile) in eine Tabelle einzufügen.

Es gibt zwei Varianten:

- In Spalten der Reihe nach einfügen
- Einfügen in Spalten nach Namen

</td><td style="width: 49.9383%;">```SQL
-- In Spalten der Reihe nach einfügen:<br></br>INSERT INTO table_name<br></br>VALUES (value1, value2);<br></br> <br></br>-- Einfügen in Spalten nach Namen:<br></br>INSERT INTO table_name (column1, column2)<br></br>VALUES (value1, value2);
```

</td></tr><tr><td style="width: 49.9383%;">Die **`DELETE`** Anweisung wird verwendet, um Datensätze (Zeilen) in einer Tabelle zu löschen. Die **`WHERE`** Anweisung gibt an, welcher Datensatz oder welche Datensätze gelöscht werden sollen. Wenn **`WHERE`** weggelassen wird, werden alle Datensätze gelöscht.</td><td style="width: 49.9383%;">```SQL
DELETE FROM table_name<br></br>WHERE some_column = some_value;
```

  
</td></tr><tr><td style="width: 49.9383%;">Die **`UPDATE`** Anweisung wird verwendet, um Datensätze (Zeilen) in einer Tabelle zu bearbeiten. Sie enthält eine `<strong>SET</strong>` Anweisung, die die zu bearbeitende Spalte angibt, und eine **`WHERE`** Anweisung, die den oder die Datensätze spezifiziert.</td><td style="width: 49.9383%;">```SQL
UPDATE table_name<br></br>SET column1 = value1, column2 = value2<br></br>WHERE some_column = some_value;
```

</td></tr></tbody></table>

##### Datenbank Abfragen

<table border="1" id="bkmrk-%C2%A0" style="border-collapse: collapse; width: 100%; height: 255px;"><tbody><tr style="height: 115.1px;"><td style="width: 49.9383%; height: 115.1px;">Mit dem **`AND`** Operator können mehrere Bedingungen kombiniert werden. Die Datensätze müssen beiden Bedingungen entsprechen, die mit **`AND`** verknüpft sind, um in die Ergebnisse aufgenommen zu werden. Die angegebene Abfrage zeigt alle Autos an, die blau sind und nach 2014 hergestellt wurden.</td><td style="width: 49.9383%; height: 115.1px;">```SQL
SELECT model <br></br>FROM cars <br></br>WHERE color = 'blue' <br></br>  AND year > 2014;
```

</td></tr><tr style="height: 115.1px;"><td style="width: 49.9383%; height: 115.1px;">Mit dem **`OR`** Operator können mehrere Bedingungen kombiniert werden. Datensätze, die einer der beiden Bedingungen entsprechen, die durch das **`OR`** verbunden sind, werden in die Ergebnisse aufgenommen. Die angegebene Abfrage findet Kunden, deren Staat entweder „CA“ oder „NY“ ist.</td><td style="width: 49.9383%; height: 115.1px;">```SQL
SELECT name<br></br>FROM customers <br></br>WHERE state = 'CA' <br></br>   OR state = 'NY';
```

</td></tr><tr><td style="width: 49.9383%;">`<strong>WHERE</strong>` wird verwendet, um Datensätze (Zeilen) zu filtern, die eine bestimmte Bedingung erfüllen. Die angegebene Abfrage wählt alle Datensätze aus, bei denen das pub\_year gleich 2017 ist.</td><td style="width: 49.9383%;">```SQL
SELECT title<br></br>FROM library<br></br>WHERE pub_year = 2017;
```

</td></tr><tr><td style="width: 49.9383%;">Mit **`LIKE`** kann innerhalb einer **`WHERE`** ein bestimmtes Muster abgefragt werden. Die angegebene Abfrage findet jeden Film, dessen Titel mit „Star“ beginnt.</td><td style="width: 49.9383%;">```SQL
SELECT name<br></br>FROM movies<br></br>WHERE name LIKE 'Star%';
```

</td></tr><tr style="height: 24.8px;"><td style="width: 49.9383%; height: 24.8px;">Der Platzhalter `<strong>%</strong>` kann mit `<strong>LIKE</strong>` verwendet werden, um keine oder mehrere nicht spezifizierte Zeichen zu finden. Die angegebene Abfrage findet jeden Film, der mit „The“ beginnt, gefolgt von keinem oder mehreren beliebigen Zeichen.</td><td style="width: 49.9383%; height: 24.8px;">```SQL
SELECT name<br></br>FROM movies<br></br>WHERE name LIKE 'The%';
```

</td></tr><tr><td style="width: 49.9383%;">Der Platzhalter `<strong>_</strong>` kann mit **`LIKE`** verwendet werden, um ein beliebiges einzelnes, nicht spezifiziertes Zeichen zu finden. Die angegebene Abfrage findet jeden Film, der mit einem einzelnen Zeichen beginnt, gefolgt von „ove“.</td><td style="width: 49.9383%;">```SQL
SELECT name<br></br>FROM movies<br></br>WHERE name LIKE '_ove';
```

</td></tr><tr><td style="width: 49.9383%;">Die `<strong>SELECT *</strong>` Anweisung gibt alle Spalten aus der angegebenen Tabelle in der Trefferliste zurück. Die angegebene Abfrage holt alle Spalten und Datensätze (Zeilen) aus der Tabelle „Filme“.</td><td style="width: 49.9383%;">```SQL
SELECT *<br></br>FROM movies;
```

</td></tr><tr><td style="width: 49.9383%;">`<strong>ORDER BY</strong>` kann verwendet werden, um die Ergebnisse einer Spalte alphabetisch oder numerisch zu sortieren. Es kann auf zwei Arten sortiert werden:

- Mit `<strong>DESC</strong>` werden die Ergebnisse in absteigender Reihenfolge sortiert.
- Mit `<strong>ASC</strong>` werden die Ergebnisse in aufsteigender Reihenfolge sortiert (Standard).

</td><td style="width: 49.9383%;">```SQL
SELECT *<br></br>FROM contacts<br></br>ORDER BY birth_date DESC;
```

</td></tr><tr><td style="width: 49.9383%;">Der Operator **`BETWEEN`** kann zum Filtern nach einem Wertebereich verwendet werden. Bei dem Wertebereich kann es sich um Text, Zahlen oder Datumsdaten handeln. Die angegebene Abfrage findet alle Filme, die zwischen den Jahren 1980 und 1990 gedreht wurden.</td><td style="width: 49.9383%;">```SQL
SELECT *<br></br>FROM movies<br></br>WHERE year BETWEEN 1980 AND 1990;
```

</td></tr><tr><td style="width: 49.9383%;">Die Bedingung **`LIMIT`** wird verwendet, um die Ergebnisse auf eine bestimmte Anzahl von Zeilen zu begrenzen. Die angegebene Abfrage begrenzt die Ergebnismenge auf 5 Zeilen.</td><td style="width: 49.9383%;">```SQL
SELECT *<br></br>FROM movies<br></br>LIMIT 5;
```

</td></tr><tr><td style="width: 49.9383%;">Spalteninhalte können `<strong>NULL</strong>` sein oder keinen Wert haben. Diese Datensätze können mit den Operatoren `<strong>IS NULL</strong>` und `<strong>IS NOT NULL</strong>` in Kombination mit `<strong>WHERE</strong>` abgeglichen werden. Die angegebene Abfrage wird alle Adressen anzeigen, bei denen die Adresse einen Wert hat oder nicht **`NULL`** ist.</td><td style="width: 49.9383%;">```SQL
SELECT address<br></br>FROM records<br></br>WHERE address IS NOT NULL;
```

</td></tr></tbody></table>

##### Foreign Key

Ein Fremdschlüssel ist ein Verweis von Datensätzen einer Tabelle auf den Primärschlüssel einer anderen Tabelle. Um mehrere Datensätze für eine bestimmte Zeile zu erhalten, spielt die Verwendung von Fremdschlüsseln eine wichtige Rolle. Um z. B. alle Bestellungen eines bestimmten Kunden zu verfolgen, kann die Tabelle Bestellung (unten im Bild) einen Fremdschlüssel enthalten. [![foreign-key.png](https://doku.stnd.io/uploads/images/gallery/2022-03/scaled-1680-/pBtZn3H5hEyq5YT4-foreign-key.png)](https://doku.stnd.io/uploads/images/gallery/2022-03/pBtZn3H5hEyq5YT4-foreign-key.png)

##### Primary Key

Ein Primärschlüssel in einer SQL-Tabelle wird verwendet, um jeden Datensatz in dieser Tabelle eindeutig zu identifizieren. Ein Primärschlüssel kann nicht `<strong>NULL</strong>` sein. In diesem Beispiel ist **`customer_id`** der Primärschlüssel. Derselbe Wert kann in einer Spalte nicht noch einmal vorkommen. Primärschlüssel werden oft in `<strong>JOIN</strong>` Operationen verwendet.

[![primary_key.png](https://doku.stnd.io/uploads/images/gallery/2022-03/scaled-1680-/YQvq2gRuVCjPWziV-primary-key.png)](https://doku.stnd.io/uploads/images/gallery/2022-03/YQvq2gRuVCjPWziV-primary-key.png)

##### Mehrere Tabellen verbinden  


<table border="1" id="bkmrk-bei-einem-outer-join" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 49.9383%;">Bei einem Outer Join werden Zeilen aus verschiedenen Tabellen kombiniert, auch wenn die Join-Bedingung nicht erfüllt ist. Bei einem `<strong>LEFT JOIN</strong>` wird jede Zeile der linken Tabelle in die Ergebnismenge zurückgegeben. Wenn die Join-Bedingung nicht erfüllt ist, wird `<strong>NULL</strong>` verwendet, um die Spalten der rechten Tabelle aufzufüllen.</td><td style="width: 49.9383%;">```SQL
SELECT column_name(s)<br></br>FROM table1<br></br>LEFT JOIN table2<br></br>  ON table1.column_name = table2.column_name;
```

</td></tr><tr><td style="width: 49.9383%;">`<strong>JOIN</strong>` ermöglicht die Rückgabe von Ergebnissen aus mehr als einer Tabelle, indem sie diese mit anderen Ergebnissen auf der Grundlage gemeinsamer Spaltenwerte verbindet, die mit `<strong>ON</strong>` angegeben werden. `<strong>INNER JOIN</strong>` ist der Standard `<strong>JOIN</strong>` und gibt nur Ergebnisse zurück, die der durch `<strong>ON</strong>` angegebenen Bedingung entsprechen.</td><td style="width: 49.9383%;">```SQL
SELECT * <br></br>FROM books<br></br>JOIN authors<br></br>  ON books.author_id = authors.id;
```

</td></tr></tbody></table>

# Entity-Relationship-Modell



# Struktogramme

- auch als Nassi-Shneiderman-Diagramme bekannt
- Ziel: Darstellung eines Programms unabhängig von der Programmiersprache
- Symbole 
    - mit Hilfe dieser Symbole lässt sich der Ablauf eines Programms beschreiben
    - fast alle Symbole lassen sich beliebig ineinander verschachteln
    - Prozess Symbol / Process Symbol: Anweisungen werden nacheinander von oben nach unten durchlaufen  
        [![strukto_01.png](https://doku.stnd.io/uploads/images/gallery/2022-03/scaled-1680-/pixhl4Yo2jpg8Ov7-strukto-01.png)](https://doku.stnd.io/uploads/images/gallery/2022-03/pixhl4Yo2jpg8Ov7-strukto-01.png)  
        ```Python
        # Anweisungen in Python<br></br>a = input("Zahl eingaben")	# Anweisung 1<br></br>b = 5 * a					# Anweisung 2<br></br>print(b)					# Anweisung 3
        ```
    - Verzweigung / Decision Symbol: Bedingung wird geprüft, wenn Sie zu trifft wird "ja" ausgeführt, andernfalls "nein". Kann verschachtelt sein.   
        [![strukto_02.png](https://doku.stnd.io/uploads/images/gallery/2022-03/scaled-1680-/gvYl603MA5H936Ho-strukto-02.png)](https://doku.stnd.io/uploads/images/gallery/2022-03/gvYl603MA5H936Ho-strukto-02.png)  
        ```Python
        # Verzweigung in Python<br></br>if (a == 5):					# Prüfung der Variablen a -> Ergebnis True oder False<br></br>	print("a ist fünf")			# Wenn Prüfung True, wird dieser Block ausgeführt<br></br>else:							<br></br>	print("a ist nicht fünf")	# Wenn Prüfung False, wird dieser Block ausgeführt
        ```

- - - Sonderfall: Case-Statement: Inhalt der Variablen wird geprüft und entsprechender Fall wird ausgeführt. Manche Programmiersprachen haben "Switch" ansonsten mit "if - else if - else" auflösbar.  
            [![strukto_03.png](https://doku.stnd.io/uploads/images/gallery/2022-03/scaled-1680-/ecQYhnONAKJo06oR-strukto-03.png)](https://doku.stnd.io/uploads/images/gallery/2022-03/ecQYhnONAKJo06oR-strukto-03.png)  
            ```C
            // Mit Switch in C aufgelöst<br></br>case (a) {									// Angabe welche Variable geprüft werden soll<br></br>  	1: printf("a hat den Wert eins");		// Auswahl entsprechend der Prüfung<br></br>    2: printf("a hat den Wert zwei");<br></br>    3: printf("a hat den Wert drei");<br></br>    default: print("a ist größer drei");	// Sollte keine Prüfung zutreffen wird dieser Fall ausgeführt<br></br>};<br></br><br></br>// Mit if - else if - else aufgelöst<br></br>if (a == 1) {								// Prüfung der Variable a -> Ergebnis True / False<br></br>	printf("a hat den Wert eins");			// Block der True als Ergebnis hat wird ausgeführt<br></br>} else if (a == 2) {<br></br>	printf("a hat den Wert zwei");<br></br>} else if (a == 3) {<br></br>	printf("a hat den Wert drei");<br></br>} else {<br></br>	printf("a ist größer drei");			// Wird ausgeführt sollte kein Block True sein<br></br>};
            ```
    - Schleifen oder Wiederholungsstruktur: Struktur die solange durchlaufen wird, bis Endbedingung erfüllt ist 
        - Kopfgesteuerte - Schleifen (z.B. while und for): Bedingung wird vor ersten durchlauf geprüft und nur dann betretten, wenn Bedingung zutrifft. Kann also auch nicht durchlaufen werden, wenn Endbedingung direkt zutrifft.  
            [![strukto_05.png](https://doku.stnd.io/uploads/images/gallery/2022-03/scaled-1680-/WpMcaVsAHg34X2LD-strukto-05.png)](https://doku.stnd.io/uploads/images/gallery/2022-03/WpMcaVsAHg34X2LD-strukto-05.png)  
            ```C
            // Kopfgesteuerte while-Schleife<br></br>while (i <= 10) {					// Die Variable i wird geprüft, sollte sie bereits größer 10 sein, wird Schleife nicht ausgeführt<br></br>	printf("%i\n", i);				// Wird ausgeführt sollte i kleiner oder gleich 10 sein<br></br>    i++;<br></br>}<br></br><br></br>// Kopfgesteuerte for-Schleife<br></br>for (i = 0; i <= 10; i++) {			// Sonderfall i läuft von 0 bis 10<br></br>	printf("%i\n", i);<br></br>}
            ```
        - Fußgesteuerte - Schleife (z.B. do-while): Endbedingung wird nach dem ersten Durchlauf geprüft und wenn diese Zutrifft, wird die Schleife beendet. Sollte sie nicht zu treffen, wird die Schleife solange durchlaufen bis die Bedingung zutrifft.  
            [![strukto_06.png](https://doku.stnd.io/uploads/images/gallery/2022-03/scaled-1680-/XyB8ocUs3ZOLng6V-strukto-06.png)](https://doku.stnd.io/uploads/images/gallery/2022-03/XyB8ocUs3ZOLng6V-strukto-06.png)  
            ```C
            // Fussgesteuerte-Schleife <br></br>do {							// Schleife wird betretten<br></br>	printf("%i\n", a);			// Schleife wird ausgeführt<br></br>    a++;<br></br>} while (a <= 10);				// Prüfung und sollte a größer 10 sein, wird Schleife beendet. Ansonsten wird Schleife erneut ausgeführt
            ```
    - Funktion und Funktionsaufruf: Um nicht mehrfach den gleichen Code schreiben zu müssen, kann man Funktionen schreiben die man immer wieder aufrufen kann. Dazu muss man zwei Dinge beachten.  
        Zum Einen muss die Funktion aufgerufen werden ggf. Parameter übergeben werden. Zum Anderen wird die Funktion als eigenes Struktogram geschrieben und am Anfang die möglichen Übergabeparamet genannt.  
        Sollte die Funktion Rückgabeparameter haben sind diese mit **Rückgabe** zu markieren (nicht Ausgabe). 
        - Funktionsaufruf  
            [![Aufruf.png](https://doku.stnd.io/uploads/images/gallery/2022-04/scaled-1680-/D7f4xut8JU7Wjad0-aufruf.png)](https://doku.stnd.io/uploads/images/gallery/2022-04/D7f4xut8JU7Wjad0-aufruf.png)  
            ```C
            // Möglicher Funktionsaufruf in C<br></br><br></br>// Funktionsdefinition<br></br>int berechne(int zahl1, int zahl2) {	// Funktion bekommt zwei Integer übergeben und gibt einen Integer zurück<br></br>  int ergebnis;							// lokale Variable<br></br>  ergebnis = zahl1 + zahl2;				// Berechnung von ergebnis<br></br>  return ergebnis;						// Rückgabewert<br></br>}<br></br><br></br>//Hauptfunktion<br></br>void main(void) {<br></br>  int a;								// Deklaration von Variablen<br></br>  int b;<br></br>  int c;<br></br>  a = 4;								// Zuweisung von Wert an Variable<br></br>  b = 5;<br></br>  c = ergebnis(a, b);					// Aufruf von Funktion "berechne" Übergabeparameter sind Werte von a, b. Rückgabe von Funktion wird zugewiesen<br></br>  printf("%i\n", c);					// Ausgabe von c<br></br>}
            ```
        - Beispiel Code als Struktogramme dargestellt. Hauptfunktion (main) und aufgerufene Funktion (berechne)  
            [![main.png](https://doku.stnd.io/uploads/images/gallery/2022-04/scaled-1680-/iC4uAluPxuRuKTEJ-main.png)](https://doku.stnd.io/uploads/images/gallery/2022-04/iC4uAluPxuRuKTEJ-main.png) [![main_funktion.png](https://doku.stnd.io/uploads/images/gallery/2022-04/scaled-1680-/p8K3WBHvfHwWYR0W-main-funktion.png)](https://doku.stnd.io/uploads/images/gallery/2022-04/p8K3WBHvfHwWYR0W-main-funktion.png)

# JSON / XML

##### **J**ava**S**cript **O**bject **N**otation und E**x**tensible **M**arkup **L**anguage

- beides sind Vereinbarungen (Notationen) die dem Austausch von Daten zwischen Anwendungen und Computersystemen 
    - Webseiten bekommen z.B. die Informationen die an bestimmten Stellen über JSON oder XML, damit nicht immer der Code der Webseite angefasst werden muss, sondern einfach die erhaltene Übertragung ausgelesen werden muss und die "Webseite" dann weiß wo sie was eintragen muss
- Vorteil dabei ist, dass es sich um ein Datenformat handelt, das sowohl vom Computer als auch Menschen lesbar ist
- für beide Formate gibt es Parser in den üblichen Programmiersprachen 
    - Parser sind Programme oder Programmteile die eine Datei auslesen und interpretieren können
- XML arbeitet mit Feldern die geöffnet werden &lt;feldöffnung&gt; und geschlossen werden &lt;/feldöffnung&gt; 
    - zwischen solchen Feldern können weitere Felder geöffnet werden, dabei entwickelt sich eine Hierarchie der Daten. Felder die zwischen zwei anderen Feldern liegen, sind diesem untergeordnet
- JSON erinnert an die Dictionary-Notation aus Python. Dabei werden Bereiche mit geschweiften Klammern geöffnet und Feldnamen durch "Feldname" gekennzeichnet. Mehrere solcher Felder werden durch Komma getrennt

##### Exkurs: Notation

- Notation: Art und Weise Informationen darzustellen. Dabei werden bestimmten Zeichen bestimmte Eigenschaften zu geordnet. Eine Notation die wir alle kennen ist die Infix Notation. Also die Art und Weise wie wir Rechnungen darstellen:  
    
    - - Infix Notation: 3 + 4
- Alternativ dazu exisiteren auch folgende Notationen: 
    - - Prefix Notation: + 3 4
        - Postfix Notation: 3 4 +
- Wer sich wundert warum es so was gibt, die Postfix Notation kommt gerne bei Berechnungen die mit Hilfe des Computers gemacht werden zum Einsatz, da sie schneller zu verarbeiten ist und damit die Rechenzeit signifikant verkürzt.

- Beispiel für XML:  
    [![ExampleXML.png](https://doku.stnd.io/uploads/images/gallery/2022-04/scaled-1680-/1uAiiljrWB9mQCDL-examplexml.png)](https://doku.stnd.io/uploads/images/gallery/2022-04/1uAiiljrWB9mQCDL-examplexml.png)
- Beispiel für JSON:  
    [![Partial-JSON-LD-representation-of-the-Eventbrite-resource-in-Table-4.png](https://doku.stnd.io/uploads/images/gallery/2022-04/scaled-1680-/uVYjlkYwQPSnbuT2-partial-json-ld-representation-of-the-eventbrite-resource-in-table-4.png)](https://doku.stnd.io/uploads/images/gallery/2022-04/uVYjlkYwQPSnbuT2-partial-json-ld-representation-of-the-eventbrite-resource-in-table-4.png)

# C

### C Grundbefehle

<table border="1" id="bkmrk-befehl-gebrauch-beis" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 33.2922%;">##### Befehl

</td><td style="width: 33.2922%;">##### Gebrauch

</td><td style="width: 33.2922%;">##### Beispiel

</td></tr><tr><td style="width: 33.2922%;">\#include  
</td><td style="width: 33.2922%;">Dient zum einbinden von Bibliotheken und Code aus anderen Dateien  
</td><td style="width: 33.2922%;">\#include &lt;stdio.h&gt;  
</td></tr><tr><td style="width: 33.2922%;">printf  
</td><td style="width: 33.2922%;">Dient zur Ausgabe von Text und Variableninhalten  
</td><td style="width: 33.2922%;">printf("%i",test);  
</td></tr><tr><td style="width: 33.2922%;">scanf  
</td><td style="width: 33.2922%;">Dient zum einlesen von Variablen  
</td><td style="width: 33.2922%;">scanf("%i",&amp;test);  
</td></tr><tr><td style="width: 33.2922%;">switch ( ){

case : break;

}

</td><td style="width: 33.2922%;">Dient zum vergleichen von einer Variablen mit vorgegebenen Werten. Wird gerne zur Menüsteuerung verwendet.   
</td><td style="width: 33.2922%;">switch (test)

{

case 1: ( ); break;

case 2: ( ); break;

default:( );

}

</td></tr><tr><td style="width: 33.2922%;">if ( ){

 Aktion;

}

else{

 Aktion;

}

</td><td style="width: 33.2922%;">Das If Else Statement dient zum Prüfen von Variablen gegen Werte oder andere Variablen. Wird auch Wenn Dann genannt. Es Können auch mehrere Vergleiche verschachtelt werden.   
</td><td style="width: 33.2922%;">if (max\_punkte &gt;= err\_punkte)  
{  
 /\*Berechnung\*/  
}  
else  
{  
 /\*Fehlermeldung\*/  
}</td></tr><tr><td style="width: 33.2922%;">  
</td><td style="width: 33.2922%;">  
</td><td style="width: 33.2922%;">  
</td></tr><tr><td style="width: 33.2922%;">  
</td><td style="width: 33.2922%;">  
</td><td style="width: 33.2922%;">  
</td></tr><tr><td style="width: 33.2922%;">  
</td><td style="width: 33.2922%;">  
</td><td style="width: 33.2922%;">  
</td></tr><tr><td style="width: 33.2922%;">  
</td><td style="width: 33.2922%;">  
</td><td style="width: 33.2922%;"> </td></tr></tbody></table>

# Pseudocode

<p class="callout info">Pseudocode ist eine detaillierte und dennoch lesbare Beschreibung dessen, was ein Computerprogramm oder ein Algorithmus machen soll. Pseudocode wird in einer formal gestalteten, natürlichen Sprache und nicht in einer Programmiersprache ausgedrückt.</p>

Fallunterscheidungen

- `if ... then ... else ... end if/exit`
- `wenn ... dann ... sonst ... wenn_ende`
- `falls ... dann ... falls_nicht ... falls_ende`

Schleifen

- `wiederhole ... solange/bis ... wiederhole_ende`
- `while ... do ...`
- `repeat ... until ...`
- `for ... to ... step <em>Schrittweite</em> ... next`

Kommentare

- `// kommentar`
- `# kommentar`
- `/* kommentar */`

##### Beispiel

```
WENN die Pizza in Folie eingepackt ist<br></br>	Entferne Folie<br></br><br></br>schalte Ofen ein<br></br>gib Pizza auf Blech in Ofen<br></br><br></br>SOLANGE Pizza noch nicht fertig<br></br>	warte eine Minute<br></br><br></br>entnimm Pizza aus dem Ofen
```

[![unknown.png](https://doku.stnd.io/uploads/images/gallery/2022-04/scaled-1680-/mePSpt9777sbfFxF-unknown.png)](https://doku.stnd.io/uploads/images/gallery/2022-04/mePSpt9777sbfFxF-unknown.png)

# Übungsaufgabe 1

##### Zeiterfassungssystem

Das Systemhaus bietet ein System zur Arbeitszeiterfassung an, welches lokal auf den Arbeitsplatzrechnern installiert wird. Dieses steht mit einem Server im LAN in Verbindung und sammelt dort die Daten. Fällt die Netzwerkverbindung aus, so werden die Daten lokal in einer XML-Datei vorgehalten und bei nächster Gelegenheit zum Server übertragen.  
Die XML-Datei liegt im lokalen Profil des jeweiligen Benutzers, ist jedoch nicht verschlüsselt und kann mit einem Editor im Klartext gelesen werden. Die Informationen und deren Struktur können Sie der [Anlage 6.pdf](https://doku.stnd.io/attachments/11) entnehmen.

1. Um die Sicherheit der Informationen zu gewährleisten sollen Sie eine Schutzbedarfsanalyse  
    durchführen.  
      
    
    - Kennzeichnen Sie den Schutzbedarf der Informationen unter Betrachtung der Schutzziele Vertraulichkeit, Verfügbarkeit und Integrität. Informationen zu den Schutzzielen finden Sie in der [Anlage 5.pdf](https://doku.stnd.io/attachments/12).
    - Begründen Sie Ihre Klassifizierung. Verwenden Sie für Ihre Lösung das Vorgabeblatt [Anlage 11.pdf](https://doku.stnd.io/attachments/10).
2. Die Informationen der XML-Datei zur Arbeitszeiterfassung sollen nicht mehr in einer XMLDatei, sondern in einer kleinen Datenbank lokal und verschlüsselt zwischengespeichert werden.  
    Ermitteln Sie auf Basis der dargestellten Informationen aus der XML-Datei (Anlage 6) die Struktur der dafür nötigen Tabellen. Verwenden Sie für Ihre Lösung das Vorgabeblatt [Anlage 12.pdf](https://doku.stnd.io/attachments/13) mit der Anlage 12.1.
3. Geben Sie an, welches Beziehungsmuster zwischen den Informationen UserAccount und LogEntry besteht. Begründen Sie Ihre Antwort. Verwenden Sie für Ihre Lösung das Vorgabeblatt [Anlage 12.pdf](https://doku.stnd.io/attachments/13) mit der Anlage 12.2.

# Übungsaufgabe 2

Sämtliche Geräte wie PCs und Handhelds werden über ein Management-Tool verwaltet. An dieses Tool übertragen alle Geräte ihre aktuellen Betriebssystemparameter, wie Geräte-ID, Betriebssystemname, Version, letztes Update, freier Permanentspeicher, Größe des RAM und Datum des letzten Logins.  
Das Management-Tool besitzt eine Datenbankschnittstelle, über die SQL-Statements abgesetzt werden können ([Anlage 8.pdf](https://doku.stnd.io/attachments/21)). Die IT-Abteilung möchte eine aktuelle Übersicht der Betriebszustände der Geräte.

<p class="callout info">Erstellen Sie für die IT-Abteilung folgende Abfragen per SQL:</p>

1. Anzahl aller Geräte
2. Anzahl der Geräte gruppiert nach Betriebssystem
3. alle Geräte deren Update älter als 30 Tage ist
4. welche User haben welche Geräte benutzt