[TIL]키오스크 만들기(2025-03-12)

2025. 3. 12. 19:40·TIL

https://computerreport.tistory.com/59

 

[TIL]키오스크 만들기(2025-03-10)

오늘 TIL 은 개인으로 만든 키오스크 구현을 정리할려고 한다.필수 기능까지 구현하였고 추후에 장바구니 기능,Enum 활용 등 추가 예정이다.  📃 필수 요구사항✅ 기능 설명메인 메뉴판 화면: 사

computerreport.tistory.com

 

에 이어  오늘은 장바구니 기능을 추가하였다.

 

📃 추가 기능 사항

✅ 기능 설명

  1. 구매 화면: 사용자가 메뉴를 선택하면 장바구니에 추가할지 확인하는 메시지가 표시된다. 추가할 경우 장바구니에 추가된다.
  2. 주문 화면:장바구니의 내용과 총 가격이 출력된다.. 사용자가 주문할 경우 주문이 완료되고 대기번호가 발급

 

✅ 클래스 설명

Cart 클래스

역할: 사용자와의 상호작용을 통해 장바구니에 추가된 품목을 관리하고, 주문 정보를 제공합니다.
책임:

  1. 장바구니 품목 추가: 사용자가 선택한 메뉴 품목을 장바구니에 추가합니다.
  2. 총 금액 계산: 장바구니에 담긴 모든 품목의 가격을 합산하여 총 금액을 계산합니다.
  3. 장바구니 품목 보기: 사용자가 장바구니에 담긴 품목을 확인할 수 있도록 출력합니다.
  4. 장바구니 리스트 제공: 장바구니에 담긴 품목 리스트를 반환합니다.

 


Cart 클래스

카테고리에서 선택되는 MenuItem 을 불러와 저장하기 위해 cartList를 만들고 총 금액 출력, 장바구니 품목, 장바구니 비우기 기능 메소드를 만들었다.

 

Cart() : car 생성자

addCartList(MenuItem menu) : 장바구니 품목 추가

getTotalPrice() : 총 금액 출력

viewCart() : 장바구니 품복 보기

getCartList() : 장바구니가 비었는지 확인하기 위해 가져오는 메소드

clearCart(): 장바구니 비우기

 

import java.util.ArrayList;
import java.util.List;

public class Cart {
    public List<MenuItem> cartList;
    double totalPrice;

    //Cart 생성자
    public Cart() {
        cartList = new ArrayList<>();
    }

    //장바구니 품목 추가
    public void addCartList(MenuItem menu) {
        cartList.add(menu);
    }

    //총 금액 출력
    public double getTotalPrice() {
        for (MenuItem m : cartList) {
            totalPrice = m.getPrice();
        }
        return totalPrice;
    }

    //장바구니 품목 보기
    public void viewCart() {
        System.out.println("아래와 같이 주문 하시겠습니까?");
        System.out.println("[ Orders ]");
        for (MenuItem m : cartList) {
            System.out.println(m.getName() + " | ₩ " + m.getPrice() + " | " + m.getContent());
        }
        System.out.println("1.주문    2.메뉴판");
    }

    //장바구니 리스트 출력
    public List<MenuItem> getCartList() {
        return cartList;
    }

    //장바구니 비우기
    public void clearCart(){
        cartList.clear();
    }

}

 

Kiosk 클래스

Cart 클래스를 가져오고 메소드를 사용하기 위해 Kiosk 클래스에 코드를 추가하였다.

 

 

CartList가 데이터가 있다면 카테고리에 "Orders" 와 "Cancel:이 생성 되고 비어있다면 삭제하는 코드 추가 

if (!cart.getCartList().isEmpty()) {
                System.out.println("[ ORDER MENU ]");
                if (orderMenu.isEmpty()) {
                    addOrderMenu(new Menu("Orders"));
                    addOrderMenu(new Menu("Cancel"));
                }
            } else {
                orderMenu.clear();
            }

 

이전 글에는 orderMenu가 없었는데 어떻게 생겨났는지 궁금한 이가 있을것이다.

 

