Menu
Coddy logo textTech

콘솔 UI / 관리자 인터페이스

Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 66번째.

challenge icon

챌린지

쉬움

모든 구성 요소를 하나로 묶는 콘솔 인터페이스를 구축하여 도서관 시스템을 완성해 봅시다! 도서 추가, 사용자 등록, 대출 작업 처리, 카탈로그 검색 등 도서관을 관리하기 위한 명령을 처리하는 관리자 인터페이스를 만들게 됩니다.

기존 프로젝트 구조를 계속해서 확장해 나갈 것입니다:

  • Book.cs: Id, Title, Author, IsAvailable 속성과 Borrow()Return() 메서드가 포함된 Book 클래스를 유지합니다.
  • User.cs: 대출 추적, MaxBooks 상수, CanBorrow() 및 대출된 도서 관리 메서드가 포함된 User 클래스를 유지합니다.
  • Library.cs: 이전에 구축한 모든 대출 로직과 LINQ 검색 메서드가 포함된 Library 클래스를 유지합니다. 도서관의 모든 도서를 반환하는 GetAllBooks() 메서드와 등록된 모든 사용자를 반환하는 GetAllUsers() 메서드를 새로 추가합니다.
  • Program.cs: 여기서 콘솔 인터페이스가 구현됩니다! 명령을 읽고 적절한 도서관 작업을 실행하는 명령 프로세서를 구축하게 됩니다. 이를 도서관 시스템의 관리자 대시보드라고 생각하세요.

콘솔 인터페이스는 다음 명령들을 처리해야 합니다:

  • ADD_BOOK|id|title|author - 새 도서를 추가하고 Added: {Title}를 출력합니다.
  • ADD_USER|name|memberId - 새 사용자를 등록하고 Registered: {Name}를 출력합니다.
  • BORROW|bookId|memberId - 대출 요청을 처리합니다 (기존 BorrowBook 로직 사용).
  • RETURN|bookId|memberId - 반납 요청을 처리합니다 (기존 ReturnBook 로직 사용).
  • SEARCH|type|value - 카탈로그를 검색합니다. 여기서 type은 title, author, available, 또는 borrowed입니다.
  • STATUS - 총 도서 수, 대출 가능 도서 수, 총 사용자 수, 총 대출된 도서 수를 보여주는 요약을 출력합니다.

STATUS 명령의 경우, 다음 형식으로 요약을 출력하세요:

--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}

검색 결과의 경우, 각 도서를 한 줄에 {Title} by {Author} 형식으로 출력하거나, 결과가 없으면 No books found를 출력합니다.

다음 입력을 받게 됩니다:

  • 도서관 이름
  • 처리할 명령의 개수
  • 위에서 설명한 형식으로 된 각 명령 (각 줄에 하나씩)

예를 들어, 입력이 다음과 같다면:

Downtown Library
8
ADD_BOOK|B001|Clean Code|Robert Martin
ADD_BOOK|B002|The Pragmatic Programmer|David Thomas
ADD_USER|Alice|101
ADD_USER|Bob|102
BORROW|B001|101
SEARCH|available
BORROW|B002|102
STATUS

출력은 다음과 같아야 합니다:

Added: Clean Code
Added: The Pragmatic Programmer
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
The Pragmatic Programmer by David Thomas
Bob borrowed The Pragmatic Programmer
--- Library Status ---
Total Books: 2
Available: 0
Total Users: 2
Books Borrowed: 2

여러분의 콘솔 인터페이스는 사용자 입력과 잘 조직된 도서관 구성 요소를 연결하는 접착제 역할을 합니다. 각 명령은 Library 클래스의 적절한 메서드에 작업을 위임하며, 이는 깔끔한 아키텍처가 사용자 인터페이스 구축을 얼마나 간단하게 만드는지 보여줍니다!

직접 해보기

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // 도서관 이름을 읽습니다.
            string libraryName = Console.ReadLine();
            
            // 도서관 이름으로 Library 인스턴스를 생성합니다.
            Library library = new Library(libraryName);
            
            // 명령의 개수를 읽습니다.
            int numCommands = Convert.ToInt32(Console.ReadLine());
            
            // 각 명령을 처리합니다.
            for (int i = 0; i < numCommands; i++)
            {
                string commandLine = Console.ReadLine();
                string[] parts = commandLine.Split('|');
                string command = parts[0];
                
                // TODO: ADD_BOOK 명령을 처리합니다.
                // 형식: ADD_BOOK|id|title|author
                // 출력: Added: {title}
                
                // TODO: ADD_USER 명령을 처리합니다.
                // 형식: ADD_USER|name|memberId
                // 출력: Registered: {name}
                
                // TODO: BORROW 명령을 처리합니다.
                // 형식: BORROW|bookId|memberId
                // library.BorrowBook()의 결과를 출력합니다.
                
                // TODO: RETURN 명령을 처리합니다.
                // 형식: RETURN|bookId|memberId
                // library.ReturnBook()의 결과를 출력합니다.
                
                // TODO: SEARCH 명령을 처리합니다.
                // 형식: SEARCH|type|value (type은 title, author, available, borrowed가 될 수 있습니다)
                // 각 도서를 "{Title} by {Author}" 또는 "No books found"로 출력합니다.
                
                // TODO: Handle STATUS 명령을 처리합니다.
                // 출력:
                // --- Library Status ---
                // Total Books: {count}
                // Available: {count}
                // Total Users: {count}
                // Books Borrowed: {count}
            }
        }
    }
}

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