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를 사용할 수 있도록 변경하여 보겠다.