수업내용 정리 (Java)
1. 예제_Account
---------- import, 변수 선언
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
String[] name = new String[10]; // 이름
String[] id = new String[10]; // 아이디
String[] pw = new String[10]; // 비밀번호
String[] account = new String[10]; // 계좌번호
int[] balance = new int[10]; // 잔액
int cnt = 0; // 회원가입한 사람 수
int loginIndex = -1; // 상황에 따라 메뉴를 다르게 하기 위한 변수
---------- while문 사용
System.out.println("========== 은행 ==========");
if(loginIndex == -1) {
System.out.println("1.회원가입 2.로그인 3.회원목록 0.종료");
}else {
System.out.println("1.회원정보수정 2.로그아웃("+name[loginIndex]+"님) 3.입금 4.출금 5.계좌이체 0.종료");
}
System.out.printf("메뉴 선택> ");
int menu = sc.nextInt();
- 상황에 따라 메뉴를 다르게 출력하기 위해 if문을 이용했다.
- loginIndex가 -1일때: 아무도 로그인하지 않은 상태
- 그 외: 로그인 상태
if(loginIndex == -1) {
// 이름, 아이디, 비밀번호, 계좌번호, 초기잔액 입력 회원가입
System.out.println("\t회원가입==============");
System.out.printf("회원가입 할 이름> ");
name[cnt] = sc.next();
System.out.printf("회원가입 할 아이디> ");
id[cnt] = sc.next();
System.out.printf("회원가입 할 비밀번호> ");
pw[cnt] = sc.next();
System.out.printf("회원가입 할 계좌번호> ");
account[cnt] = sc.next();
System.out.printf("계좌 초기 잔액> ");
balance[cnt] = sc.nextInt();
System.out.println(name[cnt]+"님, 회원가입이 완료되었습니다.");
cnt++;
}
- 배열 name, id, pw, account, balance를 입력받아 각 cnt번째에 저장한다.
- 회원가입이 완료되면 cnt를 1씩 증가한다.
else {
// 회원정보수정 /비밀번호, 계좌번호 수정
System.out.println("\t정보수정==============");
System.out.println("1.아이디 2.비밀번호 3.계좌번호");
System.out.print("메뉴 선택> ");
menu = sc.nextInt();
if(menu == 1) {
System.out.print("변경할 아이디 입력> ");
id[loginIndex] = sc.next();
System.out.println("아이디 변경이 성공적으로 완료되었습니다.");
}else if(menu == 2) {
System.out.print("변경할 비밀번호 입력> ");
pw[loginIndex] = sc.next();
System.out.println("비밀번호 변경이 성공적으로 완료되었습니다.");
}else if(menu == 3) {
System.out.print("변경할 계좌번호 입력> ");
account[loginIndex] = sc.next();
System.out.println("계좌번호 변경이 성공적으로 완료되었습니다.");
}else {
System.out.println("존재하는 메뉴를 선택해주세요.");
}
}
- loginIndex가 -1이 아닐때: 회원정보 수정
- 변경할 정보를 입력받아 해당하는 배열의 loginIndex번째 인덱스에 저장한다.
if(loginIndex == -1) {
System.out.println("\t로그인===============");
// 아이디, 비밀번호 입력받아서 로그인 기능 수행
System.out.print("아이디 입력> ");
String loginId = sc.next();
System.out.print("비밀번호 입력> ");
String loginPw = sc.next();
boolean find = false;
for(int i=0; i<cnt; i++) {
if(loginId.equals(id[i]) && loginPw.equals(pw[i])) {
System.out.println("로그인 성공!");
find = true;
loginIndex = i;
break;
}
}
if(!find) {
System.out.println("로그인 실패");
}
}
- i가 cnt보다 작은 동안에 loginId와 loginPw가 id와 pw 배열에 있는지 확인하고, 있으면 find를 true로 바꾸고 liginInex는 i 값을 대입한다.
- break를 넣어 for문을 나가준다.
- 만약 for문을 나왔는데 find가 true가 아니라면 로그인 실패 문구를 출력한다.
else {
// 로그아웃
loginIndex = -1;
System.out.println("성공적으로 로그아웃되셨습니다.");
}
- loginIndex가 -1이 아닐때: 로그아웃
- loginIndex에 -1을 대입한다.
if(loginIndex == -1) {
// 회원목록 출력
System.out.println("\t회원목록==============");
System.out.println("이름\t아이디\t비밀번호\t계좌번호\t잔액");
System.out.println("==================================");
for(int i=0; i<cnt; i++) {
System.out.printf("%s\t%s\t%s\t%s\t%,d원\n",
name[i],id[i],pw[i],account[i],balance[i]);
}
System.out.println();
}
- 회원가입 한 사람들이 가입 할 때 입력한 정보가 출력된다.
else {
// 입금 /입금금액 받아서 입금
System.out.println("\t입금================");
System.out.print("입금할 금액을 입력해주세요.\n입금 금액> ");
int inMoney = sc.nextInt();
balance[loginIndex] += inMoney;
System.out.println("성공적으로 입금이 완료되었습니다.");
System.out.printf("입금 금액: %,d원\n입금 후 잔액: %,d원",
inMoney,balance[loginIndex]);
}
System.out.println();
- 로그인 되어있는 아이디의 계좌에 돈을 입금한다.
- 입금할 금액을 입력받으면 입금 금액과 입금 후 잔액을 출력한다.
// 출금 /출금금액 받아서 출금(잔액부족 확인)
System.out.println("\t출금================");
System.out.print("출금할 금액을 입력해주세요.\n출금 금액> ");
int outMoney = sc.nextInt();
if(outMoney > balance[loginIndex]) {
System.out.println("잔액이 부족합니다.");
}else {
balance[loginIndex] -= outMoney;
System.out.println("성공적으로 출금이 완료되었습니다.");
System.out.printf("출금 금액: %,d원\n출금 후 잔액: %,d원",
outMoney,balance[loginIndex]);
}
System.out.println();
- 로그인 되어있는 아이디의 계좌에서 돈을 출금한다.
- 만약 출금액이 잔액보다 크면, 잔액이 부족하다는 안내를 출력한다.
- 그렇지 않고 잔액이 출금액보다 크면, 출금 금액과 출금 후 잔액을 출력한다
// 계좌이체 /이체 할 계좌 및 금액 받아서 계좌이체(잔액부족 확인)
System.out.println("\t계좌이체==============");
System.out.print("이체하려는 계좌번호를 입력해주세요\n이체할 계좌번호> ");
String inOutAcc = sc.next();
boolean find = false;
for(int i=0; i<cnt; i++) {
if(inOutAcc.equals(account[i])) {
System.out.print(" > 계좌번호가 확인되었습니다.\n이체할 금액을 입력해주세요."
+ "\n이체할 금액> ");
int inOutB = sc.nextInt();
balance[loginIndex] -= inOutB;
if(balance[loginIndex] >= inOutB) {
balance[i] += inOutB;
System.out.println("성공적으로 계좌이체가 완료되었습니다.");
System.out.printf("이체 금액: %,d원\n이체 후 잔액: %,d원",
inOutB,balance[loginIndex]);
System.out.println();
}else {
System.out.println("잔액이 부족합니다.");
}
find = true;
break;
}
}
if(!find) {
System.out.println("존재하지 않는 계좌번호입니다.");
}
- loginIndex가 -1이 아닐때: 계좌이체
- 계좌번호를 확인하고, 계좌번호가 확인되면 이체금을 입력받는다.
- 만약 잔액이 이체금보다 크면, 이체 금액과 이체 후 잔액을 출력한다.
- 그렇지 않고 이체금이 잔액보다 크다면, 잔액이 부족하다는 안내를 출력한다.
- 만약 for문을 나왔는데 find가 true가 아니라면 존재하지 않는 계좌번호라는 문구를 출력한다.
break;
- while문을 종료한다.
질문한 내용이나 어려웠던 점 메모
1. 메뉴 5번 선택 시 (계좌이체)
- 혼자 힘으로 해결하긴 했으나 자꾸 boolean을 이용해서 코드를 짜는 것보다 else 혹은 else if를 써서 먼저 짜게 되는 것 같다. 처음에 제출할 때 else로 계좌번호가 존재하지 않는다 를 출력해서 두번째 회원가입한 사람이 첫번째 회원가입한 사람한테 계좌이체를 할 때는 괜찮은데 반대로 하려니까 너무 슬프게도 계좌가 존재하지 않는대서 그제서야 for문 밖에 !find를 추가해주었다.
전체 피드백
- 오늘은 수업에 전혀 집중하지 못했다. 속이 별로이기도 했는데, 졸리기도 해서 많이 멍때리면서 들었다. 그래도 오늘은 다행히 새로운걸 배우기 보다는 7일차에 게임 만들던 것을 계속 만들어보라고 하셔서 다른 사람들 만드는거 조금 도와주고 다녔다.
- 이 예제를 하면서 !find는 이해한 것 같아서 다행이다!
- 오늘 일지가 짧으니 남은 시간은 어제 완성한 게임 조금 더 손봐야겠다!