FI-25So-FIA-2E
Frei nach William Shakespeares Hamlet: Es ist etwas faul in „THE LÄND“…
Aufgabe 1 Entwurf und Umsetzung des Web Designs
🤷😳
Aufgabe 2.2.2 Struktogramm erweitern
🤷😳😵💫🫨😖
Planungs-Entwurf für mich mit PAP
Erkenntnis: Code ohne GOTO wird hässlich, Code muss wiederholt eingebaut werden.
Oder die ganze Datei einlesen und vorverdaut in Speicher laden und dann Berechnungen anstellen.
Java Programm
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.*; // Pfad-Klasse
public class Auswertung{
public static void auswerten(){
System.out.print("\f"); // Konsole leeren
int i;
double hauptgerichtBewertung[]=new double[5];// Array für DurchschnittsBewertungen max 5? Tagesgerichte
for(i=0;i<hauptgerichtBewertung.length;i++){
hauptgerichtBewertung[i] = 7.0; // Duchschnittsbewertung falls Gericht nicht auftaucht
}
double bestDurchschnitt = 7.0; // Bester Durchschnitt
int bestNummer = -1; // Nummer des Gerichts mit bestem Duchschnitt
String bestesGericht=""; // Name des besten Gerichts
String aktGericht;
int TG_ID_akt; // ID des aktuellen Tagesgerichts
double bewertungSumme; // Aufsummieren der Bewertungen des akt Gerichts
int bewertungAnzahl; // Anzahl der Bewertungen des akt Gerichts
Path pfad = Paths.get("Bewertungen.csv"); // Dateipfad
String zeile;
String[] datensatz;
try { // versuchen wir mal folgenden Code aus zu fuehren
BufferedReader ein = Files.newBufferedReader(pfad); // oeffne Datenstrom
if(ein.readLine()==null || (zeile = ein.readLine())==null){ // Kopf überspringen und erste Zeile lesen?
ein.close(); // sonst Ende
System.out.println("Datei hat keine Daten");
return;
}
datensatz = zeile.split(","); // zerlegen
TG_ID_akt = Integer.parseInt(datensatz[0]); // ID des aktuellen Gerichts
aktGericht = datensatz[1];
bewertungSumme=Integer.parseInt(datensatz[2]); // Bewertung lesen
bewertungAnzahl=1;
while ((zeile = ein.readLine())!= null){ // solange Datensaetze vorhanden, lese Zeile
datensatz = zeile.split(",");
if(TG_ID_akt==Integer.parseInt(datensatz[0])){ // wenn gleiches Tagesgericht
bewertungSumme+=Integer.parseInt(datensatz[2]); // Bewertung hinzurechnen
bewertungAnzahl++;
}
else{ // Durchschnitt berechnen und für nächstes Gericht initalisieren
hauptgerichtBewertung[TG_ID_akt-1]=bewertungSumme/bewertungAnzahl; // Durchschnitt berechnen
System.out.printf("ID: %d Anzahl %d Durchschnitt %3.2f\n",TG_ID_akt,bewertungAnzahl,hauptgerichtBewertung[TG_ID_akt-1]);
if(hauptgerichtBewertung[TG_ID_akt-1]<bestDurchschnitt){ // Bestes Gericht ermitteln
bestDurchschnitt = hauptgerichtBewertung[TG_ID_akt-1];
bestesGericht=aktGericht;
bestNummer=TG_ID_akt;
}
TG_ID_akt = Integer.parseInt(datensatz[0]); // ID des aktuellen Gerichts
aktGericht=datensatz[1];
bewertungSumme=Integer.parseInt(datensatz[2]); // Bewertung lesen
bewertungAnzahl=1;
}
}
hauptgerichtBewertung[TG_ID_akt-1]=bewertungSumme/bewertungAnzahl; // Duchschnitt berechnen
System.out.printf("ID: %d Anzahl %d Durchschnitt %3.2f\n",TG_ID_akt,bewertungAnzahl,hauptgerichtBewertung[TG_ID_akt-1]);
if(hauptgerichtBewertung[TG_ID_akt-1]<bestDurchschnitt){ // Bestes Gericht ermitteln
bestDurchschnitt = hauptgerichtBewertung[TG_ID_akt-1];
bestesGericht=aktGericht;
bestNummer=TG_ID_akt;
}
ein.close(); // schliesse Datenstrom
System.out.printf("Bestes Gericht: %d %s Durchschnitt %3.2f\n",bestNummer,bestesGericht,bestDurchschnitt);
ein = Files.newBufferedReader(pfad); // oeffne Datenstrom um wieder auf Anfang zu kommen
ein.readLine(); // Kopf weg lesen
while ((zeile = ein.readLine())!= null){
datensatz = zeile.split(",");
if(bestNummer==Integer.parseInt(datensatz[0])){ // wenn ID passt
System.out.println(datensatz[3]);
}
}
ein.close(); //
} catch (IOException e) { // falls ein IO-Ausnahmefehler auftritt tue folgendes
System.out.println("IOException: " + e); // gib den Fehler auf der Konsole aus
}
}
}
CSV-Datei „Bewertungen.csv“
TG_ID,Bezeichnung,Schulnote,Kommentar
1,"Hähnchenbrust mit Gemüse",1,"Sehr lecker!"
1,"Hähnchenbrust mit Gemüse",2," Immer wieder gerne."
2,"Vegetarische Lasagne",3,""
3,"Rinderroulade mit Kartoffeln",1,"Perfekt!"
4,"Gebratener Lachs mit Reis",2,"Frisch und lecker."
5,"Gemüsecurry mit Reis",3,"Etwas zu würzig."
5,"Gemüsecurry mit Reis",2,"Gut, aber etwas zu scharf."
Ausgaben des Programms
ID: 1 Anzahl 2 Durchschnitt 1,50
ID: 2 Anzahl 1 Durchschnitt 3,00
ID: 3 Anzahl 1 Durchschnitt 1,00
ID: 4 Anzahl 1 Durchschnitt 2,00
ID: 5 Anzahl 2 Durchschnitt 2,50
Bestes Gericht: 3 "Rinderroulade mit Kartoffeln" Durchschnitt 1,00
"Perfekt!"
Vereinfachtes Struktogramm zum Java-Code
ToDo: Python-Lösung erstellen, die eigentlich gute Aufgaben-Idee so formulieren, dass sie lösbar ist.