JAVA練習問題2-☆5:図書館の本の管理システムを作ろう

記事内に商品プロモーションを含む場合があります

JAVAの初心者向け問題2-☆5:図書館の本の管理システムを作ろう

この問題を解くために必要な知識:
【レベル1の知識】
コメントの書き方、変数と定数、基本データ型とプリミティブ型、四則演算と論理演算、入力と出力(Scannerクラス)、配列、分岐処理(if、if~else、switch)、繰り返し処理(for、while、do~while)

【レベル2の知識】
メソッドの定義と呼び出し、メソッドの戻り値、メソッドのオーバーロード例外処理(try-catch文、throws、throw)、クラスの定義と使用、インスタンス、コンストラクタ

<<前の問題 問題集Top 次の問題>>

JAVA練習問題2-☆5:図書館の本の管理システムを作ろう





図書館の本の管理システムを作成しましょう。

このシステムは、ユーザーが本のタイトルと著者を入力し、それを管理することができます。また、全ての書籍情報を表示する機能も持ちます。

さらに、特定の著者の書籍を検索する機能も実装します。

この問題の要件

以下の要件を満たすプログラムを作成してください。

  • 本の情報(タイトルと著者)を管理するためのクラス Book を作成すること。
  • 図書館のシステムを管理するクラス Library を作成すること。
  • ユーザーから本のタイトルと著者を入力し、その情報を保持する機能を持つこと。
  • 全ての書籍情報を表示するメソッド displayBooksLibrary クラスに実装すること。
  • 特定の著者の書籍を検索するメソッド searchBooksByAuthorLibrary クラスに実装すること。
  • メインメソッドでユーザーからの入力を処理し、上記の機能を実行すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

選択してください: 1. 本を追加 2. 全ての本を表示 3. 著者で本を検索 4. 終了
1
本のタイトルを入力してください: Javaプログラミング
本の著者を入力してください: 山田太郎
選択してください: 1. 本を追加 2. 全ての本を表示 3. 著者で本を検索 4. 終了
2
タイトル: Javaプログラミング, 著者: 山田太郎
選択してください: 1. 本を追加 2. 全ての本を表示 3. 著者で本を検索 4. 終了
3
著者名を入力してください: 山田太郎
タイトル: Javaプログラミング, 著者: 山田太郎
選択してください: 1. 本を追加 2. 全ての本を表示 3. 著者で本を検索 4. 終了
4

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.import文
 1-1.Scannerクラスのインポート

2.Bookクラスの定義
 2-1.フィールド変数titleとauthorの宣言
 2-2.コンストラクタでフィールド変数を初期化
 2-3.メソッドgetTitleの定義
 2-4.メソッドgetAuthorの定義

3.Libraryクラスの定義
 3-1.フィールド変数booksとbookCountの宣言
 3-2.コンストラクタで配列を初期化し、bookCountを0に設定
 3-3.メソッドaddBookの定義
  3-3-1.配列に新しいBookオブジェクトを追加
  3-3-2.配列がいっぱいの場合はエラーメッセージを表示
 3-4.メソッドdisplayBooksの定義
  3-4-1.配列内の全ての本のタイトルと著者を表示
 3-5.メソッドsearchBooksByAuthorの定義
  3-5-1.指定された著者の本を検索し、見つかった本を表示
  3-5-2.見つからなかった場合はメッセージを表示

4.LibraryManagementSystemクラスの定義
 4-1.mainメソッド
  4-1-1.Scannerオブジェクトの作成
  4-1-2.Libraryオブジェクトの作成
  4-1-3.ユーザーからの入力に基づいて操作を実行
   4-1-3-1.本の追加
    4-1-3-1-1.タイトルと著者を入力
    4-1-3-1-2.新しいBookオブジェクトを作成し、Libraryに追加
   4-1-3-2.全ての本を表示
    4-1-3-2-1.LibraryのdisplayBooksメソッドを呼び出す
   4-1-3-3.著者で本を検索
    4-1-3-3-1.著者名を入力
    4-1-3-3-2.LibraryのsearchBooksByAuthorメソッドを呼び出す
   4-1-3-4.終了選択
  4-1-4.Scannerオブジェクトを閉じる

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

import java.util.Scanner;

// 本の情報を保持するクラス
class Book {
    String title;
    String author;

    // コンストラクタ
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    // 本のタイトルを取得するメソッド
    public String getTitle() {
        return title;
    }

    // 本の著者を取得するメソッド
    public String getAuthor() {
        return author;
    }
}

