BankAccount.java
- 은행 계좌 클래스
public class BankAccount {
private int balance;
private Person owner;
// 은행 계좌 생성자 잔액
public BankAccount(int pBalance){
// 잔액이 0 이하로 주어질 때는 balance를 0으로
if (pBalance < 0){
balance = 0;
}
else{
balance = pBalance;
}
}
// 은행계좌 생성자 오버로딩 Person
public BankAccount(Person pOwner){
owner = pOwner;
balance = balance;
}
// 은행계좌 생성자 오버로딩 잔액, Person
public BankAccount(int pBalance, Person pOwner){
if (pBalance < 0){
balance = 0;
}
else{
balance = pBalance;
}
owner = pOwner;
}
// Person name의 setter 메소드
public void set_person(Person new_person) {
owner = new_person;
}
// Person의 name의 getter 메소드
public String get_person() {
return owner.get_name();
}
// 은행계좌 잔액의 setter 메소드
public void set_balance(int new_balance) {
if (new_balance > 0) {
balance = new_balance;
}
}
// 은행계좌 잔액의 getter 메소드
public int get_balance() {
return balance;
}
// 파라미터 : 입금할 액수(정수)
// 리턴 : 성공여부(불린)
// 계좌에 넣을 입금 메소드
boolean deposit(int amount) {
// 입금액이 0보다 작거나 계좌주의 현금보다 입금액이 클 경우는 입금 실패
// 입금이 실패할 경우는 입금되지 않는다.
if (amount < 0 || owner.get_cash() < amount) {
System.out.println("입금 실패입니다. 잔고: " + balance + "원, 현금: " + owner.get_cash() + "원");
return false;
// 나머지 경우는 입금 성공
// 입금이 성공할 경우에는 계좌잔액에 입금액을 더하고 소유주의 현금액은 입금액 만큼 줄어든다.
} else {
balance += amount;
owner.set_cash(owner.get_cash() - amount);
System.out.println(amount + "원 입금하였습니다. 잔고: " + balance + "원, 현금: " + owner.get_cash() + "원");
return true;
}
}
// 파라미터 : 출금할 액수(정수)
// 리턴 : 성공여부(불린)
// 소유주의 계좌에서 출금하는 메소드
boolean withdraw(int amount) {
// 출금액이 0보다 작거나 계좌의 잔액보다 출금액이 크면 출금 실패
// 출금이 실패할 경우 금액 변동 없음.
if (amount < 0 || balance < amount) {
System.out.println("출금 실패입니다. 잔고: " + balance + "원, 현금: " + owner.get_cash() + "원");
return false;
// 출금에 성공할 경우 소유주 현금이 출금액 만큼 늘고, 계좌 잔액은 출금액 만큼 준다.
} else {
owner.set_cash(owner.get_cash() + amount);
balance -= amount;
System.out.println(amount + "원 출금하였습니다. 잔고: " + balance + "원, 현금: " + owner.get_cash() + "원");
return true;
}
}
// 계좌이체 인수: (은행 계좌, 송금액)
boolean transfer(BankAccount account, int amount) {
// 송금액이 음수거나 계좌 잔액보다 클 경우 송금 실패.
if (amount < 0 || amount > get_balance()) {
System.out.println(false + " - from: " + owner.get_name() + ", to: " + account.owner.get_name() + ", amount: " + amount + ", balance: " + get_balance());
return false;
// 송금성공일 경우 현계좌의 잔액에서 송금액을 줄이고 보낸 계좌의 잔액을 늘린다.
} else {
set_balance(get_balance() - amount);
account.set_balance(account.get_balance() + amount);
System.out.println(true + " - from: " + owner.get_name() + ", to: " + account.owner.get_name() + ", amount: " + amount + ", balance: " + get_balance());
return true;
}
}
// 계좌이체 오버로딩 인수: (받는 사람, 송금액)
boolean transfer(Person person, int amount) {
// 송금액이 음수거나 계좌 잔액보다 클 경우 송금 실패.
if (amount < 0 || amount > get_balance()) {
System.out.println(false + " - from: " + owner.get_name() + ", to: " + person.get_name() + ", amount: " + amount + ", balance: " + get_balance());
return false;
// 송금성공일 경우 현계좌의 잔액에서 송금액을 줄이고 보낸 사람의 계좌잔액을 늘린다.
} else {
set_balance(get_balance() - amount);
person.get_account().set_balance(person.get_account().get_balance() + amount);
System.out.println(true + " - from: " + owner.get_name() + ", to: " + person.get_name() + ", amount: " + amount + ", balance: " + get_balance());
return true;
}
}
}
Person.java
- 은행 소유주 클래스
public class Person {
private String name;
private int age;
private int cashAmount;
// 은행 계좌
private BankAccount account;
// 클래스 생성자 인수 : 이름, 나이
public Person(String pName, int pAge) {
name = pName;
if (age < 0) {
age = 12;
} else {
age = pAge;
}
// 현금은 기본 0원
cashAmount = 0;
}
// 클래스 생성자 오버로딩 인수 : 이름, 나이, 현금
public Person(String pName, int pAge, int pCashAmount) {
name = pName;
if (age < 0) {
age = 12;
} else {
age = pAge;
}
if (pCashAmount < 0) {
cashAmount = 0;
} else {
cashAmount = pCashAmount;
}
}
// 이름 setter 메소드
public void set_name(String new_name) {
name = new_name;
}
// 이름 getter 메소드
public String get_name() {
return name;
}
// 현금 setter 메소드
public void set_cash(int new_cash) {
if (new_cash > 0) {
cashAmount = new_cash;
}
}
// 현금 getter 메소드
public int get_cash() {
return cashAmount;
}
// 계좌 setter
public void set_account(BankAccount new_account) {
account = new_account;
}
// 계좌 getter
public BankAccount get_account() {
return account;
}
// 계좌 송금 인수 : 수금자, 송금액
boolean transfer(Person person, int amount) {
// 송금액이 0보다 작거나 송금자의 계좌잔액보다 큰경우 송금 실패
if (amount < 0 || amount > account.get_balance()) {
System.out.println(false + " - from: " + get_name() + ", to: " + person.get_name() + ", amount: " + amount + ", balance: " + account.get_balance());
return false;
// 송금을 성공하면 소유주 계좌의 잔액에서 송금액을 빼고, 수금자의 계좌잔액을 송금액만큼 늘린다.
} else {
account.set_balance(account.get_balance() - amount);
person.get_account().set_balance(person.get_account().get_balance() + amount);
System.out.println(true + " - from: " + get_name() + ", to: " + person.get_name() + ", amount: " + amount + ", balance: " + account.get_balance());
return true;
}
}
// 계좌 송금 인수 : 수금자, 송금액
boolean transfer(BankAccount Account, int amount) {
// 송금액이 0보다 작거나 송금자의 계좌잔액보다 큰경우 송금 실패
if (amount < 0 || amount > account.get_balance()) {
System.out.println(false + " - from: " + get_name() + ", to: " + Account.get_person() + ", amount: " + amount + ", balance: " + account.get_balance());
return false;
// 송금을 성공하면 소유주 계좌의 잔액에서 송금액을 빼고, 수금자의 계좌에서 계좌잔액을 송금액만큼 늘린다.
} else {
account.set_balance(account.get_balance() - amount);
Account.set_balance(Account.get_balance() + amount);
System.out.println(true + " - from: " + get_name() + ", to: " + Account.get_person() + ", amount: " + amount + ", balance: " + account.get_balance());
return true;
}
}
}
public class Main {
public static void main(String[] args) {
// 사람 1
Person p1 = new Person();
p1.set_name("김신의");
p1.set_cash(30000);
// 은행 계좌 1
BankAccount a1 = new BankAccount();
a1.set_balance(100000);
p1.set_account(a1);
a1.set_person(p1);
// 사람 2
Person p2 = new Person();
p2.set_name("문종모");
p2.set_cash(100000);
// 은행 계좌 2
BankAccount a2 = new BankAccount();
a2.set_balance(500000);
p2.set_account(a2);
a2.set_person(p2);
// 계좌 이체 테스트
a2.transfer(a1, 200000);
a1.transfer(p2, 150000);
p2.transfer(a1, 270000);
p1.transfer(p2, 130000);
}
}
true - from: 문종모, to: 김신의, amount: 200000, balance: 300000
true - from: 김신의, to: 문종모, amount: 150000, balance: 150000
true - from: 문종모, to: 김신의, amount: 270000, balance: 180000
true - from: 김신의, to: 문종모, amount: 130000, balance: 290000
'Programming language > Java' 카테고리의 다른 글
Java - 실무3 [영화관] (2) | 2020.10.18 |
---|---|
Java - 실무2 [포켓몬 도감] (2) | 2020.10.18 |
Java - 8 [Wrapper Class, ArrayList, HashMap] (2) | 2020.10.17 |
Java - 7 [클래스 메소드 - 인스턴스 메소드, String 클래스, Math, Random] (2) | 2020.10.17 |
Java - 6 [try - catch, 인스턴스 변수 - 클래스 변수] (0) | 2020.10.17 |