# FIAE Prüfung Teil 2 2014 Sommer
[Prüfung als PDF](https://ccs.jade-hs.de/index.php/f/233955891) (nur intern)
:::spoiler Inhaltsverzeichnis
[toc]
:::
## GA1 1. Handlungsschritt
### aa)
| Vorgang | Beschreibung | Tage | Vorgänger |
| :------- | :------------------------ | :----- | --------- |
| A | Planung | 30 | - |
| B | Netzwerk (Erstellung) | 40 | A |
| C | Hardware (Bereitstellung) | 15 | A |
| D | Software (Bereitstellung) | 30 | A |
| E | Installation Software | 5 | C, D |
| F | Anschluss Computer | 5 | B, E |
| G | Test und Übergabe | 10 | F |
```graphviz
digraph Netzplan {
node [shape=record]
rankdir=LR;
T [label = "{FAZ|FEZ} | {Vorgang|Beschreibung} | {Dauer|GP|FP} | {SAZ|SEZ}"];
}
```
```graphviz
digraph Netzplan {
node [shape=record]
rankdir=LR;
splines=ortho;
A [label= "{0 | 30} | {A | Planung} | {30 | 0 | 0} | {0 | 30}"];
B [label= "{30 | 70} | {B | Netzwerk} | {40 | 0 | 0} | {30 | 70}"];
C [label= "{30 | 45} | {C | Hardware} | {15 | 20 | 15} | {50 | 65}"];
D [label= "{30 | 60} | {D | Software} | {30 | 5 | 5} | {35 | 65}"];
E [label= "{60 | 65} | {E | Installation \n Software} | {5 | 5 | 5} | {65 | 70}"];
F [label= "{70 | 75} | {F | Anschluss \n Computer} | {5 | 0 | 0} | {70 | 75}"];
G [label= "{75 | 85} | {G | Test und \n Übergabe} | {10 | 0 | -} | {75 | 85}"];
A -> {rank=same; B; C; D} [dir="forward"];
{C, D} -> E;
{B, E} -> F;
F -> G;
}
```
### ab)
Projektstart am 02. Juni 2014.
Wann kann Vorgang D frühestens begonnen werden?
* 16. Juli 2014
### ac)
Gesamtpuffer:
* Vorgänge können im Zeitraum des Gesamtpuffers verschoben werden, ohne Projektende zu gefährden (bis max. zum SAZ des Nachfolgers)
Freier Puffer:
* Zeitraum den ein Vorgang verschoben werden kann, ohne den folgenden Vorgang (bis max. FAZ des Nachfolgers) verschieben zu müssen.
### ba)
Cloud Computing (CC):
* TODO
2 betriebswirtschaftliche Vorteile CC:
* TODO
## GA1 2. Handlungsschritt
## GA1 3. Handlungsschritt
```java=
rechnungsausgabe(kunde : Kunde) : double {
array bestellungen[] = Kunde.getBestellungen;
array bestellPositionen[] = Kunde.getBestellungen.getBestellPosition;
int bestellungLaenge = bestellungen.length;
int bestellPositionLaenge = bestellPositionen,length;
int position = bestellPositionen[].getPosNr;
int anzahlSeite = 1;
int anzahlZeile = 0;
double gesamtbetrag;
for(int k = 0; k < bestellungLaenge)
druckeSeitenKopf(anzahlSeite);
druckeRechnungsKopf(kunde, bestellungen[i].getBestellNr();
druckePositionsKopf();
for (int i = 0; i < bestellPositionLaenge i++) {
anzahlZeile++;
druckePositionsZeile(
bestellPosition[i].getArtikel().getArtikelNr(),
bestellPosition[i].getBezeichnung(),
bestellPosition[i].getEinzelPreis(),
bestellPosition[i].getMenge()
);
if(anzahlZeile == 20)
{
anzahlSeite++;
druckeSeitenKopf(anzahlSeite);
druckePositionsKopf();
}
}
for (int j = 0; j < laenge; j++) {
double preis = bestellPosition[i].getEinzelpreis();
int menge = bestellPosition[i].getMenge();
gesamtbetrag += preis * menge;
}
druckeRechnungsFuss(gesamtBetrag, Kunde.getRabatt());
return gesamtbetrag;
```
## GA1 4. Handlungsschritt
```java=
String res = "0100";
laenge = laengeZeichenkette(werbetext);
for (int i = 0; i < laenge; i++) {
char c = zeichen(werbetext, i);
for (int j = 0; j < zeichenSatz.length; j++) {
for (int k = 0; k < zeichenSatz.length; k++) {
String v1 = String.valueOf(c);
String v2 = zeichenSatz[j][k];
if (v1.equals(v2)) {
String werbeZeichen = zeichenSatz[j][0] + zeichenSatz[0][k];
res += werbeZeichen;
}
}
}
}
res += "0000";
System.out.println("The result = " +res);
```
## GA1 5. Handlungsschritt
Datenmodell:
```plantuml
left to right direction
hide circle
entity "Kunde" as Kd {
Kd_Id (PK)
--
Kd_Firma
Kd_Straße
Kd_PLZ
Kd_Ort
}
entity "Rechnung" as Rg {
Rg_Id (PK)
--
Rg_Kdid (FK)
Rg_Datum
Rg_Nummer
}
entity " RechnungsPosition " as RgPos {
RgPos_Id (PK)
--
RgPos_RgId (FK)
RgPos_ArtId (FK)
RgPos_Menge
RgPos_Preis
}
entity "Artikel" as Art {
Art_Id (PK)
--
Art_Nummer
Art_Bezeichung
Art_Preis
}
' Beziehungen '
Kd "1" -- "n" Rg
Rg "1" -- "n" RgPos
RgPos "n" -- "1" Art
```
:::spoiler SQL zum Testen
```sql
CREATE TABLE Kunde (
Kd_Id INT PRIMARY KEY,
Kd_Firma VARCHAR(255),
Kd_Strasse VARCHAR(255),
Kd_PLZ VARCHAR(10),
Kd_Ort VARCHAR(255)
);
CREATE TABLE Rechnung (
Rg_Id INT PRIMARY KEY,
Rg_KdId INT,
Rg_Datum DATE,
Rg_Nummer VARCHAR(20),
FOREIGN KEY (Rg_KdId) REFERENCES Kunde(Kd_id)
);
CREATE TABLE Artikel (
Art_Id INT PRIMARY KEY,
Art_Nummer VARCHAR(20),
Art_Bezeichnung VARCHAR(255),
Art_Preis DECIMAL(10, 2)
);
CREATE TABLE RechnungPosition (
RgPos_Id INT PRIMARY KEY,
RgPos_RgId INT,
RgPos_ArtId INT,
RgPos_Menge INT,
RgPos_Preis DECIMAL(10, 2),
FOREIGN KEY (RgPos_RgId) REFERENCES Rechnung(Rg_Id),
FOREIGN KEY (RgPos_ArtId) REFERENCES Artikel(Art_Id)
);
INSERT INTO Artikel
(Art_Id, Art_Nummer, Art_Bezeichnung, Art_Preis)
VALUES
(1, 'ABC123', 'Schmerzmittel XYZ', 10.50),
(2, 'DEF456', 'Irgendein schmerzmittel Produkt', 4.00),
(3, 'GHI789', 'Lidi Katztee', 3.20);
INSERT INTO Kunde
(Kd_id, Kd_Firma, Kd_Strasse, Kd_Plz, Kd_Ort)
VALUES
(1, 'KundenFirma1', 'Kundenstrasse1', '12345', 'KundenOrt1'),
(2, 'KundenFirma2', 'Kundenstrasse2', '54321', 'KundenOrt2'),
(3, 'KundenFirma3', 'Kundenstrasse3', '98765', 'KundenOrt3');
INSERT INTO
Rechnung (Rg_Id, Rg_KdId, Rg_Datum, Rg_Nummer)
VALUES
(1, 1, '2023-01-01', 'R12345'),
(2, 2, '2023-02-01', 'R54321'),
(3, 3, '2023-03-01', 'R98765');
INSERT INTO RechnungPosition
(RgPos_Id, RgPos_RgId, RgPos_ArtId, RgPos_Menge, RgPos_Preis)
VALUES
(1, 1, 1, 2, 5.99),
(2, 1, 2, 1, 12.50),
(3, 2, 3, 3, 9.99);
```
:::
### a)
Erstellen Sie eine SQL-Abfrage die alle Artikel auflistet, deren Artikel-
bezeichnung die Zeichenkette "Schmerzmittel" oder "schmerzmittel" enthält.
Zu jedem Artikel sollen jeweils alle Attribute ausgegeben werden.
Vorschlag RM:
```sql=
SELECT
*
FROM
Artikel
WHERE
Art_Bezeichnung LIKE %Schmerzmittel% OR
Art_Bezeichnung LIKE %schmerzmittel%;
```
### b)
Erstellen Sie eine SQL-Abfrage die alle Kunden und deren Umsätze auflisten.
Zu jedem Kunden sollen alle Attribute ausgegeben werden.
Die Liste soll nach Umsatz absteigen sortiert werden.
Vorschlag RM:
```sql=
SELECT
Kunde.*,
SUM(RgPos_Menge * RgPos_Preis) as Umsatz
FROM
Kunde,
Rechnung,
RechnungPosition
WHERE
Kd_Id = Rg_KdId AND
Rg_Id = RgPos_RgId
GROUP BY
Kd_id
ORDER BY
Umsatz DESC;
```
```sql=
SELECT
Kunde.Kd_Id,
Kunde.Kd_Firma,
SUM(RechnungPosition.RgPos_Menge * RechnungPosition.RgPos_Preis) AS Gesamtumsatz
FROM
Kunde
JOIN Rechnung ON Kunde.Kd_Id = Rechnung.Rg_KdId
JOIN RechnungPosition ON Rechnung.Rg_Id = RechnungPosition.RgPos_RgId
GROUP BY
Kunde.Kd_Id, Kunde.Kd_Firma
ORDER BY
Gesamtumsatz DESC;
```
### c)
Eertellen Sie eine SQL-Abfrage die für jeden Artikel folgendes ermittelt:
| Art_id | Art_Nummer | Art_Bezeichnung | Art_Preis | MengeGesamt | AnzahlRechPos |
| :----- | ---------: | :-------------- | --------: | ----------: | ------------: |
| 76732 | IB767612 | B Schmerzmittel | 10,50 | 451 | 391 |
| 09239 | HM674786 | Lidi Katztee | 10,50 | 7514 | 2.121 |
```sql=
-- Alternativ SELECT Artikel.*,
SELECT
Art_id,
Art_Nummer,
Art_Bezeichnung,
Art_Preis,
SUM(RgPos_Menge) AS MengeGesamt,
COUNT(RgPos_Id) AS AnzahlRechPos
FROM
Artikel
LEFT JOIN
RechnungPostition ON Art_Id = RgPos_ArtId;
GROUP BY
Art_id
```
### d)
Deutschland ist in zehn PLZ-Regionen (0-9 1. Stelle der PLZ) unterteilt.
Erstelle eine SQL-Abfrage die jede PLZ-Region (0-9) den Gesamtumsatz ausweist.
Die Liste soll nach Gesamtumsatz absteigend sortiert werden.
| Gebiet | Umsatz |
| ------ | ------- |
| 5 | 154.000 |
| 8 | 148.000 |
| 3 | 134.000 |
| ... | ... |
Hinweis: Die Kopfzeile wird nicht mit ausgegeben.
```sql=
SELECT
LEFT(Kd_PLZ, 1 ) AS Gebiet,
SUM(RgPos_Preis * RgPos_Menge) AS Umsatz
FROM
Kunde
INNER JOIN
Rechnung ON (Kd_Id = Rg_KdId)
INNer JOIN
RechnungPosition ON (Rg_Id = RgPos_RgId)
GROUP BY
Gebiet
ORDER BY
Umsatz DESC;
```
## GA2 1. Handlungsschritt
## GA2 2. Handlungsschritt
## GA2 3. Handlungsschritt
## GA2 4. Handlungsschritt
## GA2 5. Handlungsschritt