2. Prüfungsvorbereitung

Kursinhalte

  • Zeitansatz 45 Minuten

Prüfungsaufgabe: Reklamationsverwaltung

Ausgangslage:

Die Fahrradwerkstatt RadFix verwaltet Reklamationen ihrer Kunden digital. Dafür gibt es eine bestehende Codebasis, die bereits Kundendaten einliest und einfache Objekte für Reklamationen verwendet. Die Daten werden in einer JSON-Datei gespeichert. Die bisherige Anwendung erlaubt jedoch nur das Speichern, nicht aber das gezielte Auswerten der Reklamationen.

Datei: reklamation.json

[
    {
        "kundennummer": "K1001",
        "produkt": "E-Bike Akku",
        "beschreibung": "Akku lädt nicht mehr",
        "datum": "2025-05-28",
        "status": "offen"
    },
    {
        "kundennummer": "K1002",
        "produkt": "Kettenschaltung",
        "beschreibung": "Springt beim Schalten",
        "datum": "2025-05-25",
        "status": "bearbeitet"
    }
]

Bereits vorhandene Python-Datei: reklamation.py

import json

class Reklamation:
    def __init__(self, kundennummer, produkt, beschreibung, datum, status):
        self.kundennummer = kundennummer
        self.produkt = produkt
        self.beschreibung = beschreibung
        self.datum = datum
        self.status = status

def lade_reklamationen(dateipfad):
    with open(dateipfad, 'r') as datei:
        daten = json.load(datei)
        reklamationen = []
        for eintrag in daten:
            r = Reklamation(**eintrag)
            reklamationen.append(r)
        return reklamationen

Ihre Aufgabe:

Erweitern Sie das Projekt um folgende Funktionalitäten:

  1. Erweiterung der Klasse Reklamation:
    • Fügen Sie der Klasse eine Methode ist_offen() hinzu, die True zurückgibt, wenn der Status "offen" ist.
      Erstellen SIe zusätzlich eine Methode als_dict(), die das Objekt als Dictionary zurückgibt (für die JSON-Speicherung).
  2. Neue Funktion: Offene Reklamationen anzeigen
    • Erstellen Sie eine Funktion zeige_offene_reklamationen(reklamationen), die alle offenen Reklamationen auf der Konsole ausgibt – dabei soll jede Reklamation in einer Zeile im Format erscheinen:
      Kundennummer: K1001 | Produkt: E-Bike Akku | Datum: 2025-05-28
  3. Neue Reklamation hinzufügen:
    • Schreiben Sie eine Funktion neue_reklamation_hinzufuegen(dateipfad), die den Benutzer nach den folgenden Eingaben fragt: Kundennummer, Produkt, Beschreibung
    • Das Datum wird automatisch auf das aktuelle Datum gesetzt (datetime verwenden), der Status auf "offen".
    • Speichern Sie die neue Reklamation in die vorhandene JSON-Datei.

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:

Zur Anzeige der Musterlösung bitte auf die Lehrkraft zugehen.
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: reklamation.py

import json
from datetime import datetime

class Reklamation:
    def __init__(self, kundennummer, produkt, beschreibung, datum, status):
        self.kundennummer = kundennummer
        self.produkt = produkt
        self.beschreibung = beschreibung
        self.datum = datum
        self.status = status

    def ist_offen(self):
        return self.status.lower() == "offen"

    def als_dict(self):
        return {
            "kundennummer": self.kundennummer,
            "produkt": self.produkt,
            "beschreibung": self.beschreibung,
            "datum": self.datum,
            "status": self.status
        }

def lade_reklamationen(dateipfad):
    try:
        with open(dateipfad, 'r', encoding='utf-8') as datei:
            daten = json.load(datei)
            return [Reklamation(**eintrag) for eintrag in daten]
    except FileNotFoundError:
        print("Datei nicht gefunden. Es wird eine neue Liste erstellt.")
        return []
    except json.JSONDecodeError:
        print("Datei konnte nicht gelesen werden. Leere Liste wird verwendet.")
        return []

def speichere_reklamationen(dateipfad, reklamationen):
    daten = [r.als_dict() for r in reklamationen]
    with open(dateipfad, 'w', encoding='utf-8') as f:
        json.dump(daten, f, ensure_ascii=False, indent=2)

Datei: main.py

from reklamation import Reklamation, lade_reklamationen, speichere_reklamationen
from datetime import datetime

DATEIPFAD = "reklamation.json"

def zeige_offene_reklamationen(reklamationen):
    print("\n--- Offene Reklamationen ---")
    for r in reklamationen:
        if r.ist_offen():
            print(f"Kundennummer: {r.kundennummer} | Produkt: {r.produkt} | Datum: {r.datum}")

def neue_reklamation_hinzufuegen(dateipfad):
    print("\n--- Neue Reklamation hinzufügen ---")
    kundennummer = input("Kundennummer: ")
    produkt = input("Produkt: ")
    beschreibung = input("Beschreibung: ")

    datum = datetime.now().strftime("%Y-%m-%d")
    status = "offen"

    neue_reklamation = Reklamation(kundennummer, produkt, beschreibung, datum, status)

    reklamationen = lade_reklamationen(dateipfad)
    reklamationen.append(neue_reklamation)
    speichere_reklamationen(dateipfad, reklamationen)
    print("Reklamation wurde gespeichert.")

def main():
    reklamationen = lade_reklamationen(DATEIPFAD)
    zeige_offene_reklamationen(reklamationen)
    neue_reklamation_hinzufuegen(DATEIPFAD)

if __name__ == "__main__":
    main()