[java] 이것이 자바다 6장 20번

박광현·2023년 12월 1일
0

Java

목록 보기
6/9

https://chat.openai.com/share/f7f3469e-fd7b-4f23-a31e-fd58006d152d

오버라이딩의 사용과 객체(object)에 대한 이해도가 늘었다.
전지전능한 gpt의 도움을 받아 간단하게 구현한 프로그램이다.
chatgpt와의 상호작용으로 생성된 링크를 통해 기록하고 복습해갈 예정이다.(유효기간은 모름)
++ 예외처리와 리팩토링에 대해 미흡한 부분이 있음

import java.util.Scanner;

public class Bank {

  static Scanner scanner = new Scanner(System.in);

  static Account[] accArr = new Account[100];

  static void showMenu() {
    System.out.print("""
        ---------------------------------------------------
        1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4.출금 | 5. 종료
        ---------------------------------------------------
        """);
  }

  static void selectMessage() {
    System.out.print("선택> ");
  }

  static void printAddress() {
    System.out.print("계좌번호 : ");
  }

  static void printOwner() {
    System.out.print("계좌주 : ");
  }

  static void printInit() {
    System.out.print("초기입금액 : ");
  }

  static void createAccount() {
    System.out.println("""
        ------------
        계좌생성
        ------------""");
    printAddress();
    String address = scanner.next();
    printOwner();
    String owner = scanner.next();
    printInit();
    int init = scanner.nextInt();
    Account account = new Account(address, owner, init);
    for (int i = 0; i < accArr.length; i++) {
      if (accArr[i] == null) {
        accArr[i] = account;
        System.out.println("결과: 계좌가 생성되었습니다.");
        break;
      }
    }
  }

  static void getAddress() {
    System.out.println("""
        -----------------
        계좌목록
        -----------------""");
    for (Account account : accArr) {
      if (account != null) {
        System.out.println(account);
      }
    }
  }

  static void deposit() {
    printAddress();
    String address = scanner.next();
    System.out.print("예금액 : ");
    int balance = scanner.nextInt();
    for (Account account : accArr) {
      if (account != null && account.getAddress().equals(address)) {
        account.setInit(account.getInit() + balance);
      }
    }
    System.out.println("결과: 예금이 성공되었습니다.");
  }

  static void withdraw() {
    printAddress();
    String address = scanner.next();
    System.out.print("출금액 : ");
    int balance = scanner.nextInt();
    for (Account account : accArr) {
      if (account != null && account.getAddress().equals(address)) {
        account.setInit(account.getInit() - balance);
      }
    }
    System.out.println("결과: 출금이 성공되었습니다.");
  }

  public static void main(String[] args) {
    boolean run = true;
    while (run) {
      showMenu();
      selectMessage();
      int choice = scanner.nextInt();
      if (choice == 1) {
        createAccount();
      } else if (choice == 2) {
        getAddress();
      } else if (choice == 3) {
        deposit();
      } else if (choice == 4) {
        withdraw();
      } else if (choice == 5) {
        System.out.println("프로그램 종료");
        run = false;
      }
    }
  }

  static class Account {

    private String address;
    private String owner;
    private int init;

    Account(String address, String owner, int init) {
      this.address = address;
      this.owner = owner;
      this.init = init;
    }

    //객체(object)를 출력할 때 기본적으로 toString메서드를 호출하기 때문에
    //toString메서드를 오버라이딩하여 명시적으로 출력함
    //Account 클래스에서 생성된 객체를 출력할 때 default값을 정하는 것임
    //다른 출력 method를 생성하고 override하지 않고 사용해도 됨
    @Override
    public String toString() {
      return "계좌번호: " + address + "\s\s계좌주: " + owner + "\s\s잔액: " + init;
    }

    String getAddress() {
      return address;
    }

    void setAddress(String address) {
      this.address = address;
    }

    String getOwner() {
      return owner;
    }

    void setOwner(String owner) {
      this.owner = owner;
    }

    int getInit() {
      return init;
    }

    void setInit(int init) {
      this.init = init;
    }
  }

}
profile
코린이의 개발 공부

0개의 댓글