미니 프로젝트 세트 6: 카페 주문 관리자¶
이름: ________
시간: 40분
카페에서 고객의 주문을 관리하는 작은 Java 프로그램을 작성하세요. CafeOrder 클래스는 메뉴를 HashMap에, 주문 항목을 ArrayList에 저장합니다. 클래스를 완성한 다음 Main으로 테스트합니다.
학습 목표¶
- 생성자에서 컬렉션과 인스턴스 변수를 초기화한다.
HashMap으로 항목 이름에 해당하는 가격을 조회한다.- 항목 이름을
ArrayList에 저장한다. - 잘못된 입력과 없는 항목을 거부한다.
- 인스턴스 메서드에서
double,boolean,String값을 반환한다.
프로그램 규칙¶
- 생성자는 고객 이름을 받는다. 빈
HashMap<String, Double> menu, 빈ArrayList<String> itemNames를 만들고 할인을0.0으로 설정한다. addMenuItem(String itemName, double price)는menu에 항목 이름으로 가격을 저장한다.addItem(String itemName)은containsKey로 항목이menu에 있을 때만itemNames에 추가한다.applyDiscount(double percent)는percent가0보다 크고100보다 작을 때만 할인율을 저장한다.itemCount()는 주문한 항목 수를 반환한다.totalSpent()는 주문한 모든 항목의 메뉴 가격을 더한 뒤 할인을 적용한다.averageItemPrice()는 주문이 없으면0.0을 반환하고, 그렇지 않으면 총액을 항목 수로 나눈 값을 반환한다.qualifiesForLoyalty()는itemCount()가4이상 이고totalSpent()가20.0이상일 때true를 반환한다.getSummary()는 다음 형식의 문장을 정확히 반환한다.Mina: 4 items, $23.85 total총액은 소수점 둘째 자리까지 표시한다.- 메서드 헤더와
Main의 코드를 바꾸지 않는다.
시작 코드¶
import java.util.ArrayList;
import java.util.HashMap;
class CafeOrder {
private String customerName;
private HashMap<String, Double> menu;
private ArrayList<String> itemNames;
private double discountPercent;
public CafeOrder(String customerName) {
// TODO
}
public void addMenuItem(String itemName, double price) {
// TODO
}
public void addItem(String itemName) {
// TODO
}
public void applyDiscount(double percent) {
// TODO
}
public int itemCount() {
// TODO
return 0;
}
public double totalSpent() {
// TODO
return 0.0;
}
public double averageItemPrice() {
// TODO
return 0.0;
}
public boolean qualifiesForLoyalty() {
// TODO
return false;
}
public String getSummary() {
// TODO
return "";
}
}
public class Main {
public static void main(String[] args) {
CafeOrder order = new CafeOrder("Mina");
order.addMenuItem("Americano", 5.50);
order.addMenuItem("Sandwich", 8.00);
order.addMenuItem("Cake", 12.00);
order.addMenuItem("Water", 1.00);
order.addItem("Americano");
order.addItem("Sandwich");
order.addItem("Unknown Item"); // 이 항목은 무시되어야 합니다.
order.addItem("Cake");
order.addItem("Water");
order.applyDiscount(10.0);
System.out.printf("%.2f%n", order.averageItemPrice());
System.out.println(order.qualifiesForLoyalty());
System.out.println(order.getSummary());
}
}
예상 출력¶
5.96
true
Mina: 4 items, $23.85 total
제출 전 확인¶
- 생성자에서 두 컬렉션을 포함한 모든 필드를 초기화한다.
addItem에서menu.containsKey(itemName)을 사용해 없는 항목을 무시한다.totalSpent()에서menu.get(name)으로 주문 항목의 가격을 조회한다.averageItemPrice()에서 나누기 전에itemCount()가0보다 큰지 확인한다.qualifiesForLoyalty()는&&가 필요하다. 두 조건 중 하나만 충족하면 충분하지 않다.getSummary()안에서String.format("%.2f", totalSpent())를 사용한다.