Prüfungsvorbereitung

Kursinhalte

  • Zeitansatz 75 Minuten

Prüfungsaufgabe: Bücherverwaltungssystem

Ausgangslage:

Sie arbeiten in einer kleinen Bibliothek, die ihre Buchverwaltung digitalisieren möchte. Derzeit gibt es eine JSON-Datei mit einer Liste an Büchern. Jedes Buch enthält Titel, Autor, Erscheinungsjahr und Verfügbarkeit.

Datei: buecher.json

[
  {
    "titel": "Der Prozess",
    "autor": "Franz Kafka",
    "erscheinungsjahr": 1925,
    "verfuegbar": true
  },
  {
    "titel": "Faust",
    "autor": "Johann Wolfgang von Goethe",
    "erscheinungsjahr": 1808,
    "verfuegbar": false
  }
]

Bereits vorhandene Python-Dateien:

class Buch:
    def __init__(self, titel, autor, erscheinungsjahr, verfuegbar):
        self.titel = titel
        self.autor = autor
        self.erscheinungsjahr = erscheinungsjahr
        self.verfuegbar = verfuegbar

    def anzeigen(self):
        status = "verfügbar" if self.verfuegbar else "ausgeliehen"
        print(f"{self.titel} von {self.autor} ({self.erscheinungsjahr}) – {status}")
# TODO: Hier soll später die Hauptlogik stehen

Ihre Aufgabe:

Erweitern Sie das Projekt um folgende Funktionalitäten:

  1. Modulstruktur:
    • Importieren Sie die Klasse Buch aus buch.py in main.py.
  2. Dateiverarbeitung und JSON:
    • Lesen Sie die Datei buecher.json ein und erzeugen Sie für jeden Eintrag ein Objekt der Klasse Buch.
    • Geben Sie alle Bücher mit der Methode anzeigen() aus.
  3. Neue Funktionalität hinzufügen:
    • Erstellen Sie eine Funktion, mit der ein neues Buch über Benutzereingabe hinzugefügt wird.
    • Speichern Sie die aktualisierte Liste wieder in buecher.json.

Hinweise zur Bewertung:

  • Saubere Modultrennung
  • Fehlerfreies Einlesen und Schreiben von JSON-Daten
  • Korrekte Verwendung von Klassen und Objekten
  • Funktionierende Interaktion mit der Benutzereingabe

Musterlösung

Zum Anzeigen der Lösung die Lehrkraft fragen.
Hinweis: Die Musterlösung ist als solche zu betrachten. Nicht alle Details aus der Musterlösung müssen für eine volle Punktzahl erfüllt sein. Wichtig ist, dass die Kernfunktionen gegeben sind. Wie diese erreicht werden, wird nicht benotet.

Datei: main.py

import json
from buch import Buch

DATEINAME = "buecher.json"

def buecher_laden():
    """Lädt Bücher aus der JSON-Datei und gibt eine Liste von Buch-Objekten zurück."""
    try:
        with open(DATEINAME, "r", encoding="utf-8") as f:
            daten = json.load(f)
            return [Buch(**eintrag) for eintrag in daten]
    except FileNotFoundError:
        print("Datei nicht gefunden. Es wird eine leere Liste erstellt.")
        return []
    except json.JSONDecodeError:
        print("Fehler beim Lesen der JSON-Datei.")
        return []

def buecher_speichern(buecher_liste):
    """Speichert die aktuelle Liste der Bücher in der JSON-Datei."""
    daten = [
        {
            "titel": buch.titel,
            "autor": buch.autor,
            "erscheinungsjahr": buch.erscheinungsjahr,
            "verfuegbar": buch.verfuegbar
        }
        for buch in buecher_liste
    ]
    with open(DATEINAME, "w", encoding="utf-8") as f:
        json.dump(daten, f, ensure_ascii=False, indent=2)

def neues_buch_hinzufuegen():
    """Fragt Benutzereingaben ab und gibt ein neues Buch-Objekt zurück."""
    print("\n--- Neues Buch hinzufügen ---")
    titel = input("Titel: ")
    autor = input("Autor: ")
    try:
        erscheinungsjahr = int(input("Erscheinungsjahr: "))
    except ValueError:
        print("Ungültiges Jahr. Standardwert 2000 wird gesetzt.")
        erscheinungsjahr = 2000

    verfuegbar_input = input("Verfügbar? (ja/nein): ").strip().lower()
    verfuegbar = verfuegbar_input == "ja"

    return Buch(titel, autor, erscheinungsjahr, verfuegbar)

def main():
    buecher = buecher_laden()

    print("\n--- Bücherliste ---")
    for buch in buecher:
        buch.anzeigen()

    buch_neu = neues_buch_hinzufuegen()
    buecher.append(buch_neu)

    buecher_speichern(buecher)
    print("\nDas Buch wurde erfolgreich hinzugefügt und gespeichert.")

if __name__ == "__main__":
    main()

Datei: buecher.json

[
  {
    "titel": "Der Prozess",
    "autor": "Franz Kafka",
    "erscheinungsjahr": 1925,
    "verfuegbar": true
  },
  {
    "titel": "Faust",
    "autor": "Johann Wolfgang von Goethe",
    "erscheinungsjahr": 1808,
    "verfuegbar": false
  }
]