読み込み中...

Javaで始める座席予約システムの作り方10選

Javaを用いた座席予約システムの作成ガイドと10の実用的なサンプルコード Java
この記事は約34分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Javaで座席予約システムを作るなら、座席の状態管理、予約、キャンセル、表示、保存を分けて考えます。プログラミング初心者が迷いやすいのは、classbooleanより、座席情報をSeatSeatManagerへどう分けるかです。

Javaの最小サンプルコードから始め、ArrayListPreparedStatementSwingへ段階的に広げる流れが実用的です。座席予約システムの使い方を学ぶ段階では、コンソールや小さなGUIで状態を確認できる形が扱いやすくなります。

Java標準APIにはコレクション、入出力、国際化、GUIの基盤があるのが目安です。仕様はJava SE 21 API Specification、JDBCの基本はOracle Java Tutorials JDBC Basicsで確認できます。

動作確認環境
  • Java SE 21 / JDK 21
  • MySQL Connector/J 8.4 系を想定したJDBC構成
  • Eclipse IDE for Java Developers 2024系、または同等のJava対応IDE
📖 この記事で学べること
  • Javaで座席予約システムを組み立てる基本構造
  • プログラミング初心者が理解しやすい座席管理クラスの分け方
  • 予約、キャンセル、表示、フィードバック機能のサンプルコード
  • カスタマイズ時の注意点と対処法
  • 多言語対応やモバイル風画面などの応用例

Javaと座席予約システム入門

Javaで座席予約システムを作る基本は、座席状態をデータとして保持し、予約やキャンセルで更新することです。最小確認ではmainメソッドから起動メッセージを出し、Java処理の入口を明確にします。

public class SeatReservationSystem {    public static void main(String[] args) {        System.out.println("座席予約システムを起動します。");    }}

結果: 期待される出力は「座席予約システムを起動するのが一般的です。」です。

このJavaコードでpublicstaticvoidString[]System.out.printlnを確認できるのがポイントです。ただし、座席データはまだないため予約処理は含みません。

Javaプログラミングの基本

Javaはclass単位で処理をまとめ、データをfield、操作をmethodとして切り出します。座席予約システムでは、座席番号、予約状態、利用者、予約日時を責務ごとに分けます。

プログラミング初心者はifforの後に、データの置き場所で迷いがちです。Javaでは座席をSeat、複数座席をSeatManager、画面や入力を別クラスへ分けると整理できるのが一般的です。

座席予約システムの概要

座席予約システムは、空席確認、予約、キャンセル、状況表示を中心に動きます。Javaではtruefalseの簡易版から、reservation_iduser_idを保存するDB版まで作り分けます。

座席状態だけならJavaで小さく始められますし、ここがポイントです。決済、本人確認、同時予約防止まで扱う場合は、transactionUNIQUE制約、index、例外処理が注意点になります。

💡 Tips: Javaの座席予約システムは、コンソール版、GUI版、データベース版の順に育てると設計の意図を追いやすくなります。
項目役割Javaで使う要素注意点応用先
起動処理アプリの入口mainクラス名とファイル名を合わせますCLI起動
座席番号席を識別int0始まりと1始まりを混同しません座席表
予約状態空席か判定boolean初期値を決めます空席検索
座席一覧複数席を保持List範囲外参照を避けます一括表示
追加処理席を登録add重複番号を避けます会場変更
検索処理席を探すget添字のずれに注意します予約照会
予約処理状態を更新reserve予約済み席を再予約しません購入連携
キャンセル状態を戻すcancel未予約席の取消を弾きます返金処理
画面表示状態を見せるJFrameUIとデータを混ぜすぎません管理画面
ボタン座席選択JButton押下時の状態遷移を決めますタッチUI
レイアウト座席配置GridLayout行列数を固定しすぎません劇場レイアウト
入力番号を受け取るScanner数値以外の入力に備えます管理CLI
SQL接続DBに接続Connection接続情報を直書きしません予約保存
SQL文予約を操作PreparedStatement文字列連結を避けます検索条件
削除予約取消DELETE条件漏れに注意します履歴管理
例外失敗を扱うcatch握りつぶしを避けますログ出力
自動解放リソースを閉じるtry-with-resources接続リークを防ぎますDB処理
国際化言語を切替ResourceBundleキー不足を検知します多言語対応
地域設定言語地域を表すLocale国コードを確認します海外展開
フィードバック意見を保持ArrayList保存先を検討します改善要望
カテゴリ分類するString入力値を正規化します分析
表示記号空席を表すprint凡例を用意します座席マップ
改行行を整えるprintln列数で改行します一覧表示
終了条件ループを止めるbreak入力ルールを伝えます対話処理
比較分岐するequals文字列比較に使いますボタン状態
配列行列を表すboolean[][]添字の範囲を確認します座席表
定数接続値を持つstatic final秘密情報は外部化します設定管理
パッケージ名前を分けるpackage責務別に整理します大規模化
テスト挙動を確認assert境界値を含めます品質確認
内部リンク学習を広げるhref自リンクを避けます関連記事

