Scanner 클래스 카페 만들기 실습 - (2)
<카페만들기>
음료의 종류
1. 아메리카노(3000) 2. 카페라테(3500) 3. 카페 모카(4000) 4. 과일주스(5000)
입력값 : 메뉴 번호, 주문 수량, 지불금액(고객이 지불한 금액)
출력값 : 지불금액, 판매금액(단가 * 수량), 잔액(지불금액 - 판매금액)
<메뉴>
while() {
1. 아메리카노(3000) 2. 카페라테(3500) 3. 카페 모카(4000) 4. 과일주스(5000)
메뉴를 선택하세요. (1~4 번까지) :
주문 수량 : 3
>지불금액 : 1000
============================
지불금액 : 10000
판매금액 : 9000
잔액 : 1000
private void menu() {
while (true) {
System.out.print("메뉴를 골라주세요.");
System.out.println("1. 아메리카노(3000) 2. 카페라테(3500) 3. 카페 모카(4000) 4. 과일주스(5000) 0. 종료");
System.out.print(">>");
int userChoice = scan.nextInt();
if (userChoice == 1) {
cntCount();
totMoney = ea * AMERICANO;
count();
income += totMoney;
} else if (userChoice == 2) {
cntCount();
totMoney = ea * CAFFELATTE;
count();
income += totMoney;
} else if (userChoice == 3) {
cntCount();
totMoney = ea * CAFFEMOCHA;
count();
income += totMoney;
} else if (userChoice == 4) {
cntCount();
totMoney = ea * JUICE;
count();
income += totMoney;
} else if (userChoice == 0) {
System.out.println("운영이 끝났습니다. ");
}
}
}
private int cntCount() {
System.out.println("수량을 입력하세요.");
ea = scan.nextInt();
return ea;
}
private int count() {
System.out.println("총 지불금액은 " + totMoney + "입니다.");
System.out.println("지불할 금액을 입력하세요.");
inMoney = scan.nextInt();
if (inMoney >= totMoney) {
change = inMoney - totMoney;
} else {
while (inMoney < totMoney) {
int m = totMoney - inMoney;
System.out.println("금액이 부족합니다 " + m + "원을 추가해주세요");
System.out.print(">> ");
inMoney += scan.nextInt();
}
}
System.out.println("잔돈은 " + change + " 입니다");
return change;
}
위는 내가 예제를 풀면서 만든 코드고, 아래의 강사님과 같이 푼 코드이다. 아래의 코드에는 메소드 안에 코드가 촘촘히 들어가 있는 것과 비교가 된다. 특히 computeMoney () 메소드를 넣어서 판매액 계산을 하면서 사용자가 입력한 메뉴를 다시 한 번 보여주고 수령까지 확인을 시킨 부분에서 사용자를 배려하는 코드로 읽어졌다. 코드가 중복되지 않고 간결하게 사용하는 것도 중요하지만 사용자에 맞게 코드를 짜는 것도 중요하다는 생각이 들었다.
이 예제를 실습하면서 카페 메뉴 출력을 한번만 시키고 끝내도록 이프문을 짰는데 강사님이 이러면 이 카페는 한번만 팔고 적자라는 이야기를 하셔서 조금 웃겼다. 카페 메뉴 출력은 사용자가 원할 때까지 나오도록 해야 카페(장사)라는 특성에 맞다.