[Java] 클래스를 만들어 계좌 생성하기

Haeun Noh·2022년 11월 8일
0

JAVA_예제

목록 보기
23/23
post-thumbnail

1108


은행계좌를 정의하고 테스트하는 프로그램을 작성하라.

조건

  1. 은행계좌번호와 잔액으로 계좌 객체를 생성한다.
  2. 입금을 하는 desposit()메서드를 갖는다.
  3. 출금을 하는withdraw() 메서드를 갖는다.
    잔액이 부족하면 출금할 수 없으며, 적당한 메시지를 나타낸다.
  4. 계좌의 현재 상태를 출력하는 메서드 toString()오버라이딩한다.

++추가 조건

은행계좌와 잔액은 접근제어자 private으로 보호해야 한다.
1. 따라서 계좌를 한 번 생성하면 외부에서는 접근할 수 없고 (생성자 메서드)
2. 클래스 내부에서만 변경이 가능해야 한다. (set 메서드)
3. 값ㅇ르 불러올 때도 직접 접근이 어려우므로 클래스 내부 메서드를 이용해야 한다. (get 메서드)


//ex) 출력 예시
생성할 계좌의 개수 입력 : 3

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 1

1 계좌번호 입력 : 1111
계좌 번호 1111의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 2

입금할 계좌번호 입력 : 1111
입금 금액 입력 : 19000

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 19000입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 1

2 계좌번호 입력 : 2222
계좌 번호 2222의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 2

입금할 계좌번호 입력 : 2222
입금 금액 입력 : 20000

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 3

출금할 계좌번호 입력 : 2222
출금 금액 입력 : 18000

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 19000입니다.
계좌 번호 2222의 잔액은 2000입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 0

종료되었습니다.

소스 코드

추가 조건 없이 짠 코드

package work;

import java.util.Scanner;

class Account {
	static int cnt = 1;
	String acc_Num;
	int nowMoney = 0;
	
	public Account(String acc_num) {
		this.acc_Num = acc_num;
		cnt++;
	}
	
	//입금
	void deposit(int money) {
		this.nowMoney += money;
	}
	
	//출금
	void withdraw(int money) {
		this.nowMoney -= money;
	}
	
	//현재 계좌 상태 출력
	public String toString() {
		return "계좌 번호 "+this.acc_Num+"의 잔액은 "+this.nowMoney+"입니다.";
	}
}

public class AcocuntTest {
	static int cnt1 = -1;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("생성할 계좌의 개수 입력 : ");
		int account = sc.nextInt();
		Account[] a = new Account[account];
		System.out.println();
		
//		int[] cnt = new int[account]; 		//몇 번째 계좌인지 알려주는 cnt변수
		
		while(true) {
			System.out.println("1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료");
			System.out.print("메뉴입력 : ");
			int menu = sc.nextInt();
			System.out.println();
			
			//계좌번호 입력
			if ( menu == 1 ) {
				cnt1++;
				System.out.print(a[cnt1].cnt+" 계좌번호 입력 : ");			//첫 번째로 계좌를 생성하면 0번쨰의 방의 a의 Account에 들어있는 cnt번째 계좌번호 출력
				a[cnt1] = new Account(sc.next());						//계좌번호 입력 부분
				System.out.println(a[cnt1].toString()+"\n");					//첫 번째로 생성한 계좌의 방 번호를 ++함으로써 첫 번째로 생성한 계좌는 남겨두고 두 번쨰 계좌 생성 가능
				
			//입금
			} else if ( menu == 2 ) {
				System.out.print("입금할 계좌번호 입력 : ");
				String acc_num = sc.next();
				if ( a[cnt1].acc_Num.equals(acc_num)) {
					System.out.print("입금 금액 입력 : ");
					int money = sc.nextInt();
					a[cnt1].deposit(money);
					System.out.println();
				}
				else 
					System.out.println("잘못된 계좌번호입니다.\n");
			
			//출금
			} else if ( menu == 3 ) {
				int money;		//잘못 출금할 금액 입력 횟수, 출금 금액
				System.out.print("출금할 계좌번호 입력 : ");
				String acc_num = sc.next();
				if ( a[cnt1].acc_Num.equals(acc_num)) {
					System.out.print("출금 금액 입력 : ");
					money = sc.nextInt();
					if ( money > a[cnt1].nowMoney || money < 0 ) {
						System.out.println("출금할 금액이 올바르지 않습니다.\n");
						continue;
					}
					a[cnt1].withdraw(money);						//출금
					System.out.println();
				}
			} else if ( menu == 4 ) {
				//현재 생성된 계좌 모두의 계좌 상태를 출력
				for ( int i = 0; i < cnt1+1; i++) {
					System.out.println(a[i].toString());
				}
				System.out.println();
			}
			else if ( menu == 0 ) {
				System.out.println("종료되었습니다.");
				break;
			}
		}
		
//		System.out.print("2 계좌번호 입력 : ");
//		Account a2 = new Account(sc.nextLine());
//		System.out.println(a2.toString());
	}

}

