자바

키오스크 만들기

148june 2025. 3. 12. 16:10
package lv4;

public class Main {
    public static void main(String[] args) {
        Kiosk kiosk = new Kiosk();
        // Menu 객체 생성하면서 카테고리 이름 설정
        // Menu 클래스 내 있는 List<MenuItem> 에 MenuItem 객체 생성하면서 삽입

        //메뉴보여주고 메뉴 1햄버거 2감튀 3음료 이런식으로 나눠서 해주기
        kiosk.start();
        // Kiosk 객체 생성
        // Kiosk 내 시작하는 함수 호출
        /*
        *
        ===== 카테고리 목록 =====
        1.햄버거
        2.음료
        3.사이드
        0.종료//예시
         */
    }
}

기본메인

 

package lv4;

//오류잡기

import java.util.InputMismatchException;
import java.util.Scanner;

public class Kiosk {
    Menu menu;
    // 입력 받은 숫자가 올바르다면 인덱스로 활용해서 Menu가 가지고 있는 List<MenuItem>에 접근하기
    // menu.getMenuItems().get(i); 같은 형식으로 하나씩 들어가서 얻어와야 합니다.
    Scanner sc;

    public Kiosk() {
        this.menu = new Menu();
        this.sc = new Scanner(System.in);
    }

    //start가 기존 lv2 아래 내용 축약
    public void start() {
        menu.showlist();

        while (true) {
            try {
                int num = sc.nextInt();
                //0입력 종료
                if (num == 0) {
                    System.out.println("종료합니다");
                    break;
                }
                //숫자 작동
                switch (num) {
                    case 1: {
                        System.out.println("1995버거 6900원 선택됨.");
                        break;
                    }
                    case 2: {
                        System.out.println("불고기 버거 3500원 선택됨.");
                        break;
                    }
                    case 3: {
                        System.out.println("치즈버거 2000원 선택됨.");
                        break;
                    }
                    default:
                        System.out.println("잘못된입력입니다.");
                        break;


                }
            } catch (InputMismatchException e) {

                System.out.println("잘못 입력햇습니다. 정수만 입력가능");
                sc.nextLine();
                //break쓰면 그냥끝나고 이걸해야 한줄만 나옴
            }
        }


    }
}

 

예외 처리부분 혹시라도 문자열 넣을때 나오게 설정

catch (InputMismatchException e) {

                System.out.println("잘못 입력햇습니다. 정수만 입력가능");
                sc.nextLine();
                //break쓰면 그냥끝나고 이걸해야 한줄만 나옴
            }

 