// 図書館のシステムを管理するクラス
class Library {
    Book[] books; // 本の配列
    int bookCount; // 現在の本の数

    // コンストラクタ
    public Library(int size) {
        books = new Book[size];
        bookCount = 0;
    }

    // 本を追加するメソッド
    public void addBook(Book book) {
        if (bookCount < books.length) {
            books[bookCount] = book;
            bookCount++;
        } else {
            System.out.println("図書館の容量がいっぱいです。");
        }
    }

    // 全ての本の情報を表示するメソッド
    public void displayBooks() {
        // ***このコメントを消して、配列内の全ての本のタイトルと著者を表示するコードを書いて下さい。***
    }

    // 特定の著者の本を検索するメソッド
    public void searchBooksByAuthor(String author) {
        // ***このコメントを消して、指定された著者の本を検索し、見つかった本を表示するコードを書いて下さい。***
        // ***見つからなかった場合はメッセージを表示するコードを書いて下さい。***
    }
}

// メインクラス
public class LibraryManagementSystem {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Library library = new Library(100); // 図書館の容量を100冊に設定

        while (true) {
            System.out.println("選択してください: 1. 本を追加 2. 全ての本を表示 3. 著者で本を検索 4. 終了");
            int choice = scanner.nextInt();
            scanner.nextLine(); // 改行を消費

            if (choice == 1) {
                System.out.print("本のタイトルを入力してください: ");
                // ***このコメントを消して、ユーザーから本のタイトルを入力するコードを書いて下さい。***
                System.out.print("本の著者を入力してください: ");
                // ***このコメントを消して、ユーザーから本の著者を入力するコードを書いて下さい。***
                // ***このコメントを消して、新しいBookオブジェクトを作成し、それをLibraryに追加するコードを書いて下さい。***
            } else if (choice == 2) {
                // ***このコメントを消して、LibraryのdisplayBooksメソッドを呼び出すコードを書いて下さい。***
            } else if (choice == 3) {
                System.out.print("著者名を入力してください: ");
                // ***このコメントを消して、ユーザーから著者名を入力するコードを書いて下さい。***
                // ***このコメントを消して、LibraryのsearchBooksByAuthorメソッドを呼び出すコードを書いて下さい。***
            } else if (choice == 4) {
                break;
            } else {
                System.out.println("無効な選択です。もう一度お試しください。");
            }
        }

        scanner.close();
    }
}

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

import java.util.Scanner;

// 本の情報を保持するクラス
class Book {
    String title;
    String author;

    // コンストラクタ
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    // 本のタイトルを取得するメソッド
    public String getTitle() {
        return title;
    }

    // 本の著者を取得するメソッド
    public String getAuthor() {
        return author;
    }
}

// 図書館のシステムを管理するクラス
class Library {
    Book[] books; // 本の配列
    int bookCount; // 現在の本の数

    // コンストラクタ
    public Library(int size) {
        books = new Book[size];
        bookCount = 0;
    }

    // 本を追加するメソッド
    public void addBook(Book book) {
        if (bookCount < books.length) {
            books[bookCount] = book;
            bookCount++;
        } else {
            System.out.println("図書館の容量がいっぱいです。");
        }
    }

    // 全ての本の情報を表示するメソッド
    public void displayBooks() {
        for (int i = 0; i < bookCount; i++) {
            System.out.println("タイトル: " + books[i].getTitle() + ", 著者: " + books[i].getAuthor());
        }
    }

    // 特定の著者の本を検索するメソッド
    public void searchBooksByAuthor(String author) {
        boolean found = false;
        for (int i = 0; i < bookCount; i++) {
            if (books[i].getAuthor().equalsIgnoreCase(author)) {
                System.out.println("タイトル: " + books[i].getTitle() + ", 著者: " + books[i].getAuthor());
                found = true;
            }
        }
        if (!found) {
            System.out.println("該当する著者の本は見つかりませんでした。");
        }
    }
}

// メインクラス
public class LibraryManagementSystem {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Library library = new Library(100); // 図書館の容量を100冊に設定

        while (true) {
            System.out.println("選択してください: 1. 本を追加 2. 全ての本を表示 3. 著者で本を検索 4. 終了");
            int choice = scanner.nextInt();
            scanner.nextLine(); // 改行を消費

            if (choice == 1) {
                System.out.print("本のタイトルを入力してください: ");
                String title = scanner.nextLine();
                System.out.print("本の著者を入力してください: ");
                String author = scanner.nextLine();
                Book book = new Book(title, author);
                library.addBook(book);
            } else if (choice == 2) {
                library.displayBooks();
            } else if (choice == 3) {
                System.out.print("著者名を入力してください: ");
                String author = scanner.nextLine();
                library.searchBooksByAuthor(author);
            } else if (choice == 4) {
                break;
            } else {
                System.out.println("無効な選択です。もう一度お試しください。");
            }
        }

