웹_프론트_백엔드/단과

[단과_JAVA] 2020.02.17

shine94 2020. 2. 17. 22:02

1. 메소드부터 먼저 만들고 마지막에 뷰단을 만드는 것을 권장

 

 

2. 오늘 실습코드

** 아직 완성된 코드가 아님, 다음 시간에 완성할 예정 **

1) 은행!

** ATM 메인 클래스 **

package day24;

import java.util.Random;
import java.util.Scanner;

public class ATM {
	public static void main(String[] args) {


		String msg = "1.신한은행\n2.국민은행\n3.우리은행\n4.나가기";
		String menu = "1.계좌개설\n2.입금하기\n3.출금하기\n4.잔액조회\n5.나가기";
		String[] bankName = {"신한은행", "국민은행", "우리은행"};
		Scanner sc = new Scanner(System.in);
		Random r = new Random();
		
		String name = "", pw = "", account = "", temp = "", phone = "";
		
		Bank user = null;
		
		int choice = 0, menu_choice = 0;
		
		while(true) {
			System.out.println(msg);
			choice = sc.nextInt();
			
			if(choice == 4) {break;}
			choice --;
			while(true) {
				System.out.println(menu);
				menu_choice = sc.nextInt();
				
				if(menu_choice == 5) {break;}
				
				switch(menu_choice) {
				//계좌 개설
				case 1:
					Bank[] arBank = {new Shinhan(), new Kookmin(), new Woori()};
					while(true) {
						account = "" + (r.nextInt(90000) + 10000);
						if(Bank.checkDup(account) == null) {break;}
					}
					arBank[choice].account = account;
					
					System.out.print("예금주 : ");
					arBank[choice].name = sc.next();

					while(true) {
						int i = 0;
						System.out.print("핸드폰 번호[ '-' 제외 ] : ");
						phone = sc.next();
						arBank[choice].phone = phone;
						for(i = 0; i < phone.length(); i++) {
							if(phone.charAt(i) == '-') {
								break;
							}
						}
						if(i == phone.length()) {
							break;
						}
					}
					
					while(true) {
						System.out.print("4자리 비밀번호 : ");
						pw = sc.next();
						if(pw.length() == 4) {break;}
					}
					arBank[choice].pw = pw;
					//사용자가 선택한 은행(행 : choice)에
					//arCnt[choice]번째 고객으로
					//신규고객(arBank[choice]) 저장
					Bank.arrBank[choice][Bank.arCnt[choice]] = arBank[choice];
					System.out.println("내 계좌번호 : " + account);
					System.out.println("계좌번호는 반드시 기억하세요!");
					//사용자가 선택한 은행의 고객 수 1증가
					Bank.arCnt[choice]++;
					break;
				//입금하기
				case 2:
					System.out.print("계좌번호 : ");
					account = sc.next();
					System.out.print("비밀번호 : ");
					pw = sc.next();
					
					user = Bank.login(account, pw);
					if(Bank.bank_num != choice) {
						System.out.println(bankName[Bank.bank_num] + "에서 처리 가능합니다.");
						continue;
					}
					if(user != null) {
						System.out.print("입금액 : ");
						user.deposit(sc.nextInt());
						System.out.println("잔고 : " + user.money);
						
					}else {
						System.out.println("입금 실패 : 정보 오류");
					}
					break;
				//출금하기
				case 3:
					System.out.print("계좌번호 : ");
					account = sc.next();
					System.out.print("비밀번호 : ");
					pw = sc.next();
					
					user = Bank.login(account, pw);
					if(user != null) {
						System.out.print("출금액 : ");
						if(user.withdraw(sc.nextInt())) {
							System.out.println("잔고 : " + user.money);
						}else {
							System.out.println("출금 실패 : 잔액 부족");
						}
						
					}else {
						System.out.println("출금 실패 : 정보 오류");
					}
					break;
				//잔액조회
				case 4:
					System.out.print("계좌번호 : ");
					account = sc.next();

					System.out.print("비밀번호 : ");
					pw = sc.next();
					
					user = Bank.login(account, pw);
					if(user != null) {
						user.balance();
					}else {
						System.out.println("조회 실패 : 정보 오류");
					}
					break;
				}
			}
		}
	}
}

 

** Bank 클래스 **

package day24;

public class Bank {
	
	static Bank[][] arrBank = new Bank[3][100];
	static int[] arCnt = new int[arrBank.length];
	
	String name;
	String account;
	String phone;
	String pw;
	int money;
	
	static int bank_num;
	
	public Bank() {}
	
	//중복검사
	static Bank checkDup(String account) {
		Bank b = null;
		for(int i=0; i<arrBank.length; i++) {
			for(int j = 0; j < arCnt[i]; j ++) {
				if(arrBank[i][j].account.equals(account)) {
					bank_num = i;
					b = arrBank[i][j];
					break;
				}
			}
		}
		return b;
	}
	//로그인
	static Bank login(String account, String pw) {
		 Bank b = checkDup(account);
		 if(b != null) {
			 if(!b.pw.equals(pw)) {
				 b = null;
			 }
		 }
		return b;
	}
	
	//입금
	void deposit(int money) {
		this.money += money;
	}
	//출금
	boolean withdraw(int money) {
		boolean check = false;
		if(!(this.money - money < 0)) {
			this.money -= money;
			check = true;
		}
		return check;
	}
	//잔액조회
	void balance() {
		System.out.println("계좌번호 : " + this.account);
		System.out.println("예금주 : " + this.name);
		System.out.println("현재 잔액 : " + this.money + "원");
	}
}


** Kookmin **

package day24;

public class Kookmin extends Bank{
	//출금시 수수료 50%
	@Override
	 boolean withdraw(int money) {
		boolean check = false;
		if(this.money >= money * 1.5) {
			this.money -= money * 1.5;
			check = true;
		}
		return check;
	}
}


** Shinhan **

package day24;

public class Shinhan extends Bank{
	//입금시 수수료 10%
	@Override
	void deposit(int money) {
		this.money += money * 0.9;
	}
}


** Woori ** 

package day24;

public class Woori extends Bank{
	//잔액 조회시 재산 반토막
	@Override
	void balance() {
		super.balance();
		this.money *= 0.5;
	}
}

'웹_프론트_백엔드 > 단과' 카테고리의 다른 글

[단과_JAVA] 2020.02.18  (0) 2020.02.18
[단과_C] 2020.02.17  (0) 2020.02.17
[단과_C] 2020.02.14  (0) 2020.02.15
[단과_JAVA] 2020.02.14  (0) 2020.02.15
[단과_C] 2020.02.13  (0) 2020.02.14