FI-23Wi-FIA-2E

Lösung zur Aufgabe Winter 2023 Anwendungsentwickler Entwicklung und Umsetzung von Algorithmen.
Leider kann ich hier nicht die Prüfungsaufgabe dazu veröffentlichen, verlinken, wer das ändern will hier mitmachen:
[Bildungsgerechtigkeit statt privater Profit: Alte Prüfungsaufgaben digital & frei zugänglich machen!]

Aufgabe 1

Der Aufgabenersteller hat Tabellen zur Formatierung des Formulars verwendet und damit seine Vorgabe erzeugt, die von den SuS in der Prüfung erstellt werden soll. Dies ist nicht barrierefrei und entspricht nicht zeitgemäßem Design und ist daher mit meinem Unterricht nicht vereinbar. Hier eine Lösung, die sich an der Aufgabe ohne Tabellen anlehnt.

<!DOCTYPE html>
<html lang="de">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Kita Stuttgart Anmeldung</title>
  <style>
    .leftl {
      float: left;
      width: 100px;
    }
  </style>
</head>

<body>
  <form method="post" action="mailto:info@kitaStuttgart.com">
    <h2>Kita Stuttgart Onlineanmeldung</h2>
    <label class="leftl" for="Vorname">Vorname:</label>
    <input type="text" name="Vorname" id="Vorname"><br>
    <label class="leftl" for="Nachname">Nachname:</label>
    <input type="text" name="Nachname" id="Nachname"><br>
    <label class="leftl" for="Email">Email:</label>
    <input type="email" name="Email" id="Email"><br>
    <label class="leftl" for="Geburtsdatum">Geburtsdatum: </label>
    <input type="date" name="Geburtsdatum" id="Geburtsdatum"><br>
    <label for="Essen">Kind ernährt sich:</label><br>
    <select size="3" name="Essen" id="Essen">
      <option value="Vollkost">Vollkost</option>
      <option value="Vegan">Vegan</option>
      <option value="Vegetarisch">Vegetarisch</option>
    </select>
    <br>
    <p>Folgende Personen sind berechtigt das Kind abzuholen: <br>
      (Mehrfachauswahl möglich)</p>
    <input type="checkbox" id="Mutter" name="Mutter">
    <label for="Mutter">Mutter</label>
    <input type="checkbox" id="Vater" name="Vater">
    <label for="Vater">Vater</label>
    <input type="checkbox" id="Geschwister" name="Geschwister"> 
    <label for="Geschwister">Geschwister ab 12 Jahre</label>
    <br>
    <br>
    <label for="zusatz">Zusätzlich sind folgende Personen berechtigt das Kind abzuholen</label>
    <br>
    <textarea name="zusatz" id="zusatz" cols="60" rows="2"></textarea>
    <br>
    <br>
    <label for="Stunden">Wie viele Betreuungsstunden benötigen Sie täglich? <br> (nur eine Auswahl möglich)</label>
    <br>
    <br>
    <input type="radio" name="Stunden" id="6" value="6">
    <label for="6">6</label><br>
    <input type="radio" name="Stunden" id="8" value="8">
    <label for="8">8</label><br>
    <input type="radio" name="Stunden" id="10" value="10">
    <label for="10">10</label><br>
    <br>
    <label for="Mitteilungen">Weitere Mitteilungen</label><br>
    <textarea name="Mitteilungen" id="Mitteilungen" cols="60" rows="4"></textarea>
    <br>
    <br>
    <button type="submit">Anmeldung Versenden</button><br>
    <br>
    <a href="https://www.kita-stuttgart.de">Zurück zur Statseite Kita Stuttgart</a>
  </form>
</body>
</html>

Aufgabe 2.1

Struktogramm
Struktogramm

Aufgabe 2.2

Polymorphie oder Polymorphismus (griechisch für Vielgestaltigkeit) ist ein Konzept in der objektorientierten Programmierung, das ermöglicht, dass ein Bezeichner abhängig von seiner Verwendung Objekte unterschiedlichen Datentyps annimmt.

  • Bei statischer Polymorphie, Überladen von Operationen, werden in der selben Klasse Operationen mit dem selben Namen aber unterschiedlichen Parameterdatentypen-Listen mehrfach definiert, z.B: plus(int, int); plus(double, double). Die Entscheidung welche Operation verwendet wird erfolgt schon zur Compilezeit, ist daher statisch.
  • Bei dynamischer Polymorphie, Überschreiben von Operationen, werden in Unterklassen Operationen re-definiert, also in einer Unterklasse gibt es die Operation nochmal mit der selben Signatur wie in der Oberklasse. Die Entscheidung welche Operation ausgeführt wird kann erst zur Laufzeit, dynamisch, erfolgen.
  • Die Signatur ist der Name der Operation mit der Liste der Parameterdatentypen, z.B.: plus(int, int); plus(double, double).

Aufgabe 2.3.1

public abstract class Person{
  private String nachname;
  public void setNachname(String n){
    nachname = n; 
  }
  public String getNachname(){
    return nachname;
  }
  public abstract boolean istGut();
}

Aufgabe 2.3.2

public class Kind extends Person{
  private double noteVorschultest;
  public void setNote(double n){
      noteVorschultest = n;
  }
  public double getNote(){
    return noteVorschultest;
  }
  public boolean istGut(){
    return noteVorschultest<2.5;
  }
}

Aufgabe 2.3.3

public class Erzieherin extends Person{
  private int anzahlBerufsjahre;
  public void setBerufsjahre(int n){
      anzahlBerufsjahre = n;
  }
  public int getBerufsjahre(){
    return anzahlBerufsjahre;
  }
  public boolean istGut(){
    return anzahlBerufsjahre > 7;
  }
}

Aufgabe 2.3.4

public class Test{
  public static String input(){ // Konsoleneingabe-Hilfsfunktion
    return new java.util.Scanner(System.in).next();
  }
  public static void main(String args[]){
    Person[] personenListe= new Person[10];
    System.out.print("\f"); // Konsole löschen
    String eingabe;
    for(int i=0; i<personenListe.length;i++){
      System.out.println("Kind oder Erzieherin? (k/e)");
      eingabe = input();
      if (eingabe.equals("k")){
        personenListe[i]= new Kind();
        System.out.println("Name des Kindes?");
        personenListe[i].setNachname(input());
        System.out.println("Note im Vorschultest?");
        ((Kind)personenListe[i]).setNote(Double.parseDouble(input())); // Pervers!
      }
      if (eingabe.equals("e")){
        Erzieherin e = new Erzieherin(); // gegen perversen Typecast
        personenListe[i]= e;
        System.out.println("Name der Erzieherin?");
        personenListe[i].setNachname(input());
        System.out.println("Anzahl der Berufsjahre?");
        e.setBerufsjahre(Integer.parseInt(input())); 
      }
      System.out.println("Weitere Personen aufnehmen? (j/n)");
      if(!input().equals("j")) break;
    }
    for(int i=0; i< personenListe.length; i++){
      if(personenListe[i]==null) break; // Liste zu Ende
      System.out.printf("%2d. %-15s %s\n",i+1,personenListe[i].getNachname(),personenListe[i].istGut()?"<- ist gut":"");
    }
  }
}