Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| de:modul:m319:learningunits:lu20:aufgaben:bibliothek [2025/06/23 07:45] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | de:modul:m319:learningunits:lu20:aufgaben:bibliothek [2025/06/23 07:45] (aktuell) – ↷ Seite von modul:m319:learningunits:lu20:aufgaben:bibliothek nach de:modul:m319:learningunits:lu20:aufgaben:bibliothek verschoben msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== LU20.A01 - Bibliotheksverwaltung ====== | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | Realisieren Sie die verschiedenen Programmteile der Applikation " | ||
| + | </ | ||
| + | |||
| + | ===== Allgemeine Infos ===== | ||
| + | |||
| + | |||
| + | ==== Vorlage ==== | ||
| + | Im Vorlage-Repository sind alle Funktionen als rudimentäre Stubs realisiert. Diese Stubs liefern, soweit nötig, einen statischen Returnwert. | ||
| + | Die Logik der Methode " | ||
| + | |||
| + | ==== Vorgehen ==== | ||
| + | Wie immer beim Programmieren gilt: | ||
| + | - Wählen Sie einen Programmteil aus, dessen Vorgänger korrekt funktioniert. | ||
| + | - Codieren Sie den neuen Programmteil. | ||
| + | - Testen Sie den neuen Programmteil, | ||
| + | - Falls die Tests nicht erfolgreich sind, gehen Sie zurück zu Schritt 2. | ||
| + | - Führen Sie alle Tests mit '' | ||
| + | - Falls mehr Tests erfolgreich sind als zuvor: Commit & Push. | ||
| + | |||
| + | ^ Nr ^ Programmteil ^ Vorgänger ^ Tests ^ | ||
| + | | 1 | Dataclass - Rental | - | rental_test.py > '' | ||
| + | | 2 | cost | 1 | rental_test.py > '' | ||
| + | | 3 | read_rental | 1,7,8 | library_test.py > '' | ||
| + | | 4 | init_books | 1 | library_test.py > '' | ||
| + | | 5 | add_rental | 1, 3, 4 | library_test.py > '' | ||
| + | | 6 | show_balance | 1, 2 | library_test.py > '' | ||
| + | | 7 | read_int | - | library_test.py > '' | ||
| + | | 8 | read_date | - | library_test.py > '' | ||
| + | |||
| + | ==== Testing ==== | ||
| + | Die einzelnen Programmteile (Funktionen, | ||
| + | |||
| + | ===== Beschreibungen ===== | ||
| + | Der Code stellt ein terminalbasiertes Bibliotheksverwaltungssystem zur Verwaltung von Buchausleihen dar. Es wird mit einer Reihe von Büchern ("Herr der Ringe" | ||
| + | |||
| + | **Fürs Testen:** | ||
| + | |||
| + | Es gibt nur 3 Bücher, '' | ||
| + | |||
| + | < | ||
| + | <iframe src=" | ||
| + | </ | ||
| + | |||
| + | ==== Modul rental.py ==== | ||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | === Dataclass - Rental === | ||
| + | * Datum der Ausleihe: Datum | ||
| + | * Rückgabedatum: | ||
| + | * Anzahl inkludierte Miettage: Ganzzahl | ||
| + | </ | ||
| + | |||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | === @property cost() === | ||
| + | | Argumente | self | | ||
| + | | Rückgabewerte | Kosten des Ausleihens (Dezimalzahl) | | ||
| + | **Logik** | ||
| + | |||
| + | Die Funktion berechnet die Kosten der Buchausleihe. | ||
| + | Die Kosten für die Buchausleihe sind normalerweise CHF 4.50 für die gesamte Zeitdauer der '' | ||
| + | Wird diese Frist jedoch überschritten wird eine Strafgebühr von CHF 3.35 pro angefangene 24 Stunden berechnet. | ||
| + | Die effektive Anzahl Miettage wird berechnet aus '' | ||
| + | |||
| + | Der Returnwert wird auf 2 Nachkommastellen gerundet: | ||
| + | '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Modul library.py ==== | ||
| + | <WRAP center round box 100%> | ||
| + | === main() === | ||
| + | | Argumente | keine | | ||
| + | | Rückgabewerte | keine | | ||
| + | **Logik** | ||
| + | |||
| + | Die Logik dieser Funktion ist bereits **vollständig umgesetzt**. Beachten Sie die Argumente und Returnwerte der jeweiligen Funktionen. | ||
| + | </ | ||
| + | |||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | === read_rental() === | ||
| + | | Argumente | keine | | ||
| + | | Rückgabewerte | '' | ||
| + | |||
| + | **Logik** | ||
| + | |||
| + | Der Benutzer wird aufgefordert, | ||
| + | * Datum der Ausleihe | ||
| + | * Anzahl Miettage | ||
| + | * Rückgabedatum | ||
| + | |||
| + | Verwenden Sie für das Einlesen der Werte die passende Einleser-Funktion '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | === init_books() === | ||
| + | | Argumente | keine | | ||
| + | | Rückgabewerte | Dictionary mit Büchern | | ||
| + | |||
| + | **Logik** | ||
| + | |||
| + | Die Funktion erstellt einen neuen Dictionary. Es werden drei Elemente in das Dictionary eingefügt: | ||
| + | ^Schlüssel^ Inhalt (Wert)^ | ||
| + | |'' | ||
| + | |'' | ||
| + | |'' | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | === add_rental() === | ||
| + | | Argumente | Dictionary mit Büchern und Ausleihungen | | ||
| + | | Rückgabewerte | keiner | | ||
| + | |||
| + | **Logik** | ||
| + | |||
| + | Der Benutzer wird aufgefordert, | ||
| + | Anschliessend wird '' | ||
| + | |||
| + | Dieses '' | ||
| + | Anschliessend wird der Benutzer gefragt, ob er die Erfassung beenden will. Solange der Benutzer **'' | ||
| + | </ | ||
| + | |||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | === show_balance() === | ||
| + | | Argumente | Dictionary mit Büchern und Ausleihungen | | ||
| + | | Rückgabewerte | keiner | | ||
| + | |||
| + | **Logik** | ||
| + | |||
| + | Die Funktion gibt für jedes Buch … | ||
| + | * … den Buchtitel aus. | ||
| + | * … für jede Buchung (Ausleihe) des Buchs … | ||
| + | * … das Datum der Miete und die Kosten dieser Miete aus. | ||
| + | * … das Total aller Buchungen aus. | ||
| + | Beachten Sie die Darstellung gemäss diesem Beispiel: | ||
| + | |||
| + | < | ||
| + | Statement for LOTR 1 | ||
| + | - 05.01.2023: CHF 4.50 | ||
| + | - 06.03.2023: CHF 7.85 | ||
| + | Total: CHF 12.35 | ||
| + | Statement for LOTR 2 | ||
| + | - 06.01.2023: CHF 4.50 | ||
| + | - 23.02.2023: CHF 4.50 | ||
| + | Total: CHF 9.00 | ||
| + | Statement for LOTR 3 | ||
| + | - 06.01.2023: CHF 4.50 | ||
| + | - 23.02.2023: CHF 14.55 | ||
| + | Total: CHF 19.05 | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | === read_int() === | ||
| + | | Argumente | prompt: String | | ||
| + | | ::: | minimum: Integer (Optional) | | ||
| + | | ::: | maximum: Integer (Optional) | | ||
| + | | Rückgabewerte | Benutzereingabe als Ganzzahl | | ||
| + | |||
| + | **Logik** | ||
| + | |||
| + | Die Funktion fordert den Benutzer zur Eingabe einer Ganzzahl von '' | ||
| + | Falls die Eingabe keine gültige Ganzzahl ist, wird … | ||
| + | * … die Meldung " | ||
| + | * … der Benutzer zur erneuten Eingabe aufgefordert. | ||
| + | Falls die Eingabe zu klein / zu gross ist, wird … | ||
| + | * … die Meldung " | ||
| + | * … die Meldung " | ||
| + | * … der Benutzer zur erneuten Eingabe aufgefordert. | ||
| + | </ | ||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | === read_date() === | ||
| + | | Argumente | prompt: String | | ||
| + | | Rückgabewerte | Benutzereingabe als Datum/ | ||
| + | |||
| + | **Logik** | ||
| + | |||
| + | Die Funktion fordert den Benutzer zur Eingabe eines Zeitpunkts auf. | ||
| + | Die Eingabe muss im Format '' | ||
| + | Falls die Eingabe kein gültiger Zeitpunkt ist, wird … | ||
| + | * … die Meldung " | ||
| + | * … der Benutzer zur erneuten Eingabe aufgefordert. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ---- | ||
| + | < | ||
| + | < | ||
| + | GitHub Repository https:// | ||
| + | |||
| + | //Lernende am BZZ **müssen** den Link zum GitHub Classroom Assignment verwenden// | ||
| + | </ | ||
| + | |||
| + | {{tag> | ||
| + | [[https:// | ||
| + | |||
| + | |||