Menu
Coddy logo textTech

コンソール UI / 管理者インターフェース

CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 66/70。

challenge icon

チャレンジ

簡単

すべてのコンポーネントを統合するコンソールインターフェースを構築して、図書館システムを完成させましょう!本の追加、ユーザーの登録、貸出操作の処理、カタログの検索など、図書館を管理するためのコマンドを処理する管理者インターフェースを作成します。

既存のプロジェクト構造に基づいて構築を続けます:

  • Book.cs: IdTitleAuthorIsAvailable プロパティ、および 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 は titleauthoravailable、または 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}
            }
        }
    }
}

オブジェクト指向プログラミングのすべてのレッスン