オブジェクト指向練習問題。
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));
}
}
}
コメント