2023-06-01 TIL (Java : 키오스크 만들기, 프로그래머스 문풀)
오늘의 TIL은 내배캠 개인과제 키오스크 만들기를 정리하고자 한다.
아직 추가 요구사항은 구현하지는 못했지만 추후에 계속 추가해서 업데이트 할 예정이다.
전체 코드는 다음을 확인 !
https://github.com/hakjunjoo/kiosk
GitHub - hakjunjoo/kiosk: java kiosk program
java kiosk program. Contribute to hakjunjoo/kiosk development by creating an account on GitHub.
github.com
필수 구성 사항
1. 메인 메뉴판 화면
- 메인 메뉴판이 출력되며 메뉴판에는 상품 메뉴가 출력된다.
- 상품 메뉴는 간단한 설명과 함께 출력되며 최소 3개 이상 출력된다.
- 상품 메뉴 아래에는 Order(주문)와 Cancel(주문취소) 옵션을 출력한다.
2. 상품 메뉴판 화면
- 상품 메뉴 선택시 해당 카테고리의 메뉴판이 출력된다.
- 메뉴판에는 각 메뉴의 이름과 가격이 간단한 설명이 표시된다.
3. 구매 화면
- 상품 선택시 해당 상품을 장바구니에 추가할지 확인하는 문구가 출력됩니다.
- 숫자 입력시 장바구니에 추가되었다는 안내문구와 함께 메인메뉴가 다시 출력된다.
4. 주문 화면
- Order 입력시 장바구니 목록을 출력해준다.
- 장바구니에서는 추가된 메뉴들과 총 가격의 합을 출력해준다.
- 주문 입력시 주문완료 화면으로 넘어가고, 메뉴판 입력시 다시 메인메뉴로 돌아온다.
5. 주문완료 화면
- 주문 입력시 대기번호를 발급한다.
- 장바구니는 초기화되고 3초 후에 메인 메뉴판으로 돌아간다.
6. 주문취소 화면
- 메뉴판에서 Cancel입력시 주문을 취소할지 확인을 요청하는 문구가 출력된다.
- 확인을 입력하면 장바구니는 초기화되고 취소 완료 문구와 함께 메뉴판이 출력된다.
구성 내용
Menu 클래스와 Product 클래스
Menu클래스는 메뉴의 이름과 설명을 필드로 가지는 클래스이고,
Product클래스는 Menu클래스를 상속 받으며 가격 필드까지 가지는 클래스이다.
private로 필드를 지정해주고 getter & setter를 구성하면 클래스를 구성할 수 있다.
메인 메뉴판 화면, 상품 메뉴판 화면
우선, 메인 메뉴판의 데이터와 상품 메뉴판의 데이터를 배열에 담아줬다.
그 후에 메인 메뉴판을 for문을 이용하여 출력할 수 있도록 구성했다.
// 메인 메뉴판 화면 출력
public static void mainMeun() {
int i = 0;
System.out.println("\"SHAKESHACK BURGER 에 오신걸 환영합니다.\"");
System.out.println("아래 메뉴판을 보시고 메뉴를 골라 번호를 입력해주세요.");
System.out.println("\n[ SHAKESHAKCK MENU ]");
for (Menu m : menuArr) {
i++;
System.out.println(i + ". " + m.getName() + "| " + m.getExplanation());
}
System.out.println("\n[ ORDER MENU ]");
for (Menu o : orderArr) {
i++;
System.out.println((i)+". " + o.getName() + "| " + o.getExplanation());
}
System.out.print("\n여기에 번호를 입력하세요 => ");
}
상품 메뉴판 화면은 switch문을 사용하여 입력받은 숫자와 같은 case를 출력하는 방식으로 구현하였다.
public static void coiceMeun(int n) throws InterruptedException {
int i=0;
switch (n) {
case 1 : {
System.out.println("[ Burgers Menu ]");
for (Product b : burgerArr) {
i++;
System.out.println(i + ". " + b.getName() + "| W "+b.getPrice() + " | " + b.getExplanation());
}
System.out.print("\n여기에 번호를 입력하세요 => ");
break;
}
...
구매 화면
구매 화면도 입력받은 정수를 비교하여 출력할 수 있도록 구현하였다.
// 구매 화면
public static void wishList(int n, int m) {
System.out.println("\"" + products[n-1][m-1].getName() + "| W "+products[n-1][m-1].getPrice() + " | " + products[n-1][m-1].getExplanation() + "\"");
System.out.println("위 메뉴를 장바구니에 추가하시겠습니까?");
System.out.println("1. 확인 2. 취소");
System.out.print("\n여기에 번호를 입력하세요 => ");
}
주문 화면 및 취소화면
주문 화면은 위의 상품 메뉴판의 case문에서 5를 입력할 때 출력되도록 했다.
취소 화면도 case문에서 6을 입력했을 때 출력되도록 했다.
case 5 : { // order
double total = 0.0;
System.out.println("아래와 같이 주문하시겠습니까?\n");
System.out.println("[ Orders ]");
for (int j = 0; j < Order.wish.size(); j++) {
System.out.println(Order.wish.get(j).getName() + "| W "+ Order.wish.get(j).getPrice() + " | " + Order.wish.get(j).getExplanation());
}
for (int j = 0; j < Order.wish.size(); j++) {
total += Order.wish.get(j).getPrice();
}
System.out.println("\n[ Total ]");
System.out.println("W " + total);
System.out.println("\n1. 주문 2. 메뉴판");
System.out.print("\n여기에 번호를 입력하세요 => ");
break;
}
case 6 : { // cancel
System.out.println("\n진행하던 주문을 취소하시겠습니까?");
System.out.println("1. 확인 2. 취소 ");
System.out.print("\n여기에 번호를 입력하세요 => ");
break;
}
메인클래스
메인 클래스는 주어진 조건들이 수행될 수 있도록 if문과 while문을 사용하였다.
package kiosk;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
// 메뉴 초기화
Kiosk.allMenu();
//1. 메인 메뉴판 화면 출력
Kiosk.mainMeun();
int n = sc.nextInt();
// 2. 상품 메뉴판 화면 출력
try {
if (n == 5) {
if (Order.wish.size() == 0) { //장바구니가 비어있는 경우 처리
Kiosk.emptiedWish();
continue;
} else {
Kiosk.coiceMeun(n);
Kiosk.orderComplete();
continue;
}
} else if (n == 6) { // 주문 취소
Kiosk.coiceMeun(n);
int c = sc.nextInt();
if(c==1) {
Order.wish.clear();
System.out.println("진행하던 주문이 취소되었습니다.\n");
continue;
} else {
continue;
}
} else{
Kiosk.coiceMeun(n); // 상품 메뉴판 출력
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 3. 장바구니
int m = sc.nextInt();
Kiosk.wishList(n, m);
int k = sc.nextInt();
Kiosk.putInBasket(n, m, k); // 장바구니에 담는 메소드
}
}
}
느낀점
Java 개념을 배울때 까지만 하더라도 잘 이해하고 따라가고 있다고 생각하고 있었다. 그런데 내가 실제로 구성해야하는 상황이 오니까 너무너무 어렵고 많이 부족하다는 생각을 하게 되었다.
특히, 객체지향의 내용을 실제로 사용하니 정말 어려웠던 것 같다. 더 공부해야겠다고 생각했다.
이번에 작성한 코드는 정말 '구현만 돼라'라는 마음으로 작성한 것이라 좋은 코드인지 아닌지는 내가 아직 부족해서 파악을 할 수는 없지만.. (아마 수정할 것들이 엄청 많을 것 같다.) 앞으로 더 많은 것들을 배워나가면서 계속해서 수정하고 발전하면 될 것이라 생각한다.
그리고 계속해서 추가 요구사항도 구현해보자!!
그래도 구현에 성공했으니.. 일단 칭찬..