이제 메뉴를 선택하는 것만이 아니라 장바구니에 담고, 정말 주문할 것인지도 물어보자
[ 구현할 것 ]
1. 장바구니
2. 총액 계산하기
3. 클래스 정리
장바구니 클래스를 분리해서 만들자
private로 리스트를 관리하고 getter, setter를 활용해서 장바구니에 메뉴를 추가하고 꺼내서 보여줘보자
private로 orderLsit를 만들었다totalPrice도 정의private final List<MenuItemCh1> orderList = new ArrayList<>(); //장바구니 리스트
private double totalPrice = 0; //총액 변수
addtotalPrice에 더하기//선택한 메뉴 담기 + 가격 더하기
public void AddOrderList(String name, double price, String description){
orderList.add(new MenuItemCh1(name, price, description));
totalPrice += price;
}
private로 **orderLsit**와 totalPrice`를 정의했었다.
때문에 다른 클래스에서 저 요소를 사용하려면 getter메서드를 만들어주어야한다.
getOrderList()orderList 내부 전체를 반환하는 getter를 먼저 만들어주자
public List<MenuItemCh1> getOrderList(){
return orderList;
}
getTotalPrice총 금액을 반환해주는 getter를 만들자
public double getTotalPrice(){
return totalPrice;
}
printOrderList()원래 Kiosk 클래스 내부에서 출력문을 만들어도 되지만,
이미 키오스크 클래스가 너무 복잡해서 따로 만들어주기로
만들어준 장바구니 OrderList를 Kiosk클래스에 불러오자
public class KioskCh1 {
Scanner scanner = new Scanner(System.in);
MenuCh1 menu = new MenuCh1();
List<String> category = new ArrayList<>(menu.getMenuCategory().keySet());
OrderList orderList = new OrderList(); //추가된 부분
만약 장바구니에 목록이 있다면 주문한 리스트를 보여주어야하므로
!orderList.getOrderList().isEmpty() isEmpty()를 사용하자.
if (!orderList.getOrderList().isEmpty()) {
System.out.println("[ Order Menu ]");
System.out.println("4. Orders | 장바구니를 확인 후 주문합니다.\n"
+ "5. Cancel | 진행중인 주문을 취소합니다.");}
위에서 4번을 선택했다면 지금까지의 주문내역을 확인시켜주고 정말 주문할건지 물어봐야한다.
//주문 출력
orderList.printOrderList();
System.out.println("\n" +"[ Total ] \n" + "W " + orderList.getTotalPrice());
System.out.println("1. 주문 2. 메뉴판");
int lastSelect = scanner.nextInt();
1번을 선택한다면 최종금액을 보여주고, 아니면 다시 처음으로 되돌아가자
if (lastSelect == 1){
System.out.println("주문이 완료되었습니다. 금액은 W "+orderList.getTotalPrice()+" 입니다.");
break;
} else {
System.out.println("다시 메뉴판으로 이동합니다");}
장바구니까지 만들고나니 코드가 엄청나게 복잡한 것을 알았다..
if-else문의 중첩이 많음등등 이런 문제점을 개선해보자 !!