3. Prüfungsvorbereitung

Kursinhalte

  • Zeitansatz 45 Minuten

Prüfungsaufgabe: Reklamationsverwaltung

Ausgangslage:

In einem Reparaturservice für Elektrogeräte sollen Kundendaten und Reklamationen verwaltet werden. Es gibt bereits eine Datei kunde.py, die eine Klasse Kunde enthält, sowie eine JSON-Datei kunden.json, in der alle Kundendaten gespeichert werden.

Datei: kunde.py

class Kunde:
    def __init__(self, kunden_id, name, email):
        self.kunden_id = kunden_id
        self.name = name
        self.email = email

    def __str__(self):
        return f"{self.kunden_id}: {self.name} ({self.email})"

Datei: kunden.json

[
    {"kunden_id": 1, "name": "Mara Berger", "email": "m.berger@example.com"},
    {"kunden_id": 2, "name": "Luca Klein", "email": "l.klein@example.com"}
]

Ihre Aufgabe:

Erweitern Sie die bestehende Anwendung um eine Funktion zur Verwaltung von Reklamationen. Die Reklamationen sollen in einer separaten JSON-Datei gespeichert werden. Jede Reklamation gehört zu genau einem Kunden.

Erstellen Sie dazu:

  1. Ein neues Modul reklamation.py, das eine Klasse Reklamation enthält.
  2. Die Klasse Reklamation soll folgende Attribute haben:
    • reklamations_id (int)
    • kunden_id (int)
    • produktname (str)
    • beschreibung (str)
    • status (str, z. B. „offen“, „in Bearbeitung“, „erledigt“)
  3. Eine Methode speichern_in_datei(self, dateiname), die die Reklamation im JSON-Format in eine Datei speichert. Wenn die Datei noch nicht existiert, soll sie erstellt werden.
  4. Eine weitere Funktion lade_reklamationen(dateiname: str) -> list[Reklamation], die alle Reklamationen aus einer Datei lädt und als Liste von Objekten zurückgibt.

# Projektstruktur
├── kunde.py           # dient der Orientierung - kann, muss aber nicht verwendet werden
├── reklamation.py     ← zu erstellen
├── kunden.json.       # dient der Orientierung - kann, muss aber nicht verwendet werden
├── reklamationen.json ← wird durch Programm erstellt
└── main.py            ← soll zur Ausführung erstellt werden

Hinweise zur Bewertung:

  • Saubere Modultrennung
  • Fehlerfreies Einlesen und Schreiben von JSON-Daten
  • Korrekte Verwendung von Klassen und Objekten

Musterlösung:

Bei Lehrkraft hier freischalten lassen.

Datei: reklamation.py

import json
import os

class Reklamation:
    def __init__(self, reklamations_id, kunden_id, produktname, beschreibung, status):
        self.reklamations_id = reklamations_id
        self.kunden_id = kunden_id
        self.produktname = produktname
        self.beschreibung = beschreibung
        self.status = status

    def speichern_in_datei(self, dateiname):
        eintrag = self.__dict__
        if os.path.exists(dateiname):
            with open(dateiname, "r", encoding="utf-8") as f:
                daten = json.load(f)
        else:
            daten = []
        daten.append(eintrag)
        with open(dateiname, "w", encoding="utf-8") as f:
            json.dump(daten, f, indent=2)

    def __str__(self):
        return f"[{self.reklamations_id}] Produkt: {self.produktname}, Status: {self.status}"

def lade_reklamationen(dateiname):
    reklamationen = []
    try:
        with open(dateiname, "r", encoding="utf-8") as f:
            daten = json.load(f)
            for eintrag in daten:
                reklamation = Reklamation(**eintrag)
                reklamationen.append(reklamation)
    except FileNotFoundError:
        pass
    return reklamationen

Datei: main.py

from reklamation import Reklamation, lade_reklamationen

# Beispielhafte Erstellung einer Reklamation
reklamation1 = Reklamation(1001, 1, "Toaster X1", "Heizt nicht mehr", "offen")
reklamation1.speichern_in_datei("reklamationen.json")

# Laden und Ausgabe
alle = lade_reklamationen("reklamationen.json")
for r in alle:
    print(r)