- 프로젝트명 : "키오스크 만들기"
- 프로젝트 소개 : 메뉴판을 보고 주문할 수 있는 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");
}
}