Project

JAVA 자바 - 은행 관리 시스템 만들기

코너(Corner) 2020. 11. 19.
반응형

자바- 은행관리 시스템 만들기

 

 

계좌를 생성, 계좌 목록을 확인,

계좌 번호를 입력 받아 얼마를 예금하는지, 출금하는지 체크 

 


출력문

 

 


소스 코드

BankApp - Class

import java.text.DecimalFormat;
import java.util.Scanner;

/* (Banking)
 */
public class BankApp {
	private static Account[] accountArray = new Account[100];
    private static Scanner sc = new Scanner(System.in);
    private static final String PREFIX = "Bank-";
    private static int seq=0;//계좌번호 자동발번
    private static boolean isCreated=false;//계좌등록여부 
    
	public static void main (String[] args) {
	        boolean run =true;
	        while(run) {
	      System.out.println("-------------------------------------");
	      System.out.println("1.계좌생성|2.계좌목록|3.예금|4.출금|5.종료");
	      System.out.println("-------------------------------------");
          System.out.print("선택>");
          int selectNo = sc.nextInt();
          switch(selectNo) {
          case 1: createAccount(); break;
          case 2: accountList(); break;
          case 3: deposit(); break;
          case 4: withdraw(); break;
          case 5: run=false; break;
          }
      }
      System.out.println("프로그램 종료");
  }
  //출금 메소드
  private static void withdraw() {
      if(!isRegistered()) {
          System.out.println("먼저 계좌등록을 하세요");
          return;//메소드 실행 종료.
      }
      //계좌번호 출력
       accountList();
      //계좌번호 선택
       System.out.println("출금할 계좌번호를 선택하세요>");
      //출금(잔액<출금액)
       Account account;
       while(true) {
           String ano = sc.next();//출금 계좌번호 입력
           account = findAccount(ano);//입력받은 정보로 계좌조회
           if(account==null)
               System.out.println("계좌번호를 확인하세요");
           else
               break;//반복문 빠져나가기
       }
       //출금처리
       System.out.print("출금할 금액을 입력하세요>");
       int amount = sc.nextInt();
       int result;
       try {
           result = account.withdraw(amount);//잔액 >출금액보다 큰 경우
           System.out.println("출금액:"+result);
       }catch(Exception e) {//잔액 <출금액보다 작은경우
           System.out.println(e.getMessage());
       }
  }//출금 메소드 끝.
  private static void deposit() {
   if(!isRegistered()) {// if(!isCreated)         
      System.out.println("먼저 계좌등록을 하세요");
      return;//return;-더이상 진행을 하지 않고 메소드 호출한곳으로 되돌아감.
      }
   //계좌번호 출력
   accountList();
   //계좌번호 선택
   System.out.println("입금할 계좌번호를 선택하세요>");
      //입금
   Account account;
   while(true) {
   String ano = sc.next();//계좌번호 입력
   account = findAccount(ano);//입력된 값으로 계좌배열에서 해당하는 계좌정보를 찾아서 리턴받음
   if(account==null)//해당하는 계좌가 없으면
       System.out.println("계좌번호를 확인하세요>");
   else
       break;//계속 입력받다가 계좌번호가 맞아서 계좌정보를 얻어오면
   }//반복문을 빠져나감.
   System.out.print("입금할 금액을 입력하세요>");
   int amount = sc.nextInt();
   account.deposit(amount);//입금 처리
   System.out.println("예금 성공");
  }
  private static void accountList() {
      if(!isRegistered()) {// if(!isCreated)          
      System.out.println("먼저 계좌등록을 하세요");
      return;//return;-더이상 진행을 하지 않고 메소드 호출한곳으로 되돌아감.
      }
      for(int i=0;i<accountArray.length;i++) {
          if(accountArray[i]!=null) {
          System.out.println(accountArray[i].getAno()+accountArray[i].getOwner()+accountArray[i].getBalance());
          }
      }
  }//계좌 리스트 메소드 끝.
  private static void createAccount() {
      //Bank-0001, 홍길동, 100000
      //계좌번호 자동발번
String ano
= PREFIX+String.format(new DecimalFormat("0000").format(++seq));
System.out.print("소유주명>");
String owner = sc.next();//소유주 입력
System.out.print("초기입금액>");
int amount = sc.nextInt();//초기입금액 입력
      for(int i=0;i<accountArray.length;i++) {
          if(accountArray[i]==null) {
              accountArray[i]
                      =new Account(ano,owner,amount);
              System.out.println("계좌 등록 성공");
              isCreated=true;
              //isCreated변수는 static이라서 최종값을 가지고있음
              break;
          }
          //반복문 빠져나가기
      }
  }//메소드끝.
  
  //계좌등록 여부 확인
  private static boolean isRegistered() {
      return isCreated;//최종상태값을 리턴
       //초기값은 false이고, 계좌를 등록하면 true
  }
  //입력된 계좌번호로 계좌정보 조회
  private static Account findAccount(String ano) {
      Account account=null;
      for(int i =0;i<accountArray.length;i++) {
          if(accountArray[i]!=null)
              if(accountArray[i].getAno().equals(ano)) {
                  //문자열의 내용비교: 문자열1.equals(문자열2)
                  account = accountArray[i];
              }
      }
      return account;
  }

		
	}

Account - Class

public class Account {
		//필드
		private String ano;//계좌번호
		private String owner;//소유자
		private int balance;//잔고
		//생성자
		public Account(String ano, String owner, int balance) {
			//super();//=> Account extends Object
			this.ano = ano;
			this.owner = owner;
			this.balance = balance;
		}
		//메소드
		protected String getAno() { return ano; }
		protected void setAno(String ano) { this.ano = ano; }
		protected String getOwner() {       return owner;   }
		protected void setOwner(String owner) { this.owner = owner; }
		protected int getBalance() {    return balance; }
		protected void setBalance(int balance) {this.balance = balance; }
		public void deposit(int amount) {
			this.balance+=amount;   
		}
		public int withdraw(int amount) throws Exception {//예외 처리를 호출한 곳으로 떠넘김
			if(this.balance<amount) { //강제 예외 처리
				throw new Exception("잔액이 모자랍니다.");
				//new Exception() 예외객체 생성
				//throw:생성한 예외 객체를 호출한 쪽을 넘김
				//메소드의 매개변수 옆에 있는 throws Exception은 호출한 쪽으로 예외를 넘기는 문장
				//이 문장이 있으면 호출한 곳에서도 예외 처리를 해줘야함.
			}else { //this.balance>=amount
				this.balance-=amount;

				return amount;
			}
		}
	}

 


 

반응형

댓글