-
7. oop2 - (1) BankingDemo (계좌 관리 프로그램)java/코드 리뷰 2020. 3. 24. 15:23123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687package oop2;/*** 계좌에 대한 입금, 출금, 조회, 비밀번호 변경, 해지 기능 제공 클래스** @author HYB**/public class Banking {static final double RATE_OF_INTEREST = 0.021;String name;String no;int password;long balance;int period;// 입금기능 : 입금액을 전달받아서 잔액을 증가시킴void deposit(long money) {balance += money;System.out.println("입금이 완료되었습니다.");System.out.println("현재 잔액은 " + balance + "원 입니다.");}// 출금기능 : 출금액, 비밀번호 전달받아서 비밀번호 일치하는 경우 잔액을 출금액만큼 감소, 출금액에서 수수료(1300) 제외한 금액을 반환long withdraw(long money, int pwd) {long withdrawMoney = 0L;if (balance >= money + 1300) {if (password == pwd) {balance -= (money + 1300);withdrawMoney = money;System.out.println("출금이 완료되었습니다.");System.out.println("출금 후 현재 잔액은 " + balance + "원 입니다.");} else {System.out.println("비밀번호가 일치하지 않습니다.");}} else {System.out.println("잔액이 부족합니다.");}return withdrawMoney;}// 조회기능 : 소유주, 계좌번호, 현재잔액을 화면에 출력void display() {System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 계좌 정보 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");System.out.println("예금주 : " + name);System.out.println("계좌번호 : " + no);System.out.println("현재잔액 : " + balance);System.out.println("적금기간 : " + period + "개월");System.out.println("금리 : " + Banking.RATE_OF_INTEREST * 100 + "%");System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");}// 비밀번호 변경기능 : 이전 비밀번호, 새 비밀번호 전달받아 이전 비밀번호 일치하는 경우, 비밀번호를 새 비밀번호로 교체void changePassword(int oldPwd, int newPwd) {if (password == oldPwd) {password = newPwd;System.out.println("새 비밀번호로 변경되었습니다.");} else {System.out.println("비밀번호가 일치하지 않습니다.");}}// 해지기능 : 비밀번호 전달받아 일치하는 경우 계좌를 해지, 금리를 적용한 총 해지금액을 반환long close(int pwd) {long finalMoney = 0L;if (password == pwd) {finalMoney = balance + (long) (balance * Banking.RATE_OF_INTEREST * period / 12);// 계좌 정보 폐기name = null;no = null;password = 0;balance = 0;period = 0;System.out.println("해지가 완료되었습니다.");} else {System.out.println("비밀번호가 일치하지 않습니다.");}return finalMoney;}}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125package oop2;/*** 고객 계좌정보 관리 신규 계좌 등록, 계좌 입출금/해지 서비스 제공** @author HYB**/public class BankingService {// 모든 개설된 계좌정보를 저장하는 배열Banking[] db = new Banking[100];int savePosition = 0;// 기본생성자를 사용하는 경우 계좌정보 100개 저장 가능한 배열 생성BankingService() {db = new Banking[100];}// 이 생성자 사용하는 경우 size만큼 계좌정보 저장 가능한 배열 생성BankingService(int size) {db = new Banking[size];}// 등록된 전체 계좌정보를 출력하는 서비스void printAllBankings() {System.out.println("=========================================");System.out.println("예금주 계좌번호 잔액 가입기간");System.out.println("=========================================");for (int i = 0; i < savePosition; i++) {Banking banking = db[i];System.out.print(banking.name + "\t");System.out.print(banking.no + "\t");System.out.print(banking.balance + "\t");System.out.println(banking.period + "\t");}System.out.println("=========================================");}// 신규계좌를 등록하는 서비스void addNewBanking(String name, int pwd, long money) {Banking banking = new Banking();banking.name = name;banking.no = "" + (int) (Math.random() * 100000 + 10000);banking.password = pwd;banking.balance = money;banking.period = 24; // 계약기간db[savePosition] = banking;savePosition++;}// 계좌번호에 해당하는 계좌정보 조회 서비스void printBankingByNo(String bankingNo) {Banking foundBanking = findBankingByNo(bankingNo);if (foundBanking != null) {foundBanking.display();} else {System.out.println("입력한 계좌번호와 일치하는 정보를 찾을 수 없습니다.");}}// 계좌번호, 입금액을 전달받아 해당 계좌에 입금하는 서비스void depositBanking(String bankingNo, long money) {Banking foundBanking = findBankingByNo(bankingNo);if(foundBanking != null) {foundBanking.deposit(money);} else {System.out.println("입력한 계좌번호와 일치하는 정보를 찾을 수 없습니다.");}}// 계좌번호, 비밀번호, 출금액을 전달받아 반환하는 서비스long withdrawFromBanking(String bankingNo, int pwd, long money) {long result = 0L;Banking foundBanking = findBankingByNo(bankingNo);if (foundBanking != null) {result = foundBanking.withdraw(money, pwd);} else {System.out.println("입력한 계좌번호와 일치하는 정보를 찾을 수 없습니다.");}return result;}// 계좌번호, 비밀번호를 전달받아 계좌 해지, 해지금액 전체 반환 서비스long closeBanking(String bankingNo, int pwd) {long result = 0L;Banking foundBanking = findBankingByNo(bankingNo);if (foundBanking != null) {result = foundBanking.close(pwd);} else {System.out.println("입력한 계좌번호와 일치하는 정보를 찾을 수 없습니다.");}return result;}// 서비스에서 자주 사용 (계좌번호에 해당하는 계좌정보를 찾아서 반환하는 기능)Banking findBankingByNo(String bankingNo) {Banking result = null;for (int i = 0; i < savePosition; i++) {Banking banking = db[i];if (bankingNo.equals(banking.no)) {result = banking;break;}}return result;}}123456789101112131415161718192021222324252627282930313233package oop2;public class BankingDemo {public static void main(String[] args) {Banking banking = new Banking();banking.name = "홍길동";banking.no = "11-1111-1100";banking.password = 1234;banking.balance = 200000;banking.period = 6;// 현재 계좌정보 조회banking.display();// 입금banking.deposit(100000);banking.display();// 출금long money1 = banking.withdraw(50000, 1234);System.out.println("출금액 : " + money1);banking.display();// 해지long money2 = banking.close(1234);System.out.println("최종 해지금액 : " + money2);banking.display();}}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980package oop2;import java.util.Scanner;public class BankingDemo3 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);BankingService service = new BankingService();while (true) {System.out.println();System.out.println("[계좌관리 프로그램]");System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");System.out.println("1.조회 2.검색 3.신규 4.입금 5.출금 6.해지 0.종료");System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");System.out.print("메뉴를 선택하세요 : ");int menuNo = sc.nextInt();if (menuNo == 1) {service.printAllBankings();} else if (menuNo == 2) {System.out.print("조회할 계좌번호를 입력하세요 : ");String no = sc.next();service.printBankingByNo(no);} else if (menuNo == 3) {System.out.println("신규 계좌개설에 필요한 정보를 입력해주세요.");System.out.print("고객명을 입력하세요 : ");String name = sc.next();System.out.print("비밀번호를 입력하세요 : ");int pwd = sc.nextInt();System.out.print("입금액을 입력하세요 : ");long money = sc.nextLong();service.addNewBanking(name, pwd, money);} else if (menuNo == 4) {System.out.print("입금할 계좌번호를 입력하세요 : ");String no = sc.next();System.out.print("입금액을 입력하세요 : ");long money = sc.nextLong();service.depositBanking(no, money);} else if (menuNo == 5) {System.out.print("출금할 계좌번호를 입력하세요 : ");String no = sc.next();System.out.print("비밀번호를 입력하세요 : ");int pwd = sc.nextInt();System.out.print("출금액을 입력하세요 : ");long money = sc.nextLong();long withdrawMoney = service.withdrawFromBanking(no, pwd, money);System.out.println("고객님 ["+ withdrawMoney +"]원을 가져가세요.");} else if (menuNo == 6) {System.out.print("해지할 계좌번호를 입력하세요 : ");String no = sc.next();System.out.print("비밀번호를 입력하세요 : ");int pwd = sc.nextInt();long money = service.closeBanking(no, pwd);System.out.println("고객님의 총 해지금액은 ["+ money +"]원 입니다.");} else if (menuNo == 0) {System.out.println("프로그램을 종료합니다.");break;}}sc.close();}}
'java > 코드 리뷰' 카테고리의 다른 글
7. oop2 - (3) GugudanDemo (구구단) (0) 2020.03.24 7. oop2 - (2) CalculatorDemo (계산기 - 오버로딩(중복정의)) (0) 2020.03.24 6. oop1 - (4) ScoreDemo (성적 정보 조회) (0) 2020.03.24 6. oop1 - (3) PersonDemo (Person객체, 배열) (0) 2020.03.24 6. oop1 - (2) OrderDemo (고객 주문내용 관리 프로그램) (0) 2020.03.24