0%

Abschlussprojekt: Ein Verleihprogramm mit dauerhafter Speicherung · Übung

Die Verleihaktivität ausgeben

Ein Bericht zur Verleihaktivität hat eine Zeile pro Ausleihvorgang, unabhängig davon, ob dieser aktiv oder zurückgegeben ist. Er ist kein Zeitstrahl mit zwei Ereignissen. Der Bericht muss außerdem die in Version 2 ergänzte Mitglieder-E-Mail zeigen und fehlende Werte korrekt darstellen.

Die Demo ruft main(["activity", str(database_path)]) zweimal auf: einmal, während Ausleihvorgang 501 aktiv ist, und einmal nach seiner Rückgabe. Füge display_value(value) genau wie gezeigt hinzu, danach activity_command(args). Argparse übergibt dieser Befehlsfunktion nur args.database.

Lehne eine fehlende Datenbank ab, rufe prepare_database auf und öffne die Anwendungsverbindung. Rufe list_lending_activity(connection) genau einmal auf und speichere seine zurückgegebenen Zeilen. Schließe die Verbindung vor der Ausgabe in finally. Die Abfrage gibt einfache Dictionaries in Ausleih-ID-Reihenfolge mit genau loan_id, asset_tag, member_code, member_email, checked_out_on und returned_on zurück.

def display_value(value):
    if value is None:
        return "NULL"
    return str(value)

Verwende beim Darstellen von Werten, die fehlen dürfen, display_value(value). Es gibt für Python None den wörtlichen Text NULL zurück; jeder andere Wert wird zu seinem gewöhnlichen String. Das ist für das returned_on eines aktiven Ausleihvorgangs und für ein älteres migriertes Mitglied wichtig, dessen E-Mail SQL NULL ist. Gib weder Pythons None noch ein leeres Feld oder eine erfundene Ereigniszeile aus.

Gib diese Kopfzeile auch dann aus, wenn keine Ausleihvorgänge existieren:

loan_id | asset_tag | member_code | member_email | checked_out_on | returned_on

Verwende dann eine for-Schleife und die sechs Dictionary-Schlüssel in genau dieser Reihenfolge. Füge kein SQL hinzu, frage nicht zweimal ab, lass zurückgegebene Ausleihvorgänge nicht weg und sortiere in der CLI nicht nach Inventarkennzeichen. Füge den exakten Zweig if args.command == "activity": return activity_command(args) zu main hinzu.

Klicke auf Run, um dieselbe dauerhaft gespeicherte Zeile vor und nach der Rückgabe zu vergleichen:

== activity before return ==
Status: 0
loan_id | asset_tag | member_code | member_email | checked_out_on | returned_on
501 | TL-100 | MB-017 | riley@example.test | 2026-08-26 | NULL
== activity after return ==
Status: 0
loan_id | asset_tag | member_code | member_email | checked_out_on | returned_on
501 | TL-100 | MB-017 | riley@example.test | 2026-08-26 | 2026-08-27
stderr: <empty>

Eine gründliche Prüfung liefert mehrere Ausleihvorgänge in anderer Einfügereihenfolge, aktive und zurückgegebene Zeilen, Unicode-Werte und sowohl fehlende als auch vorhandene E-Mail-Adressen. Sie prüft eine Zeile pro Ausleihvorgang, exakte Reihenfolge und Spalten, keine Zustandsänderung, einen öffentlichen Abfrageaufruf und das Schließen der Verbindung.

Aufgabe

Füge die exakte Funktion display_value(value) aus der Anleitung hinzu, ergänze oder vervollständige activity_command(args) und füge diesen Zweig in main hinzu:

if args.command == "activity":
    return activity_command(args)

Lehne eine fehlende Datenbank ab, bereite sie vor und öffne sie, rufe list_lending_activity genau einmal auf und schließe in finally. Gib die exakte Kopfzeile mit sechs Spalten und pro zurückgegebenem Dictionary eine durch senkrechte Striche getrennte Zeile in der vorhandenen Reihenfolge aus. Stelle jedes Python None als NULL dar, einschließlich einer fehlenden E-Mail-Adresse oder Rückgabebeschriftung.