# 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