Menu
Coddy logo textTech

Ödünç Alma Sistemi

Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 57 / 64.

challenge icon

Görev

Orta

Bu meydan okumada, ödünç alma işlevine sahip bir kütüphane yönetim sistemi uygulayacaksınız.

Gerekli işlevselliği aşağıdaki dosyalarda uygulayın:

  • book.py - Book sınıfı tanımını içerir
  • user.py - User sınıfı tanımını içerir
  • library.py - borrow_book metodunu uygulayacağınız Library sınıfını içerir

Adım adım uygulama rehberliği için her dosyadaki TODO yorumlarını takip edin. borrow_book metodu, kitap/kullanıcı bulunamaması ve uygunluk kontrolleri dahil olmak üzere çeşitli senaryoları ele almalıdır.

Kopya kağıdı

Bu meydan okuma, nesne yönelimli programlama prensiplerini kullanarak bir kütüphane yönetim sistemi uygulamaya odaklanmaktadır. Sistem üç ana sınıftan oluşur:

  • Book sınıfı - Kütüphanedeki bireysel kitapları temsil eder
  • User sınıfı - Kitap ödünç alabilen kütüphane kullanıcılarını temsil eder
  • Library sınıfı - Kitap koleksiyonunu yönetir ve ödünç alma işlemlerini gerçekleştirir

Temel işlevsellik, şunları yöneten bir borrow_book metodunun uygulanmasını içerir:

  • Kitapların ve kullanıcıların sistemde mevcut olup olmadığının kontrol edilmesi
  • Ödünç vermeden önce kitap uygunluğunun doğrulanması
  • Kullanıcılar ve kitaplar arasındaki ödünç alma sürecinin yönetilmesi

Kendin dene

from book import Book
from user import User
from library import Library
import random

# Kapsamlı test durumu 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)
    
    # Mevcut olmayan kitabı ödünç almayı dene
    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 == "stress_test":
    library = Library("Large Library")
    
    # 100 kitap oluştur ve ekle
    for i in range(1, 101):
        book = Book(f"Book {i}", f"Author {i}", f"ISBN-{i}")
        library.add_book(book)
    
    # 50 kullanıcı oluştur ve ekle
    for i in range(1, 51):
        user = User(f"U{i:03d}", f"User {i}")
        library.add_user(user)
    
    # 200 ödünç alma işlemi gerçekleştir
    successful = 0
    book_not_found = 0
    user_not_found = 0
    not_available = 0
    
    for _ in range(200):
        # Rastgele ISBN'ler ve kullanıcı kimlikleri oluştur (bazıları geçerli, bazıları geçersiz)
        isbn = f"ISBN-{random.randint(1, 120)}"  # Bazıları geçersiz olacak
        user_id = f"U{random.randint(1, 60):03d}"  # Bazıları geçersiz olacak
        
        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)
    
    # 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