Skip to content

Latest commit

 

History

History
118 lines (88 loc) · 2.79 KB

ASSIGNMENT.md

File metadata and controls

118 lines (88 loc) · 2.79 KB

🏪 편의점

과제 진행 요구사항

  • 편의점 저장소 생성으로 시작
  • README.md에 구현할 기능 목록 정리
  • Git 커밋은 기능 목록 단위로 추가
  • AngularJS Git Commit Message Conventions 참고
  • 프리코스 진행 가이드 문서 참고

기능 요구사항

결제 시스템

  • 구매자 할인 혜택과 재고 상황 고려한 최종 결제 금액 계산
  • 상품 가격과 수량 기반 결제 금액 계산
  • 프로모션 및 멤버십 할인 정책 반영
  • 영수증 출력
  • 추가 구매 또는 종료 선택 기능
  • 잘못된 입력값에 대한 예외처리 (IllegalArgumentException)

재고 관리

  • 재고 수량 기반 결제 가능 여부 확인
  • 결제 시 재고 차감
  • 실시간 재고 상태 유지 및 제공

프로모션 할인

  • 프로모션 기간 내 할인 적용
  • N+1 프로모션 적용 (1+1 또는 2+1)
  • 단일 상품에 대한 프로모션 중복 적용 불가
  • 프로모션 재고 내에서만 혜택 적용
  • 프로모션 재고 우선 차감
  • 추가 구매 가능 안내
  • 일반 가격 결제 안내

멤버십 할인

  • 프로모션 미적용 금액의 30% 할인
  • 프로모션 적용 후 잔액에 대해 할인
  • 최대 할인 한도 8,000원

영수증 출력

  • 구매 내역과 할인 요약 출력
  • 포함 항목:
    • 구매 상품 내역 (상품명, 수량, 가격)
    • 증정 상품 내역
    • 금액 정보
      • 총구매액
      • 행사할인
      • 멤버십할인
      • 내실돈

입출력 요구사항

입력

  1. 파일 입출력

    • products.md
    • promotions.md
  2. 사용자 입력

    • 상품과 수량 ([상품명-수량] 형식)
    • 프로모션 추가 구매 여부 (Y/N)
    • 정가 결제 여부 (Y/N)
    • 멤버십 할인 적용 여부 (Y/N)
    • 추가 구매 여부 (Y/N)

출력

  1. 상품 정보 안내

    • 상품명, 가격, 프로모션, 재고
  2. 에러 메시지

    • "[ERROR]" 접두어
    • 상황별 구체적 안내
  3. 영수증

    • 구매 내역
    • 증정 내역
    • 금액 정보

프로그래밍 요구사항

기본 요구사항

  • JDK 21 사용
  • Application의 main()에서 시작
  • 외부 라이브러리 사용 금지
  • System.exit() 사용 금지
  • 파일/패키지 구조 유지
  • Java Style Guide 준수

코드 품질 요구사항

  1. 구조적 제약

    • indent depth ≤ 2
    • 3항 연산자 사용 금지
    • else 예약어 사용 금지
    • switch/case 사용 금지
    • 함수 길이 ≤ 10라인
  2. 설계 원칙

    • 단일 책임 원칙 준수
    • Java Enum 활용
    • 입출력 클래스 분리
  3. 테스트

    • JUnit 5와 AssertJ 사용
    • UI 로직 제외 단위 테스트 작성

라이브러리

  • camp.nextstep.edu.missionutils
    • DateTimes.now() 사용
    • Console.readLine() 사용