본문 바로가기
교육/Java&Spring

java & spring 4

by Renechoi 2023. 1. 28.

 

atm을 절차지향적으로 풀어보기 

 

package work.lecture;

import java.util.Scanner;

public class Solution1 {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        int MAX = 5;
        // 0 1 2 3 4
        int[] arId = new int[MAX]; // {0,0,0,0,0}
        int[] arPw = new int[MAX];// {0,0,0,0,0}
        int[] arMoney = new int[MAX];// {0,0,0,0,0}

        int[] tempIds = { 1111, 2222, 3333, 0, 0 };
        int[] tempPws = { 1111, 2222, 3333, 0, 0 };
        int[] tempMoneys = { 5000, 12000, 3000, 0, 0 };
        arId = tempIds;
        arPw = tempPws;
        arMoney = tempMoneys;

        // int cnt = 0;
        int cnt = 3;
        int log = -1; // 로그인 회원 -> 2 인덱스 전부 동일한 회원데이터 : 인덱스 : -1:로그아웃

        String menu = "=== 그린 IT ATM ===";
        String mainMenu = "1.회원가입\n2.로그인\n0.종료\n";
        String loginMenu = "3.입금\n4.이체\n5.잔액조회\n6.로그아웃\n7.탈퇴\n0.종료\n";
        // menu += "1.회원가입\n2.회원탈퇴\n3.로그인\n4.로그아웃\n";
        // menu += "5.입금\n6.이체\n7.잔액조회\n0.종료";

        while (true) {

            System.out.println(menu);
            if (log == -1) {
                System.out.println(mainMenu);
            } else {
                System.out.println(arId[log] + "님 잔액" + arMoney[log] + " 원");
                System.out.println(loginMenu);
            }

            int sel = scan.nextInt();

            if (sel == 1 && log == -1) {
                if (cnt == MAX) {
                    System.out.println(" 정원 초가 가입 불가");
                    continue;
                }
                System.out.println("[ 회원 가입 ]");
                int id = 0;
                while (true) {
                    System.out.print(" 신규 ID :");
                    id = scan.nextInt();

                    boolean check = false;

                    // for(배열요소타입 이름 : 배열이름) { 0~배열 끝까지 자동 num 꺼내온다 : 인덱스
                    for (int num : arId) {
                        if (id == num) {
                            check = true;
                            break;
                        }
                    }

                    if (check) {
                        System.out.println("이미 존재하는 id 입니다");
                    } else {
                        break;
                    }
                }

                System.out.print(" 신규 PW :");
                int pw = scan.nextInt();

                arId[cnt] = id;
                arPw[cnt] = pw;
                arMoney[cnt] = 1000;
                cnt++;
                System.out.println("회원가입 완료 ");

            } else if (sel == 2 && log == -1) {
                // 아이디불일치 패스워드 불일치 로그인 성공 로그인 실패
                // 아이디불일치 , 아이디일치-> 패스워드가 불일치 ,
                System.out.println("[ 로그인 ]");
                System.out.print("ID :");
                int id = scan.nextInt();
                System.out.print("PW :");
                int pw = scan.nextInt();

                int idx = -1;
                for (int i = 0; i < cnt; i++) {
                    if (id == arId[i]) {
                        idx = i;
                        break;
                    }
                }

                if (idx == -1) {
                    System.out.println("아이디 불일치");
                } else if (arPw[idx] == pw) {
                    // idx != -1 && arPw[idx] == pw
                    log = idx;
                    System.out.println(" 로그인 성공 ");
                    continue; // 밑에 실행 안하고 다시 반복문 처음으로 돌아감
                } else {

                    // idx != -1 && arPw[idx] != pw
                    System.out.println(" 패스워드 불일치 ");
                }
                System.out.println("로그인 실패");
            } else if (sel == 3 && log != -1) {

                System.out.println("[ 입 금 ]");
                System.out.print("금액 :");
                int money = scan.nextInt();
                if (money < 1000) {
                    System.out.println("천원 이상 입금 가능합니다");
                    continue;
                }
                arMoney[log] += money;

            } else if (sel == 4 && log != -1) {
                System.out.println("[ 이 체 ]");
                // 계좌번호 존재여부, 본인계좌 이체 불가능, 금액 1000원 이상 이체 , 통장 잔액 이하
                System.out.print("계좌 :");
                int acc = scan.nextInt();
                int idx = -1;
                for (int i = 0; i < cnt; i++) {
                    if (acc == arId[i]) {
                        idx = i;
                        break;
                    }
                }
                if (idx == -1) {
                    System.out.println("존재하지 않는 계좌번호");
                    continue;
                } else if (idx == log) {
                    System.out.println("본인 계좌 이체 불가능");
                    continue;
                }

                System.out.print("금액 :");
                int money = scan.nextInt();
                if (money < 1000) {
                    System.out.println("천원 이상 입금 가능합니다");
                    continue;
                }
                if (money > arMoney[log]) {
                    System.out.println(" 한도 초과 금액 이체 불가능");
                    continue;
                }
                arMoney[log] -= money;
                arMoney[idx] += money;

                System.out.println("이체 완료");
            } else if (sel == 5 && log != -1) {
                System.out.println("[ 잔액 조회 ]");
                for (int i = 0; i < cnt; i++) {
                    System.out.printf(" [%-5d ] [%10d 원]\n", arId[i], arMoney[i]);
                    ;
                }
            } else if (sel == 6 && log != -1) {
                System.out.println("[ 로그아웃 완료]");
                log = -1;
            } else if (sel == 7 && log != -1) {
                System.out.println("[ 회원탈퇴 완료]");
                for (int i = log; i < cnt - 1; i++) {
                    arId[i] = arId[i + 1];
                    arPw[i] = arPw[i + 1];
                    arMoney[i] = arMoney[i + 1];
                }
                cnt--;
                log = -1;
            } else if (sel == 0) {
                System.out.println("종료합니다.");
                break;
            } else if (sel < 0 || sel > 7) {
                System.out.println("메뉴번호 입력 오류");
            } else {
                if (log == -1) {
                    System.out.println("로그인 먼저 해주세요");
                } else {
                    System.out.println(" 이미 로그인 한 상태입니다");
                }
            }
        }

    }

}

 

 

 


