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 |