본문 바로가기
카테고리 없음

[자바 프로그래밍 기초] 키오스크 lv.3

by codechu 2025. 5. 1.

 

 

요구사항 

Lv 3. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기

  • [ ] 요구사항이 가지는 의도
    • [ ] 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계하는 방법을 익힙니다.
    • [ ] main 함수에서 관리하던 전체 순서 제어를 Kiosk 클래스를 통해 관리합니다.
  • [ ] Kiosk 클래스 생성하기
    • [ ] 설명: 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스입니다.
    • [ ] MenuItem을 관리하는 리스트가 필드로 존재합니다.
    • [ ] main 함수에서 관리하던 입력과 반복문 로직은 이제 start 함수를 만들어 관리합니다.
    • [ ] List<MenuItem> menuItems 는 Kiosk 클래스 생성자를 통해 값을 할당합니다.
      • [ ] Kiosk 객체를 생성하고 사용하는 main 함수에서 객체를 생성할 때 값을 넘겨줍니다.
  • [ ] 요구사항에 부합하는지 검토
    • [ ] 키오스크 프로그램을 시작하는 메서드가 구현되어야 합니다.
      • [ ] 콘솔에 햄버거 메뉴를 출력합니다.
      • [ ] 사용자의 입력을 받아 메뉴를 선택하거나 프로그램을 종료합니다.
      • [ ] 유효하지 않은 입력에 대해 오류 메시지를 출력합니다.
      • [ ] 0을 입력하면 프로그램이 ‘뒤로가기’되거나 ‘종료’됩니다.

 

 

package kiosk_lv3;

import com.sun.security.jgss.GSSUtil;

import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class Kiosk {

    //속성
    //MENUITEM을 관리하는 리스트가 필드로 존재
    private List<MenuItem> menuItems = new ArrayList<>();
    List<MenuItem> orderHistory = new ArrayList<>();


    //생성자
    // MAIN함수에서 객체생서할때 필요한 생성자 만들기

    public Kiosk(List<MenuItem> menuItems) {
        this.menuItems = menuItems;
    }
    //기능
    public void start() {
        Scanner sc = new Scanner(System.in);
        int num;
        System.out.println("=====================메뉴====================");
            for (MenuItem menuItem : menuItems) {
                System.out.printf("%-15s| ₩%.1f | %s%n",
                        menuItem.getName(),
                        menuItem.getPrice(),
                        menuItem.getBurgerInfo());
            }
            while (true) {
                try {
                    System.out.println("메뉴번호를 눌러주세요, 0을 누르면 종료됩니다");

                    num = sc.nextInt();

                    if (num >= 1 && num<= menuItems.size()) {
                        System.out.println(menuItems.get(num-1));
                        orderHistory.add(menuItems.get(num-1));

                    } else if (num == 0) {
                        System.out.println("종료되었습니다, 주문 내역을 출력합니다.");
                        printOrder();
                        break;
                    } else {
                        System.out.println("메뉴 번호 확인 후 다시 눌러주세요");
                    }

                } catch (InputMismatchException e) {
                    System.out.println("문자말고 숫자로 입력해주세요");
                    sc.next();
                }
            }
    }
    //주문내역 출력하는 메서드
    public void printOrder() {
        for (MenuItem menuItem : orderHistory) {
            String burger = menuItem.getName();
            System.out.println(burger.substring(2));
        }
    
    
    }
}

 

 

package kiosk_lv3;
import java.util.List;
import java.util.ArrayList;
public class Main {
    public static void main(String[] args) {

//원래라면 Kiosk kiosk = new Kiosk(여기에 생성자 값넣어서 만닮==
        List<MenuItem> menuItems = new ArrayList<>();

        menuItems.add(new MenuItem("1.ShackBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("2.SmokeShack", 8.9, "베이컨과 체리페퍼가 들어간 치즈버거"));
        menuItems.add(new MenuItem("3.Cheeseburger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("4.Hamburger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거"));


        Kiosk kiosk = new Kiosk(menuItems);
        kiosk.start();


        //
    }
}

 

 

package kiosk_lv3;

public class MenuItem {
    //속성

    private String name;
    private double price;
    private String burgerInfo;


    //생성자

    MenuItem(String name, double price, String burgerInfo) {
        this.name = name;
        this.price = price;
        this.burgerInfo = burgerInfo;
    }

        //기능
        String getName(){
            return name;
        }
        double getPrice(){
        return price;
        }
        String getBurgerInfo(){
        return burgerInfo;
        }


    @Override
    public String toString() {
        return String.format("%-15s | ₩%.1f | %s", name, price, burgerInfo);
    }


    }