티스토리 뷰


1. 은행은 계좌를 관리한다.

2. 은행은 계좌를 등록한다.


3. 은행은 계좌번호로 계좌를 찾을 수 있다.

4. 은행은 계좌의 소유자명으로 계좌를 찾을 수 있다.

5. 은행은 모든 계좌의 목록을 볼 수 있다.


6. 계좌는 소유자명, 계좌번호, 잔고로 구성된다.

7. 계좌는 입금,출금 기능과 잔고확인 기능이 있다.

8. 계좌에서 잔고의 변화가 있을 때마다 거래내역에 기록된다.

9. 거래내역은 거래일자, 거래시간, 계좌번호, 입금/출금여부, 거래금액, 은행명으로 구성된다.



기타 부수적인 변수와 메소드는 생략하였다.

다음은 실제 자바 코드이다.




BankUI.java


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Scanner;


public class BankUI {

private static int numberOfAccount = 10;

private static Bank bank;


public static void main(String[] args) {

// TODO Auto-generated method stub

bank = new Bank("CBNU", numberOfAccount);

// 은행 이름 및 개설 가능한 계좌 수 초기화(생성자 이용)


while (true) {

showMenu();

if (selectMenu() == true)

break;// 종료 메시지가 반환되면 반복문 종료

}

}


private static void showMenu() {

System.out.println("\n=============MENU=============");

System.out.println("==       1. 새 계좌 개설            ==");

System.out.println("==       2. 계좌 찾기(고객명)    ==");

System.out.println("==       3. 계좌 찾기(계좌번호)   ==");

System.out.println("==       4. 계좌 목록               ==");

System.out.println("==       5. 나가기                  ==");

System.out.println("==============================");

}


private static boolean selectMenu() {

Scanner scan = new Scanner(System.in);

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));


try {

switch (in.readLine()) {

case "1":

// 새 계좌 개설

String temp;

System.out.println(" - 새로운 계좌를 개설합니다\n - 이름을 입력해");

temp = scan.next();

System.out.println(" - 계좌번호를 입력해");


bank.addAccount(temp, scan.next());

break;


case "2":

// 고객명으로 계좌 찾기

System.out.println("계좌를 찾습니다 - 고객명으로 조회해");

searchResult(bank.findAccountByName(scan.next()));

break;


case "3":

// 계좌번호로 계좌 찾기

System.out.println("계좌를 찾습니다 - 계좌번호으로 조회해");

searchResult(bank.findAccount(scan.next()));

break;


case "4":

// 계좌 목록

listUp(bank.getAccounts());

break;


case "5":

// 나가기

default:

System.out.println(" 종료합니다...");

return true;

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return false;

}


private static void listUp(Account[] ac) {

// TODO Auto-generated method stub

System.out

.println("======================ACCOUNT LIST======================");

System.out

.println("  No.        Name             AC no.              Bal   ");


for (int i = 0; i < bank.getTotalAccount(); i++) {

System.out.printf("%5d %11s %18s %16d\n", i + 1,

ac[i].getCustomerName(), ac[i].getAccountNum(),

ac[i].getBalance());

}

}


private static void searchResult(Account t) {

// TODO Auto-generated method stub


if (t != null) {

System.out

.println("==================Search Result====================");

System.out

.println("     Name             AC no.              Bal      ");

System.out.printf("%9s %18s %16d", t.getCustomerName(),

t.getAccountNum(), t.getBalance());

System.out.println("\n");

transMenu(t);

} else

System.out.print("계좌가 없다.");

}


private static void transMenu(Account t) {

System.out.println("세부메뉴를 보겠나? (Y/N) : ");

Scanner scan = new Scanner(System.in);

String temp = scan.nextLine();

boolean iter = true;


if ("Y".equals(temp) || "y".equals(temp))

while (iter) {

System.out.println("\n=============MENU=============");

System.out.println("==       1. 입금                    ==");

System.out.println("==       2. 출금                    ==");

System.out.println("==       3. 잔액확인                ==");

System.out.println("==       4. 거래내역                ==");

System.out.println("==       5. 나가기                  ==");

System.out.println("==============================");


switch (scan.next()) {

case "1":

System.out.print(t.getCustomerName() + " 고객님의 계좌 : "

+ t.getAccountNum() + "에 ");

System.out.println("입금시킬 금액을 입력해 : ");

t.deposit(scan.nextLong());

break;


case "2":

System.out.print(t.getCustomerName() + " 고객님의 계좌 : "

+ t.getAccountNum() + "에서 ");

System.out.println("출금시킬 금액을 입력해 : ");

t.withdraw(scan.nextLong());

break;


case "3":

System.out.println("고객님의 계좌의 잔액은 " + t.getBalance()

+ "원이다.");

break;


case "4":

System.out.print(t.getCustomerName() + " 고객님의 계좌 : "

+ t.getAccountNum() + "의 ");

System.out.println("거래내역입니다.");

Transaction ts[] = t.getTransaction();

for (int i = 0; i < t.getTotalTrans(); i++) {

System.out.printf("은행 : %5s  %15d원 %5s,  거래일자 : %10s   거래시간 : %10s\n",

ts[i].getBankName(), ts[i].getAmount(),

ts[i].getTransType(),

ts[i].getTransactionDate(),

ts[i].getTransactionTime());

}


break;

case "5":

// 나가기

default:

System.out.println(" 종료합니다...");

iter = false;

break;

}

}

}

}



