「Javaの練習として何か本格的なアプリを作りたい」
「データの管理や処理を学びたいけど、何から始めればいいかわからない」
そんな悩みを持つ方には、図書館管理システムの作成がぴったりです。
このシステムでは、本の登録・一覧表示・貸出管理などの機能を通じて、
配列・リスト・クラスの設計・条件分岐・繰り返し処理などを総合的に学ぶことができます。
この記事では、Javaの基本だけで構築できるシンプルかつ実用的な図書館システムの作り方を、コード付きで丁寧に解説します。
図書館管理システムとは?
学習に役立つシステムの一例です
結論:本の登録・検索・貸出処理を通じてJavaの基礎がすべて学べます。
Javaの学習を続けていると、「もっと実践的な課題に挑戦したい」と感じる方が多くなります。
そんな方にぴったりなのが、図書館管理システムの作成です。
このシステムを通じて学べるのは次のような内容です。
- オブジェクトの考え方(クラスの設計)
- 配列・リストによるデータ管理
- 条件分岐・繰り返しの組み合わせ
- 複数メソッドの分離と呼び出しの流れ
実際に文部科学省の「情報教育に関する実態調査」でも、データ管理や情報活用のスキル習得が重要視されています(出典:https://www.mext.go.jp/b_menu/houdou/mext_00034.html)。
システム全体の構成を整理する
機能を分けて考えるとわかりやすくなります
結論:以下の機能を個別に作れば全体が見えてきます。
- 本の登録(新しい本をシステムに追加)
- 一覧表示(全ての本を出力)
- 貸出処理(貸出状態を変更)
- 返却処理(元に戻す)
クラス設計としては以下の通りです。
Book
クラス:タイトル、著者、貸出状態を管理LibrarySystem
クラス:本のリストを保持し、メニューで操作を受け付ける
Bookクラスの定義
本の情報と状態を扱うクラスです
public class Book {
private String title;
private String author;
private boolean isBorrowed;
public Book(String title, String author) {
this.title = title;
this.author = author;
this.isBorrowed = false;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void borrow() {
this.isBorrowed = true;
}
public void returnBook() {
this.isBorrowed = false;
}
public String toString() {
return title + " / " + author + " / " + (isBorrowed ? "貸出中" : "在庫あり");
}
}
メイン処理とメニューの作成
操作を選べるようにして処理を分けます
import java.util.*;
public class LibrarySystem {
private static List<Book> books = new ArrayList<>();
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
while (true) {
System.out.println("\n=== 図書館メニュー ===");
System.out.println("1. 本を登録");
System.out.println("2. 一覧を表示");
System.out.println("3. 本を貸出");
System.out.println("4. 本を返却");
System.out.println("0. 終了");
System.out.print("番号を選んでください:");
int choice = scanner.nextInt();
scanner.nextLine(); // 改行消去
switch (choice) {
case 1:
addBook();
break;
case 2:
listBooks();
break;
case 3:
borrowBook();
break;
case 4:
returnBook();
break;
case 0:
System.out.println("終了します。");
return;
default:
System.out.println("無効な入力です。");
}
}
}
private static void addBook() {
System.out.print("タイトル:");
String title = scanner.nextLine();
System.out.print("著者名:");
String author = scanner.nextLine();
books.add(new Book(title, author));
System.out.println("本を登録しました。");
}
private static void listBooks() {
if (books.isEmpty()) {
System.out.println("登録されている本がありません。");
} else {
for (int i = 0; i < books.size(); i++) {
System.out.println((i + 1) + ". " + books.get(i));
}
}
}
private static void borrowBook() {
listBooks();
System.out.print("貸出する本の番号:");
int index = scanner.nextInt() - 1;
scanner.nextLine();
if (index >= 0 && index < books.size()) {
Book book = books.get(index);
if (book.isBorrowed()) {
System.out.println("すでに貸出中です。");
} else {
book.borrow();
System.out.println("貸出処理を行いました。");
}
} else {
System.out.println("無効な番号です。");
}
}
private static void returnBook() {
listBooks();
System.out.print("返却する本の番号:");
int index = scanner.nextInt() - 1;
scanner.nextLine();
if (index >= 0 && index < books.size()) {
Book book = books.get(index);
if (!book.isBorrowed()) {
System.out.println("この本はすでに在庫にあります。");
} else {
book.returnBook();
System.out.println("返却処理を行いました。");
}
} else {
System.out.println("無効な番号です。");
}
}
}
よくあるミスとその対策
エラーで動かない原因と解決方法を確認しましょう
結論:配列の範囲・nullチェック・入力チェックが重要です。
- 番号を選ぶときに
0
始まりと1
始まりの違いに注意 scanner.nextLine()
を使うときは改行処理が必要- リストが空のときの表示対策を忘れずに
応用:次に挑戦してみたい機能
より本格的なシステムに進化させよう
拡張アイデア:
- 日時付きの貸出履歴(
LocalDateTime
の導入) - CSVファイルへの保存・読み込み
- GUI版への移行(
Swing
やJavaFX
で画面構築)
完成形コードまとめ
Book.java
:本の情報と状態を管理するクラスLibrarySystem.java
:登録・貸出・返却などの操作を管理
まとめ:図書館管理システムで学べたこと
この記事では、Javaで作る簡易図書館管理システムについて解説しました。
学べた内容:
- クラスとメソッドの分割設計
- リストや入力処理の流れ
- 実践的な条件分岐と例外処理の考え方