Javaで座席予約システムを作る前に準備するもの

Java開発の前に、JDK、IDE、データベース、JDBCドライバをそろえます。プログラミング初心者はjava -versionでJDKを確認し、srcにクラスを作れる状態にします。

JavaはJDK 21のような長期サポート版を選ぶと学習資料と合わせやすくなるのが現実的です。Eclipse、IntelliJ IDEA、Visual Studio Codeで作業でき、GUI版ではSwingJavaFXの設定も確認します。

開発環境のセットアップ

JDKを導入し、IDEでJavaプロジェクトを作り、mainメソッドを含むクラスを用意します。ビルドパスへMySQL Connector/JなどのJDBCドライバを追加すると、DB接続のサンプルコードも扱えますが、これは押さえたい点です。

接続URL、ユーザー名、パスワードをJavaコードへ直書きする構成は学習用に限定します。実用寄りにするならpropertiesファイル、環境変数、シークレット管理へ分離するのが対処法です。

必要なツールとライブラリ

座席予約システムの使い方を試すだけなら、JavaのJDKとIDEでコンソール版を作れます。保存にはMySQLなどのDB、Javaからの操作にはJDBC、画面にはjavax.swingjava.awtを使いると整理できます。

DBには座席テーブル、予約テーブル、利用者テーブルを分けて用意します。Java側の処理も分離でき、空席確認、予約変更、キャンセル、履歴参照のカスタマイズがしやすくなります。

⚠️ 注意: サンプルコード内の接続文字列やパスワードは説明用です。公開リポジトリへ認証情報を置かず、環境変数や設定ファイルで管理すると理解できます。

Javaで座席予約システムの基本構造を理解する

座席予約システムは、座席データ、予約ロジック、表示、永続化で構成します。Javaではクラスごとに分け、privateフィールドをgettersetterで扱うと状態変更を追いやすくなります。

学習用サンプルコードでは、分けすぎると全体像が見えにくくなると覚えるとよいでしょう。Javaの最初の形はSeatSeatManagerだけにし、予約とキャンセルを理解してからDBや画面へ広げます。

システム設計の基本

Java設計では、座席数、座席番号の形式、二重予約を防ぐ条件、キャンセル時の戻し方を先に決めます。これがreserveSeatcancelSeatの分岐条件になり、エラー時の対処法にもつながりますし、これが一つの目安です。

仕様が曖昧だと、カスタマイズ時にJava処理が衝突しやすくなります。座席番号を1始まりで受け取り、内部配列を0始まりで扱うなら、seatNumber - 1の変換を一箇所に閉じ込めます。

データベース設計のポイント

JavaからDBを使う場合、seatsreservationsusersのようにテーブルを分けますが、覚えておくと役立つでしょう。座席は固定情報、予約は誰がいつどの席を押さえたか、利用者は連絡先や識別情報を担当します。

同じ座席へ同時予約が入らないよう、予約テーブルに一意制約やトランザクションを組み合わせます。注意点は、Java画面で空席表示しても保存直前に別ユーザーが予約する可能性が残ることです。

Javaでの座席予約システムの作り方

