이번 미션은 구매자의 할인 혜택과 재고 상황을 고려하여 최종 결제 금액을 계산하고 안내하는 결제 시스템을 구현한다.
-
최종 결제 금액 계산
- 총구매액 = 상품별 가격 * 수량
- 프로모션 및 멤버십 할인 정책을 총 구매액에 반영
-
재고 관리
- 재고 수량을 고려해 결제 가능 여부 확인
- 고객이 상품을 구매 시, 결제 수량 만큼 재고에서 차감
- 최신 재고 상태를 유지하고, 다음 고객에게 정확한 재고 정보를 제공
- ? : 재고가 2개 남아있고 고객이 3개를 주문하면 2개만 사는가? 아예 안 사는가
-
프로모션 할인
- 프로모션 종류
탄산2+1
→ 2개 구입 시 1개 무료 / 2024-01-01 ~ 2024-12-31MD추천상품
→ 1개 구입 시 1개 무료 / 2024-01-01 ~ 2024-12-31반짝할인
→ 1개 구입 시 1개 무료 / 2024-11-01 ~ 2024-11-30
- 오늘 날짜가 프로모션 기간 내에 포함되어 있다면 할인 적용
- N+1 으로 각각 지정된 상품에 적용되고, 동일 상품에 여러 프로모션은 적용되지 않는다.
- 프로모션 재고 내에서만 적용 가능
- 프로모션 재고를 우선으로 차감하고, 프로모션 재고가 부족하면 일반 재고를 사용
- 프로모션 종류
-
멤버십 할인
- 멤버십 회원은 프로모션 미적용 상품 금액의 30% 할인
- 할인 최대 한도는 8000원
-
상품 목록, 행사 목록
- 파일 입출력을 이용해 불러올 것
-
구매할 상품, 수량
- 수량은 하이픈(-), 개별 상품은 대괄호([])로 묶어 쉼표(,)로 구분
[콜라-10],[사이다-3]
-
프로모션 적용 상품에 대해 해당 수량보다 적게 가져온 경우, 수량만큼 추가 여부 입력
Y
: 추가 ,N
: 추가하지 않음
-
프로모션 재고가 부족해 일부 수량을 프로모션 혜택 없이 정가로 결제할지 여부 입력
Y
: 일부 수량 정가 결제N
: 정가로 결제해야하는 수량 제외 후 결제
-
멤버십 할인 적용 여부
Y
: 추가 ,N
: 추가하지 않음
-
추가 구매 여부
- 영수증 출력 후 확인
Y
: 추가 ,N
: 추가하지 않음
-
환영 인사
-
상품명, 가격, 재고, 프로모션 이름
- 재고가 0개라면
재고 없음
출력 - 프로모션 예)
탄산2+1
,MD추천상품
,반짝할인
- 재고가 0개라면
-
프로모션 적용 상품에 대해 해당 수량보다 적게 가져온 경우 메시지
현재 {상품명}은(는) 1개를 무료로 더 받을 수 있습니다. 추가하시겠습니까? (Y/N)
-
프로모션 재고가 부족해 일부 수량을 프로모션 혜택 없이 정가로 결제하는 경우 메시지
현재 {상품명} {수량}개는 프로모션 할인이 적용되지 않습니다. 그래도 구매하시겠습니까? (Y/N)
-
멤버십 할인 적용 여부 확인 메시지
멤버십 할인을 받으시겠습니까? (Y/N)
-
영수증 : 구매 내역, 할인 요약하여 출력
-
구매 상품 내역
- 구매한 상품명, 수량, 가격
-
증정 상품 내역
- 프로모션으로 무료 제공된 상품 목록
-
금액 정보
- 총구매액: 구매한 상품 총 수량, 총 금액
- 행사할인: 프로모션으로 할인된 금액
- 멤버십할인: 멤버십으로 할인된 금액
- 내실돈: 최종 결제 금액
- 총구매액 - 행사할인 - 멤버십할인
-
구성 요소 보기 좋게 정렬하여 상품 내역, 금액, 수량, 증정 상품 내역 등 확인할 수 있도록 출력
===========W 편의점============= 상품명 수량 금액 콜라 3 3,000 에너지바 5 10,000 ===========증 정============= 콜라 1 ============================== 총구매액 8 13,000 행사할인 -1,000 멤버십할인 -3,000 내실돈 9,000
-
-
추가 구매 진행 여부 메시지
감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)
- 사용자가 잘못된 값을 입력한 경우
IllegalArgumentException
을 발생시키고, “[ERROR]”로 시작하는 에러 메시지 출력 후 그 부분부터 입력을 다시 받는다. - 구매할 상품과 수량 형식이 올바르지 않은 경우
[ERROR] 올바르지 않은 형식으로 입력했습니다. 다시 입력해 주세요.
- 수량은 양수만 입력 가능하다.
[콜라-셋]
,[콜라-21-콜]
와 같은 잘못된 형식 모두 예외 처리
- 존재하지 않는 상품을 입력한 경우
[ERROR] 존재하지 않는 상품입니다. 다시 입력해 주세요.
- 구매 수량이 재고 수량을 초과한 경우
[ERROR] 재고 수량을 초과하여 구매할 수 없습니다. 다시 입력해 주세요.
- 기타 잘못된 입력의 경우
[ERROR] 잘못된 입력입니다. 다시 입력해 주세요.