원래 키오스 mainMenu 안에 모든 카테고리가 들어갔었는데 요구사항이 있었다.

 

// 장바구니에 물건이 들어 있으면 아래와 같이 [ ORDER MENU ] 가 추가로 출력됩니다.

// 만약에 장바구니에 물건이 들어 있지 않다면 [ ORDER MENU ] 가 출력되지 않습니다.

// 미출력일 때 4,5 번을 누르면 예외를 던저줘야 합니다.

 

그래서 orderMenu 리스트 부분을 따로 만들었고 위의 코드처럼 장바구니 리스트에 품목이 있을때만 노출되도록 설정하였다.

private final List<Menu> mainMenu;
private final List<Menu> orderMenu;

 

 

 

상품 담기 및 장바구니 출력 코드 추가

if (itemChoice > 0 && itemChoice <= choiceMenu.getMenuItemList().size()) {
                    MenuItem choseItem = choiceMenu.getMenuItemList().get(itemChoice - 1);
                    System.out.println("선택한 메뉴:" + choseItem.getName() + " | ₩ " + choseItem.getPrice() + " | " + choseItem.getContent());
                    System.out.println("위 메뉴를 장바구니에 추가하시겠습니까?");
                    System.out.println("1.확인      2취소");
                    cartChoice = sc.nextInt();
                    if (cartChoice == 1) {
                        cart.addCartList(choseItem);
                        System.out.println(choseItem.getName() + " 이 장바구니에 추가되었습니다.");
                    } else {
                        continue;
                    }
                } else if (itemChoice == 0) {
                    continue;
                }
            } else if (categoryChoice > mainMenu.size() && categoryChoice <= orderMenu.size() + mainMenu.size()) {
                cart.viewCart();
                orderChoice = sc.nextInt();

                if (orderChoice == 1) {
                    System.out.println("주문 되었습니다. 금액은 ₩" + cart.getTotalPrice() + " 입니다");
                    cart.clearCart();
                } else if (orderChoice == 2) {
                    continue;
                }
            }

 

 

✒️ 회고

- 리스트를 두개를 만들어서 상황별 카테고리 출력을 하는 것이 맞는건지 찝찝하긴 하다.

이런식으로 코드를 짰기 때문에 입력한 index 와 매치 하는 것에 어려움이 있었다.

 

이 코드는 카테고리를 보여주는 코드인데 이렇게 코드를 보면 가독성이 굉장히 떨어져 보인다 

for (Menu m : orderMenu) {
        System.out.println((orderMenu.indexOf(m) + mainMenu.size() + 1) + ". " + m.getCategoryName());
 }

 

어떻게 해결 할 수 있을지 튜터님에게 피드백을 받아봐야겠다.

 

'TIL' 카테고리의 다른 글

[TIL]2025-03-19  (0) 2025.03.19
[TIL]키오스크 만들기(2025-03-14)  (0) 2025.03.14
[TIL]키오스크 만들기(2025-03-10)  (0) 2025.03.10
[TIL]Lv3 계산기 만들기(2025-02-28)  (0) 2025.02.28
[TIL]Lv2 계산기 만들기(2025-02-26)  (0) 2025.02.26
'TIL' 카테고리의 다른 글
  • [TIL]2025-03-19
  • [TIL]키오스크 만들기(2025-03-14)
  • [TIL]키오스크 만들기(2025-03-10)
  • [TIL]Lv3 계산기 만들기(2025-02-28)
코딩로봇
코딩로봇
금융 IT 개발자
  • 코딩로봇
    쟈니의 일지
    코딩로봇
  • 전체
    오늘
    어제
    • 분류 전체보기 (146) N
      • JavaScript (8)
      • SQL (11)
      • 코딩테스트 (30)
        • Java (15)
        • SQL (13)
      • Java (10)
      • 프로젝트 (27) N
        • 트러블슈팅 (9)
        • 프로젝트 회고 (16) N
      • git,Github (2)
      • TIL (38)
      • Spring (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java #arraylist #list #배열
    스파르타 코딩 #부트캠프 #첫ot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩로봇
[TIL]키오스크 만들기(2025-03-12)
상단으로

티스토리툴바