Ödünç Alma Sistemi
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 57 / 64.
Görev
OrtaBu görevde, kütüphane yönetim sistemine ödünç alma işlevselliği ekleyeceksiniz.
library.py dosyasını düzenleyin ve TODO yorumlarını takip ederek borrow_book metodunu uygulayın.
Diğer dosyalar size hazır olarak sunulmuştur ve kilitlidir:
book.py— önceki görevde oluşturduğunuzBooksınıfıuser.py—user_id,namevebooks_borrowedbilgilerini tutanUsersınıfıdriver.py— uygulamanıza karşı test senaryolarını çalıştırır
borrow_book(book_isbn, user_id) metodu tam olarak şunlardan birini döndürmelidir: "Book not found", "User not found", "Book is not available" veya "Book borrowed successfully".
Kendin dene
from book import Book
from user import User
from library import Library
# Kapsamlı test senaryosu işleyicisi
test_case = input()
# Temel işlevsellik testleri
if test_case == "borrow_success":
library = Library("Community Library")
# Kitapları ve kullanıcıları ekle
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# Kitap ödünç al
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")
# Kitapları ve kullanıcıları ekle
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
book.available = False # Kitap zaten ödünç alınmış
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# Try to borrow unavailable book
result = library.borrow_book("123456", "U001")
print(result)
# Uç durumlar ve ek testler
elif test_case == "multiple_books":
library = Library("Community Library")
user = User("U001", "Alice")
library.add_user(user)
# Birden fazla kitap oluştur
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)
# Birden fazla kitap ödünç al
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)
# Birden fazla kullanıcı oluştur
users = [
User("U001", "Alice"),
User("U002", "Bob"),
User("U003", "Charlie")
]
for user in users:
library.add_user(user)
# Aynı kitabı farklı kullanıcılarla ödünç almayı dene
result1 = library.borrow_book("999", "U001")
result2 = library.borrow_book("999", "U002") # Başarısız olmalı
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)
# Kitabı ödünç al
borrow_result = library.borrow_book("123456", "U001")
print(borrow_result)
# Kitap durumunu doğrula
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 == "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)
# Kitabı ödünç al
library.borrow_book("123456", "U001")
# Referansları doğrula
print(f"Book's borrower name: {book.borrower.name}")
print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")Object Oriented Programming bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Özellikleri
Örnek ve Sınıf DeğişkenleriProperty DekoratörleriGizli ÖzniteliklerÖzet - Banka Hesabı Yöneticisi6Kapsülleme
Public, Protected, Private ÜyelerErişim BelirleyicilerBilgi Gizlemeİleri Seviye Property DekoratörleriÖzet - Öğrenci Kayıt Sistemi12Proje: Kütüphane Yönetimi
Projeye Genel BakışKitap ve Kullanıcı SınıflarıÖdünç Alma SistemiArama İşlevselliğiYönetici ArayüzüTest ve Entegrasyon