도서 및 사용자 모델
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 63번째.
챌린지
쉬움더욱 풍부한 기능을 갖춘 Book 및 User 모델을 구축하여 도서관 시스템을 확장해 보겠습니다. 도서의 상태 추적, 사용자의 대출 기능, 그리고 데이터를 안전하게 유지하기 위한 적절한 캡슐화를 추가하게 됩니다.
다음의 네 가지 파일 구조로 계속 작업하게 됩니다:
Book.cs: 고유 식별자와 상태 추적 기능을 추가하여 Book 클래스를 향상시킵니다. 각 도서는Id(string),Title(string),Author(string), 그리고IsAvailable(bool, 기본값 true) 속성을 가져야 합니다. 가용성 상태를 변경하고 성공 또는 실패를 나타내는 메시지를 반환하는Borrow()및Return()메서드를 추가하세요. 누군가 대출 불가능한 도서를 대출하려고 하면"{Title} is not available"을 반환합니다. 이미 대출 가능한 도서를 반납하려고 하면"{Title} was not borrowed"를 반환합니다. 성공적인 작업은"{Title} has been borrowed"또는"{Title} has been returned"를 반환해야 합니다.User.cs: 대출된 도서를 추적하도록 User 클래스를 확장합니다.Name(string),MemberId(int), 그리고 대출된 도서 ID를 저장할 프라이빗 리스트를 포함하세요. 사용자가 현재 보유한 도서 수를 반환하는BorrowedCount읽기 전용 속성을 추가합니다. 사용자의 대출 도서를 관리하기 위해AddBorrowedBook(string bookId)및RemoveBorrowedBook(string bookId)메서드를 포함하세요. 또한 사용자가 특정 도서를 대출했는지 여부를 true로 반환하는HasBook(string bookId)메서드를 추가합니다.Library.cs: Library 클래스는 도서와 사용자 컬렉션을 유지해야 합니다. 도서관을 채우기 위해AddBook(Book book)및RegisterUser(User user)메서드를 포함하세요. 해당 ID를 가진 도서를 반환하는GetBookById(string id)메서드(찾지 못한 경우 null 반환)와 사용자에 대해 유사하게 작동하는GetUserById(int memberId)를 추가합니다.Program.cs: 입력에 따라 도서관 작업을 처리하여 모든 것을 하나로 묶습니다.
다음 입력을 받게 됩니다:
- 도서관 이름
- 추가할 도서 수
- 각 도서 정보:
id|title|author - 등록할 사용자 수
- 각 사용자 정보:
name|memberId - 수행할 작업 수
- 각 작업 정보:
action|bookId|memberId(여기서 action은borrow또는return중 하나임)
각 작업에 대해 대출 또는 반납 작업의 결과를 출력하세요. 모든 작업이 끝난 후, 각 사용자의 이름과 현재 대출 중인 도서 수를 {Name}: {BorrowedCount} book(s) 형식으로 요약하여 출력하세요.
예를 들어, 입력이 다음과 같다면:
Downtown Library
2
B001|Clean Code|Robert Martin
B002|Design Patterns|Gang of Four
2
Alice|101
Bob|102
4
borrow|B001|101
borrow|B002|101
borrow|B001|102
return|B001|101출력은 다음과 같아야 합니다:
Clean Code has been borrowed
Design Patterns has been borrowed
Clean Code is not available
Clean Code has been returned
Alice: 1 book(s)
Bob: 0 book(s)Alice가 두 권의 도서를 성공적으로 대출했지만, Bob이 Clean Code(Alice가 이미 대출 중인 도서)를 대출하려고 할 때 작업이 실패하는 것을 확인하세요. Alice가 Clean Code를 반납한 후, 그녀의 대출 도서 수는 1로 줄어듭니다. 이는 여러분의 모델이 도서관 규칙을 시행하기 위해 어떻게 함께 작동하는지 보여줍니다!
직접 해보기
using System;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// 입력 읽기
string libraryName = Console.ReadLine();
string bookInput = Console.ReadLine();
string userInput = Console.ReadLine();
// 도서 입력 파싱 (형식: title|author)
string[] bookParts = bookInput.Split('|');
string bookTitle = bookParts[0];
string bookAuthor = bookParts[1];
// 사용자 입력 파싱 (형식: name|memberId)
string[] userParts = userInput.Split('|');
string userName = userParts[0];
int memberId = Convert.ToInt32(userParts[1]);
// 도서관 이름으로 Library 인스턴스 생성
Library library = new Library(libraryName);
// 제목과 저자로 Book 인스턴스 생성
Book book = new Book(bookTitle, bookAuthor);
// 이름과 회원 ID로 User 인스턴스 생성
User user = new User(userName, memberId);
// GetInfo()를 사용하여 도서관 정보 출력
Console.WriteLine(library.GetInfo());
// 도서 정보 출력 형식: Book: {Title} by {Author} - Available: {IsAvailable}
Console.WriteLine($"Book: {book.Title} by {book.Author} - Available: {book.IsAvailable}");
// 사용자 정보 출력 형식: User: {Name} (ID: {MemberId})
Console.WriteLine($"User: {user.Name} (ID: {user.MemberId})");
}
}
}