TIL 2023-10-24 개인과제02

장규빈·2023년 10월 24일

TIL

목록 보기
9/59
post-thumbnail

이제 키오스크의 기능을 구현할 서비스 클래스와 텍스트를 모아 놓은 텍스크 클래스를 만듭니다.

package main.java.service;

import main.java.food.Title;
import main.java.order.Order;
import main.java.order.OrderFood;

import java.util.ArrayList;
import java.util.Objects;
import java.util.Scanner;

public class KioskService {
    private boolean end = false;
    ServiceText text = new ServiceText();
    Scanner sc = new Scanner(System.in);

    //메뉴판 생성
    public void menuPanMaking(ArrayList<Title> foodList) {
        foodList.add(new Title("hamburger", "한입에 다먹기 어려울껄~!"));
        foodList.add(new Title("pizza", "한조각 다먹기 어려울껄~!"));
        foodList.add(new Title("chicken", "닭다리 다먹기 어려울껄~!"));
        foodList.add(new Title("pasta", "건더기 다먹기 어려울껄~!"));
        foodList.add(new Title("risotto", "한그릇 다먹기 어려울껄~!"));
        foodList.add(new Title("drink", "한잔 다마시기 어려울껄~!"));
        foodList.get(0).setMenus("Burger from Shanghai", 8000, "상하이의 매운맛을 표현한 양파와 양상추, 토마토가 들어간 치킨버거");
        foodList.get(0).setMenus("wiper Burger", 8500, "버거의 왕이 만들었다는 케팝과 마요네즈 소스가 들어간 소고기버거");
        foodList.get(0).setMenus("Shrimp Burger", 8500, "니들이 새우맛을 알아?! 레몬과 렌치소스가 들어간 새우버거");
        foodList.get(1).setMenus("Morgherita Pizza", 20000, "어떻게 이런맛이 나오는지 모르게리따! 정통 나폴리 마르게리따피자");
        foodList.get(1).setMenus("Black Tiger Angus Ogol Chicken pizza", 23000, "육해공 전설의 토핑이 다모였다. 소고기,새우,닭만든 조화 블랙타이거앵거스오골계피자");
        foodList.get(1).setMenus("Sweet Potato Pizza", 18000, "달달한 고구마가 너무 맛있다! 단감자피자");
        foodList.get(2).setMenus("Pirate King's Golden Chicken", 19000, "해적왕이 금인줄 알고 훔쳐간 매우 맛있는 후라이드 치킨");
        foodList.get(2).setMenus("My house seasoned chicken", 20000, "집에서 해먹는것보다 더맛있네! 친청집 양념치킨");
        foodList.get(2).setMenus("Soy chicken", 20000, "짠데 달어~ 간장치킨");
        foodList.get(2).setMenus("Cheese Seasoning Chicken", 21000, "치즈 가루 뿌링 뿌링 치즈가루치킨");
        foodList.get(3).setMenus("Vongole Pasta", 12000, "기름 조개 파스타 봉골레 파스타");
        foodList.get(3).setMenus("Tomato Pasta", 13000, "뻘건거 토마토 파스타");
        foodList.get(3).setMenus("Cream Pasta", 13000, "허연거 크림 파스타");
        foodList.get(3).setMenus("rose pasta", 14000, "섞은거 로제토 파스타");
        foodList.get(4).setMenus("Tomato Risotto", 13000, "뻘건거 면 대신 밥 토마토 리조또");
        foodList.get(4).setMenus("Creamy Risotto", 13000, "허연거 면 대신 밥 크림 리조또");
        foodList.get(4).setMenus("rose risotto", 14000, "섞은거 면 대신 밥 로제 리조또");
        foodList.get(5).setMenus("coke", 2000, "코카콜라일까? 팹시일까?");
        foodList.get(5).setMenus("zero coke", 2000, "제로칼로리가 무슨 의미가 있나!");
        foodList.get(5).setMenus("sprite", 2000, "사이다일까? 스프라이트일까?");
        foodList.get(5).setMenus("zero sprite", 2000, "이왕먹을꺼 맛있는거 먹지..");
    }

