본문 바로가기

JAVA

[Java] 수업 정리 20 은행계좌 프로그램 (24.11.19)

은행 계좌를 만들때 필요한 클래스는 무엇이 있을까?

우선 돈을 입금하고 출금하는 사람과 그 돈이 입금되고 출금되는 은행 계좌 이렇게 두가지를 생각할 수 있다.

이 사람과, 은행 계좌는 딱 한가지로만 정해진게 아니고 여러명, 여러 계좌로 이루어져 있을 수 있다.

 

1) 고객

public class Client {
           String Name;
           int Age;
           int Cash;
           BankAccout Account;

 

이런식으로  Client 라는 이름을 가진 클래스를 선언해준뒤,

사람에 대한 정보를 입력받을 변수를 선언한다.

 

이름, 나이, 현금

 

그리고 BankAccount 라는 자료형을 가진 accout 변수를 선언한다.

이 BankAccount는 바로 다음 은행 계좌에서 클래스로 선언해 준다.

 

 

2) 은행계좌

public class BankAccount {
           int balance;
           Client owner;

 

BankAccount 라는 이름을 가진 클래스를 선언해준다.

이후 BankAccout 클래스에서 필요한 변수인 잔고를 선언해준뒤,

앞에서 선언한 클래서 사람(Person)을 자료형으로 가진 owner 변수를 선언해준다

 

앞에서 엮어준 두 코드를 살펴보자

BankAccount Account;
Client owner;

 

이 두 선언은 서로 다른 클래스에서 각자의 객체들을 엮어주는 역할을 한다.

 

 

3) Main

Java는 main을 제일 먼저 실행한다고 했는데, 앞에서 작성한 클래스들에서는 main을 찾아볼 수 없다.

그러니 이 클래스들을 사용해서 프로그램을 실행할 main을 만들어준다.

이름은 SBank라고 선언하겠다.

public class SBank {
           public static void main(String[ ] args) {
                      System.out.println( );  // 출력창 한 줄 띄우기 위함

                      Client c1 = new Client( );
                      c1.Name = "한승우"
                      c1.Age = 30;
                      c1.Cash = 50000;

                      System.out.println(c1.Name);
                      System.out.println(c1.Age);
                      System.out.println(c1.Cash);

 

main 내에서 Client 클래스 c1을 선언해주고

c1 고객의 이름, 나이, 현금을 입력해준다

 

다음으로는 20만원이 들어가 있는 c1의 은행계좌를 만들어야 한다.

BankAccount b1 = new BankAccount( );
b1.balance = 200000;

 

선언을 해준 후 c1과 b1을 엮어주면 되는데

c1.Account = b1;
b1.owner = c1;

 

b1의 은행계좌가 c1의 것이라고 하는 것이다


c1은 한승우라는 이름이고 30살이며 현금은 50000을 가지고 있다.

c1의 은행 계좌에는 20만원이 들어있다


이 은행 계좌를 이용해서 할 수 있는 입금, 출금에 대한 클래스

 

입금은 deposit 이라는 변수

출금은 withdraw 라는변수로 선언을 해야한다

public class BankAccount {
           int balance;
           Client owner;

           boolen deposit(int CashAmount) {
                       if (CashAmount >= 0 & owner.Cash > CashAmount) {
                           balance += CashAmount;
                           owner.Cash -= CashAmount;
                           return true;
                       }
                       else {
                                return false;
                       }
           }
           boolean withdraw(int CashAmount) {
                       if (balance >= CashAmount & CashAmount >= 0) {
                           balance -= CashAmount;
                           owner.Cash += CashAmount;
                           return true;
                       }
                       else {
                           return false;
                       }
           }
}

 

BankAccount  클래스에 선언한 입금, 출금 메소드이다.

 

boolean depositboolean형의 자료형을 가진 deposit이라는 이름을 가진 변수를 선언하는 것이다.

이 변수는 int CashAmount 라는 정수형 입력 변수를 받는다.

 

if 문을 살펴보기 전에 입금을 받으려면 아무숫자나 받으면 안된다.

우리는 두 조건을 둘 것이다.

1. 현금은 무조건 양수인 숫자로만 입력받아야한다.

2. 고객이 가지고 있는 현금이 입력 받는 입금 액수보다 많아야 한다.

 

이 두가지의 조건을 지킨 입력값을 받으려면 if 문에서 숫자들을 걸러줘야한다.

그래서 if 조건 내용에 

1. CashAmount >= 0

현금은 무조건 양수인 숫자로만 입력받아야한다.

 

2. owner.Cash > CashAmount

고객이 가지고 있는 현금이 입력 받는 입금 액수보다 많아야 한다.

 

이 두가지 조건을 충족하는 숫자만 입력가능하게 한 것이다

이 두 조건을 충족한다면

 

balance += CashAmount; 입금할 돈을 계좌에 넣어주고

owner.Cash -= CashAmount; 입금한 돈만큼 현금에서 빼줘야 한다.

그 후 boolean형 자료형에 맞게 true를 return해준다.

 

이렇게 똑같은 과정으로 withdraw 변수도 선언해주면 입금, 출금 메소드를 다 만든 것이다.

 

이렇게만 입력하면 출력값이 따로 없어

얼마가 입, 출금 되었는지 입,출금 뒤 잔고가 얼마인지 입,출금이 실패되었으면 실패되었다고 출력을 해야한다

public class BankAccount {
      int balance;
      Client owner;

      boolen deposit(int CashAmount) {

            if (CashAmount >= 0 & owner.Cash > CashAmount) {

                  balance += CashAmount;
                  owner.Cash -= CashAmount;
                  Syetem.out.pritln(CashAmout + "원 입금하였습니다. 잔고: " + balance + "원, 현금: " + owner. Cash + "원");
                  return true;
            }
            else {
                  return false;
                 Syetem.out.pritln("입금을 실패하였습니다. 현재 고객님 잔고: " + balance + "원, 현금: " + owner. Cash + "원");
            }

       }

       boolean withdraw(int CashAmount) {
            if (balance >= CashAmount & CashAmount >= 0) {
                balance -= CashAmount;
                owner.Cash += CashAmount;
                 Syetem.out.pritln(CashAmout + "원 출금하였습니다. 잔고: " + balance + "원, 현금: " + owner. Cash + "원");
                return true;
            }
            else {
                 Syetem.out.pritln("출금을 실패하였습니다. 현재 고객님 잔고: " + balance + "원, 현금: " + owner. Cash + "원");
            return false;
            }
       }
}