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.
- Eingabe:
text. - Wenn
textleer ist, wird nicht gespeichert. - Wenn
textgueltig ist, wird eine neue Notiz erstellt. - Die Notiz bekommt eine neue ID und ein Datum.
- 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
- Fuege einen Fehlerfall fuer negative Wiederholungszahlen hinzu.
- Plane, was passiert, wenn
kartenleer ist. - 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
- Warum pruefen wir, ob
kurs.lektionenleer ist? - Was passiert, wenn eine erledigte ID nicht mehr im Kurs existiert?
- 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
- Erweitere den Algorithmus um
removeFromCart(productId). - Wenn Menge auf
0faellt, soll der Eintrag geloescht werden. - 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
- Waehle zwei Lernsituationen und schreibe dazu einen Programmablaufplan.
- Waehle eine Lernsituation und schreibe dazu ein Struktogramm.
- Schreibe Pseudocode fuer eine Funktion
exportData(). - Schreibe Pseudocode fuer eine Funktion
importData(jsonText). - Plane Fehlerfaelle fuer kaputten Import-Text.
- Uebersetze eine Lernsituation danach in JavaScript oder Dart.