Javaで回数券と自動改札のシミュレーション

概要

乗り物の回数券を表すクラスと自動改札機を表すカードを定義する。自動改札機に改札券を入れると残高から料金が引かれる。残高が足りないと通過できない。

class CommutationTicket {// 回数券クラス
	int balance;

	boolean pay(int fare) {// 運賃の支払い
		balance -= fare;
		if (balance < 0) {
			balance += fare;
			return false;
		} else {
			return true;
		}
	}
}

class AutomaticChicketChecker {// 自動改札機クラス
	int fare;

	void insertTicket(CommutationTicket ticket) {// 回数券を調べ支払いさせる。乗客を通過させる。
		if (ticket.pay(fare) == true) {
			System.out.println("改札通過できます。回数券の残高は" + ticket.balance + "です");
		} else {
			System.out.println("改札通過できません。回数券の残高は" + ticket.balance
					+ "です。残高が足りません");
		}
	}
}

class TicketAndCheker {
	public static void main(String[] args) {
		// 自動改札機オブジェクトを生成
		AutomaticChicketChecker checker = new AutomaticChicketChecker();
		System.out.println("自動改札機オブジェクトを生成しました");

		// 運賃を210円とする
		checker.fare = 210;

		System.out.println("運賃を210円としました");
		System.out.println();

		// 回数券オブジェクトを生成する
		CommutationTicket ticket = new CommutationTicket();
		System.out.println("回数券オブジェクトを生成しました");

		// 残高を400円にする
		ticket.balance = 400;
		System.out.println("回数券の残高を400円にしました");

		System.out.println();

		// 改札を通ることを試みる
		System.out.println("一回目の通過");
		checker.insertTicket(ticket);

		System.out.println();

		// 再び改札を通ることを試みる
		System.out.println("2回めの通過");
		checker.insertTicket(ticket);
	}
}

実行結果

自動改札機オブジェクトを生成しました
運賃を210円としました

回数券オブジェクトを生成しました
回数券の残高を400円にしました

一回目の通過
改札通過できます。回数券の残高は190です

2回めの通過
改札通過できません。回数券の残高は190です。残高が足りません

1/12 鉄道小物シリーズ EK-04 自動改札機日本信号製GX7 (黒色タイプ)

1/12 鉄道小物シリーズ EK-04 自動改札機日本信号製GX7 (黒色タイプ)

ICカードと自動改札 (交通ブックス)

ICカードと自動改札 (交通ブックス)