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:
- Erweiterung der Klasse
Reklamation
:- Fügen Sie der Klasse eine Methode
ist_offen()
hinzu, dieTrue
zurückgibt, wenn der Status"offen"
ist.
Erstellen SIe zusätzlich eine Methodeals_dict()
, die das Objekt als Dictionary zurückgibt (für die JSON-Speicherung).
- Fügen Sie der Klasse eine Methode
- 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
- Erstellen Sie eine Funktion
- 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.
- Schreiben Sie eine Funktion
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()