        scanner.close();
    }
}

********************

コードの解説

本の情報を保持するクラス (Book)

class Book {
    String title;
    String author;

    // コンストラクタ
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    // 本のタイトルを取得するメソッド
    public String getTitle() {
        return title;
    }

    // 本の著者を取得するメソッド
    public String getAuthor() {
        return author;
    }
}

ここでは、Bookクラスが定義されています。このクラスは、書籍のタイトルと著者名を保持するためのものです。

  • コンストラクタ: Book(String title, String author)は、オブジェクトが作成された際にタイトルと著者を設定します。
  • メソッド: getTitle()は本のタイトルを返し、getAuthor()は著者を返すメソッドです。

図書館システムを管理するクラス (Library)

class Library {
    Book[] books; // 本の配列
    int bookCount; // 現在の本の数

    // コンストラクタ
    public Library(int size) {
        books = new Book[size];
        bookCount = 0;
    }

    // 本を追加するメソッド
    public void addBook(Book book) {
        if (bookCount < books.length) {
            books[bookCount] = book;
            bookCount++;
        } else {
            System.out.println("図書館の容量がいっぱいです。");
        }
    }

    // 全ての本の情報を表示するメソッド
    public void displayBooks() {
        for (int i = 0; i < bookCount; i++) {
            System.out.println("タイトル: " + books[i].getTitle() + ", 著者: " + books[i].getAuthor());
        }
    }

    // 特定の著者の本を検索するメソッド
    public void searchBooksByAuthor(String author) {
        boolean found = false;
        for (int i = 0; i < bookCount; i++) {
            if (books[i].getAuthor().equalsIgnoreCase(author)) {
                System.out.println("タイトル: " + books[i].getTitle() + ", 著者: " + books[i].getAuthor());
                found = true;
            }
        }
        if (!found) {
            System.out.println("該当する著者の本は見つかりませんでした。");
        }
    }
}

このクラスは、図書館システムを管理します。Libraryは本を追加したり、表示したり、著者で検索できる機能を持っています。

  • books[]: 図書館の本を保持する配列です。最大の容量を持ち、本を追加していきます。
  • addBook(): 本を追加するためのメソッドで、配列がいっぱいでない限り、本を追加します。
  • displayBooks(): 図書館にあるすべての本を表示します。
  • searchBooksByAuthor(): 特定の著者の本を検索し、見つかった本のタイトルと著者を表示します。見つからない場合にはエラーメッセージを表示します。

メインクラス (LibraryManagementSystem)

public class LibraryManagementSystem {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Library library = new Library(100); // 図書館の容量を100冊に設定

        while (true) {
            System.out.println("選択してください: 1. 本を追加 2. 全ての本を表示 3. 著者で本を検索 4. 終了");
            int choice = scanner.nextInt();
            scanner.nextLine(); // 改行を消費

            if (choice == 1) {
                System.out.print("本のタイトルを入力してください: ");
                String title = scanner.nextLine();
                System.out.print("本の著者を入力してください: ");
                String author = scanner.nextLine();
                Book book = new Book(title, author);
                library.addBook(book);
            } else if (choice == 2) {
                library.displayBooks();
            } else if (choice == 3) {
                System.out.print("著者名を入力してください: ");
                String author = scanner.nextLine();
                library.searchBooksByAuthor(author);
            } else if (choice == 4) {
                break;
            } else {
                System.out.println("無効な選択です。もう一度お試しください。");
            }
        }

        scanner.close();
    }
}

LibraryManagementSystemクラスは、図書館の管理を行うメインプログラムです。ユーザーが本を追加、表示、検索できるインターフェースを提供します。

  • Scanner: ユーザーからの入力を取得するために使用されます。scanner.nextInt()でユーザーの選択を取得し、scanner.nextLine()でテキスト入力を受け取ります。
  • 選択肢: ユーザーは次の4つの選択肢から選びます。1.本を追加、2.全ての本を表示、3.著者で検索、4.終了。
    • 1: 本を追加するための処理を行い、ユーザーにタイトルと著者を入力させます。
    • 2: 登録されているすべての本を表示します。
    • 3: 指定された著者名で本を検索し、見つかった本を表示します。
    • 4: プログラムを終了します。
<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    JAVA練習問題集へ戻る
    トップページへ戻る