재고 관리

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

피닉스 부인은 수비학(numerology) 사업이 잘되지 않아, 남서부로 이사해 선글라스, 선크림 등을 파는 Fun In The Sun 상점을 열기로 했다. 그녀는 새 상점을 위한 재고 관리 프로그램 작성을 당신에게 맡겼다.

프로그램이 처리해야 하는 각 "활동(activity)"은 입력에서 한 줄로 주어진다. 각 활동 줄은 수행할 동작을 나타내는 소문자 키워드로 시작한다. 상품 이름은 대소문자를 구분하며, 공백이 아닌 문자를 10개 이하로 포함한다. 활동 줄의 모든 필드는 공백으로 구분되고, 입력에 오류는 없다고 가정해도 된다.

처리해야 하는 활동은 다음과 같다.

  • new item-name item-cost item-selling-price
    • 아직 상점에서 취급하지 않던 새 상품을 잠재적 재고 목록에 추가한다. item-costitem-selling-price는 달러 기호 없이 일반적인 금액으로 주어진다. 즉 한 자리 이상의 정수부, 소수점, 그리고 소수점 아래 정확히 두 자리로 이루어진다. 이 활동 자체는 재고를 바꾸지 않으며, 이후 해당 상품을 들여놓기 위한 준비 단계다. item-cost는 피닉스 부인이 한 개를 사들이는 매입가이고, item-selling-price는 한 개를 파는 판매가다. 서로 다른 상품 이름은 최대 100개까지만 나타나며, item-costitem-selling-price는 모두 100.00을 넘지 않는다.
  • delete item-name
    • 상품을 상점에서 제거한다. 재고에 남아 있던 해당 상품의 모든 수량은 손실로 처리된다.
  • buy item-name quantity
    • 피닉스 부인이 (앞서 지정한 매입가로) 해당 상품을 quantity개 사들인다. 한 번의 매입은 5000개를 넘지 않지만, 재고 수량은 최대 10,000까지 늘어날 수 있다.
  • sell item-name quantity
    • (앞서 지정한 판매가로) 해당 상품이 quantity개 팔린다. 판매 수량은 재고 수량을 넘지 않는다.
  • report
    • 보고서를 출력한다. 출력이 발생하는 유일한 활동이다. 현재 취급 중인(즉 new로 추가되고 아직 delete되지 않은) 각 상품에 대해, 적절한 열 제목과 함께 상품 이름, 매입가, 판매가, 재고 수량, 그 재고의 가치(재고 수량 * 매입가)를 열로 출력한다. 재고가 0개인 상품도 목록에 포함한다. 보고서의 줄은 상품 이름을 문자 코드(ASCII) 오름차순으로 정렬한다. 마지막 상품 다음에 전체 재고의 총 가치를 출력하고, 이어서 지난 보고서 이후의 총 이익을 출력한다. 이익은 총 매출에서 팔린 상품의 매입 원가와 delete로 손실 처리된 상품의 매입 원가를 뺀 값이다. 모든 금액은 정확해야 한다.

입력

각 활동은 한 줄씩 주어진다. 입력의 끝은 첫 번째 열에 별표(*)가 있는 줄로 표시되며, 다른 어떤 활동 줄도 그렇게 시작하지 않는다.

출력

report 활동마다 예제와 정확히 같은 형식으로 보고서를 출력한다. 가운데 정렬된 INVENTORY REPORT 제목, 열 제목과 그 아래 밑줄, 상품마다 한 줄(이름순 정렬), 구분선, 재고의 총 가치, 그리고 직전 보고서 이후의 이익을 출력한다. 숫자는 고정 폭 열에 오른쪽 정렬하며, 이익은 음수일 수 있다. 보고서를 여러 번 출력할 때는 연속한 두 보고서 사이에 빈 줄을 하나 넣는다.