@@ -1 +1,239 @@
 # java-convenience-store-precourse
+## 🏪 프로그램 소개
+구매자의 할인 혜택과 재고 상황을 고려하여 최종 결제 금액을 계산하고 안내하는 결제 시스템
+### 입력
+- 상품 목록과 행사 목록 파일
+- 구매할 상품과 수량
+    - 상품명, 수량은 하이픈(-), 개별 상품 대괄호([])로 묶어 쉼표(,)로 구분
+    - ex) [콜라-10],[사이다-3]
+- 프리모션 적용이 가능한 상품에 대해 고객이 해당 수량보다 적게 가져온 경우, 그 수량만큼 추가 여부
+    - Y: 증정 받을 수 있는 상품을 추가
+    - N: 증정 받을 수 있는 상품을 추가하지 않음
+- 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제해야 하는 경우, 일부 수량에 대해 정가로 결제할지 여부
+    - Y: 일부 수량에 대해 정가로 결제
+    - N: 정가로 결제해야하는 수량만큼 제외한 후 결제를 진행
+- 멤버십 할인 적용 여부
+    - Y: 멤버십 할인 적용
+    - N: 멤버십 할인 적용하지 않음
+- 추가 구매 여부
+    - Y: 재고가 업데이트된 상품 목록을 확인 후 추가로 구매 진행
+    - N: 구매 종료
+### 출력
+- 환영 인사
+- 상품명, 가격, 프로모션 이름, 재고
+    - 재고가 0개라면 ```재고없음```을 출력
+- 프로모션 적용이 가능한 상품에 대해 고객이 해당 수량만큼 가져오지 않았을 경우, 혜택에 대한 안내 메시지를 출력
+- 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제해야 하는 경우, 일부 수량에 대해 정가로 결제할지 여부에 대한 안내 메시지 출력
+- 멤버십 할인 적용 여부를 확인하기 위해 안내 문구 출력
+- 구매 상품 내역, 증정 상품 내역, 금액 정보 출력
+- 추가 구매 여부를 확인하기 위한 안내 문구 출력
+- 사용자가 잘못된 값을 입력했을 때, “ERROR”로 시작하는 오류 메시지와 함께 상황에 맞는 안내 출력
+```
+안녕하세요. W편의점입니다.
+현재 보유하고 있는 상품입니다.
+
+- 콜라 1,000원 10개 탄산2+1
+- 콜라 1,000원 10개
+- 사이다 1,000원 8개 탄산2+1
+- 사이다 1,000원 7개
+- 오렌지주스 1,800원 9개 MD추천상품
+- 오렌지주스 1,800원 재고 없음
+- 탄산수 1,200원 5개 탄산2+1
+- 탄산수 1,200원 재고 없음
+- 물 500원 10개
+- 비타민워터 1,500원 6개
+- 감자칩 1,500원 5개 반짝할인
+- 감자칩 1,500원 5개
+- 초코바 1,200원 5개 MD추천상품
+- 초코바 1,200원 5개
+- 에너지바 2,000원 5개
+- 정식도시락 6,400원 8개
+- 컵라면 1,700원 1개 MD추천상품
+- 컵라면 1,700원 10개
+
+구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])
+[콜라-3],[에너지바-5]
+
+멤버십 할인을 받으시겠습니까? (Y/N)
+Y
+
+==============W 편의점================
+상품명		수량	금액
+콜라		3 	3,000
+에너지바 		5 	10,000
+=============증	정===============
+콜라		1
+====================================
+총구매액		8	13,000
+행사할인			-1,000
+멤버십할인			-3,000
+내실돈			 9,000
+
+감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)
+Y
+
+안녕하세요. W편의점입니다.
+현재 보유하고 있는 상품입니다.
+
+- 콜라 1,000원 7개 탄산2+1
+- 콜라 1,000원 10개
+- 사이다 1,000원 8개 탄산2+1
+- 사이다 1,000원 7개
+- 오렌지주스 1,800원 9개 MD추천상품
+- 오렌지주스 1,800원 재고 없음
+- 탄산수 1,200원 5개 탄산2+1
+- 탄산수 1,200원 재고 없음
+- 물 500원 10개
+- 비타민워터 1,500원 6개
+- 감자칩 1,500원 5개 반짝할인
+- 감자칩 1,500원 5개
+- 초코바 1,200원 5개 MD추천상품
+- 초코바 1,200원 5개
+- 에너지바 2,000원 재고 없음
+- 정식도시락 6,400원 8개
+- 컵라면 1,700원 1개 MD추천상품
+- 컵라면 1,700원 10개
+
+구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])
+[콜라-10]
+
+현재 콜라 4개는 프로모션 할인이 적용되지 않습니다. 그래도 구매하시겠습니까? (Y/N)
+Y
+
+멤버십 할인을 받으시겠습니까? (Y/N)
+N
+
+==============W 편의점================
+상품명		수량	금액
+콜라		10 	10,000
+=============증	정===============
+콜라		2
+====================================
+총구매액		10	10,000
+행사할인			-2,000
+멤버십할인			-0
+내실돈			 8,000
+
+감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)
+Y
+
+안녕하세요. W편의점입니다.
+현재 보유하고 있는 상품입니다.
+
+- 콜라 1,000원 재고 없음 탄산2+1
+- 콜라 1,000원 7개
+- 사이다 1,000원 8개 탄산2+1
+- 사이다 1,000원 7개
+- 오렌지주스 1,800원 9개 MD추천상품
+- 오렌지주스 1,800원 재고 없음
+- 탄산수 1,200원 5개 탄산2+1
+- 탄산수 1,200원 재고 없음
+- 물 500원 10개
+- 비타민워터 1,500원 6개
+- 감자칩 1,500원 5개 반짝할인
+- 감자칩 1,500원 5개
+- 초코바 1,200원 5개 MD추천상품
+- 초코바 1,200원 5개
+- 에너지바 2,000원 재고 없음
+- 정식도시락 6,400원 8개
+- 컵라면 1,700원 1개 MD추천상품
+- 컵라면 1,700원 10개
+
+구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])
+[오렌지주스-1]
+
+현재 오렌지주스은(는) 1개를 무료로 더 받을 수 있습니다. 추가하시겠습니까? (Y/N)
+Y
+
+멤버십 할인을 받으시겠습니까? (Y/N)
+Y
+
+==============W 편의점================
+상품명		수량	금액
+오렌지주스		2 	3,600
+=============증	정===============
+오렌지주스		1
+====================================
+총구매액		2	3,600
+행사할인			-1,800
+멤버십할인			-0
+내실돈			 1,800
+
+감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)
+N
+```
+
+## 🛠️ 구현 기능 목록
+### 입력
+- ```camp.nextstep.edu.missionutils.Console```의 ```readLine()``` 으로 입력을 받는다.
+    - 구매할 상품과 수량
+        - ex) [콜라-10],[사이다-3]
+    - Y/N
+        - 프로모션 적용이 가능한 상품에 대해 고객이 해당 수량보다 적게 가져온 경우, 그 수량만큼 추가 여부
+        - 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제해야 하는 경우, 일부 수량에 대해 정가로 결제할지 여부
+        - 멤버십 할인 적용 여부
+        - 추가 구매 여부
+- 잘못된 입력을 받을 시 ```IllegalArgumentException```를 발생시키고 그 부분부터 입력을 다시 받는다.
+    - ```IllegalArgumentException```, ```IllegalStateException``` 과 같은 명확을 유형으로 처리된다.
+### 예외 입력
+- 공통
+    - 빈 입력
+    - 공백이 포함된 입력
+- 구매할 상품
+    - 잘못된 상품명
+- 구매할 수량
+    - 정수가 아닌 값
+    - 재고보다 적은 값
+    - 재고보다 큰 값
+- 구매할 상품과 수량
+    - [상품명-수량],[상품명-수량]이 아닌 잘못된 형식
+- Y/N
+    - Y/N 이외의 문자열
+### 기능
+- 상품 목록과 행사 목록 파일 불러오기
+- 재고관리
+    - 각 상품의 재고 수량을 고려하여 결제 가능 여부 확인
+    - 고객이 상품을 구매할 때마다, 결제된 수량만큼 해당 상품의 재고에서 차감하여 수량 관리
+    - 재고를 차감함으로써 시스템은 최고 재고 상태를 유지하며, 다음 고객이 구매할 때 정확한 재고 정보를 제공
+- 프로모션 할인
+    - 오늘 날짜가 프로모션 기간 내에 포함된 경우에만 할인 제공
+        - 현재 날짜와 시간 가져오기는 ```camp.nextstep.edu.missionutils.DateTimes```의 ```now()``` 활용
+    - 프로모션은 N개 구매 시 1개 무료 증정의 형태로 진행
+    - 1+1 또는 2+1 프로모션이 각각 지정된 상품에 적용되며, 동일 상품에 여러 프로모션 적용되지 않음
+    - 프로모션 혜택은 프로모션 재고 내에서만 적용 가능
+    - 프로모션 기간 중이라면 프로모션 재고 우선적으로 차감
+        - 재고가 부족할 경우 일반 재고 사용
+    - 프로모션 적용이 가능한 상품에 대해 고객이 해당 수량보다 적게 가져온 경우, 필요한 수량을 추가로 가져오면 혜택을 받을 수 있음을 안내
+    - 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제해야 하는 경우, 일부 수량에 대해 정가로 결제하게 됨을 안내
+- 멤버십 할인
+    - 멤버십 회원은 프로모션 미적용 금액의 30%를 할인 받음
+    - 프로모션 적용 후 남은 금액에 대해 멤버십 할인 적용
+    - 멤버십 할인의 최대 한도는 8,000원
+### 출력
+- 환영인사
+- 상품명, 가격, 프로모션 이름, 재고
+- 안내 메시지
+    - 프로모션 적용이 가능한 상품에 대해 고객이 해당 수량만큼 가져오지 않았을 경우
+    - 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제해야 하는 경우
+    - 멤버십 할인 적용 여부를 확인하기 위한 경우
+- 영수증: 고객의 구매 내역과 할인을 요약하여 출력
+    - 구매 상품 내역
+        - 구매한 상품명
+        - 수량
+        - 가격
+    - 증정 상품 내역
+        - 프로모션에 따라 무료로 제공된 증점 상품 목록
+    - 금액 정보
+        - 총 구매액: 구매한 상품의 총 수량과 총 금액
+        - 행사할인: 프로모션에 의해 할인된 금액
+        - 멤버십할인: 멤버십에 의해 추가로 할인된 금액
+        - 내실돈: 최종 결제 금액
+- ```IllegalArgumentException``` 가 발생할 때 “[ERROR]”로 시작하는 오류 메시지와 함께 상황에 맞는 안내를 출력한다.
+    - 구매할 상품과 수량 형식이 올바르지 않은 경우
+        - ```[ERROR] 올바르지 않은 형식으로 입력했습니다. 다시 입력해 주세요.```
+    - 존재하지 않는 상품을 입력한 경우
+        - ```[ERROR] 존재하지 않는 상품입니다. 다시 입력해 주세요.```
+    - 구매 수량이 재고 수량을 초과한 경우
+        - ```[ERROR] 재고 수량을 초과하여 구매할 수 없습니다. 다시 입력해 주세요.```
+    - 기타 잘못된 입력의 경우
+        - ```[ERROR] 잘못된 입력입니다. 다시 입력해 주세요.```

리뷰: 꼼꼼하게 잘 정리하신 거 같아요!