Javaでの作り方は、起動確認、座席クラス、座席管理クラス、予約入力、キャンセル、画面表示の順に進めますし、ここを基本と考えるとよいでしょう。基礎補強にはJava List型完全ガイドListの使い方を確認できます。

サンプルコード1:プロジェクトの初期設定

最初のサンプルコードは、Javaプロジェクトを作り、起動メッセージを出す最小構成です。IDE、JDK、クラス名、mainメソッドの設定を確認します。

// Eclipseを起動すると考えられます。// 「File」メニューから「New」を選択し、さらに「Java Project」を選択します。// プロジェクト名を入力し、「Finish」ボタンをクリックするのが基本です。// 新しく作成されたプロジェクトの「src」フォルダを右クリックし、「New」を選択した後、「Class」を選択するのが目安です。// クラス名を入力し、「Finish」ボタンをクリックするのが基本です。// 新しく作成されたクラスファイルに、次のコードを記述するのが目安です。public class SeatReservationSystem {    public static void main(String[] args) {        System.out.println("座席予約システムを起動します。");    }}

結果: 期待される出力は「座席予約システムを起動するのがポイントです。」です。

このJava構成には座席予約システムの本体処理はありません。ただし、Javaクラスをコンパイルして起動できる状態が、以降のサンプルコードの前提です。

サンプルコード2:座席情報の管理

座席管理では、座席番号と予約状態を持つSeatクラスを用意すると言えるでしょう。プログラミング初心者は、1席を表すクラスと複数席をまとめるクラスを分ける点を意識します。