package lv4;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class Menu {
    // 카테고리 이름 필드 추가
    // MenuItem 클래스를 List로 관리
    List<Menucategory> menucategory;
    List<MenuItem> bugerItem;
    List<MenuItem> drinkItem;
    List<MenuItem> sideItem;
    Scanner scanner = new Scanner(System.in);

    public Menu() {
        this.menucategory = new ArrayList<>();
        this.bugerItem = new ArrayList<>();
        this.drinkItem = new ArrayList<>();
        this.sideItem = new ArrayList<>();

        menucategory.add(new Menucategory("햄버거", 1));
        menucategory.add(new Menucategory("음료", 2));
        menucategory.add(new Menucategory("사이드", 3));
        //메뉴 아이템 외에도 새로운게 필요할려나
        bugerItem.add(new MenuItem("1995버거", 6900, "1955 그때 버거 1누를시 선택됨"));
        bugerItem.add(new MenuItem("불고기버거", 3500, "불고기가 들어간 평범한 불고기 2누를시 선택됨"));
        bugerItem.add(new MenuItem("치즈버거", 2000, "값싸게 먹을수잇는버거 3누를시 선택됨"));
        //음료
        drinkItem.add(new MenuItem("사이다", 1500, "칠성사이다"));
        drinkItem.add(new MenuItem("코카콜라", 1500, "코카콜라"));
        drinkItem.add(new MenuItem("펩시콜라", 1500, "펩시콜라"));
        //사이드
        sideItem.add(new MenuItem("감자튀김", 6900, "햄버거집 후렌치 후라이"));
        sideItem.add(new MenuItem("치즈스틱", 3500, "치즈 듬뿍~튀김"));
        sideItem.add(new MenuItem("치즈볼", 2000, "치즈가 든 치즈볼"));
        //메뉴 입력
        // List에 포함된 MenuItem을 순차적으로 보여주는 함수
        showlist();

        selectCategory();
        //메뉴 고르기
        System.out.println("0입력시 종료");
        //종료안내
    }

    public void showlist() {
        System.out.println("\n===== 카테고리 목록 =====");
        for (Menucategory category : menucategory) {
            category.showMenu();  // category.viewMenu() menucategory 쪽에잇음
        }
        System.out.println("0.종료");
    }

    //메뉴고르기
    public void selectCategory() {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("카테고리 번호를 선택하세요: ");
            try {
                int choice = scanner.nextInt();

                if (choice == 0) {
                    System.out.println("메뉴 선택을 종료합니다");
                    break;
                }

                switch (choice) {
                    case 1:
                        selectMenuItem(bugerItem, "햄버거");
                        break;
                    case 2:
                        selectMenuItem(drinkItem, "음료");
                        break;
                    case 3:
                        selectMenuItem(sideItem, "사이드");
                        break;
                    default:
                        System.out.println("잘못된 입력입니다. 다시 선택해주세요");
                }
            }catch (InputMismatchException e) {
                System.out.println("잘못 입력했습니다. 정수만 입력가능");
                scanner.nextLine();
            }
        }

        scanner.close();
    }

    //선택한 목록, 표시될이름
    /*
    public void showItems(List<MenuItem> items, String categoryName) {
        System.out.println("\n===== " + categoryName + " 메뉴 =====");
        for (MenuItem item : items) {
            item.viewMenu();
            System.out.println("--------------------");
        }
    }
    //보여주는 테스트용이엿던거
    */
    // List를 리턴하는 함수
    //메뉴 선택 시 종류와 이름표시
    public void selectMenuItem(List<MenuItem> items, String categoryName) {
        while (true) {
            System.out.println("\n===== " + categoryName + " 메뉴 =====");
            //고른것에대한거 보여주기
            for (int i = 0; i < items.size(); i++) {
                System.out.println(items.get(i).name + ":" + items.get(i).price + "원"+items.get(i).description);
            }
            System.out.println("0입력시 이전화면");

            System.out.println("메뉴 번호를 선택하시오:");

            //뒤로가기용 추가 스캐너
            try {
                int menuChoice = scanner.nextInt();

                if (menuChoice == 0) {
                    showlist();
                    return;
                }
                //선택한 메뉴아이템 내용들 꺼내는겅
                else if(menuChoice >=1 && menuChoice <= items.size()){
                    System.out.println("선택한 메뉴"+ items.get(menuChoice -1).name);
                    System.out.println("\n(아무 키나 입력하면 카테고리 선택 화면으로 돌아갑니다.)");
                    scanner.nextLine();
                    scanner.nextLine();  // 입력을 기다림
                    showlist();
                    return;
                    // 카테고리 화면으로 돌아감
                }
            } catch (InputMismatchException e) {
                System.out.println("잘못 입력했습니다. 정수만 입력가능");
                scanner.nextLine();
                //break쓰면 그냥끝나고 이걸해야 한줄만 나옴
            }

        }

        // 구조에 맞게 함수를 선언해놓고 가져다 사용하세요.
    }
}

 

메뉴판부분

package lv4;

public class Menucategory {
    //종류 설명 필드
    //햄버거 메뉴 출력 필요
    public String name;
    public int num;

    //
    //불러올때 보여줌
    public Menucategory(String name, int num) {
        this.name = name;
        this.num = num;
    }

    //메뉴판에 사용될거
    public void showMenu() {
        System.out.println(num + "." + name);
    }
    //아마 1.햄버거 이런식으로 구현생각
}

 

메뉴 설명

package lv4;

public class MenuItem {
    //이름 가격 설명 필드
    //햄버거 메뉴 출력 필요
    public String name;
    public int price;
    public String description;

    //불러올때 보여줌
    public MenuItem(String name, int price, String description) {
        this.name = name;
        this.price = price;
        this.description = description;
    }

    //메뉴판에 사용될거
    public void viewMenu() {
        System.out.println("메뉴이름" + name);
        System.out.println("가격" + price);
        System.out.println("설명" + description);

    }
}

 

실행시

 햄버거를 골랐을경우

문자열을 넣을경우

다음에는 getter와 setter을 이용하여 함부로  접근하지 못하게 변경 해보겠다.

'자바' 카테고리의 다른 글

깃허브를 쓰는이유  (0) 2025.03.17
getter와 setter 그리고 함부로 접근못하게하기  (0) 2025.03.13
키오스크만들기 문제편 java: cannot find symbol  (0) 2025.03.12
키오스크 만들기  (0) 2025.03.10
키오스크 만들기  (0) 2025.03.07