    //주문시작
    public void kioskStart(ArrayList<Title> foodList, Order order) {
        while (!this.end) {
            text.menuPan(foodList);
            int orderNum = sc.nextInt();
            this.choiceMenu(orderNum, foodList, order);
        }
    }

    //메뉴선택
    public void choiceMenu(int orderNum, ArrayList<Title> foodList, Order order) {
        if (0 < orderNum && orderNum < Title.numder) {
            text.foodMenu(foodList.get(orderNum - 1));
            int menuNum = sc.nextInt();
            this.choiceMenuCheck(orderNum, menuNum, foodList, order);

        } else if (orderNum == Title.numder) {
            this.order(order);

        } else if (orderNum == Title.numder + 1) {
            text.orderCancel();
            int cancel = sc.nextInt();
            this.orderCancel(cancel,order);
        } else if (orderNum == 0) {
            text.total(order);
            int reverse = sc.nextInt();
            this.reverse(reverse);
        } else if (orderNum == 777) {
            text.closed();
            this.end = true;
        } else {
            text.numberMistake();
        }
    }

    //상품선택
    public void choiceMenuCheck(int orderNum, int menuNum, ArrayList<Title> foodList, Order order) {
        if (0 < menuNum && menuNum < foodList.get(orderNum - 1).getMenuNumder()) {
            text.foodPikMenu(menuNum - 1, foodList.get(orderNum - 1).getMenusList());
            int menuNum2 = sc.nextInt();
            this.choiceSize(orderNum, menuNum, menuNum2, foodList, order);
        } else {
            text.numberMistake();
        }
    }

    //사이즈선택
    public void choiceSize(int orderNum, int menuNum, int menuNum2, ArrayList<Title> foodList, Order order) {
        if (menuNum2 == 1) {
            text.foodPikMenu2(menuNum2, menuNum, foodList.get(orderNum - 1).getMenusList());
            text.addMenuQuestion();
            int menuNum3 = sc.nextInt();
            this.choiceSizeCheck(orderNum, menuNum, "small", menuNum3, foodList, order);
        } else if (menuNum2 == 2) {
            text.foodPikMenu2(menuNum2, menuNum, foodList.get(orderNum - 1).getMenusList());
            text.addMenuQuestion();
            int menuNum3 = sc.nextInt();
            this.choiceSizeCheck(orderNum, menuNum, "large", menuNum3, foodList, order);
        } else {
            text.numberMistake();
        }
    }

    //사이즈확인
    public void choiceSizeCheck(int orderNum, int menuNum, String size, int menuNum3, ArrayList<Title> foodList, Order order) {
        if (menuNum3 == 1) {
            this.menuCount(orderNum, menuNum, size, foodList, order);
            text.addMenu();
        } else if (menuNum3 == 2) {
            text.cancel();
        } else {
            text.numberMistake();
        }
    }

    //주문확인
    public void menuCount(int orderNum, int menuNum, String size, ArrayList<Title> foodList, Order order) {
        if (order.getOrder().isEmpty()) {
            this.notCount(orderNum, menuNum, size, foodList, order);
        } else {
            this.addOrderFood(orderNum, menuNum, size, foodList, order);
        }
    }

    //중복체크 및 갯수새기
    public void addOrderFood(int orderNum, int menuNum, String size, ArrayList<Title> foodList, Order order) {
        int cuplicateCheck = -1;
        for (int i = 0; i < order.getOrder().size(); i++) {
            if (Objects.equals(order.getOrder().get(i).getName(), foodList.get(orderNum - 1).getMenus(menuNum - 1).getName())
                    && Objects.equals(order.getOrder().get(i).getSize(), size)) {
                cuplicateCheck = i;
            }
        }
        if (cuplicateCheck == -1) {
            this.notCount(orderNum, menuNum, size, foodList, order);
        } else {
            order.getOrder().get(cuplicateCheck).setCount();
        }
    }

