Last Modified : 2011.01.02
자바은행 (구현)
분석 작업의 결과물인 클래스 다이어그램을 토대로 각각의 클래스를 작성한다.
Account.java
package net.java_school.javabank;
public class Account {
private String accountNo; //계좌번호
private long balance; //잔고
public Account(String accountNo, long balance) {
this.accountNo = accountNo;
this.balance = balance;
}
public String getAccountNo() {
return accountNo;
}
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}
public long getBalance() {
return balance;
}
public void setBalance(long balance) {
this.balance = balance;
}
public void deposit(long money) {
balance = balance + money;
}
public void withdraw(long money) {
balance = balance - money;
}
}
Customer.java
package net.java_school.javabank;
public class Customer {
private String id;
private String name;
private Account[] accounts = new Account[3]; //계좌 3개까지
private int totalAccount; //총 계좌수
public Customer(String id, String name) {
this.id = id;
this.name = name;
}
public void addAccount(String accountNo, long balance) {
Account account = new Account(accountNo, balance);
accounts[totalAccount++] = account;
}
public Account getAccount(String accountNo) {
Account account = null;
for ( int i = 0; i < totalAccount; i++ ) {
if ( accountNo.equals(accounts[i].getAccountNo()) ) {
account = accounts[i];
break;
}
}
return account;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Account[] getAccounts() {
return accounts;
}
public int getTotalAccount() {
return totalAccount;
}
}
Bank.java
package net.java_school.javabank;
public class Bank {
private Customer[] customers = new Customer[100]; //고객은 100명까지
private int totalCustomer; //총 고객수
public Customer[] getCustomers() {
return customers;
}
public void addCustomer(String id, String name) {
Customer customer = new Customer(id, name);
customers[totalCustomer++] = customer;
}
public Customer getCustomer(String id) {
Customer customer = null;
for ( int i = 0; i < totalCustomer; i++ ) {
if ( customers[i].getId().equals(id) ) {
customer = customers[i];
break;
}
}
return customer;
}
public int getTotalCustomer() {
return totalCustomer;
}
}
다음은 사용자와 대화하는 클래스이다.
이곳에만 표준출력메소드(System.out.println(..))를 이용해서 출력하는 코드와 익셉션을 처리하는 코드를 두는 것이
좋은 코드이다.
BankCUI.java
package net.java_school.javabank;
import java.io.*;
public class BankCUI {
private Bank bank = new Bank();
{
// 테스트 데이터
bank.addCustomer("kim", "김태희");
bank.addCustomer("park", "박지성");
Customer customer = bank.getCustomer("kim");
customer.addAccount("111", 1000);
customer = bank.getCustomer("park");
customer.addAccount("222", 500);
}
public BankCUI() throws IOException {
showMenu();
}
public void showMenu() throws IOException {
String menu = null;
String id = null;
String name = null;
do {
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.println(" 6 *** 출금 ");
System.out.println(" q *** 종료 ");
System.out.println(" ********************** ");
System.out.print(">>");
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
menu = br.readLine();
try {
if ( menu.equals("1") ) {
// 고객 등록
System.out.print("아이디를 입력하세요>>");
id = br.readLine();
System.out.print("이름을 입력하세요>>");
name = br.readLine();
bank.addCustomer(id, name);
Customer customer = bank.getCustomer(id);
System.out.print("계좌번호를 입력하세요>>");
String accountNo = br.readLine();
System.out.print("초기 잔액을 입력하세요>>");
long balance = Long.parseLong(br.readLine());
customer.addAccount(accountNo, balance);
} else if ( menu.equals("2") ) {
// 고객 검색
System.out.print("아이디를 입력하세요>>");
id = br.readLine();
Customer customer = bank.getCustomer(id);
System.out.println(
customer.getId() + ":" +
customer.getName());
Account[] accounts = customer.getAccounts();
int totalAccount = customer[i].getTotalAccount();
for ( int i = 0; i < totalAccount; i++ ) {
System.out.println(
"\t" + "계좌번호:" +
accounts[i].getAccountNo() + " 잔고:" +
accounts[i].getBalance() + "원");
}
} else if ( menu.equals("3") ) {
// 고객 목록
Customer[] customers = bank.getCustomers();
int totalCustomer = bank.getTotalCustomer();
for ( int i = 0; i < totalCustomer; i++ ) {
System.out.println(
customers[i].getId() + ":" +
customers[i].getName());
Account[] accounts = customers[i].getAccounts();
int totalAccount = customer.getTotalAccount();
for ( int j = 0; j < totalAccount; j++ ) {
System.out.println(
"\t" + "계좌번호:" +
accounts[j].getAccountNo() + " 잔고:" +
accounts[j].getBalance() + "원");
}
System.out.println("--------------------------------");
}
} else if (menu.equals("4")) {
// 계좌 생성
} else if (menu.equals("5")) {
// 입금
} else if (menu.equals("6")) {
// 출금
}
System.out.println();
}catch (Exception e) {
System.out.println(e.getMessage());
}
} while ( !menu.equals("q") );
}
public static void main(String[] args) throws IOException {
new BankCUI();
}
}
아래 내용을 구현하시오.
- 계좌 생성 -BankCUI:96라인
- 입금 메뉴 -BankCUI:98라인
- 출금 메뉴 -BankCUI:100라인
- 사용된 배열을 모두 ArrayList로 변경 -Customer:7라인, Bank:5라인
- 프로그램이 끝나기 전 Bank 객체를 파일에 저장하고, 프로그램이 시작하면 다시 파일에서 저장된 객체정보로부터 Bank객체를 생성하도록 수정(스트림 참조)
- 잔고를 1,000,000 와 같이 표현
- Customer클래스에 toString()메소드를 오버라이딩하여 고객정보와 계좌정보를 출력하는 코드(BankCUI의 고객검색과 고객목록부분)를 간단하게 되도록 수정
- Account클래스(일반입출금계좌)와 Account를 상속한 AccountMiius(마이너스계좌)를 만들어서 계좌를 생성할 때 선택할 수 있도록 수정
- Account추상클래스(withdraw()만 추상메소드)와 Account를 상속한 AccountNorm(일반입출금계좌) 와 Account를 상속한 AccountMiius(마이너스계좌)를 만들어서 계좌를 생성할 때 선택할 수 있도록 수정
- deposit(),withdraw(),getBalance()추상메소드를 가지는 Account인터페이스를 작성하고 Account를 구현하는 AccountNorm클래스와 AccountMinus클래스를 만들어서 계좌를 생성할 때 선택할 수 있도록 수정
참고문서
New 알기쉬운 자바2(개정판) 저자: 김철회 출판사: 정보문화사
- 다음 : 명함관리
- 이전 : 자바은행 (분석/설계)