public class Seat {    private int seatNumber;    private boolean isReserved;    // コンストラクタ    public Seat(int seatNumber) {        this.seatNumber = seatNumber;        this.isReserved = false;    }    // 座席の状態を取得するメソッド    public boolean isReserved() {        return isReserved;    }    // 座席の状態を変更するメソッド    public void reserve() {        this.isReserved = true;    }    // 座席の予約をキャンセルするメソッド    public void cancel() {        this.isReserved = false;    }}

結果: 期待される動きは、生成直後の座席が未予約で、reserve()後に予約済みへ変わることです。

このJavaのSeatでは、seatNumberが座席番号、isReservedが予約状態です。座席番号を外部から読むならgetSeatNumber()を追加するなど、使い方に合わせてカスタマイズします。

import java.util.ArrayList;import java.util.List;public class SeatManager {    private List<Seat> seats;    // コンストラクタ    public SeatManager(int numberOfSeats) {        seats = new ArrayList<>();        for (int i = 1; i <= numberOfSeats; i++) {            seats.add(new Seat(i));        }    }    // 座席の予約を行うメソッド    public void reserveSeat(int seatNumber) {        Seat seat = seats.get(seatNumber - 1);        seat.reserve();    }    // 座席の予約をキャンセルするメソッド    public void cancelSeat(int seatNumber) {        Seat seat = seats.get(seatNumber - 1);        seat.cancel();    }}

結果: 期待される動きは、指定した番号に対応するSeatの予約状態が切り替わることです。

SeatManagerArrayListで複数座席を保持します。seats.get(seatNumber - 1)は範囲外で例外になるため、Java実用化ではseatNumber < 1seatNumber > seats.size()を確認する対処法を入れます。

public class Main {    public static void main(String[] args) {        SeatManager seatManager = new SeatManager(10);        seatManager.reserveSeat(5);        // 座席5の予約状態を確認        System.out.println(seatManager.seats.get(4).isReserved()); // 結果:true    }}

結果: 期待される出力はtrueです。

このJavaコードはseatsprivateのままだと外部クラスから参照できません。確認用のisSeatReserved(int seatNumber)SeatManagerに追加する対処法があります。

サンプルコード3:予約機能の実装

予約機能では、入力された行番号と列番号が範囲内か、対象席が未予約かを判定します。この判定は、存在しない座席や予約済み座席を処理しないための重要な注意点です。

import java.util.Scanner;public class SeatReservationSystem {    private boolean[][] seats;    public SeatReservationSystem(int rows, int cols) {        seats = new boolean[rows][cols];    }    public void reserveSeat(int row, int col) {        if(row >= 0 && row < seats.length && col >= 0 && col < seats[row].length && !seats[row][col]) {            seats[row][col] = true;            System.out.println("座席の予約が完了しました。");        } else {            System.out.println("無効な座席番号または既に予約された座席です。");        }    }    public void showSeats() {        for(int i = 0; i < seats.length; i++) {            for(int j = 0; j < seats[i].length; j++) {                System.out.print(seats[i][j] ? "予約済" : "空席");                System.out.print(" ");            }            System.out.println();        }    }    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.print("行数を入力してください: ");        int rows = scanner.nextInt();        System.out.print("列数を入力してください: ");        int cols = scanner.nextInt();        SeatReservationSystem srs = new SeatReservationSystem(rows, cols);        while(true) {            System.out.print("予約する座席の行番号を入力してください(終了する場合は-1を入力): ");            int row = scanner.nextInt();            if(row == -1) break;            System.out.print("予約する座席の列番号を入力してください: ");            int col = scanner.nextInt();            srs.reserveSeat(row, col);            srs.showSeats();        }        scanner.close();    }}

結果: 期待される表示は、指定した座席だけが「予約済」に変わり、範囲外や重複予約では警告文が出る形です。

このJavaのサンプルコードはboolean[][]で座席表を表し、Scannerで入力を受け取ります。nextInt()は数値以外で例外になるため、使い方を広げるなら入力チェックを追加します。

サンプルコード4:キャンセル機能の実装

キャンセル機能をDBで扱う場合、座席番号に紐づく予約レコードを削除するのが基本です。JavaではConnectionDriverManagerPreparedStatementを使い、SQLインジェクションを避けます。

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;public class SeatReservationSystem {    private static final String URL = "jdbc:yourdatabaseurl";    private static final String USERNAME = "yourdatabaseusername";    private static final String PASSWORD = "yourdatabasepassword";    public void cancelReservation(int seatNumber) {        String sql = "DELETE FROM seat_reservations WHERE seat_number = ?";        try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);             PreparedStatement pstmt = conn.prepareStatement(sql)) {            pstmt.setInt(1, seatNumber);            pstmt.executeUpdate();        } catch (Exception e) {            e.printStackTrace();        }    }}

結果: 期待される結果は、指定したseat_numberに一致する予約レコードが削除されることです。

このJava処理はtry-with-resourcesで接続やステートメントを閉じます。削除件数を確認していないため、executeUpdate()の戻り値で「対象なし」の対処法を分けます。

サンプルコード5:利用者インターフェイスの作成

利用者インターフェイスは、座席予約システムの使い方を視覚的に伝えますし、ここがポイントです。JavaのSwingなら、座席をJButtonとして並べ、クリックで「空席」と「予約済」を切り替えるサンプルコードを作れます。

import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class SeatReservationUI {    private JFrame frame;    private JPanel panel;    private JButton[][] seatButtons;    private int rows = 5;    private int cols = 5;    public SeatReservationUI() {        frame = new JFrame("座席予約システム");        panel = new JPanel(new GridLayout(rows, cols));        seatButtons = new JButton[rows][cols];        for (int i = 0; i < rows; i++) {            for (int j = 0; j < cols; j++) {                seatButtons[i][j] = new JButton("空席");                seatButtons[i][j].addActionListener(new SeatButtonListener(i, j));                panel.add(seatButtons[i][j]);            }        }        frame.add(panel);        frame.setSize(300, 300);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setVisible(true);    }    class SeatButtonListener implements ActionListener {        private int row;        private int col;        public SeatButtonListener(int row, int col) {            this.row = row;            this.col = col;        }        @Override        public void actionPerformed(ActionEvent e) {            JButton button = (JButton) e.getSource();            if (button.getText().equals("空席")) {                button.setText("予約済");            } else {                button.setText("空席");            }        }    }    public static void main(String[] args) {        new SeatReservationUI();    }}

結果: 期待される表示は、5行5列のボタン画面で、クリックしたボタンの文字が「空席」と「予約済」で切り替わる形です。

このJava GUI版は状態をボタン文字列で持つため、学習用として見やすい構成です。実用化では、画面表示と予約データを分離し、SeatManager側の状態を正とします。

座席予約システムのカスタマイズ方法

カスタマイズでは、座席数、配置、表示、入力形式、フィードバック収集を変更します。Java基礎の補強にはJavaエスケープ処理の解説Javaアノテーションの解説も役立ちますが、これは押さえたい点です。

サンプルコード6:座席配置のカスタマイズ

座席配置のカスタマイズでは、座席番号と利用可能状態を分けて保持します。Javaでこの形にすると、故障席、販売停止席、関係者席などの応用例へ広げやすくなります。

public class Seat {    private int seatNumber;    private boolean isAvailable;    public Seat(int seatNumber, boolean isAvailable) {        this.seatNumber = seatNumber;        this.isAvailable = isAvailable;    }    // 座席番号を取得するのが現実的です。    public int getSeatNumber() {        return seatNumber;    }    public boolean isAvailable() {        return isAvailable;    }    // 座席の利用可能状態を変更するのが目安です。    public void setAvailable(boolean available) {        isAvailable = available;    }}

結果: 期待される動きは、座席番号ごとに利用可能かどうかを読み書きできることです。

このJavaのSeatは予約状態ではなく利用可能状態を扱います。予約済みと販売停止を同じfalseで表すと理由が失われるため、必要に応じてenumで状態を分けます。

import java.util.ArrayList;import java.util.List;public class SeatManager {    private List<Seat> seats;    public SeatManager(int seatCount) {        seats = new ArrayList<>();        for (int i = 1; i <= seatCount; i++) {            seats.add(new Seat(i, true));        }    }    // 指定した座席番号の利用可能状態を変更するのがポイントです。    public void changeSeatAvailability(int seatNumber, boolean isAvailable) {        for (Seat seat : seats) {            if (seat.getSeatNumber() == seatNumber) {                seat.setAvailable(isAvailable);                break;            }        }    }    // 座席の状態を表示します。    public void displaySeats() {        for (Seat seat : seats) {            System.out.print("Seat No:" + seat.getSeatNumber());            System.out.println(" - Available: " + seat.isAvailable());        }    }}

結果: 期待される出力は、各座席番号と利用可能状態が順に表示される形です。

このJavaサンプルコードは、forで対象座席を探し、見つかった時点でbreakします。座席数が増える場合はMap<Integer, Seat>へ変更すると、番号検索の使い方が明確になるのが一般的です。

public class Main {    public static void main(String[] args) {        SeatManager seatManager = new SeatManager(10);        // 座席の状態を表示        seatManager.displaySeats();        // 座席の利用可能状態を変更        seatManager.changeSeatAvailability(5, false);        // 状態変更後の座席の状態を表示        seatManager.displaySeats();    }}

結果: 期待される表示は、最初に全席がtrueで表示され、その後に座席5だけがfalseへ変わる形です。

これで座席配置の一部を販売停止にするカスタマイズを表現できます。同じ出力が2回続くため、変更前後の区切り文を出すとJavaの確認がしやすくなります。

サンプルコード7:予約状況のビジュアル表示

予約状況のビジュアル表示では、空席と予約済み席を記号で表するのが現実的です。Javaのコンソールでも、REを使えば座席表の応用例を確認できます。

public class SeatReservation {    private int totalSeats;    private int reservedSeats;    public SeatReservation(int totalSeats) {        this.totalSeats = totalSeats;        this.reservedSeats = 0;    }    public int getTotalSeats() {        return totalSeats;    }    public int getReservedSeats() {        return reservedSeats;    }    public void reserveSeat() {        if (reservedSeats < totalSeats) {            reservedSeats++;        } else {            System.out.println("申し訳ございませんが、座席が満席です。");        }    }}

結果: 期待される動きは、reserveSeat()を呼ぶたびに予約済み座席数が増え、満席後はメッセージが出ることです。

このJavaクラスは全体数と予約数だけを持ち、個別の座席番号は管理しません。座席番号を選ぶ座席予約システムではなく、残席数を扱う簡易モデルです。

public void displaySeats() {    for (int i = 1; i <= totalSeats; i++) {        if (i <= reservedSeats) {            System.out.print("R ");  // Rは予約済み席を示します        } else {            System.out.print("E ");  // Eは空席を示します        }        if (i % 10 == 0) {            System.out.println();        }    }}

結果: 期待される表示は、予約済み席がR、空席がEとして10席ごとに改行される形です。

このJava表示は分かりやすい反面、任意の座席を選ぶ用途には向きません。個別指定が必要なら、boolean[]boolean[][]へ切り替える対処法が適しています。

R R R R R R R R R R R R R R R E E E E E E E E E E E E E E E 

結果: 期待される出力例は、30席中15席が予約済みとして前半にR、後半にEが並ぶ表示です。

このJava出力例は固定例です。実際の値はtotalSeatsreservedSeatsに応じて変わります。

サンプルコード8:追加機能の開発

追加機能の応用例として、利用者からのフィードバック収集があると整理できます。予約処理とは別に、使い方への不満、表示の分かりにくさ、キャンセル導線の改善点を保存できます。

public class FeedbackSystem {    private List<String> feedbackList = new ArrayList<>();    // フィードバックを収集するメソッド    public void collectFeedback(String feedback) {        feedbackList.add(feedback);    }    // 収集したフィードバックを表示するメソッド    public void displayFeedback() {        for (String feedback : feedbackList) {            System.out.println(feedback);        }    }}

結果: 期待される動きは、受け取った文字列がfeedbackListへ追加され、一覧として出力されることです。

このJavaサンプルコードにはjava.util.Listjava.util.ArrayListimportが必要です。プログラミング初心者はIDE補完で不足したimportを追加します。

public class SeatReservationSystem {    private FeedbackSystem feedbackSystem = new FeedbackSystem();    // その他の座席予約システムのメソッド    public void receiveFeedback(String feedback) {        feedbackSystem.collectFeedback(feedback);    }    public void showFeedbacks() {        feedbackSystem.displayFeedback();    }}

結果: 期待される動きは、座席予約システム側からフィードバック登録と表示を呼び出せることです。

このJava統合で、予約機能とは別の責務をFeedbackSystemへ分けられます。保存先はメモリだけなので、アプリ終了で内容が消える点に注意します。

public class Feedback {    private String category;    private String message;    // コンストラクタとゲッター、セッター}

結果: 期待される設計は、フィードバック本文に加えてカテゴリを保持できる形です。

Feedbackクラスを使うと、「画面」「予約」「キャンセル」などに分類できると理解できます。分類を加えると、改善対象を絞り込みやすく、カスタマイズの優先度も判断しやすくなります。

注意点と対処法

Javaで座席予約システムを作る際の注意点は、入力値、同時予約、SQL、例外処理、画面とデータの不一致です。対処法を先に決めると、サンプルコードを実用寄りに直す判断が速くなります。

デバッグ方法

Javaのデバッグでは、変数の中身、分岐条件、ループ回数を確認すると覚えるとよいでしょう。小さなサンプルコードではSystem.out.println、複雑になったらIDEのブレークポイント、ウォッチ式、ステップ実行を使います。

public class DebugExample {    public static void main(String[] args) {        int x = 5;        System.out.println("xの値は:" + x); // xの値を確認    }}

結果: 期待される出力は「xの値は:5」です。

確認用のprintlnを残すとログが読みにくくなります。Java学習後は削除するか、java.util.loggingなどのログ機構へ置き換えるのが対処法です。

セキュリティ対策

セキュリティ面では、SQL文字列を入力値で連結しないことが重要です。JavaでJDBCを使う場合、PreparedStatementのプレースホルダへ値を渡し、SQLの構造と値を分離すると考えられます。

import java.sql.Connection;import java.sql.PreparedStatement;public class SecurityExample {    public static void main(String[] args) {        String query = "SELECT * FROM seats WHERE id = ?";        try (Connection conn = /* データベース接続の取得 */;             PreparedStatement pstmt = conn.prepareStatement(query)) {             pstmt.setInt(1, 1);             // ...結果の処理...        } catch (Exception e) {            e.printStackTrace();        }    }}

結果: 期待される処理は、idが1の座席情報をパラメータ付きSQLで取得することです。

このJavaコードは説明用で、Connection取得部分が省略されています。そのままでは完全にコンパイルできないため、実際の接続処理を補うかDAOクラスへ切り出す対処法を選びます。

⚠️ 注意: XSS対策が必要なWeb版では、ユーザー入力をHTMLへ出す前にエスケープするのが目安です。Swingだけのデスクトップ版とWeb版では注意点が異なると言えるでしょう。

座席予約システムの応用例

応用例には、多言語対応、モバイル向け画面、決済連携、メール通知、予約履歴、管理者ダッシュボードがあります。Java基礎を広げるなら、Javaでうるう年を判定する解説Javaオーバーライドの解説も参考になります。

サンプルコード9:多言語対応

多言語対応では、表示文言をJavaコードへ直接埋め込まず、ResourceBundleで言語別ファイルから読み込みますし、これが一つの目安です。座席予約システムを海外利用者へ広げる応用例では、予約、キャンセル、満席などをキーで管理します。

import java.util.Locale;import java.util.ResourceBundle;public class MultiLanguageSupport {    public static void main(String[] args) {        // 言語設定を選択するのが一般的です。日本語と英語を例にします        Locale jpLocale = new Locale("ja", "JP");        Locale enLocale = new Locale("en", "US");        // リソースバンドルで言語ごとのメッセージを管理します        ResourceBundle jpBundle = ResourceBundle.getBundle("messages", jpLocale);        ResourceBundle enBundle = ResourceBundle.getBundle("messages", enLocale);        // それぞれの言語でのメッセージを出力します        System.out.println("日本語: " + jpBundle.getString("reservation"));        System.out.println("英語: " + enBundle.getString("reservation"));    }}

結果: 期待される出力は、messages_ja_JP.propertiesmessages_en_US.propertiesreservationキーに対応する文言です。

リソースファイルがない場合やキー不足では例外になります。対処法として、標準言語のmessages.propertiesを用意し、翻訳漏れをJavaテストで検出します。

サンプルコード10:Javaを使ったモバイル対応

Javaだけでモバイル風の座席予約システムを表すなら、小さな画面サイズを想定したデスクトップUIを作れますが、覚えておくと役立つでしょう。実際のスマートフォンアプリとは別ですが、画面幅を意識した使い方の学習にはJFrameでも足ります。

import java.awt.Dimension;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JButton;public class MobileCompatibleReservationSystem {    public static void main(String[] args) {        JFrame frame = new JFrame("モバイル対応座席予約システム");        JPanel panel = new JPanel();        JButton button = new JButton("座席予約");        // JFrameでモバイル向けのインターフェイスを構築しています        frame.setSize(new Dimension(300, 200));        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        panel.add(button);        frame.add(panel);        frame.setVisible(true);    }}

結果: 期待される表示は、幅300px、高さ200px程度のウィンドウに「座席予約」ボタンが置かれる形です。

このJavaサンプルコードは、モバイル対応というより小型画面UIの練習です。実際のモバイル対応では、タップ領域、レスポンシブ表示、通信エラー時の対処法、認証のカスタマイズを検討します。

まとめ

Javaで座席予約システムを作る流れは、起動確認、座席クラス、管理クラス、予約処理、キャンセル処理、画面表示、応用例の順です。サンプルコードを小さく動かしながら責務を分けると、プログラミング初心者でも全体像を追いやすくなります。

カスタマイズでは、座席状態をbooleanからenumへ広げる、ListからMapへ変える、DB保存やGUI接続を加える方向があるのが基本です。注意点と対処法を押さえると、重複予約、範囲外入力、危険なSQL組み立てを避けやすくなります。

Javaの座席予約システムは、劇場、教室、イベント、交通機関などの応用例へ展開できます。使い方を広げる際も、座席状態の正しい管理を中心に置き、表示や入力を差し替えやすくしておきますし、ここを基本と考えるとよいでしょう。

関連記事

著者: Japanシーモア編集部

Japanシーモアは、Web/IoT/APP/SYS 分野のプログラミング情報を体系的に提供するメディアです。本記事は編集部による執筆とAI支援を組み合わせて制作し、公開前に編集部が校正しています。誤りや改善案がございましたらお問い合わせよりご連絡ください。

※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。