- 프로젝트명 : "키오스크 만들기"
 - 프로젝트 소개 : 메뉴판을 보고 주문할 수 있는 Java 프로그램입니다.
 - 사용 기술: #Java
 
GitHub: https://github.com/k-jaehyun/Kiosk
(상세 기능 및 설계는 GitHub 참고 바랍니다.)
메인, 상품 메뉴, 구매, 주문, 주문 완료, 주문 취소로 구성된 키오스크 프로그램 입니다.

public class TotalMenu {
    public ArrayList<Product> menuSum;
}
//총 금액 저장 할 값
double totalPrice = 0;
//총 금액 저장
for (Product total : order.orderMenu) {
	totalPrice = totalPrice + total.price;
}
//주문내역이 없으면 다시 메뉴판으로 보낼
if (totalPrice == 0) {
	System.out.println("주문 내역이 없습니다.\n주문을 다시 진행합니다.\n");
	try {
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}
//이녀석이 제일 먼저 실행되도록 join() 메서드 사용///
{
	Thread yourThread = new Thread(() -> {
		// 스레드가 수행할 작업
		totalMenu.menuSum.addAll(order.orderMenu);
	});
	//스레드 시작
	yourThread.start();
	try {
	// yourThread 스레드가 완료될 때까지 현재 스레드를 일시 중단
		yourThread.join();
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}
gainChoice1:     //다시 선택 하는 루프 깨기 위해 이름을 붙임
            switch (menu) {
                case "1": {
                               ...
                    String detailMenu = sc.nextLine();
                    while (true) {  //다시 선택 루프
                        switch (detailMenu) {
                            case "1": {
                               ...
                                break againChoice1;
                            }
                            case "2": {
                               ...
                                break againChoice1;
                            }
                            case "3": {
                               ...
                                break againChoice1;
                            }
                            case "4": {
                               ...
                                break againChoice1;
                            }
                            case "5": {
                               ...
                                break againChoice1;
                            }
                            //엉뚱한걸 입력했을 때 다시 선택하게끔
                            default:
                                System.out.println("해당하는 번호를 입력해주세요");
                                detailMenu = sc.nextLine();
                        }
                    }
                }
'총 판매금액 조회', '총 판매상품 목록 조회' 기능 추가
예외 상황에 대한 처리
주문내역 없으면 다시 돌아가고, 해당하지 않는 다른 번호를 누르면 다시 누를 수 있도록 변경하였다. (안된는 곳도 있음 -> 하드코딩을 해서 코드를 짜는게 정답이 아닌듯해서 멈춤.)
코드의 장단점
        while (true) {
            System.out.println("\"밥집에 오신걸 환영합니다.\"\n" +
                    "아래 메뉴판을 보시고 메뉴를 골라 입력해주세요.\n" +
                    "\n" +
                    "[ 밥집 ]\n" +
                    "1. 한식  | 한국의 음식\n" +
                    "2. 중식  | 중국의 음식\n" +
                    "3. 일식  | 일본의 음식\n" +
                    "\n" +
                    "[ ORDER MENU ]\n" +
                    "4. Order       | 장바구니를 확인 후 주문합니다.\n" +
                    "5. Cancel      | 진행중인 주문을 취소합니다.\n"
            );
            System.out.print("원하는 것의 숫자만 입력하세요: ");
            String menu = sc.nextLine();
            againChoice1:     //다시 선택 하는 루프 깨기 위해 이름을 붙임
            switch (menu) {
                case "1": {
                    System.out.println("\"밥집에 오신걸 환영합니다.\"\n" +
                            "아래 상품메뉴판을 보시고 상품을 골라 입력해주세요.\n" +
                            "\n" +
                            "[ 한식 메뉴]\n" +
                            "1. " + korea1.name + " | " + korea1.price + " | " + korea1.explanation + "\n" +
                            "2. " + korea2.name + "    | " + korea2.price + " | " + korea1.explanation + "\n" +
                            "3. " + korea3.name + " | " + korea3.price + " | " + korea1.explanation + "\n" +
                            "4. " + korea4.name + "  | " + korea4.price + " | " + korea1.explanation + "\n" +
                            "5. " + korea5.name + "     | " + korea5.price + " | " + korea1.explanation + "\n");
                    String detailMenu = sc.nextLine();
                    while (true) {                            //다시 선택 루프
                        switch (detailMenu) {
                            case "1": {
                                //메서드로 코드를 줄여봤다.
                                print.hey(sc,order,korea1,korea1.name,korea1.price,korea1.explanation);
                                break againChoice1;
                            }
			
       	     							...
                                        
            
                            //엉뚱한걸 입력했을 때 다시 선택하게끔
                            default:
                                System.out.println("해당하는 번호를 입력해주세요");
                                detailMenu = sc.nextLine();
                        }
                    }
                }
                
                
                						...
                                        ...
                                        ...
                case "0":
                    double totalMoney = 0;
                    for (Product total : totalMenu.menuSum) {
                        totalMoney += total.price;
                    }
                    System.out.println("\n[ 총 판매상품 목록 현황 ]");
                    //상품 판매가 아직 안됐다면 로직 추가
                    if (totalMoney==0) {
                        System.out.println("아직 판매된 물품이 없습니다.");
                    } else {
                        System.out.println("현재까지 총 판매된 상품 목록은 아래와 같습니다.");
                        //다시 한번, 중복 제거 코드!!!
                        Map<Product,Integer> productCount2 = new HashMap<>();
                        for (Product check2 : totalMenu.menuSum) {
                            if (productCount2.containsKey(check2)) {
                                int count = productCount2.get(check2);
                                productCount2.put(check2, count+1);
                            } else {
                                productCount2.put(check2, 1);
                            }
                        }
                        for (Map.Entry<Product,Integer> check2 : productCount2.entrySet()) {
                            System.out.println("-" + check2.getKey().name+"   | "+check2.getValue()+"개 | W " + check2.getKey().price);
                        }
                    }
                    System.out.println("\n[ 총 판매금액 현황 ]");
                    System.out.println("현재까지 총 판매된 금액은 [ W "+totalMoney+" ] 입니다.\n");
                    System.out.println("1. 돌아가기");
                    String back = sc.nextLine();
                    System.out.println("사실 뭘 눌러도 돌아감.\n");
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    break;
                default:
                    System.out.println("1~5의 숫자로만 입력해주세요.\n");
            }
        }