메서드에 대해 알아보기 

 

메서드의 종류 4가지 

 

   유산(return) | 외부값 (parameter) 

1.  x                    x

1.  x                    o

1.  o                    x

1.  o                    o

 

 

 

클래스란 무엇일까? 

=> 설계도  : 필드(정보), 메서드(행동, 기능) 

=> 사용자 지정 자료형 타입 : 필드만 들어있는 것 : 여러가지 자료형 타입 여러 개 저장 

=> new 배열타입[갯수]

=> 배열이름[인덱스]

=> new 클래스이름(); 필드로 접근 // 인스턴스이름.필드이름 

 

 

 

힙 메모리에 만들어지는 것들을 인스턴스라고 하는데 

클래스는 인스턴스를 가지면서 여러가지 자료형을 가질 수 있다. 

 

Account[] accountlist = new Account[AccountData.length];

 

accountlist[0].name; 

 

 

 

메서드 : 중복된 코드를 한 번만 선언 -> 코드 재사용성, 가독성 증가, 유지보수 

 

 

 

heap : new 한 모든 것들의 영역 

statck : 메서드의 영역 : 메서드를 호출 할 때 생성, 메서드 호출 종료시 삭제 

 

=> heap은 하나이지만 stack은 여러개 => 멀티 스레드 

=> stack은 일꾼이다 (thread) 

 

 

 

Ex01 ex01 = new Ex01();

힙 메모리 방이 생성 

모든 클래스는 this라는 메모리 방을 갖고 있다 

this => 자기 자신의 주소값을 저장하고 있음 

 

 

package day4;

class Ex01{
    // 메서드 타입1: 유산 x, 외부값 x
    // 메서드 구조 : 1 유산형태, 2 메서드 이름, 3 외부값 4 메서드 영역
    void type1(){
        System.out.println("type 1 호출");
        System.out.println(this);
    }

}

public class Test1 {
    public static void main(String[] args) {
        Ex01 ex01 = new Ex01();
        ex01.type1();

    }
}

 


 

 

 

배열, 클래스 데이터 이동 

 

package method;

class Calculator {
	double result;

	// 더하기 메서드
	void plus(double x, double y) {
		// 인자값 1 2 3 4
		result(x, y, "+", x + y);
	}

	// 빼기 메서드
	void minus(double x, double y) {
		result(x, y, "-", x - y);
	}

	// 나누기 메서드
	void multiply(double x, double y) {
		result(x, y, "/", x / y);
	}

	// 곱하기 메서드
	void divide(double x, double y) {
		result(x, y, "*", x * y);
	}

	// 결과 출력문 메서드
	// 인자값 자료형 위치 순서 갯수 전부 다 일치해야한다!!

	// 인자값 1 2 3 4
	void result(double x, double y, String op, double res) {
		System.out.printf(" %.1f %s %.1f = %.1f \n", x, op, y, res);
	}
}

public class 그림2 {
	public static void main(String[] args) {

		Calculator cal = new Calculator();
		double x = 10;
		double y = 3;
		cal.plus(x, y);
//--------------------

		cal.minus(x, y);
		cal.multiply(x, y);
		cal.divide(x, y);

	}
}

 

 

 

 

 

 

 

lass Ex004{
	void changeValueInArray(int [] arr) {
		arr[1] = 100;
	}
}
public class 그림3 {

	public static void main(String[] args) {

		int arr[] = {10,20,30,40,50};
		Ex004 t6  = new Ex004();
		
		// 배열은 주소이기때문에 바뀐다.(아주중요하다.)
		t6.changeValueInArray(arr);		
		for(int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		
		System.out.println("-----------------------");
		// 아래와 같은 상황이다.
		int testArr[] = {10,20,30,40};
		int temp[] = testArr;
		temp[1] = 100;
		for(int i = 0; i < testArr.length; i++) {
			System.out.print(testArr[i] + " ");
		}
		System.out.println();
	}

}

 

 

 

 

package method;
class Ex005{
	int result;
}

class Ex006{
	void plus(Ex005 data, int x, int y) {
		data.result = x + y;
	}
	void minus(Ex005 data, int x, int y) {
		data.result = x - y;
	}
}

public class 그림4 {

	public static void main(String[] args) {

		Ex005 data = new Ex005();
		
		Ex006 e = new Ex006();
		
		e.plus(data, 10, 3);
		System.out.println(data.result);
		
		e.minus(data, 10, 3);
		System.out.println(data.result);
		
	}
}

 

 

 

 

 

 

반응형