Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[크리스마스 프로모션] 황슬기 미션 제출합니다. #7

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added bin/christmas/Application.class
Binary file not shown.
Binary file added bin/christmas/ApplicationTest.class
Binary file not shown.
Binary file added bin/main/christmas/Application$InputView.class
Binary file not shown.
Binary file added bin/main/christmas/Application.class
Binary file not shown.
Binary file added bin/test/christmas/ApplicationTest.class
Binary file not shown.
110 changes: 110 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
[주의사항]
0.프로그램종료시
■System.exit()호출하지않는다/
■3항연산자x/
■함수가 한가지일만하도록 작게만들기/
■elsex, switchx/
■잘못된값입력은 에러전 'IllegalArgumentException'
■하기를 통해 입출력 클래스 구현
public class InputView{
public int readate(){
sysout"12월 중 식당 예상 방문 날짜는 언제인가요?(숫자만 입력해주세요!)");
String input = Console.readLine();
//..
}
//..
}
public class OutputView{
public void printMenu(){
sysout"<주문메뉴>";
//...
}
//...
}
■라이브러리 활용
camp.nextstep.edu.missionutils`에서 제공하는 `Console` API를 사용하여 구현해야 한다.
- 사용자가 입력하는 값은 `camp.nextstep.edu.missionutils.Console`의 `readLine()`을 활용한다.

1.중복된 할인과 증정할인
2.크리스마스할인
2-1.기간(23.12.1~23.12.25)
날짜 할인금액
12/1 1,000
12/2 1,100
12/3 1,200
...
12/25 3,400
2-2.일,월,화,수,목 메뉴 1개당 2,023할인
기간(23.12.1~23.12.31)
2-3.금,토 메뉴1개당 2,023할인
기간(23.12.1~23.12.31)
2-4.달력에별(3/10/17/24/25/31)있으면 총주문에서 1,000할인
기간(23.12.1~23.12.31)
2-5.총주문금액(T/T)>=120,000 샴페인증정
기간(23.12.1~23.12.31)
2-6.총금액에 따른 증정 5천원이상별/1만원이상트리/2만원이상산타
기간(23.12.1~23.12.31)
3.총금액>=10,000
4.음료만 주문시 x
5.최대 20개까지만 주문
6.출력결과
6-1.주문메뉴
6-2.할인전 총주문금액
6-3.증정메뉴
6-4.혜택내역
6-5.총혜택 금액
6-6.할인 후 예상 결제 금액
6-7.12월 이벤트 배지내용
7.식당방문날짜 (1~31)
8.에러출력시
[ERROR]
9.메뉴
<애피타이저>
양송이수프(6,000), 타파스(5,500), 시저샐러드(8,000)
<메인>
티본스테이크(55,000), 바비큐립(54,000), 해산물파스타(35,000), 크리스마스파스타(25,000)
<디저트>
초코케이크(15,000), 아이스크림(5,000)
<음료>
제로콜라(3,000), 레드와인(60,000), 샴페인(25,000)
[코드개발순서]
/*
inputDay 입력날짜
inputMenu 입력메뉴
inputN 입력갯수
total 총주문금액
totalDC 총혜택금액
drinkN 샴페인 증정갯수
christmasDC 크리스마스 디데이 할인
dayDC 평일할인
specialDC 특별할인
giftEvent 증정이벤트
eventBG 이벤트배지 (star/tree/santa)
*/
1.날짜입력받기(1~31)
숫자만 입력받기/ 1~31/[ERROR]유효하지 않은 날짜입니다. 다시 입력해주세요
2.주문하시 메뉴와 개수 입력받기
할인및 증정조건걸기(1만원이상)
최소 1개 ~ 최대 20개 까지만 주문가능
메뉴판에 있는 메뉴만 보여주기 [ERROR]유효하지 않은 주문입니다. 다시 입력해 주세요.
3.출력
<주문 메뉴>
메뉴이름+ inputN개
<할인 전 총주문 금액>
total+원 (1000단위 ,)
<증정메뉴> 해당안되면, 없음 출력
120,000이상시 샴페인
샴페인 drinkN개
<혜택내역>해당안되면, 없음 출력
크리스마스 디데이 할인 : - christmasDC원
평일 할인: -dayDC원
특별 할인: -specialDC원
증정 이벤트: -giftDC원
<총혜택 금액> 해당되지않으면 0원
-totalDC원
<할인 후 예상 결제 금액>
total - totalDC
<12월 이벤트 배지> 해당안되면, 없음 출력
산타/별/트리


134 changes: 131 additions & 3 deletions src/main/java/christmas/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,135 @@
package christmas;

import camp.nextstep.edu.missionutils.Console;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
}

// 변수로
public static int inputDay; // 입력날짜
public static String inputMenu; // 입력메뉴
public static int inputN; // 입력갯수
public static int totalN; // 총주문갯수
public static int totalAmount; // 총주문금액
public static int totalDC; // 총혜택금액
public static int drinkN; // 샴페인 증정갯수
public static int christmasDC; // 크리스마스 디데이 할인금액
public static int dayDC; // 평일할인금액
public static int specialDC; // 특별할인금액
public static int giftDC; // 증정 이벤트
public static String giftEvent; // 증정이벤트
public static String eventBG; // 이벤트뱃지(star, tree, santa)

// 날짜입력받기
public class InputView {
public int readDate() {
System.out.println("안녕하세요! 우테코 식당 12월 이벤트 플래너입니다.");
System.out.println("12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)");
String input = Console.readLine();
inputDay = Integer.parseInt(input);
if (inputDay > 1 && inputDay <= 31) {
}
return inputDay;
}

// 메뉴와 가격 메소드
public java.util.Map<String, Integer> Menu() {
System.out.println("주문하실 메뉴와 개수를 알려주세요. (e.g. 해산물파스타-2, 레드와인-1, 초코케이크-1");
String[] menuList = { "양송이스프", "타파스", "시저샐러드", "티본스테이크", "바비큐립", "해산물파스타", "크리스마스파스타", "초코케이크", "아이스크림",
"제로콜라", "레드와인", "샴페인" };
int[] menufee = { 6600, 5500, 8000, 55000, 54000, 35000, 25000, 15000, 5000, 3000, 60000, 25000 };

// 주문정보저장
java.util.Map<String, Integer> orderMap = new java.util.HashMap<>();

// 메뉴와 개수입력받기
while (true) {
String input = Console.readLine();
if (input.isEmpty()) {
break;
}

// 콤마로 구분된 값들을 배열로 분리
String[] orderInfos = input.split(",");
// 각 주문 정보에 대해 처리
for (String orderInfo : orderInfos) {
// 주문 정보를 다시 "-"로 구분하여 메뉴와 수량 추출
String[] parts = orderInfo.split("-");
if (parts.length == 2) {
String menu = parts[0].trim();
int quantity = Integer.parseInt(parts[1].trim());

// 메뉴가 유효한지 확인하고 주문 정보 저장
if (java.util.Arrays.asList(menuList).contains(menu)) {
orderMap.put(menu, quantity);
}else{
// 메뉴에러문구입력
}
}
}
}
// 총 주문 금액 계산

totalAmount = 0;
for (java.util.Map.Entry<String, Integer> entry : orderMap.entrySet()) {
String menu = entry.getKey();
int totalN = entry.getValue();
int price = menufee[java.util.Arrays.asList(menuList).indexOf(menu)];
totalAmount += totalN * price;
}

//System.out.println("총 주문 금액은 " + totalAmount + "원 입니다.");
// orderMap 반환
return orderMap;
}
}
// 에러코드입력하기

public static void main(String[] args) {
// InputView의 인스턴스 생성
InputView inputView = new Application().new InputView();

// 날짜메소드 호출
inputView.readDate();
// 메뉴 메소드 호출
java.util.Map<String, Integer> orderMap = inputView.Menu();
System.out.println("12월" + inputDay + "일에 우테코 식당에서 받을 이벤트 혜택 미리 보기!");

System.out.println("<주문 메뉴>");
// 메뉴이름 //갯수
for (java.util.Map.Entry<String, Integer> entry : orderMap.entrySet()) {
String menu = entry.getKey();
int totalN = entry.getValue();
System.out.println(menu+" "+ totalN+ "개");
}

System.out.println("<할인 전 총주문 금액>");
System.out.println(totalAmount+"원");
System.out.println("<증정 메뉴>");//120000이상시 샴페인
if(totalAmount>= 120000) {
System.out.println("샴페인 1개");
}
System.out.println("<혜택내역>");
if(totalAmount<10000) {
System.out.println("혜택없음");
}else if(totalAmount<=10000) {
System.out.println("크리스마스 디데이 할인:"+"-"+christmasDC+"원");
System.out.println("평일 할인:"+"-"+dayDC+"원");
System.out.println("특별 할인:"+"-"+specialDC+"원");
System.out.println("증정 이벤트: "+"-"+giftDC+"원");
}
System.out.println("<총혜택 금액>");
System.out.println("-"+christmasDC+dayDC+specialDC+giftDC+"원");
System.out.println("<할인 후 예상 결제 금액>");
System.out.println(totalAmount-christmasDC-dayDC-specialDC-giftDC+"원");
System.out.println("<12월 이벤트 배지>");
if(totalAmount>=5000) {
System.out.println("별");
}else if(totalAmount>=10000){
System.out.println("트리");
}else if(totalAmount>=20000) {
System.out.println("산타");
}else if(totalAmount<5000) {
System.out.println("없음");
}
}
}