대출 시스템
Coddy Python 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 64개 중 57번째.
챌린지
중급이번 챌린지에서는 도서 관리 시스템에 대출 기능을 추가해 보겠습니다.
library.py를 수정하고 TODO 주석에 따라 borrow_book 메서드를 구현하세요.
다른 파일들은 이미 제공되었으며 수정할 수 없도록 잠겨 있습니다:
book.py— 이전 챌린지에서 만든Book클래스user.py—user_id,name,books_borrowed를 포함하는User클래스driver.py— 구현한 코드를 테스트 시나리오에 따라 실행합니다
borrow_book(book_isbn, user_id)는 반드시 "Book not found", "User not found", "Book is not available", 또는 "Book borrowed successfully" 중 하나를 정확히 반환해야 합니다.
직접 해보기
from book import Book
from user import User
from library import Library
# 종합적인 테스트 케이스 핸들러
test_case = input()
# 기본 기능 테스트
if test_case == "borrow_success":
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)
# 책 대출
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")
# 책과 사용자 추가
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
book.available = False # 책이 이미 대출되었습니다
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)
# 엣지 케이스 및 추가 테스트
elif test_case == "multiple_books":
library = Library("Community Library")
user = User("U001", "Alice")
library.add_user(user)
# 여러 권의 책 생성
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)
# 여러 권의 책 대출
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)
# 여러 사용자 생성
users = [
User("U001", "Alice"),
User("U002", "Bob"),
User("U003", "Charlie")
]
for user in users:
library.add_user(user)
# 다른 사용자로 같은 책 대출 시도
result1 = library.borrow_book("999", "U001")
result2 = library.borrow_book("999", "U002") # 실패해야 함
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)
# 책 대출
borrow_result = library.borrow_book("123456", "U001")
print(borrow_result)
# 도서 상태 확인
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)
# 책 대출
library.borrow_book("123456", "U001")
# 참조 확인
print(f"Book's borrower name: {book.borrower.name}")
print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")