Menu
Coddy logo textTech

대출 시스템

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 84번째.

challenge icon

챌린지

쉬움

Library 클래스를 만들어 모든 대출 작업을 조정함으로써 도서관 관리 시스템을 실제로 구현해 봅시다. 이 중앙 조정자는 도서 collection을 관리하고 도서관이 원활하게 운영되도록 하는 규칙을 적용합니다.

코드를 네 개의 파일로 구성합니다:

  • Book.php: 이전 레슨의 Book 클래스입니다. readonly 속성(isbn, title, author), true로 시작하는 private $isAvailable 속성, 그리고 다음 메서드를 포함합니다: isAvailable(), markAsBorrowed(), markAsReturned().
  • User.php: Book 파일을 포함합니다. readonly 속성(id, name), private $borrowedBooks array, 3MAX_BOOKS 상수, 그리고 다음 메서드를 포함하는 User 클래스입니다: getBorrowedBooks(), canBorrow(), addBook(Book $book), removeBook(string $isbn).
  • Library.php: User 파일을 포함합니다. 도서 collection을 관리하는 Library 클래스를 Create합니다. library에는 다음 항목이 있어야 합니다:
    • ISBN으로 indexed된 책을 저장하는 private $books array
    • addBook(Book $book): void: collection에 책을 추가
    • findBook(string $isbn): ?Book: 책을 반환하거나 찾지 못하면 null을 반환
    • borrowBook(User $user, string $isbn): string: 대출을 검증하고 처리하며 적절한 메시지를 반환
    • returnBook(User $user, string $isbn): string: 반납을 처리하고 책과 사용자의 상태를 모두 업데이트

    borrowBook 메서드는 다음 세 가지 conditions을 순서대로 Check하고 다음의 정확한 메시지를 반환해야 합니다:

    • "Book not found": 책이 exist하지 않는 경우
    • "Book is not available": already 대출된 경우
    • "Borrowing limit reached": 사용자가 3권의 책을 has 경우
    • "Successfully borrowed: [title]": 성공한 경우

    returnBook 메서드는 책이 exist하지 않으면 "Book not found"를 반환하고, 성공하면 "Successfully returned: [title]"을 반환해야 합니다.

  • main.php: Library 파일을 포함합니다. ISBN과 책 제목, 두 개의 입력을 받습니다.

    Library, ID 1과 이름 "Alice"을 가진 User, 그리고 제공된 ISBN과 제목 및 author "Unknown"을 가진 Book을 Create합니다. 책을 library에 추가한 다음, 다음 작업을 수행하고 각 결과를 새 line에 출력합니다:

    1. 책을 borrow
    2. 같은 책을 다시 borrow 시도
    3. 책을 반납
    4. 책을 한 번 더 borrow

이 challenge는 Library 클래스가 business logic을 중앙에서 관리하는 방식을 보여 줍니다. conditions을 검증하고, BookUser 객체 전체의 상태 변경을 조정하며, 각 작업에 대해 의미 있는 피드백을 반환합니다.

직접 해보기

<?php
require_once 'Library.php';

// 입력 읽기
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Library 인스턴스 생성

// TODO: ID 1과 이름 "Alice"인 User 생성

// TODO: 제공된 ISBN, title, 저자 "Unknown"으로 Book 생성

// TODO: 책을 library에 추가

// TODO: 다음 작업들을 수행하고 각 결과를 새 줄에 출력:
// 1. 책 대출
// 2. 같은 책을 다시 대출 시도
// 3. 책 반납
// 4. 책을 한 번 더 대출

?>

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 PHP 컴파일러