1. Money 클래스
1 2 3 4 5 6 7 8 9 | class Money { String name; // 이름 String password; // 비밀번호 int money; // 잔액 int account; // 은행계좌 int chance = 3; // 비밀번호 기회 Money() {} } | cs |
# 설명
Line 6: 비밀번호 입력 시 3회 오류일 때, 프로그램 종료 여부를 판단하는 변수
chance == 1 > 프로그램 종료
2. void createAccount()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // 통장 개설 여부 + 개설 void createAccount() { while (true) { String msg = "통장을 개설하겠습니까?\n"; msg += "yes: 1번 no: 2번"; int choice = Integer.parseInt(JOptionPane.showInputDialog(msg)); if (choice == 1) { name = JOptionPane.showInputDialog("이름을 입력하세요."); account = Integer.parseInt(JOptionPane.showInputDialog("핸드폰 번호를 입력해주세요. (계좌번호)")); password = JOptionPane.showInputDialog("비밀번호를 설정해주세요."); String msg2 = name + "님의 통장이 개설되었습니다.\n"; msg2 += "계좌번호: " + account; JOptionPane.showMessageDialog(null, msg2); break; } else if (choice == 2) { JOptionPane.showMessageDialog(null, "프로그램을 종료합니다."); System.exit(0); } else { JOptionPane.showMessageDialog(null, "잘못된 입력입니다. 다시 입력해주세요"); } } } | cs |
# 설명
- 통장 개설 여부를 물어보며 이에 따른 통장 개설 또는 프로그램 종료를 담당하는 메서드
Line 3~23: 무한 while문을 통하여 1번, 2번이 아닌 경우에 다시 재입력 할 수 있도록 한다.
Line 8~16: 통장 개설 시, 이름, 핸드폰 번호(계좌번호), 비밀번호를 설정하고 Line 16: break; 를 통하여 while문을 빠져나간다.
Line 17~19: 통장 개설 거부 시, 프로그램을 강제로 종료한다.
Line 20~22: 1번, 2번을 제외한 다른 입력에 재입력하라는 문장이 출력된다.
* break과 System.exit(0)
Line 16: break; 는 while문을 빠져나가는 보조 제어문으로 createAccount() 메서드 자체만 종료시키지만 (while문 이후에 실행문이 없기 때문에)
Line 19: System.exit(0); 은 프로그램 자체를 강제 종료 시킨다.
3. int showMenu()
1 2 3 4 5 6 7 8 9 10 11 12 | // 메뉴 출력 + 선택 int showMenu() { String menu = "*** 코리아 ATM ***\n"; menu += "1. 입금\n"; menu += "2. 출금\n"; menu += "3. 잔액조회\n"; menu += "4. 계좌이체\n"; menu += "5. 종료\n"; int choice = Integer.parseInt(JOptionPane.showInputDialog(menu + "메뉴를 선택하세요.")); return choice; } | cs |
# 설명
- 사용자가 선택할 메뉴를 출력해주며 선택한 메뉴를 리턴값으로 반환해준다.
Line 11: 사용자가 메뉴를 통하여 선택한 메뉴 번호를 리턴값으로 반환한다.
4. void choiceMenu()
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 31 32 33 34 35 36 | // 메뉴 선택에 따른 실행 void choiceMenu() { while (true) { int choice = showMenu(); if (choice > 5 || choice < 1) { JOptionPane.showMessageDialog(null, "잘못된 입력입니다. 다시 입력해주세요."); choice = showMenu(); } if (choice == 5) { JOptionPane.showMessageDialog(null, "프로그램을 종료합니다."); System.exit(0); } if (checkPassword()) { switch (choice) { case 1: deposit(); break; case 2: withdraw(); break; case 3: checkMoney(); break; case 4: transfer(); break; } } } } | cs |
# 설명
- int showMenu() 에서 반환된 choice 값을 사용하여 각 메뉴 선택에 따른 메서드가 실행이 된다.
Line 3~35: choice == 5 로 프로그램 종료가 아닌 이상 무한 while문으로 메뉴 선택에 따른 메서드가 실행된다.
Line 4: int showMenu() 에서 반환된 choice 값을 받아온다.
Line 6~9: 메뉴 선택 1번~5번 이외의 다른 값을 입력한 경우 메뉴를 다시 선택하게 된다.
Line 11~14: 프로그램 종료를 실행한다.
Line 16: boolean checkPassword() 메서드를 통하여 비밀번호가 일치한 경우(true) 아래의 switch문을 실행한다.
boolean checkPassword() 메서드 안에서 비밀번호가 일치할 때까지 3번 돌기 때문에
만약 비밀번호 3회 오류라면 checkPassword() 메서드 안에서 프로그램이 강제 종료된다.
때문에 Line 16: if 구문에 대한 else 는 작성하지 않는다.
Line 17~33: Line 4 에서 받아온 choice 값을 기준으로 switch 구문을 실행한다.
5. boolean checkPassword()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // 비밀번호 확인 boolean checkPassword() { boolean check = false; while (true) { String checkPassword = JOptionPane.showInputDialog("비밀번호를 입력해주세요. (기회 " + chance + "번)"); if (password.equals(checkPassword)) { check = true; break; } else if (chance != 1) { chance--; JOptionPane.showMessageDialog(null, "비밀번호를 다시 입력해주세요."); } else if (chance == 1) { JOptionPane.showMessageDialog(null, "비밀번호 3회 오류. 프로그램을 종료합니다."); System.exit(0); } } return check; } | cs |
# 설명
- 입력한 비밀번호와 초기 설정된 비밀번호를 비교하는 메서드
Line 2: boolean 형을 반환하며, 비밀번호가 일치하면 true를 반환한다.
Line 3: 비밀번호가 맞는지 확인하는 boolean형 변수 check는 false로 초기화한다.
Line 5~18: 비밀번호가 맞다면 true를 반환하고,
3회 틀리지 않았다면 비밀번호 기회를 판단하는 chance를 감소시킨다.
3회 틀렸다면 프로그램을 강제 종료한다.
Line 8~10: 입력한 비밀번호와 초기 비밀번호를 비교하여, 일치한다면 check를 true로 바꾸고 while문을 탈출한다.
Line 11~13: 3회 틀리지 않았기 때문에 chance를 감소시키고 비밀번호를 재입력하게 된다.
Line 14~17: 3회 틀렸기 때문에 프로그램을 강제 종료시킨다.
Line 19: boolean check를 반환하는 boolean checkPassword() 메서드는 결국 true만 반환하게 된다.
check가 true일 때만 while문을 탈출할 수 있기 때문이다.
6. void transfer()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // 계좌이체 void transfer() { String oName = JOptionPane.showInputDialog("이체할 사용자의 이름을 입력해주세요."); String oAccount = JOptionPane.showInputDialog("이체할 은행의 계좌번호를 입력해주세요."); int oMoney = Integer.parseInt(JOptionPane.showInputDialog("이체할 금액을 입력해주세요.")); if (oMoney > money) { JOptionPane.showMessageDialog(null, "잔액이 부족합니다."); } else { money -= oMoney; String msg = oAccount + " (" + oName + ") 으로 " + oMoney + "원 이체하였습니다."; JOptionPane.showMessageDialog(null, msg); } checkMoney(); } | cs |
# 설명
- 계좌이체 하는 메서드
Line 3~5: 이체할 사용자의 이름, 계좌번호, 금액을 입력한다.
Line 7~8: 이체할 금액이 잔액보다 큰 경우
Line 9~13: 이체할 수 있는 경우 money에서 이체할 금액인 oMoney를 빼준다.
Line 14: 남은 잔액을 출력해주는 메서드를 실행한다.
7. void deposit()
1 2 3 4 5 6 | // 입금 void deposit() { int deposit = Integer.parseInt(JOptionPane.showInputDialog("입금할 금액을 입력하세요.")); money += deposit; checkMoney(); } | cs |
# 설명
- 입금하는 메서드
Line 3~4: 입금할 금액을 입력받고 money에 더해준다.
Line 5: 남은 잔액을 출력해주는 메서드를 실행한다.
8. void withdraw()
1 2 3 4 5 6 7 8 9 10 | // 출금 void withdraw() { int withdraw = Integer.parseInt(JOptionPane.showInputDialog("출금할 금액을 입력하세요.")); if (money < withdraw) { JOptionPane.showMessageDialog(null, "잔액이 부족합니다."); } else { money -= withdraw; } checkMoney(); } | cs |
# 설명
- 출금하는 메서드
Line 3~8: 출금할 금액을 입력받고 잔액보다 크다면 실행하지 않고, 잔액보다 작다면 money에서 빼준다.
Line 9: 남은 잔액을 출력해주는 메서드를 실행한다.
9. void checkMoney()
1 2 3 4 | //잔액조회 void checkMoney() { JOptionPane.showMessageDialog(null, "남은 잔액은 " + money + "원 입니다."); } | cs |
# 설명
- 잔액을 확인하는 메서드
Line 3: 남은 잔액을 출력해준다.
10. void run()
1 2 3 4 | void run() { createAccount(); choiceMenu(); } | cs |
# 설명
- 실질적으로 실행하는 메서드들을 묶어놓은 메서드
11. main()
1 2 3 4 5 6 7 8 | public class MethodTest11 { public static void main(String[] args) { Money myMoney = new Money(); myMoney.run(); } } | cs |
# 설명
- Money 객체를 생성하고 run() 메서드를 실행한다.
'JAVA > JAVA1' 카테고리의 다른 글
JAVA1_day19 | 클래스 Class 연습문제 (3) (PhoneBook) (0) | 2018.01.09 |
---|---|
JAVA1_day18 | 생성자 Constructor 연습문제 (0) | 2018.01.03 |
JAVA1_day17 | 추가공부 (0) | 2018.01.02 |
JAVA1_day17 | 클래스 Class 연습문제 (2) (0) | 2018.01.02 |
JAVA1_day17 | 메서드 오버로딩 (Method Overloading) (0) | 2018.01.02 |