티스토리 뷰

프로그래밍/Java

숙제 - 자판기

황금비비새 2013. 7. 8. 14:49
# Drink.java
package am;

public class Drink {
    String name;
    int price;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}
# VendingMashine.java
package am;

import java.util.Scanner;

public class VendingMashine {
    Drink[] dk = new Drink[4];
    int coin;
    Scanner scan = new Scanner(System.in);
    StringBuffer sb = new StringBuffer();
    
    VendingMashine(){
        for (int i = 0; i < dk.length; i++) {
            dk[i] = new Drink();
        }
        
        // 음료수 셋팅
        dk[0].name = "콜라";
        dk[0].price = 900;
        dk[1].name = "사이다";
        dk[1].price = 800;
        dk[2].name = "커피";
        dk[2].price = 700;
        dk[3].name = "식혜";
        dk[3].price = 650;
    }
    
    public void insertCoin(){
        System.out.print("InsertCoin: ");
        coin += scan.nextInt();
        scan.reset();
    }
    
    public void outputMenu(){
        sb.append("[0.InsertCoin]");
        for (int i = 0; i < dk.length; i++) {
            sb.append("[").append(i+1).append(".").append(dk[i].name).append("(").append(dk[i].price).append(")]");
        }
        sb.append("[9.Refund]");
        System.out.println(sb.toString());
        sb.delete(0, sb.length());
        System.out.printf("[잔액:%d] 선택: ", coin);
    }
    
    public void choiceMenu(){
        boolean repeat = false;
        int change = 0;
        do{
            outputMenu();
            int menu = scan.nextInt();
            scan.reset();
            
            if( !(menu == 9 || menu >=0 && menu <= dk.length) ){    // 정상적인 값이 아닐때
                System.out.println("다시 입력해 주세요");
                continue;
            }
            
            switch(menu){
                case 0:
                    insertCoin();
                    repeat = true;
                    break;
                case 9:
                    // 반환
                    outputRefund();
                    repeat = false;
                    break;
                default:
                    // 돈이 모자랄 경우, 다른 음료수를 뽑을 수 있을 경우, 바로 반환되어야 하는경우
                    change = coin - dk[menu-1].price; // 돈-음료수가격
                    if(change < 0){ // 돈이 모자랄 경우
                        System.out.printf("%d원 모자랍니다\n",change);
                        repeat = true;
                    }else if(change >= retMinPrice()){
                        coin = change;
                        System.out.printf("%s가 나왔습니다.\n", dk[menu-1].name);
                        repeat = true;
                    }else{
                        coin = change;
                        System.out.printf("%s가 나왔습니다.\n", dk[menu-1].name);
                        outputRefund();
                        repeat = false;
                    }
                    
            }
            
        
        }while(repeat);
        
    }
    // 잔돈 출력
    public void outputRefund(){
        System.out.printf("잔돈: %d원\n", coin);
    }
    // 돈이 모자라는지 검증
    public boolean coinVerify(int menu){    // 안모자르면 true , 모자르면 false
        return coin - dk[menu-1].price >= 0 ? true:false;
    }
    // 다른 음료수를 뽑을 수 있는지 --> coin - minprice > 0
    public int retMinPrice(){
        int min = dk[0].price;
        for (int i = 1; i < dk.length; i++) {
            if(min > dk[i].price) min = dk[i].price;
        }
        return min;
    }
    
    public static void main(String[] args) {
        VendingMashine vm = new VendingMashine();
        // 동전 삽입
        vm.insertCoin();
        vm.choiceMenu();
        // 메뉴 선택
    }
    
}

'프로그래밍 > Java' 카테고리의 다른 글

자바(java) - 생성자  (0) 2013.07.09
자바(java) - 메서드 오버로딩(Overloading)  (0) 2013.07.08
자바(java) - 인자 전달 방식  (0) 2013.07.08
자바(java) - 클래스  (0) 2013.07.04
자바 공부 순서  (0) 2013.07.03
댓글