본문 바로가기

코딩테스트

은행계좌(생성,삭제,입금,출금,종료)

 

생코딩으로 적은 후 리팩토링을 거친 결과이다. run()함수를 만들면 main()함수에서 new BankApplication().run();만 써줘도 실행 가능하다. 계좌삭제시 여기서는 계좌의 순서번호가 상관 없으니까 로또 당첨 코드처럼 배열의 맨뒤의 객체를 삭제시킨 자리에 대입해주면 더 빨리 수행할 수 있다.

 

이코드랑 상관없지만 교수님이 시킨거

<공부할 것>

● 자료구조

● 배열 - list

● map(set)

● Tree

import java.util.Scanner;

class Account {

	private String number; //계좌번호 
	private String name;   //이름 
	private int balance;   //잔액
	
	public Account(String number, String name, int balance) {
		super();
		this.number = number;
		this.name = name;
		this.balance = balance;
	}

	public void print() {
		System.out.printf("%s\t%s\t%d\n", number, name, balance);
	}
	
	public boolean isEqualNumber(String number) {
		return this.number.equals(number);
	}
	
	public void incBalance(int balance) {
		int temp = this.balance + balance;
		if(temp >= 0) {
			this.balance += balance;
		}else {
			System.out.println("잔액이"+temp+"원 부족합니다.");
		}
		
	}
}
///////////////////////////////////////////////////////////////////////////////////
public class BankApplication {
	Scanner scanner = new Scanner(System.in);
	Account[] accounts = new Account[100];
	int count = 0;

	private void printMenu() {
		System.out.println("---------------------------------------------------");
		System.out.println("1.계좌생성 | 2.계좌목록 | 3.예금 | 4.출금 | 5.계좌삭제 | 6 종료 ");
		System.out.println("---------------------------------------------------");		
	}

	private void createAccount() {
		if (count >= accounts.length) {
			System.out.println("계좌를 추가 할 공간이 없습니다");
		} else {
			System.out.println("--------");
			System.out.println("계좌생성");
			System.out.println("--------");

			System.out.print("계좌번호:");
			String number = scanner.nextLine();
			System.out.print("계좌주:");
			String name = scanner.nextLine();
			System.out.print("초기입금액:");
			int balance = Integer.parseInt(scanner.nextLine());
			
			accounts[count++] = new Account(number, name, balance);
			System.out.println("결과 : 계좌가 생성되었습니다");
		}
	}
	
	private void printAccounts() {
		System.out.println("--------");
		System.out.println("계좌목록");
		System.out.println("--------");
		
		for (int i=0;i<count;i++) {
			accounts[i].print();
		}
	}

	private Account findAccount(String number) {
		for (int i=0;i<count;i++) {
			if (accounts[i].isEqualNumber(number)) {
				return accounts[i];
			}
		}
		return null;
	}
	
	private void deposit() {
		System.out.println("--------");
		System.out.println("예금");
		System.out.println("--------");
		
		System.out.print("계좌번호:");
		String number = scanner.nextLine();
		
		Account user = findAccount(number);
		if (user != null) {
			System.out.print("예금액:");
			user.incBalance(Integer.parseInt(scanner.nextLine()));
			return;
		}
		System.out.println("계좌번호가 존재하지 않습니다");
	}
	private void withdraw() {
		System.out.println("--------");
		System.out.println("출금");
		System.out.println("--------");
		
		System.out.print("계좌번호:");
		String number = scanner.nextLine();
		
		Account user = findAccount(number);
		if (user != null) {
			System.out.print("예금액:");
			user.incBalance(-Integer.parseInt(scanner.nextLine()));
			return;
		}
		System.out.println("계좌번호가 존재하지 않습니다");
	}
	private String choose() {
		System.out.print("선택>");
		String str = scanner.nextLine();
		return str;
	}
	private void deleteUser() {
		System.out.println("--------");
		System.out.println("계좌삭제");
		System.out.println("--------");
		
		System.out.print("계좌번호:");
		String number = scanner.nextLine();
		
		int num=0;
		for (int i=0;i<count;i++) {
			if (accounts[i].isEqualNumber(number)) {
				num =i;
				break;
			}
		}
		
		//순서를 보장해야할때
		for(int i=num;i<count-1;i++) {
			accounts[i]=accounts[i+1];
		}
		accounts[count-1]=null;
		count--;
//		순서를 보장하지 않아도 될때는 이렇게 해야 한다.
//		int index = findIndex(number);
//		if(index>=0) {
//		accounts[index] = accounts[count];
//		accounts[count] = null;
//		count--;
//		}else {
//			System.out.println("존재하지 않는 계좌번호 입니다.");
//		}
		
		
		System.out.println("결과 : 계정을 정상적으로 삭제하였습니다.");
	}
	
//	private void run() {//run함수를 만들고
//		boolean isRun = true;
//		
//		
//		while (isRun) {
//			printMenu();
//			
//			switch (menuChoice()) {
//			case "1":
//				createAccount();
//				break;
//			case "2":
//				printAccounts();
//				break;
//			case "3":
//				deposit();
//				break;
//			case "4":
//				withdraw();
//				break;
//			case "5":
//				deleteUser();
//				break;
//			case "6":
//				exit();
//				isRun = false;
//				break;
//			}
//		}
//	}
//	
	public String menuChoice() {
		System.out.println("선택 > ");
		return scanner.nextLine();
	}
	public void exit() {
		System.out.println("프로그램 종료");
	}
	public static void main(String[] args) {
		
//		new BankApplication().run();//이렇게 실행해도 된다.
		
		boolean isRun = true;
		BankApplication hus = new BankApplication();
		
		
		while (isRun) {
			hus.printMenu();
			String str = hus.choose();
			
			switch (str) {
			case "1":
				hus.createAccount();
				break;
			case "2":
				hus.printAccounts();
				break;
			case "3":
				hus.deposit();
				break;
			case "4":
				hus.withdraw();
				break;
			case "5":
				hus.deleteUser();
				break;
			case "6":
				hus.exit();
				isRun = false;
				break;
			}
		}
		
	}

}

'코딩테스트' 카테고리의 다른 글

로또뽑기  (0) 2023.05.29