---
# System prepended metadata

title: FIAE Prüfung 2021 Sommer
tags: [Ausbildung_FIAE_Prüfung]

---

# FIAE Abschlussprüfung 2021 Sommer

[Prüfung als PDF](https://ccs.jade-hs.de/index.php/f/233956039) (nur intern)

:::info
Lizenz

- Prüfungen sind urheberrechtlich geschützt
- Lösungsvorschlag RM CC0
:::

:::spoiler Inhaltsverzeichnis
[toc]
:::

## GA1 1. Handlungsschritt

```plantuml
left to right direction
skinparam packageStyle rectangle

actor "Mitglied" as m
actor "Admin" as a
actor "Gast" as g

package Webanwendung {
  usecase "persönliche\nDaten verwalten" as UC1
  usecase "Dienstleistung\nbuchen" as UC2
  usecase "Terminvorschläge\nabrufen" as UC3
  usecase "Dienstleistungs\narten verwalten" as UC4
  usecase "als Mitglied registrieren" as UC5
  usecase "Login" as UCL
}

a -|> m

UCL .u-> UC4 : extends
UCL .u-> UC1 : extends
UCL .u-> UC2 : extends

UC2 .> UC3 : include

m --> UC1
m --> UC2
m --> UC3

a --> UC4

g --> UC3
g --> UC5
```

## GA1 2. Handlungsschritt

In Klammern (1) das Vorgehen beim durchdenken und hinschreiben (von RM)

- [Vorgehen in Teilschritten](https://hackmd.io/@OERit/rJzdQ5A_R#/)
- [HackMD-Note](https://hackmd.io/drw4t8CeQFyMfD0o1QhlUQ?both#/6/1) dazu

```javascript=
erstelle_liste(stundensatz: doulbe) {    
    schreibe_kopf();                    // (1) Schreibt den Kopf der Tabelle
    akt_Satz = holeSatz();              // (3a) 1. Datensatz holen
    m_id_alt = lese_m_id(akt_Satz);     
    nr = 1;                             // siehe (4b)
    
    // init Summen (in Aufgae explizit nicht verlangt)
    summe_s = 0;
    summe_m = 0;
    summe_g = 0;
    
    while (akt_Satz !== "") {           // (3b) Datensatz prüfen
        
        // (siehe 4a) Daten für den aktuellen Datensatz holen
        m_id     = lese_m_id(akt_Satz);
        l_id     = lese_l_id(akt_Satz);
        anz_std  = lese_anz_std(akt_Satz); 
        
        if (m_id !== m_id_alt) {        // (5) Wenn neues Mitglied            
            // Summe Mitglied ausgeben und zurücksetzen
            schreibe_summe(summe_m);
            summe_m = 0;    
            nr = 1;                     // nr = 1 anfangen siehe (4b)
        }

        // Summe für Datensatz, für Mitglied und gesamt berechnen
        summe_s = anz_std * stundensatz; // siehe (4c)
        summe_m = summe_m + summe_s;    
        summe_g = summe_g + summe_s;    // siehe (2)
        
        // (4) Datensatz ausgeben
        schreibe_daten(nr, m_id, l_id, anz_Std, stundensatz, summe_s);
        // TODO: (4a) Daten holen (4b) Nummer zählen (4c) Summe akt. Datensatz
        
        akt_Satz = hole_Satz();         // (3c) nächsten Datensatz holen
        nr++ 
    }

    schreibe_gsumme(summe_g);            // (2) Schreibe die Gesamtsumme zum Ende
}
```

## GA1 3. Handlungsschritt

## GA1 4. Handlungsschritt

```plantuml
left to right direction
hide circle
skinparam linetype ortho

entity Mitglied {
    Mitglied_id (PK)
    --
    Vorname
    Nachname
    Strasse
    Hausnummer
    Ort
    PLZ
    Telefonnummer
    EMail    
}

entity MitgliedZahlung {
    Mitglied_id (PK)
    --
    Summe_einnahmen
    Summe_ausgaben
}

entity MitgliedLeistung {
    MitgliedLeistung_id (PK)
    --
    Beginn
    Ende
    Mitglied_geber_id (FK)
    Mitglied_nehmer_id (FK)
    Leistung_id (FK)
}
 
entity Leistung {
    Leistung_id (PK)
    --
    Beschreibung   
    LeistungArt_id (FK)
    Ausruestung_id (FK)
}

entity LeistungArt {
    LeistungArt_id (PK)
    --
    Bezeichnung
}

entity Ausruestung {
    Ausruestung_id (PK)
    --
    Bezeichnung
}


' Beziehungen
Mitglied    "1" -- "1" MitgliedZahlung
Mitglied    "1" -- "n" MitgliedLeistung

Leistung    "1" -- "n" MitgliedLeistung

LeistungArt "1" -- "n" Leistung
Ausruestung "0..1" -- "n" Leistung
```

## GA1 5. Handlungsschritt

> Benutze die Datenbank um die Aufgaben zu testen!

```plantuml
left to right direction
hide circle
skinparam linetype ortho

entity LeistungArt {
    idleistungArt (PK)
    --
    artBezeichnung
}

entity Mitglied {
    idmitglied (PK)
    --
    gebDat
    fuehrungsZeugnis
}

entity Angebot {
    idangebot (PK)
    --
    beschreibung
    wochentag
    vonZeit
    bisZeit
    mitgliedid (FK)
    leistungArtid (FK)
}

entity Bewertung {
    idbewertung (PK)
    --
    bewertungText
    bewertungZahl
    leistungArtid (FK)
    mitgliedid (FK)
}

' Beziehungen '
Mitglied    "1" -u- "n" Bewertung
Mitglied    "1" -- "n" Angebot

LeistungArt "1" -- "n" Bewertung
LeistungArt "1" -- "n" Angebot
```

:::spoiler SQL-Daten zum Üben mit eigener Datenbank

```sql=
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `uni-hamburg`.`angebot`;
DROP TABLE IF EXISTS `uni-hamburg`.`bewertung`;
DROP TABLE IF EXISTS `uni-hamburg`.`leistungart`;
DROP TABLE IF EXISTS `uni-hamburg`.`mitglied`;
DROP TABLE IF EXISTS `uni-hamburg`.`mitgliedarchiv`;
CREATE TABLE `angebot` (
  `idAngebot` int NOT NULL,
  `Beschreibung` varchar(255) NOT NULL,
  `WochenTag` varchar(255) NOT NULL,
  `vonZeit` char(6) NOT NULL,
  `bisZeit` char(6) NOT NULL,
  `mitgliedid` int NOT NULL,
  `leistungArtid` int NOT NULL,
  PRIMARY KEY (`idAngebot`)
   
  
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `bewertung` (
  `idBewertung` int NOT NULL,
  `bewertungText` varchar(255) NOT NULL,
  `bewertungZahl` double DEFAULT NULL,
  `leistungArtid` int NOT NULL,
  `mitgliedid` int DEFAULT NULL,
  PRIMARY KEY (`idBewertung`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
   
CREATE TABLE `leistungart` (
  `idLeistungArt` int NOT NULL,
  `artBezeichnung` varchar(255) NOT NULL,
  PRIMARY KEY (`idLeistungArt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

CREATE TABLE `mitglied` (
  `idmitglied` int NOT NULL,
  `GebDatum` datetime(6) NOT NULL,
  `vorname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `mitgliedName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `Fuehrungszeugnis` varchar(255) NOT NULL,
  PRIMARY KEY (`idmitglied`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

CREATE TABLE `mitgliedarchiv` (
  `idArchiv` int NOT NULL,
  `GebDatum` datetime(6) NOT NULL,
  `vorname` varchar(255) NOT NULL,
  `mitgliedName` varchar(255) NOT NULL,
  `Fuehrungszeugnis` varchar(255) NOT NULL,
  PRIMARY KEY (`idArchiv`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
BEGIN;

LOCK TABLES `uni-hamburg`.`angebot` WRITE;
DELETE FROM `uni-hamburg`.`angebot`;

INSERT INTO `uni-hamburg`.`angebot` (`idAngebot`,`Beschreibung`,`WochenTag`,`vonZeit`,`bisZeit`,`mitgliedid`,`leistungArtid`) VALUES 
(201, '*****', 'Donnerstag', '14:00', '16:00', 4, 101),
(202, '*****', 'Donnerstag', '14:00', '16:00', 4, 102),
(203, '*****', 'Donnerstag', '14:00', '16:00', 2, 103),
(204, '*****', 'Donnerstag', '18:00', '20:00', 3, 101),
(205, '*****', 'Freitag', '18:00', '20:00', 2, 101),
(206, '*****', 'Donnerstag', '18:00', '20:00', 25, 103),
(207, '*****', 'Dienstag', '14:00', '20:00', 2, 105),
(208, '*****', 'Montag', '14:00', '15:00', 3, 104);
UNLOCK TABLES;
COMMIT;
BEGIN;
LOCK TABLES `uni-hamburg`.`bewertung` WRITE;
DELETE FROM `uni-hamburg`.`bewertung`;

INSERT INTO `uni-hamburg`.`bewertung` (`idBewertung`,`bewertungText`,`bewertungZahl`,`leistungArtid`,`mitgliedid`) VALUES
 (301, '****', 2.2, 103, 3),
 (302, '****', 2, 103, 3),
 (303, '****', 2.9000000953674316, 103, 2),
 (304, '****', 3.0999999046325684, 103, 2),
 (305, '****', 4.400000095367432, 103, 25),
 (306, '****', 4.599999904632568, 103, 25),
 (307, '****', 2.5, 102, 1),
 (308, '****', 4.900000095367432, 101, 2),
 (309, '****', 6.800000190734863, 104, 1);
UNLOCK TABLES;
COMMIT;
BEGIN;
LOCK TABLES `uni-hamburg`.`leistungart` WRITE;
DELETE FROM `uni-hamburg`.`leistungart`;

INSERT INTO `uni-hamburg`.`leistungart` (`idLeistungArt`,`artBezeichnung`) VALUES 
(101, 'Gartenarbeit'),
(102, 'Hausarbeit'),
(103, 'Kinderbetreuung'),
(104, 'Tierbetreuung'),
(105, 'DateSkill');
UNLOCK TABLES;
COMMIT;

BEGIN;
LOCK TABLES `uni-hamburg`.`mitglied` WRITE;
DELETE FROM `uni-hamburg`.`mitglied`;

INSERT INTO `uni-hamburg`.`mitglied` (`idmitglied`,`GebDatum`,`vorname`,`mitgliedName`,`Fuehrungszeugnis`) VALUES
(1, '1998-07-17 00:00:00.000000', 'Aeds', 'Muell', 'bdgZeugnis'),
(2, '1996-09-19 00:00:00.000000', 'Beds', 'Maier', 'bdtZeugnis'),
(3, '1995-03-15 00:00:00.000000', 'Ceds', 'Mueller', 'bdpZeugnis'),
(4, '1999-08-12 00:00:00.000000', 'Eeds', 'Hauser', 'bdiZeugnis'),
(25, '1998-01-11 00:00:00.000000', 'Aeds', 'Spielmann', 'bdkZeugnis');
UNLOCK TABLES;
COMMIT;
BEGIN;
LOCK TABLES `uni-hamburg`.`mitgliedarchiv` WRITE;
DELETE FROM `uni-hamburg`.`mitgliedarchiv`;
UNLOCK TABLES;
COMMIT;
```

:::

a)

```sql=
SELECT 
    * 
FROM 
    mitglied 
WHERE 
    GebDatum =(
    SELECT 
        max( GebDatum )
    FROM 
        mitglied 
    );
```

Alternative HB

```sql=
SELECT
    *
FROM 
    mitglied 
ORDER BY
    GebDatum DESC LIMIT 1;
```

b)

```sql=
SELECT
    m.idmitglied,
    m.mitgliedName,
    avg( b.bewertungZahl ) as Durchschnitt
FROM
    mitglied AS m,
    bewertung AS b,
    leistungart AS l 
WHERE
    m.idmitglied = b.mitgliedid 
    AND l.idLeistungArt = b.leistungArtid 
    AND l.artBezeichnung = 'Kinderbetreuung' 
GROUP BY
    m.idmitglied
ORDER BY 
    b.bewertungszahl ASC
```

Alternative HB mit Joins

```sql=
SELECT
    m.idmitglied,
    m.mitgliedName,
    avg( b.bewertungZahl ) as Durchschnitt
FROM
    mitglied AS m 
JOIN 
    bewertung AS b ON m.idmitglied = b.mitgliedid
JOIN
    leistungart AS l ON b.leistungArtid = l.leistungid
    
WHERE
    m.idmitglied = b.mitgliedid 
    AND l.idLeistungArt = b.leistungArtid 
    AND l.artBezeichnung = 'Kinderbetreuung' 
GROUP BY
    m.idmitglied
ORDER BY 
    b.bewertungszahl ASC
```

 c)

- Vorgegebene Tabelle bestimmt die angezeigten Spalten

```sql=
SELECT
    m.idmitglied,
    m.mitgliedName,
    artBezeichnung,
    WochenTag,
    vonZeit,
    bisZeit
FROM
    mitglied AS m,
    leistungart AS l,
    angebot AS a 
WHERE
    m.idmitglied = a.mitgliedid AND
    l.idLeistungArt = a.leistungArtid AND
    WochenTag = 'Donnerstag' AND
    vonZeit = '14:00' AND
    bisZeit = '16:00';
```

d)

Noch zu prüfen!

```sql=
//schritt1
CREATE TABLE MitgliedArchiv (
    idArchiv int PRIMARY KEY,
    GebDatum DATETime(6) not null,
    vorname varchar(255) not null,
    mitgliedName varchar(255) not null, 
    Fuehrungszeugnis VARCHAR(255) not null
)

//schritt2
INSERT INTO  
    MitgliedArchiv 
VALUES (SELECT
            *
        FROM
            mitglied a
        WHERE
            a.idmitglied NOT IN (
            SELECT 
                b.mitgliedid 
            FROM 
                angebot b 
            ) 
)

//schritt3
DELETE FROM  
    mitglied 
WHERE 
    idmitglied  in (
    SELECT 
        b.idArchiv 
    FROM 
        mitgliedarchiv b
    )
```

---

## GA2 1. Handlungsschritt

Ratendarlehen - Alle Werte in EUR

| Schulden <br>Jahresanfang | Zins <br>(7 % p.a.)   | Tilgung <br>Jahrsende | Kreditrate | Restschuld |
| ----------------: | ----------------: | ----------------: | ----------------: | ----------------: |
| 210.000           | 1.4700            | 70.000            | 84.700            | 140.000           |
| 140.000           |   9800            | 70.000            | 79.800            |  70.000           |
|  70.000           |   4900            | 70.000            | 74.900            |       0           |
|       0           | **Summe: 29.400** |                   |                   |                   |

## GA2 2. Handlungsschritt

a)
Lösungsschritte:

1. Umrechnung der Blattabmessungen in Zoll  
   • 1 inch = 2,54 cm  
   • A4-Seite: 29,7 cm × 21 cm  
   ⇒ in Zoll:  
      – Breite: 29,7 cm / 2,54 cm/inch ≈ 11,69 inch  
      – Höhe: 21 cm / 2,54 cm/inch ≈ 8,27 inch  

2. Berechnung der Pixel pro Seite  
   • Scan-Auflösung: 300 dpi × 300 dpi  
   • Breite in Pixeln: 11,69 inch × 300 dpi ≈ 3507,0 Pixel  
   • Höhe in Pixeln: 8,27 inch × 300 dpi ≈ 2481,0 Pixel  
   • Gesamtpixel pro Seite: 3507,0 × 2481,0 ≈ 8 706 000 Pixel  

3. Unkomprimierte Dateigröße pro Seite (24 Bit = 3 Byte/Pixel)  
   • 8 706 000 Pixel × 3 Byte/Pixel ≈ 26 118 000 Byte ≈ 26,12 MB  

4. Berücksichtigung der Komprimierung auf 40 % (d. h. 0,4)  
   • 26,12 MB × 0,4 ≈ 10,45 MB pro Seite  

5. Tagesvolumen  
   • Täglicher Posteingang: 6000 Seiten  
   • 6000 × 10,45 MB ≈ 62 700 MB = 62,7 GB/Tag  

6. Jahresvolumen  
   • 220 Arbeitstage pro Jahr  
   • 62,7 GB/Tag × 220 Tage ≈ 13 794 GB ≈ 13 794 000 MB  

   In Byte umgerechnet:  
   13 794 GB ≈ 13 794 × 10^9 Byte = 1,3794 × 10^13 Byte  

7. Umrechnung in Tebibyte (TiB)  
   1 TiB = 2^40 Byte = 1 099 511 627 776 Byte  
   • 1,3794 × 10^13 Byte ÷ 1,0995 × 10^12 Byte/TiB ≈ 12,55 TiB  

8. Aufrunden auf volle TiB  
   • ≈ 13 TiB  

Antwort: Für den jährlichen Scan-Bedarf werden aufgerundet etwa 13 TiB Speicherplatz benötigt.

b)
    
1. Umrechnung TiB in GiB:

    12 TiB = 12 × 1.024 = 12.288 GiB

2. Max. Preis gesamt:

    12.288 GiB × 0,30 €/GiB = 3.686,40 EUR

3. Preis pro Festplatte (6 Stück):

    3.686,40 EUR / 6 = 614,40 EUR

## GA2 3. Handlungsschritt

## GA2 4. Handlungsschritt

## GA2 5. Handlungsschritt
