카테고리 없음
자판기
JOY_1102
2021. 1. 27. 20:43
/*
* 크리스마스 선물 및 신년 선물 자판기
*
* 1) ==== 메뉴구성 ========= (개별 변수)
* - 노트북, 10000 , 5개
* - 핸드폰, 5000 , 10개
* - 꽃다발, 1000 , 20개
* ===== 현재 입금 금액 : 0원
* 2) 입금시키는 기능
*
* 3) (숫자를 기준으로 ) 선택 번호 : 1=> 노트북, 2=> 핸드폰, 3=> 꽃다발, 99=> 종료*
*
*/
package kr.co.dong.check;
import java.util.Scanner;
public class VendingMachine04 {
static Scanner scan = new Scanner(System.in);
static int laptopAmount = 5, phoneAmount = 10, flowerAmount = 20;
public static void main(String[] args) {
//변수 선언
int laptop = 10000, phone = 5000, flower = 1000;
boolean done = false;
int sel = 0, num1 = 0, num2 = 0, sum = 0;
int n = 0;
//반복되는 메뉴 만들기 -> sel = printMenu() 메소드 만들어주기
while(!done) {
printMenu();
if (laptopAmount == 0 && phoneAmount == 0 && flowerAmount == 0) { //모든 상품수량이 0이라면 이렇게 실행시키세요.
System.out.println("모든 재고가 소진되었습니다.");
break;
}
num1 = inputMoney(); //메소드를 통해 돈 투입
System.out.println("==== 현재 입금 금액 : "+num1);
sel = select();
switch(sel) {
case 1 :
//품절확인하는 메소드-(품절인지 먼저 확인 후 계산 처리->품절이면 안 된다고 하고 메뉴로 다시 이동)
n = soldOut(laptopAmount);
if (n == 1) {
System.out.println("노트북");
num2 = checkAmount(laptopAmount);//수량 확인 후 num2 -> 내가 입력한 수량
sum = laptop * num2;//가격*수량 다음 총 계산액
isPrice(num1, sum);//계산액과 현재 잔액 비교
laptopAmount -= num2;//기본값에서 내가 입력한 수량 빼주기
}
else {
System.out.println("품절된 상품이므로 돈을 반환 후 초기 화면으로 이동합니다.");
System.out.println("==== 반환 금액 : " + num1);
}
break;
case 2 :
n = soldOut(phoneAmount);
if (n == 1) {
System.out.println("핸드폰");
num2 = checkAmount(phoneAmount);//num2 run <- after check
sum = phone * num2;
isPrice(num1, sum);
phoneAmount -= num2;
}
else {
System.out.println("품절된 상품이므로 돈을 반환 후 초기 화면으로 이동합니다.");
System.out.println("==== 반환 금액 : " + num1);
}
break;
case 3 :
n = soldOut(flowerAmount);
if (n == 1) {
System.out.println("꽃다발");
num2 = checkAmount(flowerAmount);
sum = flower * num2;
isPrice(num1, sum);
flowerAmount -= num2;
}
else {
System.out.println("품절된 상품이므로 돈을 반환 후 초기 화면으로 이동합니다.");
System.out.println("==== 반환 금액 : " + num1);
}
break;
case 99 :
done = true;
System.out.println(num1 + "원을 반환합니다.");
System.out.println("작동을 종료합니다.");
break;
}//end of switch
}//end of while
}//end of main
private static int soldOut(int tmp) {//각각의 수량 별로 재고가 0인지 아닌지
boolean soldout = false; // 품절이 아닙니다.
int n = 0; // ->품절이 아니라면 1번으로 리턴시켜주세요.
// 수량이 0이 됐을 때 품절이므로 초기화면으로 전환
while (!soldout) { // 품절이라면 계속 실행하세요
if (tmp != 0) {// 각각의 수량들이 0이 아니라면
soldout = true;
n = 1;
}
else {
soldout = false;
break;
}
}
return n;
}
private static int checkAmount(int tmp) {
int num2 = 0;
boolean done = false;
do {
System.out.println("상품의 수량을 입력하세요 : ");
num2 = Integer.parseInt(isNumber());
if (num2>tmp) {
System.out.println("상품은 총 " + tmp + "개 있습니다.");
// if(tmp==0) {
// System.out.println("품절된 상품이므로 상품 선택 칸으로 이동합니다.");
// num2 = 999;
// select();
// }
done = false;
}
else if (num2==0) {
System.out.println("수량 0개는 선택할 수 없습니다.");
done = false;
}
else {
done = true;
}
}while(!done);
return num2;
}
private static void isPrice(int num1,int sum) {
int result = 0;
int total = 0;
boolean less = false; //입금한 돈이 더 적을 때 -> 금액을 더 투입 -> num1>=tmp가 될 때 까지
do {
//1.입금한 돈이 알맞은 때
if (sum == num1) {
System.out.println("물품이 나왔습니다.");
break;
}
//2.입금한 돈이 더 많을 때
else if(num1>sum) {
System.out.println("물품이 나왔습니다.");
result = num1 - sum;
System.out.println("거스름돈 : " + result + "원 입니다.");
break;
}
//3.입금한 돈이 더 적을 때
else {
less = false;
System.out.println("=====현재 잔액 : "+num1);
System.out.println("총 계산액 : " + sum);
total = sum - num1;
System.out.println("부족 잔액 : " + total);
System.out.println("금액을 더 투입해주세요.");
num1 += inputMoney();
}
}while(!less);
}
private static int select() {
String str = null;
int n = 0;
boolean done = false; //메뉴의 숫자가 보기의 숫자가 아닐 때
//선택 번호 창
//int sel 먼저 설정해서 만들고 isNumber 메소드 만들어서 숫자인지 확인
while (!done) {
System.out.println("1.노트북 2.핸드폰 3.꽃다발 99.종료");
System.out.println("원하는 상품의 숫자를 선택해주세요 : ");
str = isNumber();
n = Integer.parseInt(str);
if (n != 1 && n != 2 && n != 3 && n != 99) {
done = false;
System.out.println("메뉴의 숫자를 입력해주세요.");
} else {
done = true;
}
}
return n;
}
private static int inputMoney() {
int num1 = 0;
boolean zero = false;
while(!zero) {
System.out.println("금액을 투입하세요 : ");
num1 = Integer.parseInt(isNumber());
if(num1 == 0) {
System.out.println("0원은 입력할 수 없습니다.");
}
else {
zero = true;
}
}
return num1;//숫자인 돈을 num1에 반환한다.
}
private static void printMenu() {
System.out.println("========= 메뉴구성 ========");
System.out.println("= 노트북 : 10000원 수량 : " + laptopAmount);
System.out.println("= 핸드폰 : 5000원 수량 : " + phoneAmount);
System.out.println("= 에어팟 : 1000원 수량 : " + flowerAmount);
System.out.println("======== 현재 입금 금액 : 0원");
}
private static String isNumber() {
String str = null;
char ch = 'X';
boolean isNumber = false;
while(!isNumber) {
str = scan.next();
for(int i=0;i<str.length();i++) {
ch = str.charAt(i);
if(ch>='0'&&ch<='9') {
isNumber = true;
}
else {
isNumber = false;
System.out.println("숫자를 다시 입력하세요.");
break;
}
}
}//end of while
return str;
}
}
콘솔로 자판기 실행하기
메소드 배우고 나서 배운 것을 최대한 써먹으려고 해서 굳이 그렇게 하지 않아도 되는 부분이 많을 것 같다.
중간에 주석 처리 된 코드는 품절된 상품을 구입하려고 하면 제어하고 싶었는데 해답이 나오지 않아 선생님께서 조언을 해주셨던 부분이다.
-피드백대환영-