    //주문담기
    public void notCount(int orderNum, int menuNum, String size, ArrayList<Title> foodList, Order order) {
        if (Objects.equals(size, "small")) {
            order.setOrderList(new OrderFood(foodList.get(orderNum - 1).getMenus(menuNum - 1).getName(),
                    foodList.get(orderNum - 1).getMenus(menuNum - 1).getPrice(),
                    foodList.get(orderNum - 1).getMenus(menuNum - 1).getExplanation()
            ), size);
        } else if (Objects.equals(size, "large")) {
            order.setOrderList(new OrderFood(foodList.get(orderNum - 1).getMenus(menuNum - 1).getName(),
                    foodList.get(orderNum - 1).getMenus(menuNum - 1).getLargePrice(),
                    foodList.get(orderNum - 1).getMenus(menuNum - 1).getExplanation()
            ), size);
        }
    }

    public void orderCancel(int num,Order order) {
        if (num == 1) {
            order.reset();
            text.orderCancelReal();
        } else if (num == 2) {
            text.reverseMenuPan();
        }else {
            text.numberMistake();
        }
    }
    //뒤로가기
    public void reverse(int reverse) {
        if (reverse != 1) {
            text.numberMistake();
        }
    }

    //장바구니
    public void order(Order order) {
        text.getOrderList(order.getOrder());
        text.getTotalList(order);
        text.orderMenuQuestion();
        int menuNum3 = sc.nextInt();
        if (menuNum3 == 1) {
            text.orderMenu(order.getSeq());
            order.reset();
            this.matrixTime(3000);
        } else if (menuNum3 == 2) {
            text.reverseMenuPan();
        } else if (menuNum3 == 3) {
            order.reset();
            text.cancel();
        } else {
            text.numberMistake();
        }
    }

    //시간지연
    public void matrixTime(int delayTime) {
        long saveTime = System.currentTimeMillis();
        long currTime = 0;

        while (currTime - saveTime < delayTime) {
            currTime = System.currentTimeMillis();
        }
    }

}
package main.java.service;

import main.java.food.Food;
import main.java.food.Title;
import main.java.order.Order;
import main.java.order.OrderFood;

import java.util.ArrayList;


public class ServiceText {
    public void menuPan(ArrayList<Title> foodList) {
        this.hello();
        this.food(foodList);
        this.order();
    }

    public void hello() {
        System.out.println("HAMPICHIPARI에 오신걸 환영합니다.");
        System.out.println("아래 메뉴판을 보시고 메뉴를 골라 입력해주세요.");
    }

    public void food(ArrayList<Title> foodList) {
        System.out.println("[ Food MENU ]");
        for (Title title : foodList) {
            System.out.printf("%-2s %-10s %1s", title.getSeq(), title.getName(), title.getExplanation() + "\n");
        }
    }

    public void foodMenu(Title title) {
        int i = 1;
        System.out.println("[ " + title.getName() + " ]");
        for (Food f : title.getMenusList()) {
            System.out.printf("%-2s %-40s %5s %1s", i++, f.getName(), f.getPrice(), f.getExplanation() + "\n");
        }
    }

    public void foodPikMenu(int num, ArrayList<Food> menus) {
        System.out.println("\"" + menus.get(num).getName() + "\t" + menus.get(num).getPrice() + "\t" + menus.get(num).getExplanation() + "\"");
        System.out.println("위 메뉴의 어떤 옵션으로 추가하시겠습니까?");
        System.out.println("1 Small(" + menus.get(num).getPrice() + ") \t\t\t 2 Large(" + (menus.get(num).getPrice() + 2000) + ")");
    }

    public void foodPikMenu2(int num2, int num, ArrayList<Food> menus) {
        if (num2 == 1) {
            System.out.println("\"" + menus.get(num - 1).getName() + "(small)" + "\t" + menus.get(num - 1).getPrice() + "\t" + menus.get(num - 1).getExplanation() + "\"");
        } else if (num2 == 2) {
            System.out.println("\"" + menus.get(num - 1).getName() + "(large)" + "\t" + (menus.get(num - 1).getPrice() + 2000) + "\t" + menus.get(num - 1).getExplanation() + "\"");
        } else {
            System.out.println("번호를 잘못입력했습니다.");
        }
    }

