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

Formular Vorgabe

Hinweise:

Ich habe die Aufgabe ein wenig modifiziert:
-kein Versenden an E-Mailadresse.

Überschrift „Kita Stuttgart Onlineanmeldung“ ist <h2>

Die Felder für Vorname, Nachname und Email müssen 35 Zeichen aufnehmen können.

Das Textfeld „Zusätzlich sind folgende Personen berechtigt das Kind abzuholen “ muss zwei Textzeilen haben und das Textfeld „Weitere Mitteilungen“ 4 Textzeilen.

Das Formular wird an kitastuttgart.com/anmeldung.php gesendet.

Die Startseite hat die Adresse kitastuttgart.com.

Lösung mit Tabelle
<!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>
</head>

<body>
  <form method="post" action="kitastuttgart.com/anmeldung.php">
    <h2>Kita Stuttgart Onlineanmeldung</h2>
    <table>
      <tr>
        <td><label for="Vorname">Vorname:</label></td>
        <td><input type="text" name="Vorname" id="Vorname" size="35"></td>
      </tr>
      <tr>
        <td><label for="Nachname">Nachname:</label></td>
        <td><input type="text" name="Nachname" id="Nachname" size="35"></td>
      </tr>
      <tr>
        <td><label for="Email">Email:</label></td>
        <td><input type="email" name="Email" id="Email" size="35"></td>
      </tr>
      <tr>
        <td><label for="Geburtsdatum">Geburtsdatum: </label></td>
        <td><input type="date" name="Geburtsdatum" id="Geburtsdatum"></td>
      </tr>
    </table>
    <br>
    <label for="Essen">Mein 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>
  </form>
  <a href="kitastuttgart.com">Zurück zur Statseite Kita Stuttgart</a>
</body>
</html>
Lösung ohne Tabelle
<!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="kitastuttgart.com/anmeldung.php">
    <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>
  </form>
  <a href="kitastuttgart.com">Zurück zur Statseite Kita Stuttgart</a>
</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":"");
    }
  }
}