オブジェクト指向練習問題。

Q1
預金口座を表すクラスAccountを定義して、
各操作ができるプログラムを作成せよ。
■クラス:Account
<フィールド変数>
private int num 口座番号
private int pin 暗証番号
private int amount 預入金額
private static int totalAmount 全口座の預入金額の総額

<一般メソッド>
public boolean checkPin(int p)
… 暗証番号が正しいかどうかをチェックする
deposit
… 引数に指定した金額を口座に入れる
draw
… 引数に指定した金額を口座から引き出す
  残高が不足する場合は1円も引き出さない
toString(Override)
… 口座番号と残高を表示する
static displayTotalAmount 機能
… 全口座の預入金額の総額を表示する

[実行例]

1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>1
口座番号を入力して下さい >1234567
暗証番号を入力して下さい >1234
初期預入金額を入力して下さい >10000
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>1
口座番号を入力して下さい >2345678
暗証番号を入力して下さい >2345
初期預入金額を入力して下さい >15000
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>4
全口座の残高の合計は25000円です。
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>3
0---口座番号:1234567, 残高:10000
1---口座番号:2345678, 残高:15000
口座を番号で選択して下さい >1
暗証番号を入力して下さい >2345
引出金額を入力して下さい >10000
10000円引き出しました。
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>2
0---口座番号:1234567, 残高:10000
1---口座番号:2345678, 残高:5000
口座を番号で選択して下さい >2
口座の番号の選択が誤っています。
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>3
0---口座番号:1234567, 残高:10000
1---口座番号:2345678, 残高:5000
口座を番号で選択して下さい >0
暗証番号を入力して下さい >1234
引出金額を入力して下さい >15000
残高が不足しています。
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>3
0---口座番号:1234567, 残高:10000
1---口座番号:2345678, 残高:5000
口座を番号で選択して下さい >0
暗証番号を入力して下さい >1111
暗証番号が誤っています。
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>2
0---口座番号:1234567, 残高:10000
1---口座番号:2345678, 残高:5000
口座を番号で選択して下さい >0
預入金額を入力して下さい >15000
15000円預入しました。
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>4
全口座の残高の合計は30000円です。
1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>5
アプリケーションを終了しました。


一般クラス

public class Account {
	private int num;
	private int pin;
	private int amount;
	private static int totalAmount;
	public Account(int num,int pin,int amount){
		this.num=num;
		this.pin=pin;
		this.amount=amount;
		totalAmount+=amount;
	}
	public boolean checkPin(int p){
		return this.pin==p;
	}
	public void deposit(int money){
		this.amount+=money;
		totalAmount+=money;
		System.out.println(money+"円預入しました。");
	}
	public void draw(int money){
		if(this.amount < money){
			System.out.println("残高が不足しています。");			
		}else{
			this.amount-=money;
			totalAmount-=money;
			System.out.println(money+"円引き出しました。");
		}
	}
	@Override
	public String toString() {
		return String.format("口座番号:%d, 残高:%d", this.num,this.amount);
	}	
	public static void displayTotalAmount(){
		System.out.println("全口座の残高の合計は"+totalAmount+"円です。");
	}
}

アプリケーションクラス

import java.util.*;
public class BankApp {
	public static List<Account> list=new ArrayList<>();
	public static Scanner s=new Scanner(System.in);
	public static void main(String[] args) {		
		while(true){
			int select=getInputInt("1. 新規口座作成 / 2. 預入 / 3. 引出 / 4.預入総額表示 / 5. 終了>");
			switch(select){
			case 1:
				Account acc=new Account(
						getInputInt("口座番号を入力して下さい >"),
						getInputInt("暗証番号を入力して下さい >"),
						getInputInt("初期預入金額を入力して下さい >")
						);
				list.add(acc);
				break;
			case 2:
				displayAccount();
				int index=getInputInt("口座を番号で選択して下さい >");
				if(index < 0 || index >= list.size()){
					System.out.println("口座の番号の選択が誤っています。");
				}else{
					int money=getInputInt("預入金額を入力して下さい >");
					list.get(index).deposit(money);
				}
				break;
			case 3:
				displayAccount();
				index=getInputInt("口座を番号で選択して下さい >");
				if(index < 0 || index >= list.size()){
					System.out.println("口座の番号の選択が誤っています。");
				}else{
					int pass=getInputInt("暗証番号を入力して下さい >") ;
					if(list.get(index).checkPin(pass)){
						int money=getInputInt("引出金額を入力して下さい >");
						list.get(index).draw(money);
					}else{
						System.out.println("暗証番号が誤っています。");
					}	
				}
				break;
			case 4:
				Account.displayTotalAmount();
				break;
			case 5:
				System.out.println("アプリケーションを終了しました。");
				return;
			}
		}
	}
	public static int getInputInt(String msg){
		System.out.print(msg);
		int input=s.nextInt();
		return input;
	}
	public static void displayAccount(){
		for(int i=0;i<list.size();i++){
			System.out.println(i+"---"+list.get(i));
		}
	}
}