- 23.10.18) TIL - 개인프로젝트(키오스크)2023년 10월 18일 20시 58분 16초에 업로드 된 글입니다.작성자: oneseel
오늘 한 일
- 개인프로젝트 기본 틀 만들기
개인프로젝트로 키오스크 프로그램을 만들게 되었다. KFC 메뉴를 이용해서 만들예정이다.
4가지 메뉴(치킨, 햄버거, 사이드, 음료)와 각 메뉴의 5개의 상품을 이용해서 만들예정이다.
1) 메뉴 클래스 : 메뉴 이름과 설명 필드를 가지고 메뉴에 입력한 이름과 설명을 가지고 오는 getter 메서드를 가지고 있다.
public class Menu { private String menuName; // 메뉴 이름 private String menuDescription; // 메뉴 설명 public Menu (String menuName, String menuDescription) { this.menuName = menuName; this.menuDescription = menuDescription; } // 메서드 public String getMenuName() { return menuName; } public String getMenuDescription() { return menuDescription; } }
2) 상품 클래스 : 메뉴 클래스에게 상속받았고, 가격 필드와 그 값을 가지고오는 getter 메서드를 가지고 있다.
public class Goods extends Menu { private double goodsPrice; // 상품 가격 public Goods(String menuName, String menuDescription, double goodsPrice) { super(menuName, menuDescription); this.goodsPrice = goodsPrice; } // 메서드 @Override public String getMenuName() { return super.getMenuName(); } @Override public String getMenuDescription() { return super.getMenuDescription(); } public double getGoodsPrice() { return goodsPrice; } }
3) 메인 클래스 1
- 스캐너와 스위치를 이용해서 작성. 너무 무지성으로 작성하다보니 너무 복잡해져서 Map을 이용해서 다시 작성.
- menuMap에 put을 이용해서 숫자key와 Menu value를 넣어줌
import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Map<Integer, Menu> menuMap = new HashMap<>(); Map<Integer, Goods> goodsMap = new HashMap<>(); int choice; // 메뉴 선택 int goodsChoice; // 상품 선택 int orderChoice; // 주문 확인 menuMap.put(1, new Menu("Chicken", "치킨입니다.")); menuMap.put(2, new Menu("Hamburger", "햄버거입니다.")); menuMap.put(3, new Menu("Side", "사이드입니다.")); menuMap.put(4, new Menu("Drink", "음료입니다."));
4) 메인 클래스 2
- 선택이 전부 끝나면 되돌아가야 하는데 방법을 잘 몰랐으나 구글링으로 while을 이용하는 방법을 알게됨.
- 반복문을 이용하여 맵에 있는 밸류를 가지고 와서 프린트함.
- choice로 int값을 받고 switch문을 진행함.
while (true) { // <메인 메뉴> System.out.println("KFC에 오신걸 환영합니다."); System.out.println("아래 메뉴판을 보시고 메뉴를 골라 입력해주세요."); System.out.println(); System.out.println("[KFC MENU]"); for (int i = 1; i <= menuMap.size(); i++) { Menu menu = menuMap.get(i); System.out.println(i + ". " + menu.getMenuName() + " \t|\t " + menu.getMenuDescription()); } System.out.println(); System.out.println("[ORDER MENU]"); System.out.println("5. Order \t|\t 장바구니를 확인 후 주문합니다."); System.out.println("6. Cancel \t|\t 진행중인 주문을 취소합니다."); System.out.println(); choice = sc.nextInt(); System.out.println();
5) 메인클래스 3
- goodsMap에 put을 이용해 상품에 이름과 설명 가격을 넣음.
- 위에서와 마찬가지로 반복문을 이용해서 맵에 있는 밸류를 프린트함.
- goodsChoice로 int값을 받아 다음 switch문을 진행함.
switch (choice) { // <1번 치킨 상품> case 1: goodsMap.put(1, new Goods("갓양념블랙라벨", "KFC에서도 ‘양념 순살’을 먹고 싶다는 고객님들을 위해 준비했다! 블랙라벨 치킨의 변신! 닭다리 통살 블랙라벨이 갓양념과 만났다!", 3400)); goodsMap.put(2, new Goods("갓양념치킨", "달콤 매콤, 먹을수록 땡기는 맵달의 조화 한국인 입맛에 딱 맞춘 환상의 양념치킨", 3300)); goodsMap.put(3, new Goods("켄터키통다리순살치킨", "부드러운 닭다리 통살로 만든 최고급 프리미엄 치킨", 3100)); goodsMap.put(4, new Goods("오리지널치킨", "KFC만의 11가지 비밀양념, 고압쿠킹 방식으로 육즙이 살아있어 촉촉 담백한 오리지널치킨", 3000)); goodsMap.put(5, new Goods("핫크리스피치킨", "KFC만의 비법으로 매콤 바삭하게 튀겨낸 KFC 핫크리스피치킨", 3000)); System.out.println("KFC에 오신걸 환영합니다."); System.out.println("아래 상품메뉴판을 보시고 메뉴를 골라 입력해주세요."); System.out.println(); System.out.println("[Chicken Menu]"); for (int i = 1; i <= goodsMap.size(); i++) { Goods chickenGoods = goodsMap.get(i); System.out.println(i + ". " + chickenGoods.getMenuName() + " \t|\t " + chickenGoods.getGoodsPrice() + " \t|\t " + chickenGoods.getMenuDescription()); } goodsChoice = sc.nextInt(); System.out.println();
6) 메인클래스 4
- 각 상품에 대해 장바구니에 추가할 것인지 묻는 것을 orderChoice를 통해 int값을 받고 각 case에 맞게 출력하고
메인클래스2 화면으로 돌아감
- 나머지는 케이스는 전부 복사 붙여넣기(중복된 코드를 하나의 메서드로 합침)
switch (goodsChoice) { // <1번 치킨 장바구니 추가> case 1: System.out.println(goodsMap.get(1).getMenuName() + " \t|\t " + goodsMap.get(1).getGoodsPrice() + " \t|\t " + goodsMap.get(1).getMenuDescription()); System.out.println("위 메뉴를 장바구니에 추가하시겠습니까?"); System.out.println("1. 확인 \t\t 2. 취소"); orderChoice = sc.nextInt(); System.out.println(); // <1번 치킨 장바구니 추가 확인> switch (orderChoice) { case 1: System.out.println(goodsMap.get(1).getMenuName() + "이 장바구니에 추가되었습니다."); System.out.println(); break; case 2: System.out.println("취소되었습니다. 처음으로 돌아갑니다."); System.out.println(); break; default: System.out.println("잘못된 입력입니다. 처음으로 돌아갑니다"); System.out.println(); } break;
7) 중복된 코드 하나의 메서드로 정리
- 메인클래스 4의 중복된 코드를 하나의 메서드로 합침.(인텔리제이에서 중복된 코드를 자동으로 추출해서 메서드로 만들어줌)
- '장바구니 추가' 부분은 기존의 switch문이였는데 case의 내용이 전부 같아서 if문으로 고침.
// 장바구니 추가 public static void goodsChoiceMethod(Scanner sc, Map<Integer, Goods> goodsMap, int goodsChoice) { int orderChoice; if (goodsChoice >= 1 && goodsChoice <= goodsMap.size()) { System.out.println(goodsMap.get(goodsChoice).getMenuName() + " \t|\t " + goodsMap.get(goodsChoice).getGoodsPrice() + " \t|\t " + goodsMap.get(goodsChoice).getMenuDescription()); System.out.println("위 메뉴를 장바구니에 추가하시겠습니까?"); System.out.println("1. 확인 \t\t 2. 취소"); orderChoice = sc.nextInt(); System.out.println(); orderCheckMethod(goodsMap, goodsChoice, orderChoice); } else { System.out.println("잘못된 입력입니다. 처음으로 돌아갑니다"); System.out.println(); } } // 장바구니 추가 확인 public static void orderCheckMethod(Map<Integer, Goods> goodsMap, int goodsChoice, int orderChoice) { switch (orderChoice) { case 1: System.out.println(goodsMap.get(goodsChoice).getMenuName() + "이(가) 장바구니에 추가되었습니다."); System.out.println(); break; case 2: System.out.println("취소되었습니다. 처음으로 돌아갑니다."); System.out.println(); break; default: System.out.println("잘못된 입력입니다. 처음으로 돌아갑니다"); System.out.println(); } }
내일 할 일
- 주문(order) 클래스 작성
- Map에 있는 내용들 정리
- 추가적인 내용 생각하기
'TIL' 카테고리의 다른 글
23.10.20) TIL - 개인프로젝트(키오스크) (1) 2023.10.20 23.10.19) TIL - 개인프로젝트(키오스크) (0) 2023.10.19 23.10.17) TIL (0) 2023.10.17 23.10.12) Java 문법 2일차(요리 레시피 메모장 만들기2) (0) 2023.10.13 23.10.13) Java 문법 2일차(가위바위보, 구구단, 최대값과 최소값) (1) 2023.10.13 댓글