Ausleihsystem
Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 57 von 64.
Aufgabe
MittelIn dieser Challenge implementierst du ein Bibliotheksverwaltungssystem mit Ausleihfunktion.
Implementiere die erforderliche Funktionalität in den folgenden Dateien:
book.py- Enthält die Definition der Klasse Bookuser.py- Enthält die Definition der Klasse Userlibrary.py- Enthält die Klasse Library, in der du die Methodeborrow_bookimplementieren wirst
Folge den TODO-Kommentaren in jeder Datei für eine schrittweise Anleitung zur Implementierung. Die Methode borrow_book sollte verschiedene Szenarien behandeln, einschließlich Buch/Benutzer nicht gefunden und Verfügbarkeitsprüfungen.
Spickzettel
Diese Herausforderung konzentriert sich auf die Implementierung eines Bibliotheksverwaltungssystems unter Verwendung objektorientierter Programmierprinzipien. Das System umfasst drei Hauptklassen:
- Book-Klasse - Repräsentiert einzelne Bücher in der Bibliothek
- User-Klasse - Repräsentiert Bibliotheksbenutzer, die Bücher ausleihen können
- Library-Klasse - Verwaltet die Büchersammlung und wickelt die Ausleihvorgänge ab
Die Hauptfunktionalität umfasst die Implementierung einer borrow_book-Methode, die Folgendes verarbeitet:
- Überprüfen, ob Bücher und Benutzer im System vorhanden sind
- Überprüfung der Buchverfügbarkeit vor dem Verleihen
- Verwaltung des Ausleihvorgangs zwischen Benutzern und Büchern
Probier es selbst
from book import Book
from user import User
from library import Library
import random
# Umfassender Testfall-Handler
test_case = input()
# Grundlegende Funktionstests
if test_case == "borrow_success":
library = Library("Community Library")
# Bücher und Benutzer hinzufügen
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# Buch ausleihen
result = library.borrow_book("123456", "U001")
print(result)
print(f"Book available: {book.available}")
print(f"Books borrowed by user: {len(user.books_borrowed)}")
elif test_case == "book_not_found":
library = Library("Community Library")
user = User("U001", "Alice")
library.add_user(user)
result = library.borrow_book("nonexistent", "U001")
print(result)
elif test_case == "user_not_found":
library = Library("Community Library")
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
result = library.borrow_book("123456", "nonexistent")
print(result)
elif test_case == "book_not_available":
library = Library("Community Library")
# Bücher und Benutzer hinzufügen
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
book.available = False # Buch ist bereits ausgeliehen
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# Versuchen, ein nicht verfügbares Buch auszuleihen
result = library.borrow_book("123456", "U001")
print(result)
# Grenzfälle und zusätzliche Tests
elif test_case == "multiple_books":
library = Library("Community Library")
user = User("U001", "Alice")
library.add_user(user)
# Mehrere Bücher erstellen
books = [
Book("Book 1", "Author 1", "111"),
Book("Book 2", "Author 2", "222"),
Book("Book 3", "Author 3", "333")
]
for book in books:
library.add_book(book)
# Mehrere Bücher ausleihen
results = []
for book in books:
results.append(library.borrow_book(book.isbn, "U001"))
for result in results:
print(result)
print(f"Total books borrowed: {len(user.books_borrowed)}")
elif test_case == "multiple_users":
library = Library("Community Library")
book = Book("Popular Book", "Famous Author", "999")
library.add_book(book)
# Mehrere Benutzer erstellen
users = [
User("U001", "Alice"),
User("U002", "Bob"),
User("U003", "Charlie")
]
for user in users:
library.add_user(user)
# Versuchen, dasselbe Buch mit verschiedenen Benutzern auszuleihen
result1 = library.borrow_book("999", "U001")
result2 = library.borrow_book("999", "U002") # Sollte fehlschlagen
print(result1)
print(result2)
print(f"Book's borrower: {book.borrower.name}")
elif test_case == "return_book":
library = Library("Community Library")
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# Das Buch ausleihen
borrow_result = library.borrow_book("123456", "U001")
print(borrow_result)
# Buchstatus überprüfen
print(f"Book available: {book.available}")
print(f"Book borrower: {book.borrower.name}")
print(f"User's borrowed books: {len(user.books_borrowed)}")
print(f"First borrowed book title: {user.books_borrowed[0].title}")
elif test_case == "empty_library":
library = Library("Empty Library")
result = library.borrow_book("any_isbn", "any_user_id")
print(result)
elif test_case == "stress_test":
library = Library("Large Library")
# 100 Bücher erstellen und hinzufügen
for i in range(1, 101):
book = Book(f"Book {i}", f"Author {i}", f"ISBN-{i}")
library.add_book(book)
# 50 Benutzer erstellen und hinzufügen
for i in range(1, 51):
user = User(f"U{i:03d}", f"User {i}")
library.add_user(user)
# 200 Ausleihvorgänge durchführen
successful = 0
book_not_found = 0
user_not_found = 0
not_available = 0
for _ in range(200):
# Zufällige ISBNs und Benutzer-IDs generieren (einige gültig, einige ungültig)
isbn = f"ISBN-{random.randint(1, 120)}" # Einige werden ungültig sein
user_id = f"U{random.randint(1, 60):03d}" # Einige werden ungültig sein
result = library.borrow_book(isbn, user_id)
if result == "Book borrowed successfully":
successful += 1
elif result == "Book not found":
book_not_found += 1
elif result == "User not found":
user_not_found += 1
elif result == "Book is not available":
not_available += 1
print(f"Successful borrows: {successful}")
print(f"Book not found: {book_not_found}")
print(f"User not found: {user_not_found}")
print(f"Book not available: {not_available}")
elif test_case == "borrower_reference":
library = Library("Community Library")
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# Das Buch ausleihen
library.borrow_book("123456", "U001")
# Referenzen überprüfen
print(f"Book's borrower name: {book.borrower.name}")
print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen