생코딩으로 적은 후 리팩토링을 거친 결과이다. 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;
}
}
}
}