https://computerreport.tistory.com/59
[TIL]키오스크 만들기(2025-03-10)
오늘 TIL 은 개인으로 만든 키오스크 구현을 정리할려고 한다.필수 기능까지 구현하였고 추후에 장바구니 기능,Enum 활용 등 추가 예정이다. 📃 필수 요구사항✅ 기능 설명메인 메뉴판 화면: 사
computerreport.tistory.com
에 이어 오늘은 장바구니 기능을 추가하였다.
📃 추가 기능 사항
✅ 기능 설명
- 구매 화면: 사용자가 메뉴를 선택하면 장바구니에 추가할지 확인하는 메시지가 표시된다. 추가할 경우 장바구니에 추가된다.
- 주문 화면:장바구니의 내용과 총 가격이 출력된다.. 사용자가 주문할 경우 주문이 완료되고 대기번호가 발급
✅ 클래스 설명
Cart 클래스
역할: 사용자와의 상호작용을 통해 장바구니에 추가된 품목을 관리하고, 주문 정보를 제공합니다.
책임:
- 장바구니 품목 추가: 사용자가 선택한 메뉴 품목을 장바구니에 추가합니다.
- 총 금액 계산: 장바구니에 담긴 모든 품목의 가격을 합산하여 총 금액을 계산합니다.
- 장바구니 품목 보기: 사용자가 장바구니에 담긴 품목을 확인할 수 있도록 출력합니다.
- 장바구니 리스트 제공: 장바구니에 담긴 품목 리스트를 반환합니다.
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 |