Language/JAVA

[JAVA] 미니프로젝트 - 자판기 프로그램(2)

원씨 2023. 4. 9. 21:49

이전에 했던 자판기 프로그램을 조금 발전시켜 배열을 사용하였다. 배열을 사용하면서 각 음료에 대한 재고를 최초 저장해놓고 사용자가 상품을 구매하면 재고가 줄어들며 재고가 없을 시 판매되지 않도록 문구를 출력하는 프로그램이다.

 

public class Product {
    public String p_name = new String();
    public int p_price;
    public int p_stock;

    public Product() {
    }
    public Product(String name, int price, int stock) {
        p_name = name;
        p_price = price;
        p_stock = stock;
    }
}

프로그램 변수 선언 전 상품이라는 클래스를 하나 생성해줘서 객체 배열을 선언할 수 있도록 하였다.

 

이제 main 메소드를 보자.

int money = 0;

Product p[] = new Product[4];

p[0] = new Product("콜라", 1200, 3);
p[1] = new Product("사이다", 1200, 3);
p[2] = new Product("환타", 1100, 2);
p[3] = new Product("밀키스", 1100, 2);

이전 프로그램에서는 그저 출력문을 통해 각각의 상품과 가격을 보여주고 입력받는 식이었다면 이번에는 하나의 객체를 생성해주어 해당 객체를 배열로 선언하였다.

 

그 후엔 이전 프로그램과 같이 무한루프문을 이용하여 주었다.

while(true) {
       System.out.println("--------------------------------------------------------");
       System.out.println("자판기입니다. 돈을 넣고 원하시는 품목을 번호를 입력하십시오.");
       
       for(int i = 0; i < p.length; i++) {
              System.out.println( (i+1) + ". " + p[i].p_name + "(" + p[i].p_price + "원) 재고:" + p[i].p_stock);
       }
       
       System.out.println("금액 투입은 +, 거스름을 받으시려면 -를 입력하세요. 현재잔액 " + money + "원");
       System.out.println("--------------------------------------------------------");
       System.out.print("원하시는 작업을 입력하세요 >> ");

       Scanner in = new Scanner(System.in);
       String req = in.nextLine();

대신 하나하나의 상품을 출력하는 것이 아닌 반복문을 통해 상품을 출력해주었다.

        if(req.equals("+")) {
                System.out.print("얼마를 투입하시겠습니까? >> ");

                int put_money = in.nextInt();
                money += put_money;
                System.out.print("\n\n");
        }
        else if(req.equals("-")) {
                System.out.println(money + "원이 거슬러집니다. 이용해주셔서 감사합니다.");
                break;
        }

상품을 출력한 후 금액 투입, 거스름 받기 기능은 동일하다.

        else if((Integer.parseInt(req) > 0) && (Integer.parseInt(req) < (p.length + 1))) {
                if (money > p[Integer.parseInt(req) - 1].p_price) {
                        if(p[Integer.parseInt(req) - 1].p_stock >= 1) {
                                System.out.println(p[Integer.parseInt(req) - 1].p_name + "가 나옵니다. 상품을 수령해주세요.\n\n");
                                money -= p[Integer.parseInt(req) - 1].p_price;
                                p[Integer.parseInt(req) - 1].p_stock -= 1;
                        }
                else {
                        System.out.println("해당 제품은 재고가 부족합니다.");
                        continue;
                }
        }
        else {
                System.out.println("잔액이 부족합니다. 돈을 더 투입하십시오.\n\n");
                continue;
        }
}
else {
        System.out.println("잘못된 번호를 입력하셨습니다. 다시 입력하세요.");
}

사용자로부터 입력받은 번호(상품 번호)가 제대로 된 번호(객체배열 내의 개수)라면 투입된 금액과 상품 가격 및 재고 유무를 비교 후 상품 출력 메세지를 출력한다. 재고 부족, 잔액 부족, 번호 오입력 등은 각각의 메세지를 출력한다.

 

여기서 굳이 사용자 입력을 nextLine으로 받은 후 parseInt()를 쓴 이유는 +, - 가 기입될 수도 있기 때문에,,, 그랬다. 사실 조금 복잡하게 반복문을 구성한 느낌도 있지만, 어쨌든 성공,,,?!

 

다음에는 좀 더 수정하여 DB를 사용할 수 있도록 변경하여 보겠다.