コンソール UI / 管理者インターフェース
CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 66/70。
チャレンジ
簡単すべてのコンポーネントを統合するコンソールインターフェースを構築して、図書館システムを完成させましょう!本の追加、ユーザーの登録、貸出操作の処理、カタログの検索など、図書館を管理するためのコマンドを処理する管理者インターフェースを作成します。
既存のプロジェクト構造に基づいて構築を続けます:
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 と出力してください。
以下の入力を受け取ります:
- 図書館名
- 処理するコマンドの数
- 上述の形式による各コマンド(各行に1つ)
例えば、入力が以下の場合:
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}
}
}
}
}
オブジェクト指向プログラミングのすべてのレッスン
5ポリモーフィズムとインターフェース
コンパイル時 vs 実行時ポリモーフィズムインターフェース vs 抽象クラス複数のインターフェース明示的なインターフェースアップキャストとダウンキャストまとめ - 図形計算機12プロジェクト:図書管理システム
プロジェクト構成本とユーザーのモデル