Menu
Coddy logo textTech

Модели книг и пользователей

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 63 из 70.

challenge icon

Задание

Легко

Давайте расширим вашу библиотечную систему, наполнив модели 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) и приватный список для хранения идентификаторов взятых книг. Добавьте свойство только для чтения BorrowedCount, которое возвращает количество книг, которые в данный момент находятся у пользователя. Включите методы AddBorrowedBook(string bookId) и RemoveBorrowedBook(string bookId) для управления взятыми книгами пользователя. Также добавьте метод HasBook(string bookId), который возвращает true, если пользователь взял именно эту книгу.
  • Library.cs: Ваш класс Library должен содержать коллекции книг и пользователей. Включите методы AddBook(Book book) и RegisterUser(User user) для заполнения библиотеки. Добавьте метод GetBookById(string id), который возвращает книгу с этим 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)

Обратите внимание, как Элис успешно берет две книги, но когда Боб пытается взять Clean Code (которая уже есть у Элис), операция не удается. После того как Элис возвращает 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);

            // Создание экземпляра User с именем и ID участника
            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})");
        }
    }
}

Все уроки раздела Объектно-ориентированное программирование