    public void order() {
        System.out.println("[ ORDER  MENU ]");
        System.out.printf("%-2s %-10s %1s", Title.numder, "Order", "장바구니를 확인 후 주문합니다.\n");
        System.out.printf("%-2s %-10s %1s", Title.numder + 1, "Cancel", "진행중인 주문을 취소합니다.\n");
        System.out.println();
        System.out.println("번호를 입력해주세요!");
    }

    public void getOrderList(ArrayList<OrderFood> OrderList) {
        System.out.println("[ Order ]");
        for (OrderFood f : OrderList) {
            System.out.printf("%-40s %5s %5s %1s", f.getName(), f.getSize() + " " + f.getCount() + "개", f.getRealPrice(), f.getExplanation() + "\n");
        }
        System.out.println();
    }

    public void total(Order order) {
        System.out.println("[ 총 판매상품 목록 현황 ]");
        System.out.println("현재까지 총 판매된 상품 목록은 아래와 같습니다.");
        double price = 0;
        for (OrderFood a : order.getOrderTotal()) {
            System.out.println(a.getName() + "\t" + a.getSize() + "\t" + a.getCount() + "개\t" + a.getRealPrice());
            price += a.getRealPrice();
        }
        System.out.println();
        System.out.println("[ 총 판매금액 현황 ]");
        System.out.println("현재까지 총 판매된 금액은 [ " + price + " ] 입니다.");
        System.out.println();
        System.out.println("1 돌아가기");
    }

    public void getTotalList(Order order) {
        System.out.println("[ Total ]");
        System.out.println(order.price() + "원");
    }

    public void addMenuQuestion() {
        System.out.println("위 메뉴를 장바구니에 추가하시겠습니까??");
        System.out.println("1 확인 \t\t\t 2 취소");
    }

    public void addMenu() {
        System.out.println("장바구니에 추가되었습니다!");
    }

    public void cancel() {
        System.out.println("취소되었습니다!");
    }

    public void numberMistake() {
        System.out.println("번호를 잘못입력했습니다.");
    }

    public void orderMenuQuestion() {
        System.out.println("주문하시겠습니까??");
        System.out.println("1 주문 \t\t 2 매뉴 더 담기 \t\t 3 주문취소");
    }

    public void orderMenu(int num) {
        System.out.println("대기번호는 [ " + num + " ] 번 입니다.");
        System.out.println("주문이 완료되었습니다.");
        System.out.println("(3초후 메뉴판으로 돌아갑니다.)");
    }

    public void closed() {
        System.out.println("영업이 종료되었습니다.");
    }

    public void orderCancel(){
        System.out.println("진행하던 주문을 취소하시겠습니까?");
        System.out.println("1. 확인 \t\t\t 2. 취소");
    }

    public void orderCancelReal(){
        System.out.println("진행하던 주문이 취소되었습니다.");
        System.out.println();
    }

    public void reverseMenuPan(){
        System.out.println("매뉴화면으로 되돌아 갑니다");
        System.out.println();
    }
}

마지막으로 매인클래스를 완성해줍니다

package main.java;

import main.java.food.Title;
import main.java.order.Order;
import main.java.service.KioskService;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Title> foodList = new ArrayList<>();
        Order order = new Order();
        KioskService kioskService = new KioskService();
        kioskService.menuPanMaking(foodList);
        kioskService.kioskStart(foodList, order);
    }
}

개인프로젝트를 하면서 느낀점은 자바라는 언어를 사용해서 처음 만들어본 프로젝트라 아직 자바스럽지 못한 코드들이 많이 있는것 같았다. ㅠㅠ(객체 지향적인 부분) 이 코드들을 바탕으로 수정해나가봐야겠다!

profile
나다운사람

0개의 댓글