추가 조건을 적용한 소스코드

package work;

import java.util.Scanner;

class Account {
	static int cnt = 1;
	private String acc_Num;
	private int nowMoney = 0;
	
	public Account(String acc_num) {
		this.setAcc_Num(acc_num);
		cnt++;
	}
	
	//입금
	void deposit(int money) {
		this.setNowMoney(this.getNowMoney() + money);
	}
	
	//출금
	void withdraw(int money) {
		this.setNowMoney(this.getNowMoney() - money);
	}
	
	//현재 계좌 상태 출력
	public String toString() {
		return "계좌 번호 "+this.getAcc_Num()+"의 잔액은 "+this.getNowMoney()+"입니다.";
	}

	//setter, getter 메서드
	//계좌 번호
	public String getAcc_Num() {
		return acc_Num;
	}
	public void setAcc_Num(String acc_Num) {
		this.acc_Num = acc_Num;
	}

	//현재 잔액
	public int getNowMoney() {
		return nowMoney;
	}
	public void setNowMoney(int nowMoney) {
		this.nowMoney = nowMoney;
	}
}

public class AcocuntTest {
	static int cnt1 = -1;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("생성할 계좌의 개수 입력 : ");
		int account = sc.nextInt();
		Account[] a = new Account[account];
		System.out.println();
		
//		int[] cnt = new int[account]; 		//몇 번째 계좌인지 알려주는 cnt변수
		
		while(true) {
			System.out.println("1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료");
			System.out.print("메뉴입력 : ");
			int menu = sc.nextInt();
			System.out.println();
			
			//계좌번호 입력
			if ( menu == 1 ) {
				cnt1++;
				System.out.print(a[cnt1].cnt+" 계좌번호 입력 : ");			//첫 번째로 계좌를 생성하면 0번쨰의 방의 a의 Account에 들어있는 cnt번째 계좌번호 출력
				a[cnt1] = new Account(sc.next());						//계좌번호 입력 부분
				System.out.println(a[cnt1].toString()+"\n");					//첫 번째로 생성한 계좌의 방 번호를 ++함으로써 첫 번째로 생성한 계좌는 남겨두고 두 번쨰 계좌 생성 가능
				
			//입금
			} else if ( menu == 2 ) {
				System.out.print("입금할 계좌번호 입력 : ");
				String acc_num = sc.next();
				if ( a[cnt1].getAcc_Num().equals(acc_num)) {
					System.out.print("입금 금액 입력 : ");
					int money = sc.nextInt();
					a[cnt1].deposit(money);
					System.out.println();
				}
				else 
					System.out.println("잘못된 계좌번호입니다.\n");
			
			//출금
			} else if ( menu == 3 ) {
				int money;		//잘못 출금할 금액 입력 횟수, 출금 금액
				System.out.print("출금할 계좌번호 입력 : ");
				String acc_num = sc.next();
				if ( a[cnt1].getAcc_Num().equals(acc_num)) {
					System.out.print("출금 금액 입력 : ");
					money = sc.nextInt();
					if ( money > a[cnt1].getNowMoney() || money < 0 ) {
						System.out.println("출금할 금액이 올바르지 않습니다.\n");
						continue;
					}
					a[cnt1].withdraw(money);						//출금
					System.out.println();
				}
			} else if ( menu == 4 ) {
				//현재 생성된 계좌 모두의 계좌 상태를 출력
				for ( int i = 0; i < cnt1+1; i++) {
					System.out.println(a[i].toString());
				}
				System.out.println();
			}
			else if ( menu == 0 ) {
				System.out.println("종료되었습니다.");
				break;
			}
		}
		
//		System.out.print("2 계좌번호 입력 : ");
//		Account a2 = new Account(sc.nextLine());
//		System.out.println(a2.toString());
	}

}

계좌 생성과 입출금, 잔액, 종료가 자유로운 계좌 시스템

package work;

import java.util.Scanner;

class Account {
	static int cntAcc = 1;
	private String acc_Num;
	private int nowMoney = 0;
	
	public Account(String acc_num) {
		this.setAcc_Num(acc_num);
		cntAcc++;
	}
	
	//입금
	void deposit(int money) {
		this.setNowMoney(this.getNowMoney() + money);
	}
	
	//출금
	void withdraw(int money) {
		this.setNowMoney(this.getNowMoney() - money);
	}
	
	//현재 계좌 상태 출력
	public String toString() {
		return "계좌 번호 "+this.getAcc_Num()+"의 잔액은 "+this.getNowMoney()+"입니다.";
	}

	//setter, getter 메서드
	//계좌 번호
	public String getAcc_Num() {
		return acc_Num;
	}
	public void setAcc_Num(String acc_Num) {
		this.acc_Num = acc_Num;
	}

