Menu
Coddy logo textTech

Консольный UI / Интерфейс администратора

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

challenge icon

Задание

Легко

Давайте завершим вашу библиотечную систему, создав консольный интерфейс, который объединит все ваши компоненты! Вы создадите интерфейс администратора, который обрабатывает команды для управления библиотекой: добавление книг, регистрация пользователей, обработка операций заимствования и поиск по каталогу.

Вы продолжите работу над существующей структурой проекта:

  • Book.cs: Сохраните класс Book со свойствами Id, Title, Author, IsAvailable и методами Borrow() и Return().
  • User.cs: Сохраните класс User с отслеживанием заимствований, константой MaxBooks, методом CanBorrow() и методами для управления заимствованными книгами.
  • Library.cs: Сохраните класс Library со всей логикой заимствования и методами поиска LINQ, которые вы создали. Добавьте новый метод 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: Обработать команду STATUS
                // Вывести:
                // --- Library Status ---
                // Total Books: {count}
                // Available: {count}
                // Total Users: {count}
                // Books Borrowed: {count}
            }
        }
    }
}

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