[29] 은행 예제

6091 단어 Java문제Java

- 고객 등록과 출력 및 입출금

- public class Account

package kosta.bank;

public class Account {
	
	// 계좌에 돈을 입금하고 출금하는 것.
	private String id; // 이름
	private long balance; // 잔액
	
	public Account() {}

	public Account(String id, long balance) {
		super();
		this.id = id;
		this.balance = balance;
	}

	// 입금하다.
	public void deposit(long amount) {
		this.balance += amount;
	}
	
	// 출금
	public boolean withdraw(long amount) {
		if(this.balance < amount) {
//			System.out.println("잔액이 부족합니다.");
			return false;
		} 
		
		this.balance -= amount;
			
		return true;
		
	}
	
	// 정보 은닉
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public long getBalance() {
		return balance;
	}

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

- public class Customer

package kosta.bank;

public class Customer {
	
	// 한 고객을 받기 위한 것.
	private String id;  // 회원 아이디
	private String name; // 회원 이름
	private Account account; // 회원이 가지고 있는 계좌. (초기화 했을 때, 객체가 생성된다.)
	
	public Customer() {}

	// 회원의 id 및 name 그리고 계좌의 id와 잔액을 초기화
	public Customer(String id, String name, long balance) {
		super();
		this.id = id;
		this.name = name;
		this.account = new Account(id, balance); // 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 getAccount() {
		return account;
	}

	public void setAccount(Account account) {
		this.account = account;
	}

}

- public class MyBank

package kosta.bank;

public class MyBank {
	
	private Customer customers[]; // 회원들
	private int customersNum; // 회원의 숫자를 증가시키는 용도 = count와 같다.
	
	public MyBank() {
		customers = new Customer[10];
	}
	
	// 회원을 추가
	public void addCustomer(String id, String name, long balance) {
		// Customers는 Account 객체를 포함하고 있다.
		this.customers[this.customersNum++] = new Customer(id, name, balance);
		System.out.println("회원이 추가 되었습니다.");
	}
	
	// 한 명의 회원 찾기
	// id값이 넘어오면 customers[]에서 찾아준다.
	public Customer getCustomer(String id) {
		
		// 찾지 못하면 null을 출력한다. -> 널포인트익셉션을 방지하기 위해서 초건을 하나 추가한다.
		Customer cust = null;
		
		for (int i = 0; i < customersNum; i++) {
			if (customers[i].getId().equals(id)) {
				cust = customers[i];
				
				// 찾으면 바로 나온다.
				break;
			}
		}
		
		return cust;
	}
	
	// 전체 회원 출력
	public Customer[] getAllCustomers() {
		// 객체를 customersNum에 대해서 생성한다.
		Customer newCustomer[] = new Customer[customersNum];
		
//		for (int i = 0; i < customersNum; i++) {
//			newCustomer[i] = customers[i];
//		}
		
		// API를 사용한 전체회원 출력.
		System.arraycopy(customers, 0, newCustomer, 0, customersNum);
		return newCustomer;
	}

	public Customer[] getCustomers() {
		return customers;
	}

	public void setCustomers(Customer[] customers) {
		this.customers = customers;
	}

	public int getCustomersNum() {
		return customersNum;
	}

	public void setCustomersNum(int customersNum) {
		this.customersNum = customersNum;
	}

}

- public class BankSystem

package kosta.bank;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class BankSystem {
	private MyBank myBank;		//MyBank 
	
	public BankSystem(){	
		myBank = new MyBank();
		showMenu();
	}
	
	public void showMenu(){		//show method 만들기
		String  menu = null;			
		String id = null;
		String name = null;
		long balance = 0;
		
		do{
		
			System.out.println("****메뉴를 입력하세요****");
			System.out.println("1. 고객등록");
			System.out.println("2. 고객보기(1명)");
			System.out.println("3. 고객전체보기");
			System.out.println("4. 고객예금출금");
			System.out.println("5. 고객예금입금");
			System.out.println("***끝내기***");
			System.out.println("***************");
			System.out.print(">>");			
			
			menu = readFromKeyboard();			
		
			if(menu.equals("1")){				//고객등록
				
				System.out.print("ID를 입력하세요: ");
				id = readFromKeyboard();
				
				System.out.print("이름을 입력하세요: ");
				name = readFromKeyboard();
				
				System.out.print("잔고를 입력하세요: ");
				balance = Long.parseLong(readFromKeyboard());
				
				// 고객을 한 명 생성시킨다.
				myBank.addCustomer(id, name, balance);
			}
			else if(menu.equals("2")){
				System.out.print("고객ID를 입력하세요: ");
				id = readFromKeyboard();
				// id를 넣으면 Customer 객체로부터 구해줘야겠다.
				Customer cust = myBank.getCustomer(id);
				System.out.println(cust.getId() +":" + cust.getName() + ": "
						+ cust.getAccount().getBalance());	
			
			}else if(menu.equals("3")){
				
				// 고객이 넘어오면서, 배열의 크기만큼 돌린다.
				Customer[] allCust = myBank.getAllCustomers();
				
				for(int i=0;i<allCust.length;i++){
					System.out.println(allCust[i].getId() + ": " +
													allCust[i].getName() + " :" +
													allCust[i].getAccount().getBalance());
				}
				
			}
			else if(menu.equals("4")){
				
				System.out.print("고객의 ID를 입력하세요.: ");
				id = readFromKeyboard();
				
				Customer cust = myBank.getCustomer(id);
				
				if(cust == null){
					System.out.println("등록된 고객이 아닙니다.");
				
				}else{
					System.out.print("출금액을 입력하세요: ");
					balance = Long.parseLong(readFromKeyboard());
					
					// Account는 자신의 balance값을 가지고 있다.
					if(cust.getAccount().withdraw(balance)){
						System.out.println("정상적으로 출금되었습니다.");
						System.out.println("출금후 잔고는 :" + cust.getAccount().getBalance());
					}else{
						System.out.println("잔고가 부족합니다.");
					}
				}
				
			}
			
			
		}while(!menu.equals("q"));
	}
	


	public String readFromKeyboard(){
		String input = null;
		try{
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			input = br.readLine();
		}catch(Exception e){
			System.out.println(e.getMessage());
		}
		return input;
	}
	
	public static void main(String[] args) {
		BankSystem bank = new BankSystem();


	}

}

좋은 웹페이지 즐겨찾기