	//현재 잔액
	public int getNowMoney() {
		return nowMoney;
	}
	public void setNowMoney(int nowMoney) {
		this.nowMoney = nowMoney;
	}
}

public class AcocuntTest {
	static int cnt = -1;		//초깃값이 -1인 이유는 if문에서 cnt++을 한 뒤에 방 주소에 들어가기 떄문

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("생성할 계좌의 개수 입력 : ");
		int account = sc.nextInt();
		Account[] acc = new Account[account];
		System.out.println();
		
//		int[] cnt = new int[account]; 		//몇 번째 계좌인지 알려주는 cnt변수
		
		while(true) {
			System.out.println("1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료");
			System.out.print("메뉴입력 : ");
			int menu = sc.nextInt();
			System.out.println();
			
			//계좌번호 입력
			if ( menu == 1 ) {
				cnt++;
				System.out.print(acc[cnt].cntAcc+" 계좌번호 입력 : ");			//첫 번째로 계좌를 생성하면 0번쨰의 방의 a의 Account에 들어있는 cntAcc번째 계좌번호 출력
				acc[cnt] = new Account(sc.next());						//계좌번호 입력 부분
				System.out.println(acc[cnt].toString()+"\n");					//첫 번째로 생성한 계좌의 방 번호를 ++함으로써 첫 번째로 생성한 계좌는 남겨두고 두 번쨰 계좌 생성 가능
				
			//입금
			} else if ( menu == 2 ) {
				System.out.print("입금할 계좌번호 입력 : ");
				String acc_num = sc.next();
				//생성한 계좌의 개수만큼 for문 반복
				//(i<=cnt)인 이유는 cnt가 시작하는 범위가 0부터이기 때문에
				for ( int i = 0; i <= cnt; i++) {
					if ( acc[i].getAcc_Num().equals(acc_num)) {
						System.out.print("입금 금액 입력 : ");
						int money = sc.nextInt();
						acc[i].deposit(money);
						System.out.println();
						break;
					}
					else if ( i == cnt ) 
						System.out.println("잘못된 계좌번호입니다.\n");
				}
			
			//출금
			} else if ( menu == 3 ) {
				int money;		//잘못 출금할 금액 입력 횟수, 출금 금액
				System.out.print("출금할 계좌번호 입력 : ");
				String acc_num = sc.next();
				for ( int i = 0; i <= cnt; i++) {
					if ( acc[i].getAcc_Num().equals(acc_num)) {
						System.out.print("출금 금액 입력 : ");
						money = sc.nextInt();
						if ( money > acc[i].getNowMoney() || money < 0 ) {
							System.out.println("출금할 금액이 올바르지 않습니다.\n");
							continue;
						}
						acc[i].withdraw(money);						//출금
						System.out.println();
					}
				}
			} else if ( menu == 4 ) {
				//현재 생성된 계좌 모두의 계좌 상태를 출력
				for ( int i = 0; i < cnt+1; i++) {
					System.out.println(acc[i].toString());
				}
				System.out.println();
			}
			else if ( menu == 0 ) {
				System.out.println("종료되었습니다.");
				break;
			}
		}
	}
}

결과 화면


생성할 계좌의 개수 입력 : 3

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 1

1 계좌번호 입력 : 1111
계좌 번호 1111의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 1

2 계좌번호 입력 : 2222
계좌 번호 2222의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 0입니다.
계좌 번호 2222의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 1

3 계좌번호 입력 : 3333
계좌 번호 3333의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 0입니다.
계좌 번호 2222의 잔액은 0입니다.
계좌 번호 3333의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 2

입금할 계좌번호 입력 : 2222
입금 금액 입력 : 1900

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 2

입금할 계좌번호 입력 : 1111
입금 금액 입력 : 10000

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 3

출금할 계좌번호 입력 : 3333
출금 금액 입력 : 1000
출금할 금액이 올바르지 않습니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 10000입니다.
계좌 번호 2222의 잔액은 1900입니다.
계좌 번호 3333의 잔액은 0입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 2

입금할 계좌번호 입력 : 3333
입금 금액 입력 : 1900

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 10000입니다.
계좌 번호 2222의 잔액은 1900입니다.
계좌 번호 3333의 잔액은 1900입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 2

입금할 계좌번호 입력 : 3333
입금 금액 입력 : 21000

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 10000입니다.
계좌 번호 2222의 잔액은 1900입니다.
계좌 번호 3333의 잔액은 22900입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 3

출금할 계좌번호 입력 : 3
1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 3

출금할 계좌번호 입력 : 1111
출금 금액 입력 : 9000

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 4

계좌 번호 1111의 잔액은 1000입니다.
계좌 번호 2222의 잔액은 1900입니다.
계좌 번호 3333의 잔액은 22900입니다.

1. 계좌 생성   2. 입금   3. 출금   4. 현재계좌상태   0. 종료
메뉴입력 : 0

종료되었습니다.


profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글