-  주어진 resources 파일을 읽어들여 객체로 생성한다.
- products.md 파일을 읽어 Product 객체로 생성한다.
- promotions.md 파일을 읽어 Promotion 객체로 생성한다.
 
- 구매할 상품과 수량을 입력받는다.
- 수량은 하이픈(-)으로, 개발 상품은 대괄호[ ] 로 묶어 쉼표로 구분한다.
-  상품 구매 후, 재구매 여부를 입력받는다.
- 'Y' 일 경우, 재구매를 진행한다.
- 'N' 일 경우, 프로그램을 종료시킨다.
- Exception
- 구매할 상품과 수량 형식이 올바르지 않은 경우
- 구매할 상품과 수량 형식이 올바르지 않은 경우 예외를 발생시킨다.
- 구매 수량이 0 이하인 경우 예외를 발생시킨다.
- 구매 수량이 재고 수량을 초과한 경우 예외를 발생시킨다.
- 존재하지 않는 상품의 경우, 예외를 발생시킨다.
 
 
- 사용자가 입력한 문자를 구매 리스트로 변환한다.
- 오늘 날짜가 프로모션 기간에 속하는지 체크한다.
- 프로모션 상품의 경우, 프로모션 상품의 재고를 차감한다.
-  프로모션 상품이 아닌경우, 일반 상품의 재고를 차감한다.
- 일반 상품의 재고가 없을 경우, 예외가 발생한다
 
- 총 구매 금액을 계산한다.
- 총 구매 수량을 계산한다.
- 오늘 날짜가 프로모션 기간 내에 포함된 경우에만 할인 적용.
- 프로모션은 N개 구매 시 1개 무료 증정의 형태로 진행.
- 1+1 또는 2+1 프로모션에 각각 지정된 상품에 적용.
- 동일 상품에 여러 프로모션이 적용되지 않음.
- 프로모션 혜택은 프로모션 재고 내에서만 적용.
- 프로모션 기간 중이라면, 프로모션 재고를 우선적으로 차감.
- 프로모션 재고가 부족할 경우에는 일반 재고를 사용.
-  프로모션 상품에 해당되지만 고객이 해당 수량보다 적게 가져온 경우, 헤택 메세지 알림.
- 혜택 메세지 알림 후, 수량을 추가할 건지 입력을 받는다
-  수량이 추가되었다면, 포함해서 결제를 진행한다
- 포함된 상품은 행사할인이라는 할인명으로 할인을 진행한다.
 
- 수량이 추가되지 않았다면, 그냥 결제를 진행한다.
 
- 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제하는 경우, 일부 수량에 대해 정가 결제 안내.
- 프로모션 미적용 금액의 30% 할인
- 프로모션 적용 후 남은 금액에 대해서 멤버십 할인 적용
- 멤버십 할인의 최대 한도는 8,000원
- 현재 편의점의 재고를 출력한다.
- 프로모션 적용이 가능한 상품에 대해 고객이 수량만큼 가져오지 않았을 경우, 헤택에 대한 안내메세지를 출력한다.
- 프로모션 재고가 부족하여 일부 수량을 프로모션 혜택 없이 결제해야 하는 경우, 정가 결제에 대한 안내 메세지를 출력한다.
- 멤버십 할인 적용 여부 안내 문구를 출력한다.
- 추가 구매 여부를 확인하기 위한 안내 문구를 출력한다.
-  구매 상품 내역 출력
- 구매한 상품명, 수량, 가격을 출력한다.
-  증정 상품 내역
- 프로모션에 따라 무료로 제공된 증정 상품의 목록을 출력한다.
 
-  금액 정보
- 총 구매액을 출력한다.
- 프로모션에 의해 할인된 금액을 출력한다.
- 멤버십에 의해 추가로 할인된 금액을 출력한다.
- 최종 결제 금액을 출력한다.
 
- 영수증의 구성 요소를 정렬한다.