요구사항
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);
}
}