// 계좌에 대한 클래스
public class Account {
private String ano; // 계좌번호
private String owner; // 사용자이름
private int balance; // 잔액
// 필드 값을 초기화하는 생성자(private)
private Account(String ano, String owner, int balance) {
this.ano = ano;
this.owner = owner;
this.balance = balance;
}
// 생성자에 대한 정적 메소드 구현
public static Account AccountMethod(String ano, String owner, int balance) {
return new Account(ano, owner, balance);
}
// 메소드(getter/setter) : public
public String getAno() {
return ano;
}
public void setAno(String ano) {
this.ano = ano;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
@Override
public String toString() {
return "계좌상세내역 [계좌번호=" + ano + ", 사용자 이름 =" + owner + ", 잔액 =" + balance + "]";
}
}
// 계좌를 생성할 때 발생할 수 있는 사용자 예외 처리 클래스
public class AccountException extends Exception {
// 수업 때 만들었던 사용자 예외 처리 클래스 만드는 방법과 동일
public AccountException() {
super();
}
public AccountException(String message) {
super(message);
}
}
import java.util.InputMismatchException;
import java.util.Scanner;
public class MainApplication {
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
BankApplication bankApp = new BankApplication();
int selectNo;
boolean isRun = true;
while (isRun) {
bankApp.MenuInfo();
try {
selectNo = bankApp.getSelect(sc.nextInt());
isRun = bankApp.getMenu(selectNo);
} catch (InputMismatchException e) {
System.out.println("잘못된 선택입니다.");
sc.nextLine();
} catch (AccountException e) {
System.out.println(e.getMessage());
}
}
}
}
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
// 은행업무를 수행할 클래스
// 계좌 생성, 입금, 출금 가능
public class BankApplication {
private static List<Account> accounts = new ArrayList(); // 계정에 대한 리스트
private static Scanner sc = new Scanner(System.in);
// 메뉴를 선택할 때 발생할 예외 처리를 포함해 구현
public int getSelect(int number) throws AccountException {
// 1~5번이 아닌 경우
if (number < 1 || number > 5) {
throw new AccountException("해당 메뉴는 없습니다.");
}
return number;
}
// 계좌를 생성 시 계좌 번호가 같은 경우에 대한 예외 처리를 구현
public void ExistAnoException(Account ac, String ano) throws AccountException {
for (Account account : accounts) {
if (account != null && account.getAno().equals(ano)) {
throw new AccountException("같은 계좌번호가 이미 존재합니다.");
}
}
}
// 예금 또는 출금 시 금액이 부족한 상황이거나 음수 입력 시에 대한 예외처리를 진행
// op : true(예금) / false(출금)
public void BalanceException(Account ac, int money, boolean op) throws AccountException {
if(money < 0) {
throw new AccountException("잘못된 금액입니다.");
}
if (!op && ac.getBalance() < money) {
throw new AccountException("잔액이 부족합니다.");
}
}
private Account findAccount(String accountNumber) {
for (Account account : accounts) {
if (account.getAno().equals(accountNumber)) {
return account;
}
}
return null;
}
// 메뉴들에 대한 출력을 진행할 메소드를 자유롭게 구현
public void MenuInfo() {
System.out.println("=== 메뉴 ===");
System.out.println("1. 계좌생성");
System.out.println("2. 계좌목록");
System.out.println("3. 에금처리");
System.out.println("4. 출금처리");
System.out.println("5. 어플종료");
System.out.print("메뉴를 선택하세요>>");
}
// 메뉴를 선택하는 메소드
public boolean getMenu(int number) {
switch (number) {
case 1:
Create();
break;
case 2:
List();
break;
case 3:
Deposit();
break;
case 4:
Withdraw();
break;
case 5:
Exit();
return false;
default:
System.out.println("유효하지 않은 메뉴입니다. 다시 선택하세요.");
}
return true;
}
private void Create() {
try {
System.out.print("계좌번호를 입력하세요: ");
String ano = sc.next();
System.out.print("사용자이름을 입력하세요: ");
String owner = sc.next();
System.out.print("초기 잔액을 입력하세요: ");
int balance = sc.nextInt();
Account newAccount = Account.AccountMethod(ano, owner, balance);
ExistAnoException(newAccount, ano);
accounts.add(newAccount);
System.out.println("계좌가 생성되었습니다.");
System.out.println("계좌 정보: " + newAccount);
} catch (InputMismatchException e) {
System.out.println("잘못된 입력입니다.");
sc.nextLine();
} catch (AccountException e) {
System.out.println(e.getMessage());
}
}
private void List() {
for (int i = 0; i < accounts.size(); i++) {
System.out.println(accounts.get(i));
}
}
private void Deposit() {
try {
System.out.print("계좌번호를 입력하세요: ");
String depositAno = sc.next();
System.out.print("예금할 금액을 입력하세요: ");
int depositAmount = sc.nextInt();
Account depositAccount = findAccount(depositAno);
BalanceException(depositAccount, depositAmount, true);
depositAccount.setBalance(depositAccount.getBalance() + depositAmount);
System.out.println("예금이 완료되었습니다. 현재 잔액: " + depositAccount.getBalance());
} catch (InputMismatchException e) {
System.out.println("잘못된 입력입니다.");
sc.nextLine();
} catch (AccountException e) {
System.out.println(e.getMessage());
}
}
private void Withdraw() {
try {
System.out.print("계좌번호를 입력하세요: ");
String withdrawAno = sc.next();
Account withdrawAccount = findAccount(withdrawAno);
if (withdrawAccount == null) {
System.out.println("해당하는 계좌가 존재하지 않습니다.");
return;
}
System.out.print("출금할 금액을 입력하세요: ");
int withdrawAmount = sc.nextInt();
BalanceException(withdrawAccount, withdrawAmount, false);
if (withdrawAccount.getBalance() >= withdrawAmount) {
withdrawAccount.setBalance(withdrawAccount.getBalance() - withdrawAmount);
System.out.println("출금이 완료되었습니다. 현재 잔액: " + withdrawAccount.getBalance());
} else {
System.out.println("잔액이 부족합니다. 출금이 취소됩니다.");
}
} catch (InputMismatchException e) {
System.out.println("잘못된 입력입니다.");
sc.nextLine();
} catch (AccountException e) {
System.out.println(e.getMessage());
}
}
private void Exit() {
System.out.println("프로그램을 종료합니다.");
}
}