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

PAP-Planungsentwurf
PAP-Planungsentwurf

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

Struktogramm
Struktogramm

ToDo: Python-Lösung erstellen, die eigentlich gute Aufgaben-Idee so formulieren, dass sie lösbar ist.