Skip to content

goohong/java-convenience-store-7-9rrong

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

편의점

구매자의 할인 혜택과 재고 상황을 고려하여 최종 결제 금액을 계산하고 안내하는 결제 시스템을 구현한다.

구현할 기능 목록

결제 시스템

  • 사용자가 입력한 상품의 가격과 수량을 기반으로 최종 결제 금액을 계산한다.
    • 총구매액은 상품별 가격과 수량을 곱하여 계산한다.
    • 프로모션 및 멤버십 할인 정책을 반영하여 최종 결제 금액을 산출한다.
  • 구매 내역과 산출한 금액 정보를 영수증으로 출력한다.
  • 영수증 출력 후 추가 구매를 진행할지 또는 종료할지를 선택할 수 있다.

재고 관리 시스템

  • 각 상품의 재고 수량을 고려하여 결제 가능 여부를 확인한다.
  • 고객이 상품을 구매할 때마다, 결제된 수량만큼 해당 상품의 재고에서 차감하여 수량을 관리한다.
    • 재고를 차감함으로써 시스템은 최신 재고 상태를 유지한다.

프로모션 할인

  • 프로모션 할인을 적용한다.
    • 오늘 날짜가 프로모션 기간 내에 포함된 경우에만 할인을 적용한다.
      • 현재 날짜와 시간을 가져오려면 camp.nextstep.edu.missionutils.DateTimes의 now()를 활용한다.
    • 프로모션은 N개 구매 시 1개 무료 증정의 형태로 진행한다.
      • 1+1 또는 2+1 프로모션을 각각 지정된 상품에 적용하며, 동일 상품에 여러 프로모션을 적용하지 않는다.
    • 프로모션 혜택은 프로모션 재고 내에서만 적용할 수 있다.
      • 프로모션 기간 중이라면 프로모션 재고를 우선적으로 차감하며, 프로모션 재고가 부족할 경우에는 일반 재고를 사용한다.
    • 프로모션 적용이 가능한 상품에 대해 고객이 해당 수량보다 적게 가져온 경우, 필요한 수량을 추가로 가져오면 혜택을 받을 수 있음을 안내한다.
    • 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제해야 하는 경우, 일부 수량에 대해 정가로 결제하게 됨을 안내한다.

멤버십 할인

  • 멤버십 회원은 프로모션 미적용 금액의 30%를 할인받는다.
    • 프로모션 적용 후 남은 금액에 대해 멤버십 할인을 적용한다.
    • 멤버십 할인의 최대 한도는 8,000원이다.

영수증 시스템

  • 영수증은 고객의 구매 내역과 할인을 요약한다.
    • 구매 상품 내역: 구매한 상품명, 수량, 가격
    • 증정 상품 내역: 프로모션에 따라 무료로 제공된 증정 상품의 목록
    • 금액 정보
      • 총구매액: 구매한 상품의 총 수량과 총 금액
      • 행사할인: 프로모션에 의해 할인된 금액
      • 멤버십할인: 멤버십에 의해 추가로 할인된 금액
      • 내실돈: 최종 결제 금액
  • 영수증의 구성 요소를 정렬한다.

입출력

입력

  • 사용자가 입력하는 값은 camp.nextstep.edu.missionutils.Console의 readLine()을 활용한다.
  • 구현에 필요한 상품 목록과 행사 목록을 파일 입출력을 통해 불러온다.
    • src/main/resources/products.md과 src/main/resources/promotions.md 파일을 이용한다.
    • 두 파일 모두 내용의 형식을 유지한다면 값은 수정할 수 있다.
  • 구매할 상품과 수량을 입력 받는다.
    • 상품명, 수량은 하이픈(-)으로, 개별 상품은 대괄호([])로 묶어 쉼표(,)로 구분한다. (ex. [콜라-10],[사이다-3])
  • 프로모션 적용이 가능한 상품에 대해 고객이 해당 수량보다 적게 가져온 경우, 그 수량만큼 추가 여부를 입력받는다.
    • Y: 증정 받을 수 있는 상품을 추가한다.
    • N: 증정 받을 수 있는 상품을 추가하지 않는다.
  • 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제해야 하는 경우, 일부 수량에 대해 정가로 결제할지 여부를 입력받는다.
    • Y: 일부 수량에 대해 정가로 결제한다.
    • N: 정가로 결제해야하는 수량만큼 제외한 후 결제를 진행한다.
  • 멤버십 할인 적용 여부를 입력 받는다.
    • Y: 멤버십 할인을 적용한다.
    • N: 멤버십 할인을 적용하지 않는다.
  • 추가 구매 여부를 입력 받는다.
    • Y: 재고가 업데이트된 상품 목록을 확인 후 추가로 구매를 진행한다.
    • N: 구매를 종료한다.

출력

  • 환영 인사와 함께 상품명, 가격, 프로모션 이름, 재고를 출력한다.
    • 만약 재고가 0개라면 재고 없음을 출력한다.

예외 처리

  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException를 발생시키고, 그 부분부터 입력을 다시 받는다.
    • Exception이 아닌 IllegalArgumentException, IllegalStateException 등과 같은 명확한 유형을 처리한다.
    • 사용자가 잘못된 값을 입력했을 때, "[ERROR]"로 시작하는 오류 메시지와 함께 상황에 맞는 안내를 출력한다.
      • 구매할 상품과 수량 형식이 올바르지 않은 경우: [ERROR] 올바르지 않은 형식으로 입력했습니다. 다시 입력해 주세요.
      • 존재하지 않는 상품을 입력한 경우: [ERROR] 존재하지 않는 상품입니다. 다시 입력해 주세요.
      • 구매 수량이 재고 수량을 초과한 경우: [ERROR] 재고 수량을 초과하여 구매할 수 없습니다. 다시 입력해 주세요.
      • 기타 잘못된 입력의 경우: [ERROR] 잘못된 입력입니다. 다시 입력해 주세요.

About

우아한테크코스 7기 프리코스 4주차 미션

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages