키오스크_LV6_ing

지혜·2025년 1월 15일

키오스크_LV6_ing

💡 https://github.com/cjh0412/Kiosk

완료된 요구사항

  • MenuItem 클래스 생성하기 : 햄버거 메뉴를 관리
    - 이름, 가격, 설명 필드 생성
  • MenuItem 객체 생성을 통해 이름, 가격, 설명을 세팅
    - List를 선언하여 여러 MenuItem을 추가
    - 반복문을 활용해 menuItems를 탐색하면서 하나씩 접근
  • Kiosk 클래스 : 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리
    - start 함수를 만들어 입력과 반복문 로직을 관리
  • Menu 클래스 : MenuItem 클래스를 관리
    - List<MenuItem>는 Menu 클래스가 관리하도록 변경
    - 상위 개념 ‘버거’ 같은 카테고리 이름 필드 생성
    - 카테고리 이름을 반환하는 메서드 구현

LV6 추가 요구사항

장바구니 생성 및 관리 기능

  • ☑ 사용자가 선택한 메뉴를 장바구니에 추가할 수 있는 기능을 제공

  • 장바구니는 메뉴명, 수량, 가격 정보를 저장, 항목을 동적으로 추가 및 조회 가능

  • ☑ 사용자가 잘못된 선택을 했을 경우 예외를 처리합니다(예: 유효하지 않은 메뉴 번호 입력)

    Kiosk.java
    
    	System.out.println("선택한 메뉴 : " + subCategory.get(choiceMenu - 1).toString());
                  System.out.println("위 메뉴를 장바구니에 추가하시겠습니까?");
                  System.out.println("1. 확인      2. 취소");
                  int orderYn = Integer.parseInt(scanner.nextLine());
                  if(orderYn == 1) {
                      order.addOrderList(subCategory.get(choiceMenu - 1));
                  }  
    Order.java  
    
      // 서브 메뉴 정보 리스트 저장
      public void addOrderList(MenuItem subMenu){
          menuItemList.add(subMenu);
          printMenuName();
      }
    
      // 가장 최근 장바구니에 저장된 메뉴 명 출력
      public void printMenuName(){
          System.out.println(menuItemList.get(menuItemList.size()-1).getName() + "이 장바구니에 추가되었습니다.");
      }  
      

장바구니 출력 및 금액 계산

  • ☑ 사용자가 결제를 시도하기 전에, 장바구니에 담긴 모든 메뉴와 총 금액을 출력
  • 출력 예시
    • 각 메뉴의 이름, 가격, 수량
    • ☑ 총 금액 합계

장바구니 담기 기능

  • ☑ 메뉴를 클릭하면 장바구니에 추가할 지 물어보고, 입력값에 따라 “추가”, “취소” 처리합

    • ☑ 메뉴는 한 번에 1개만 추가 가능
  • ☑ 장바구니에 담은 목록을 출력

  • ☑ 주문 기능

    • ☑ 장바구니에 담긴 모든 항목을 출력

    • ☑ 합산하여 총 금액을 계산하고, “주문하기”를 누르면 장바구니를 초기화

      Kiosk.java
      
      // 장바구니 값이 존재할 경우 : 확인, 취소까지 +2,  존재x : mainCategory의 크기값 체크
          int index = (order.getOrderList().isEmpty()) ?
          	              mainCategory.size()-1 :mainCategory.size()+2;
      
          if(!order.getOrderList().isEmpty()){
                  System.out.println("[ ORDER MENU ]");
                  System.out.println(index-1 +   ". Orders  | 장바구니를 확인 후 주문합니다.");
                  System.out.println(index + ". Cancel  | 장바구니 주문을 취소합니다.");
             }                                
      
          // 숫자 입력 받기
          int choiceCategory = Integer.parseInt(scanner.nextLine());
      
          // 장바구니 확인 하기
          if(index-1 == choiceCategory && !order.getOrderList().isEmpty()){
                	System.out.println("아래와 같이 주문하시겠습니까?");
                    order.printOrderList();
      
                    System.out.println("[ Total ]");
                    double sumPrice = order.totalOrderPrice();
                    System.out.println("W " + sumPrice);
      
                    System.out.println("1. 주문      2. 메뉴판");
                    int choiceOrder = Integer.parseInt(scanner.nextLine());
                    if(choiceOrder == 1){
                    System.out.println("주문이 완료되었습니다. 금액은 W " +sumPrice + " 입니다.");
                        break;
                    }
                        continue;                
                    }  
      Order.java  
      
        // 장바구니 확인하기
        public void printOrderList(){
            getOrderList().stream()
                    .forEach(order -> System.out.println(order.toString()));
        }
      
        // 주문 총액 체크
        public Double totalOrderPrice(){
            return getOrderList().stream()
                    .mapToDouble(order->
                    					Double.parseDouble(order
                    				   .getPrice()
                                     .replaceAll("[^\\d.]", "")))
                    .sum();
      
        } 
        

Enum을 활용한 사용자 유형별 할인율 관리

  • 사용자 유형의 Enum 정의 및 각 사용자 유형에 따른 할인율 적용
    • 예시 : 군인, 학생, 일반인
  • 주문 시, 사용자 유형에 맞는 할인율 적용해 총 금액 계산

추가할 부분
1. order에 수량을 추가할 수 있도록 수정 필요
2. 할인 기능 추가
3 exception 처리
4. 코드 정리
5. 주석 정리

0개의 댓글