Bank.java

public class Bank {

private Account accounts[];
private int totalAccount;

Bank(String str, int num) {
System.out.println("안녕하세요. " + str + " 은행입니다. 무엇을 도와드릴까?");
accounts = new Account[num];
}

public void addAccount(String name, String accountNum) {
if (accounts.length < totalAccount) {
// 배열 크기를 2배로 재생성
System.out.println("미구현");
} else{
accounts[totalAccount++] = new Account(name, accountNum);
//배열 크기를 넘지 않는 경우 객체를 할당하고 전체 계좌 카운터를 증가시킴.
}
};

// 계좌번호로 찾기
public Account findAccount(String account) {
for (int i = 0; i < totalAccount; i++) {
if (account.equals(accounts[i].getAccountNum())) {
//인자 account와 같은 문자열을 가지는 경우
return accounts[i];
}
}
return null;
};

// 계좌 소유주명으로 찾기
public Account findAccountByName(String name) {
for (int i = 0; i < totalAccount; i++) {
// if (accounts[i].getCustomerName() == name)
if (name.equals(accounts[i].getCustomerName())){
//인자 account와 같은 문자열을 가지는 경우
return accounts[i];
}
}
return null;
};

public Account[] getAccounts() {
return accounts;
};

public int getTotalAccount() {
return totalAccount;
};
}


Account.java

public class Account {
private String CustomerName;
private String accountNum;
private long balance;
private Transaction[] transactions;
private int totalTrans;

// 거래내역 참조변수

public Account() {
// 빈 계좌 개설
}

public Account(String name, String num) {
CustomerName = name;
accountNum = num;
// 새로운 계좌 생성

transactions = new Transaction[20];
}

public void deposit(long money) {
balance += money; // 예금
transactions[totalTrans++] = new Transaction("입금", money);
// 예외처리 안함

System.out.println("계좌에 " + money + "원이 입금되었습니다.");
};

public void withdraw(long money) {
if (money > balance) {
System.out.println("잔액이 부족하여 출금할 수 없습니다.");
return;
} else {
balance -= money; // 인출
transactions[totalTrans++] = new Transaction("출금", money);
// 예외처리 안함

System.out.println("계좌에서 " + money + "원이 출금되었습니다.");

}
};

public String getCustomerName() {
return CustomerName;
}

public void setCustomerName(String customerName) {
CustomerName = customerName;
}

public String getAccountNum() {
return accountNum;
}

public void setAccountNum(String accountNum) {
this.accountNum = accountNum;
}

public long getBalance() {
return balance;
}

public void setBalance(long balance) {
this.balance = balance;
}

public Transaction[] getTransaction() {
return transactions;
}

public int getTotalTrans() {
return totalTrans;
}

public void setTotalTrans(int totalTrans) {
this.totalTrans = totalTrans;
}

public String toString() {
return CustomerName;
};
}


transaction.java

import java.util.Calendar;

public class Transaction {
private String transactionDate; // 거래일자
private String transactionTime; // 거래시간
private String transType; // 입금 or 출금
private long amount; // 거래금액
private String bankName="CBNU"; // 은행명

Transaction(String type, long money){
Calendar c = Calendar.getInstance();
transactionDate = c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH)+"-"+c.get(Calendar.DATE);
transactionTime = c.get(Calendar.HOUR)+"시 "+c.get(Calendar.MINUTE)+"분 "+c.get(Calendar.SECOND)+"초";
transType = type; //거래종류
amount = money; //거래량
//은행명 생략, 시간 생략
}
public String toString() {
return transType;
}

public String getTransactionDate() {
return transactionDate;
}

public void setTransactionDate(String transactionDate) {
this.transactionDate = transactionDate;
}

public String getTransactionTime() {
return transactionTime;
}

public void setTransactionTime(String transactionTime) {
this.transactionTime = transactionTime;
}

public String getTransType() {
return transType;
}

public void setTransType(String transType) {
this.transType = transType;
}

public long getAmount() {
return amount;
}

public void setAmount(long amount) {
this.amount = amount;
}

public String getBankName() {
return bankName;
}

public void setBankName(String bankName) {
this.bankName = bankName;
};
}

결과 : 










댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함