일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준 알고리즘
- tm
- 자바
- Fiori
- html
- SAP 번역
- 자바 클래스
- BOBF
- udemy
- module
- 이클립스
- ui5
- 개발
- BOPF
- sap
- python
- BTP
- ABAP
- Eclipse
- Deep Learning
- 파이썬
- FPM
- 클래스
- java
- Algorithm
- S/4HANA
- visual studio code
- mac
- 알고리즘
- 맥북
Archives
- Today
- Total
z2soo's Blog
JAVA Class (연습) ATM 구현 본문
반응형
1. 프로젝트의 흐름도
Member 클래스 (회원정보)
- n명 정보 입력
- 컨테이너(ArrayList 타입의 customer)에 저장
ATM Machine 클래스
- 컨테이너(고객정보 DB 역할)를 가져와서 연결
- 해당 클래스에 특정 회원을 찾아서 로그인 하는 기능 존재
- 로그인 후 볼 수 있는 개인 회원용 메뉴 제작
[1] 잔액조회 →로그인된 고객의 잔액 출력
[2] 입금 → 금액을 입금(누적)
[3] 출금 → 잔액에서 차감
[4] 종료 → 현재 실행되고 있는 메뉴 종료
ATMPlay 클래스
- 프로그램 시작
- 고객 정보 컨테이너 생성
- 고객 정보 저장
- ATMMachine 객체 생성
- 고객 정보 넘겨줌
2. Java Code
Member
package ATMpackage;
public class Member {
//속성
private String mName;
private String mAccountNo;
private int mBalance;
private String mId;
private String mPw;
//생성자
Member(String n, String a, String id, String pw){
mName=n;
mAccountNo=a;
mId=id;
mPw=pw;
}
//putter, getter, setter
void putmName() {System.out.println("이름: "+mName);}
void putmAccountNo() {System.out.println("계좌번호: "+mAccountNo);}
void putmId() {System.out.println("아이디: "+mId);}
void putmPw() {System.out.println("암호: "+mPw);}
void putmBalance() {System.out.println("잔액: "+mBalance);}
void putmInfo() {System.out.print("===회원정보 출력===")
;putmId();putmName();putmAccountNo();putmBalance();
System.out.print("==============");}
void setName(String n) {mName=n;}
void setAccountNo(String a) {mAccountNo=a;}
void setId(String id) {mId=id;}
void setPw(String pw) {mPw=pw;}
void setBalance(int b) {mBalance=b;}
String getName() {return mName;}
String getAccountNo() {return mAccountNo;}
String getId() {return mId;}
String getPw() {return mPw;}
int getBalance() {return mBalance;}
void dMoney(int m) {
int mNow = getBalance();
setBalance(mNow+m);
}
void wMoney(int m) {
int mNow = getBalance();
if (mNow < m) {
System.out.print("잔액이 부족합니다.");
} else {
setBalance(mNow-m);
}
}
}
ATMachine
package ATMpackage;
import java.util.ArrayList;
import java.util.Scanner;
//===== ATMachine 클래스 제작
// 고객 정보를 기반으로 입출금 및 잔액조회 등의 기능을 수행하는 곳
// 1) 이 클래스는 기본적으로 고객 정보를 전달받아야 한다. 내부에 저장되어 있어야 한다는 의미
// 2) 그렇다면 클래스의 속성 중에 고객정보 컨테이너를 연결할 수 있는 부분이 있어야 함
// 3) ATMachine 클래스는 입금(putMoney), 출금(getMoney), 잔액조회(displayBalance)를 가지고 있다.
// 4) 생성자로는 고객정보 컨테이너를 전달받고록 한다.
//=====
public class ATMachine {
ArrayList<Member> bankCustomers; //여기에 고객정보를 가진 컨테이너를 연결할 수도 있다.
//이 생성자는 고객 정보를 가진 컨테이너를 전달받는다.
// 즉, ATMachine 객체가 만들어지면서 즉시 고객정보를 연결해준다는 의미이다.
ATMachine(ArrayList<Member> cus){
bankCustomers = cus;
}
//로그인 기능을 처리할 수 있는 메소드
void mLogin() {
//아이디와 암호를 저장할 임시변수
String loginId;
String loginPw;
boolean loginCheck = false;
//아이디와 암호 입력받기
Scanner input = new Scanner(System.in);
System.out.print("아이디: "); loginId=input.next();
System.out.print("암호: "); loginPw=input.next();
//고객정보에서 일치하는 아이디 찾기
//메뉴 종료 변수
boolean exitMenu = false;
for (Member x: bankCustomers) {
//아이디 일치 확인
if (x.getId().equals(loginId)) {
//암호 일치 확인
if (x.getPw().equals(loginPw)) {
System.out.println("로그인되었습니다!!!");
//회원정보 출력
x.putmInfo();
//로그인 확인용
loginCheck = true;
//==============개인메뉴==============
//[1] 잔액조회 →로그인된 고객의 잔액 출력
//[2] 입금 → 금액을 입금(누적)
//[3] 출금 → 잔액에서 차감
//[4] 종료 → 현재 실행되고 있는 메뉴 종료
int menu;
while(true) {
System.out.println("=====검색=====");
System.out.println("[1] 잔액조회 [2] 입금 [3] 출금 [4] 종료");
System.out.println("메뉴번호를 입력하세요.");
menu = input.nextInt(); //메뉴번호 입력
switch(menu) {
case 1:{
x.putmBalance();
} break;
case 2:{
System.out.println("입금액: ");
int money = input.nextInt();
x.dMoney(money);
} break;
case 3:{
System.out.println("출금액: ");
int money = input.nextInt();
x.wMoney(money);
} break;
case 4:{
//메뉴 종료 부분으로 break를 사용하더라도 밖에 while이 있어 종료 불가하다
//while과 for 둘 다 탈출하는 방법을 찾아보자
exitMenu=true;
break;
}
} //-switch
if (exitMenu) {break;} //while 탈출 여부
} //-while
//=================================
} //-if
} //-if
if (exitMenu) {break;} //for 탈출 여부
} //-for
if (loginCheck != true) {
System.out.print("회원 정보가 없습니다.");
}
}
}
ATMPlay
package ATMpackage;
import java.util.ArrayList;
public class ATMPlay {
public static void main(String[] args) {
//컨테이너를 hashmap으로 만든다.
//열쇠: 문자열, 데이터: Member 타입
//HashMap<String, Member> container = new HashMap<String, Member>();
ArrayList<Member> customer = new ArrayList<Member>();
//=====회원 생성
Member m1=new Member("벤투","001-1111-2222","admin","123##");
Member m2=new Member("이강인","002-2222-3343","lee999","9999");
Member m3=new Member("손흥민","003-3333-6534","Kang","4321");
//=====고객정보 저장 및 잔액 설정
customer.add(m1); customer.add(m2); customer.add(m3);
customer.get(0).setBalance(570000);
customer.get(1).setBalance(890000);
customer.get(2).setBalance(553000);
//=====ATM 객체를 생성해서 고객정보(customer)를 넘겨준다.
ATMachine atm = new ATMachine(customer);
// atm.putAllCustomerInfo();
atm.mLogin();
}
}
3. 수정사항
- 메뉴 부분에 대해 복잡하게 중첩되어 있는 항목을 따로 class 생성하여 정리
: 메소드의 형태로 만들어서 하나의 작업만을 진행하도록 하는게 이상적인 코드 - 최종적으로 원하는 흐름
: ATMPlay → mLogin → 로그인된 아이디 반환 → 그 아이디 저장 → 메뉴 실행 및 종료 → ATMPlay 돌아옴 → 로그인된 상태로 다른 작업 가능(아이디를 저장한 상태)
반응형
'Programming > JAVA' 카테고리의 다른 글
JAVA의 Class (9) 추상 클래스 (0) | 2023.01.18 |
---|---|
JAVA의 Class (8) Instanceof 연산자 (0) | 2023.01.13 |
JAVA 멀티스레드 (연습) (0) | 2023.01.11 |
JAVA 멀티스레드 (0) | 2023.01.11 |
JAVA의 Class (7) 오버로딩과 오버라이딩 (0) | 2022.12.28 |
Comments