Консольный UI / Интерфейс администратора
Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 66 из 70.
Задание
ЛегкоДавайте завершим вашу библиотечную систему, создав консольный интерфейс, который объединит все ваши компоненты! Вы создадите интерфейс администратора, который обрабатывает команды для управления библиотекой: добавление книг, регистрация пользователей, обработка операций заимствования и поиск по каталогу.
Вы продолжите работу над существующей структурой проекта:
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илиborrowedSTATUS— выводит сводку, показывающую общее количество книг, доступные книги, общее количество пользователей и общее количество заимствованных книг
Для команды 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}
}
}
}
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов12Проект: Система библиотеки
Структура проектаМодели книг и пользователей