Coder Social home page Coder Social logo

javascript__christmas-6's Introduction

미션 - 크리스마스 프로모션

💻 기능 목록

  1. MVC 패턴을 활용하여 클래스 나누기

  2. 사용자로부터 입력값읇 받는다.

    2-1. 입력값이 유효한 값인지 검증한다.

    가능한 에러 상황들

    • 날짜

      • 빈 값

      • 정수가 아닌 값

      • 정수이지만 1~31 사이의 값이 아닐 때

    • 메뉴목록

      • 빈 값

      • 형식( "메뉴-수량,메뉴-수량,...")에 맞지 않는 값

      • 형식은 맞지만 주어진 메뉴에 없는 음식일 때

      • 각 메뉴당 가능한 수량이 1~20 이고, 전체 수량의 최댓값이 20이다.

      • 메뉴가 중복될 때

  3. 사용자에게 출력값을 보여준다.

  4. 정해진 기간동안 해당하는 이벤트를 구분해서 할인과 혜택을 계산할 수 있다.

    5-1. 디데이 이벤트 할인 가격을 계산할 수 있다.

    5-2. 요일별로 맞는 메뉴 할인할 수 있다.

    5-3. 특별 할인을 할 수 있다.

    5-4. 할인 전 총 금액을 계산할 수 있다.

    5-5. 총 가격이 12만원 이상일 때 샴페인 1병을 증정한다.

    5-6. 총 혜택 가격을 계산할 수 있다.

    5-7. 총 할인 가격 및 계산해야 할 가격을 계산할 수 있다.

  5. 에러 상황 때 에러를 내고, 에러 문구를 보여준다. (시작은 [ERROR] )

🚀 기능 요구 사항

'12월 이벤트 플래너' 개발 요청 사항

  • 고객들이 식당에 방문할 날짜와 메뉴를 미리 선택하면 이벤트 플래너가 주문 메뉴, 할인 전 총주문 금액, 증정 메뉴, 혜택 내역, 총혜택 금액, 할인 후 예상 결제 금액, 12월 이벤트 배지 내용을 보여주기를 기대합니다.
  • 12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)
    • 방문할 날짜는 1 이상 31 이하의 숫자로만 입력받아 주세요.
    • 1 이상 31 이하의 숫자가 아닌 경우, "[ERROR] 유효하지 않은 날짜입니다. 다시 입력해 주세요."라는 에러 메시지를 보여 주세요.
    • 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성해 주세요.
  • 주문하실 메뉴와 개수를 알려 주세요. (e.g. 해산물파스타-2,레드와인-1,초코케이크-1)
    • 고객이 메뉴판에 없는 메뉴를 입력하는 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지를 보여 주세요.
    • 메뉴의 개수는 1 이상의 숫자만 입력되도록 해주세요. 이외의 입력값은 "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지를 보여 주세요.
    • 메뉴 형식이 예시와 다른 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지를 보여 주세요.
    • 중복 메뉴를 입력한 경우(e.g. 시저샐러드-1,시저샐러드-1), "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지를 보여 주세요.
    • 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성해 주세요.
  • 주문 메뉴의 출력 순서는 자유롭게 출력해 주세요.
  • 총혜택 금액에 따라 이벤트 배지의 이름을 다르게 보여 주세요.
  • 총혜택 금액 = 할인 금액의 합계 + 증정 메뉴의 가격
  • 할인 후 예상 결제 금액 = 할인 전 총주문 금액 - 할인 금액
  • 증정 메뉴
    • 증정 이벤트에 해당하지 않는 경우, 증정 메뉴 "없음"으로 보여 주세요.
  • 혜택 내역
    • 고객에게 적용된 이벤트 내역만 보여 주세요.
    • 적용된 이벤트가 하나도 없다면 혜택 내역 "없음"으로 보여 주세요.
    • 혜택 내역에 여러 개의 이벤트가 적용된 경우, 출력 순서는 자유롭게 출력해주세요.
  • 이벤트 배지
    • 이벤트 배지가 부여되지 않는 경우, "없음"으로 보여 주세요.

🎯 프로그래밍 요구 사항

  • Node.js 18.17.1 버전에서 실행 가능해야 한다. Node.js 18.17.1에서 정상적으로 동작하지 않을 경우 0점 처리한다.
  • 프로그램 실행의 시작점은 App.jsrun 메서드이다. 아래와 같이 프로그램을 실행시킬 수 있어야 한다.
  • package.json을 변경할 수 없고 외부 라이브러리(jQuery, Lodash 등)를 사용하지 않는다. 순수 Vanilla JS로만 구현한다.
  • JavaScript 코드 컨벤션을 지키면서 프로그래밍 한다
  • 프로그램 종료 시 process.exit()를 호출하지 않는다.
  • 프로그램 구현이 완료되면 ApplicationTest의 모든 테스트가 성공해야 한다. 테스트가 실패할 경우 0점 처리한다.
  • 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 이름을 수정하거나 이동하지 않는다.
  • indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
    • 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
    • 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다.
  • Jest를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다.
  • 함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다.
    • 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.
  • else를 지양한다.
    • 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
    • 때로는 if/else, switch문을 사용하는 것이 더 깔끔해 보일 수 있다. 어느 경우에 쓰는 것이 적절할지 스스로 고민해 본다.
  • 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(Console.readLineAsync, Console.print) 로직에 대한 단위 테스트는 제외한다.
    • 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
  • 사용자가 잘못된 값을 입력할 경우 throw문을 사용해 예외를 발생시킨다. 그런 다음, "[ERROR]"로 시작하는 에러 메시지를 출력하고 해당 부분부터 입력을 다시 받는다.

추가된 요구 사항

  • 아래에 제공되는 InputView, OutputView 객체를 활용해 구현한다.
    • 입력과 출력을 담당하는 객체를 별도로 구현한다.
    • InputView, OutputView의 파일 경로는 변경할 수 있다.
    • InputView, OutputView의 메서드의 이름과 인자는 필요에 따라 추가하거나 변경할 수 있다.
    • 값 출력을 위해 필요한 메서드를 추가할 수 있다.

javascript__christmas-6's People

Contributors

woowahan-cron avatar www-r avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.