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);
}
}
반응형
'교육 > Java&Spring' 카테고리의 다른 글
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 28 (0) | 2023.01.31 |
---|---|
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 27 (0) | 2023.01.30 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 26 (0) | 2023.01.27 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 25 (0) | 2023.01.26 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 24 (0) | 2023.01.25 |