Algo Kurs JSON Kurs ansehen

Lektion 06 - JSON Lernsituationen

Algo-Aufgaben mit JSON-Speicherung

In dieser Lektion bekommst du mehrere realistische Lernsituationen. Jede Situation trainiert eine andere Speicherlogik: erstellen, suchen, aktualisieren, loeschen, validieren und zusammenfassen.

Arbeitsweise fuer alle Situationen

Bearbeite jede Situation gleich. Dadurch lernst du, Probleme sauber zu zerlegen, statt direkt wild Code zu schreiben.

Arbeitsweise:
  1. Welche Daten gibt es?
  2. Was ist die Eingabe?
  3. Was ist die Ausgabe?
  4. Welche Entscheidungen gibt es?
  5. Welche Schleifen gibt es?
  6. Wann wird geladen?
  7. Wann wird gespeichert?
  8. Welche Fehlerfaelle gibt es?

1. Lernsituation: Neue Notiz speichern

Eine Notizen-App speichert mehrere Notizen als JSON-Liste. Eine neue Notiz darf nicht leer sein.

  1. Eingabe: text.
  2. Wenn text leer ist, wird nicht gespeichert.
  3. Wenn text gueltig ist, wird eine neue Notiz erstellt.
  4. Die Notiz bekommt eine neue ID und ein Datum.
  5. Danach wird die komplette Notizenliste gespeichert.
Pseudocode:

Funktion addNote(text):
  Wenn text leer ist:
    Gib Meldung "Notiz darf nicht leer sein" aus
    Beende Funktion

  notizen = ladeNotizen()
  neueNotiz = Erstelle Notiz mit neuer ID, text und aktuellem Datum
  Fuege neueNotiz zu notizen hinzu
  Speichere notizen als JSON
  Gib Meldung "Notiz gespeichert" aus

Uebung: Erweitere den Pseudocode so, dass doppelte Notiztexte nicht erlaubt sind.

2. Lernsituation: Lernkarte aktualisieren

Eine Lernkarten-App speichert Karten mit Frage, Antwort und Wiederholungszahl. Wenn eine Karte geuebt wird, soll die Wiederholungszahl steigen.

Daten:
  karte.id
  karte.frage
  karte.antwort
  karte.wiederholungen

Pseudocode:

Funktion markCardPracticed(cardId):
  karten = ladeKarten()
  gefunden = false

  Fuer jede karte in karten:
    Wenn karte.id gleich cardId ist:
      karte.wiederholungen = karte.wiederholungen + 1
      gefunden = true

  Wenn gefunden gleich false ist:
    Gib Meldung "Karte nicht gefunden" aus
    Beende Funktion

  Speichere karten als JSON
  Gib Meldung "Karte aktualisiert" aus
  1. Fuege einen Fehlerfall fuer negative Wiederholungszahlen hinzu.
  2. Plane, was passiert, wenn karten leer ist.
  3. Zeichne die Schleife als Struktogramm.

3. Lernsituation: Kursfortschritt berechnen

Ein Lernsystem speichert alle Lektionen und die IDs der erledigten Lektionen. Daraus soll berechnet werden, wie viel Prozent erledigt sind.

Pseudocode:

Funktion berechneFortschritt:
  kurs = ladeKurs()
  erledigteLektionen = ladeErledigteLektionen()

  Wenn kurs.lektionen leer ist:
    Gib 0 zurueck

  anzahlAlle = Anzahl von kurs.lektionen
  anzahlErledigt = 0

  Fuer jede lektion in kurs.lektionen:
    Wenn erledigteLektionen enthaelt lektion.id:
      anzahlErledigt = anzahlErledigt + 1

  prozent = anzahlErledigt / anzahlAlle * 100
  Gib prozent zurueck
  1. Warum pruefen wir, ob kurs.lektionen leer ist?
  2. Was passiert, wenn eine erledigte ID nicht mehr im Kurs existiert?
  3. Erweitere den Algorithmus um eine Ausgabe wie 3 von 10 erledigt.

4. Lernsituation: Einstellungen speichern

Eine App speichert Einstellungen: Theme, Sprache und ob Hinweise angezeigt werden. Ungueltige Werte sollen ersetzt werden.

Pseudocode:

Funktion ladeEinstellungen:
  daten = Lade JSON mit Schluessel "settings"

  Wenn daten fehlen:
    Gib StandardEinstellungen zurueck

  einstellungen = Wandle JSON in Daten um

  Wenn einstellungen.theme nicht "light" oder "dark" ist:
    einstellungen.theme = "light"

  Wenn einstellungen.sprache leer ist:
    einstellungen.sprache = "de"

  Wenn einstellungen.showHints nicht wahr oder falsch ist:
    einstellungen.showHints = true

  Speichere korrigierte einstellungen als JSON
  Gib einstellungen zurueck

Diese Situation zeigt einen wichtigen Spezialfall: Beim Laden werden Daten nicht nur gelesen, sondern auch repariert und wieder gespeichert.

5. Lernsituation: Warenkorb mit JSON

Ein Warenkorb speichert Produkte mit ID, Name, Preis und Menge. Wenn ein Produkt erneut hinzugefuegt wird, soll nicht ein zweiter Eintrag entstehen. Stattdessen wird die Menge erhoeht.

Pseudocode:

Funktion addToCart(product):
  warenkorb = ladeWarenkorb()
  gefunden = false

  Fuer jeden eintrag in warenkorb:
    Wenn eintrag.productId gleich product.id ist:
      eintrag.menge = eintrag.menge + 1
      gefunden = true

  Wenn gefunden gleich false ist:
    neuerEintrag = Erstelle WarenkorbEintrag aus product mit menge 1
    Fuege neuerEintrag zu warenkorb hinzu

  Speichere warenkorb als JSON
  Gib Meldung "Warenkorb gespeichert" aus
  1. Erweitere den Algorithmus um removeFromCart(productId).
  2. Wenn Menge auf 0 faellt, soll der Eintrag geloescht werden.
  3. Berechne danach die Gesamtsumme des Warenkorbs.

6. Lernsituation: Speicherstand zuruecksetzen

Eine App soll den Lernfortschritt zuruecksetzen. Das ist einfach, aber gefaehrlich: Man muss sicher sein, dass der User das wirklich will.

Pseudocode:

Funktion resetProgress(confirm):
  Wenn confirm nicht wahr ist:
    Gib Meldung "Zuruecksetzen abgebrochen" aus
    Beende Funktion

  Loesche gespeicherten User
  Loesche gespeicherte Aufgaben
  Loesche gespeicherten Fortschritt

  Speichere StandardUser als JSON
  Gib Meldung "Fortschritt wurde zurueckgesetzt" aus

Uebung: Plane eine zweite Sicherheitsabfrage, zum Beispiel Eingabe von RESET.

7. Abschlussaufgaben

  1. Waehle zwei Lernsituationen und schreibe dazu einen Programmablaufplan.
  2. Waehle eine Lernsituation und schreibe dazu ein Struktogramm.
  3. Schreibe Pseudocode fuer eine Funktion exportData().
  4. Schreibe Pseudocode fuer eine Funktion importData(jsonText).
  5. Plane Fehlerfaelle fuer kaputten Import-Text.
  6. Uebersetze eine Lernsituation danach in JavaScript oder Dart.
Zur Algo-Uebersicht