Menu
Coddy logo textTech

관리자 인터페이스

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

challenge icon

챌린지

쉬움

관리 기능을 추가하여 Library Management System을 확장해 보겠습니다. Admin class를 만들어 User에서 상속받도록 하되, library의 inventory를 관리할 수 있는 특별한 권한을 부여합니다. 여기에는 새 books를 추가하고 기존 books를 제거하는 기능이 포함됩니다.

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

  • Book.php: readonly properties (isbn, title, author)를 가진 Book class입니다. true로 시작하는 private $isAvailable property와 다음 methods를 포함합니다: isAvailable(), markAsBorrowed(), markAsReturned().
  • User.php: Book file을 포함합니다. readonly properties (id, name)를 가진 User class, private $borrowedBooks array, 3MAX_BOOKS constant, 그리고 다음 methods를 포함합니다: getBorrowedBooks(), canBorrow(), addBook(Book $book), removeBook(string $isbn).
  • Library.php: User file을 포함합니다. addBook(), findBook(), borrowBook(), returnBook() 및 search methods를 포함한 기존 기능을 갖춘 Library class입니다. 다음 새 method를 추가합니다:
    • removeBook(string $isbn): void: unset()을 사용하여 collection에서 book을 제거합니다
  • Admin.php: Library file을 포함합니다. User를 extends하는 Admin class를 만듭니다. Admins는 모든 user capabilities를 상속하지만 다음 두 가지 administrative methods를 추가로 갖습니다:
    • addBookToLibrary(Library $library, Book $book): string: book을 library에 추가하고 "Added: [title]"을 반환합니다
    • removeBookFromLibrary(Library $library, string $isbn): string: 다음 checks를 수행하여 book 제거를 시도합니다:
      • book이 존재하지 않으면 "Book not found"를 반환합니다
      • book이 currently borrowed 상태이면 "Cannot remove: book is currently borrowed"를 반환합니다
      • 그렇지 않으면 book을 제거하고 "Removed: [title]"을 반환합니다
  • main.php: Admin file을 포함합니다. ISBN과 book title이라는 두 개의 입력을 받습니다.

    ID가 1이고 name이 "AdminUser"LibraryAdmin을 만듭니다. 또한 ID가 2이고 name이 "RegularUser"인 일반 User도 만듭니다.

    제공된 ISBN, title, 그리고 author "Test Author"를 사용하여 Book을 만듭니다. 다음 operations를 수행하고 각 result를 새 줄에 출력합니다:

    1. admin이 library에 book을 추가하도록 합니다
    2. 일반 user가 book을 borrow하도록 합니다
    3. admin이 book을 제거하려고 시도하도록 합니다 (borrowed 상태이므로 fail해야 합니다)
    4. 일반 user가 book을 return하도록 합니다
    5. admin이 book을 제거하도록 합니다 (이제 성공해야 합니다)
    6. admin이 같은 book을 다시 제거하려고 시도하도록 합니다 (찾을 수 없으므로 fail해야 합니다)

이 challenge는 inheritance가 어떻게 자연스러운 hierarchy를 만드는지 보여줍니다. admins는 추가 privileges를 가진 users입니다. removeBookFromLibrary의 safety checks는 아직 circulation 중인 books의 제거를 방지하여 data integrity를 보장합니다.

직접 해보기

<?php
require_once 'Admin.php';

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

// TODO: Library 생성

// TODO: ID 1과 이름 "AdminUser"인 Admin 생성

// TODO: ID 2와 이름 "RegularUser"인 일반 User 생성

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

// TODO: 다음 작업을 수행하고 각 결과를 새 줄에 출력하세요:
// 1. admin이 book을 library에 추가하게 하기
// 2. 일반 user가 book을 대출하게 하기
// 3. admin이 book을 제거하려고 시도하기 (실패해야 함 - 대출 중임)
// 4. 일반 user가 book을 반납하게 하기
// 5. admin이 book을 제거하기 (이제 성공해야 함)
// 6. admin이 같은 book을 다시 제거하려고 시도하기 (실패해야 함 - 찾을 수 없음)

?>

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

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