KoreaIt Academy/JAVA 예제

은행 예제 ★★★★★

hongeeii 2021. 7. 20.
728x90
반응형

 //은행선택 > 메인메뉴
      "1.하나은행\n2.국민은행\n3.신한은행\n4.나가기";

       하나은행 : //출금 시 수수료 50%

       국민은행 : //입금 시 수수료 10% 

       신한은행 : //잔액 조회 시 재산 반토막

      /*
       * (메인메뉴)
       * 1. 계좌개설
       *  - 6자리 랜덤 계좌번호
       *  - 기존 고객의 계좌번호와 중복이 없는 번호로 개설해야 한다.
       *  - 핸드폰 번호는 숫자만 입력하도록 하고, 
       *    문자가 포함되면 안되고, 0~9사이의 정수여야 한다.
       *  - 비밀번호는 4자리로만 입력하도록 한다.
       *  
       * 2. 입금하기(로그인)
       *  - 계좌를 개설한 은행에서만 입금 가능
       *  
       * 3. 출금하기(로그인)
       * 4. 잔액조회(로그인)
       * 5. 계좌번호 찾기(휴대폰번호, 비밀번호)
       *  - 새로운 계좌번호 부여
       * 6. 나가기
       */


이 문제를 해결하기 위해서 큰 틀은 Bank라는 부모클래스를 만들고,

필요한 필드들을 static으로 선언을 하였습니다.

그리구 나서 은행마다 Bank클래스를 extends 하였고 각각의 성격들을 Bank클래스의 메소드를 overriding하여서 

만들었습니다.

 

하나은행, 국민은행, 신한은행을 Bank클래스로 업캐스팅하여 타입을 맞추어 비교를 하였고,

각각의 성격들을 살리기 위하여 다시 다운캐스팅을 해야합니다.

 

* casting * 배열 * 이차원 배열 * 제어문 * 반복문 * 클래스 사용

1. Bank 부모 클래스

package bank;

public class Bank {
   //모든 은행의 고객을 관리하는 DB
   public static Bank[][] arrBank = new Bank[3][100];
   public static int[] arCnt = new int[arrBank.length];
   public static int bank_num = -1;   //하나 : 0, 국민 : 1, 신한 : 2
   
   private String name;
   private String account;
   private String phone;
   private String pw;
   private int money;
   
   public Bank() {;}

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public String getAccount() {
      return account;
   }

   public void setAccount(String account) {
      this.account = account;
   }

   public String getPhone() {
      return phone;
   }

   public void setPhone(String phone) {
      this.phone = phone;
   }

   public String getPw() {
      return pw;
   }

   public void setPw(String pw) {
      this.pw = pw;
   }

   public int getMoney() {
      return money;
   }

   public void setMoney(int money) {
      this.money = money;
   }
   
   //계좌번호 중복검사
   public static Bank checkAccount(String account) {
      Bank user = null;
      int j = 0;
      for (int i = 0; i < arrBank.length; i++) {
         for (j = 0; j < arCnt[i]; j++) {
            if(arrBank[i][j].account.equals(account)) {
               bank_num = i;
               user = arrBank[i][j];
               break;
            }
         }
         if(j != arCnt[i]) {break;}
      }
      return user;
   }
   //핸드폰번호 검사
   public static Bank checkPhone(String phone) {
      Bank user = null;
      int j = 0;
      for (int i = 0; i < arrBank.length; i++) {
         for (j = 0; j < arCnt[i]; j++) {
            if(arrBank[i][j].phone.equals(phone)) {
               user = arrBank[i][j];
               break;
            }
         }
         if(j != arCnt[i]) {break;}
      }
      return user;
   }
   //로그인(계좌번호와 비밀번호)
   public static Bank login(String account, String pw) {
      Bank user = checkAccount(account);
      //계좌번호가 있다면
      if(user != null) {
         //비밀번호 비교
         if(user.pw.equals(pw)) {
            return user;
         }
      }
      return user;
   }
   //입금(입금액)
   boolean deposit(int money) {
      if(money <= 0) {return false;}
      
      this.money += money;
      return true;
   }
   //출금(출금액, 잔액검사)
   boolean withdraw(int money) {
      if(this.money - money < 0) {return false;}
      this.money -= money;
      return true;
   }
   //잔액조회(msg를 String으로 리턴)
   String showBalance() {
      String temp = null;
      String str = "계좌번호 : " + this.account + "\n"
            + "예금주 : " + this.name + "\n"
            + "현재 잔액 : " + this.money + "원";
      
      //하나 : 0, 국민 : 1, 신한 : 2
      switch(bank_num) {
      case 0:
         temp = "하나 은행";
         break;
      case 1:
         temp = "국민 은행";
         break;
      case 2:
         temp = "신한 은행";
         break;
      }
      
      str = "은행명 : " + temp + "\n" + str;
      
      return str;
   }
}


 

2. 하나은행, 국민은행, 신한은행 클래스

 

 

3. 실행할 ATM 클래스

 

 

실행

 

728x90
반응형

추천 글