콘솔 UI / 관리자 인터페이스
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 66번째.
챌린지
쉬움모든 구성 요소를 하나로 묶는 콘솔 인터페이스를 구축하여 도서관 시스템을 완성해 봅시다! 도서 추가, 사용자 등록, 대출 작업 처리, 카탈로그 검색 등 도서관을 관리하기 위한 명령을 처리하는 관리자 인터페이스를 만들게 됩니다.
기존 프로젝트 구조를 계속해서 확장해 나갈 것입니다:
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}
}
}
}
}