- 치킨집 사장님이 사용하는 간단한 포스(POS)프로그램을 구현한다.
- 주문등록, 결제하기, 프로그램 종료 기능을 가진다.
- 메뉴 기본정보가 주어지며 메뉴번호, 종류, 이름, 가격을 가진다.
- 테이블 기본정보가 주어지며 테이블번호를 가진다.
- 한 테이블에서 주문할 수 있는 한 메뉴의 최대수량은 99개이다.
- 주문이 등록된 테이블은 결제가 이루어지기 전까지 테이블 목록에 별도로 표시한다.
- 주문내역에 대한 계산을 할때는 결제유형에 따라 할인율이 달라진다.
- 치킨 종류메뉴의 수량 합이 10개가 넘는경우 10,000원씩 할인된다
- e.g.10개는 10,000원할인, 20개는 20,000원할인
- 현금결제는 5%가 할인되며 할인된금액에서 한번 더 할인이 가능하다.
- 주문 혹은 결제가 불가능한 경우 그 이유를 보여주고, 다시 주문 혹은 결제가 가능하도록 해야한다.
- 최종결제 금액을 보여준다.
## 메인화면
1 - 주문 등록
2 - 결제 하기
3 - 프로그램 종료
## 원하는 기능을 선택하세요.
1
## 테이블목록
┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐
| 1 || 2 || 3 || 5 || 6 || 8 |
└ - ┘└ ─ ┘└ ─ ┘└ ─ ┘└ ─ ┘└ ─ ┘
## 테이블을 선택하세요.
1
[치킨] 1 - 후라이드: 16000원
[치킨] 2 - 양념치킨: 16000원
[치킨] 3 - 반반치킨: 16000원
[치킨] 4 - 통구이: 16000원
[치킨] 5 - 간장치킨: 17000원
[치킨] 6 - 순살치킨: 17000원
[음료] 21 - 콜라: 1000원
[음료] 22 - 사이다: 1000원
## 등록할 메뉴를 선택하세요.
1
## 메뉴의 수량을 입력하세요.
1
## 메인화면
1 - 주문등록
2 - 결제하기
3 - 프로그램종료
## 원하는 기능을 선택하세요.
1
## 테이블목록
┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐
| 1 || 2 || 3 || 5 || 6 || 8 |
└ ₩ ┘└ ─ ┘└ ─ ┘└ ─ ┘└ ─ ┘└ ─ ┘
## 테이블을 선택하세요.
1
[치킨] 1 - 후라이드: 16000원
[치킨] 2 - 양념치킨: 16000원
[치킨] 3 - 반반치킨: 16000원
[치킨] 4 - 통구이: 16000원
[치킨] 5 - 간장치킨: 17000원
[치킨] 6 - 순살치킨: 17000원
[음료] 21 - 콜라: 1000원
[음료] 22 - 사이다: 1000원
## 등록할 메뉴를 선택하세요.
21
## 메뉴의 수량을 입력하세요.
1
## 메인화면
1 - 주문등록
2 - 결제하기
3 - 프로그램종료
## 원하는 기능을 선택하세요.
2
## 테이블목록
┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐┌ ─ ┐
| 1 || 2 || 3 || 5 || 6 || 8 |
└ ₩ ┘└ ─ ┘└ ─ ┘└ ─ ┘└ ─ ┘└ ─ ┘
## 테이블을 선택하세요.
1
## 주문내역
메뉴 수량 금액
후라이드 1 16000
콜라 1 1000
## 1번 테이블의 결제를 진행합니다.
## 신용카드는 1번, 현금은 2번
1
## 최종 결제할 금액
17000원
## 메인화면
1 - 주문등록
2 - 결제하기
3 - 프로그램종료
...
- Menu 클래스를 활용해 구현해야 한다.
- Menu에 기본생성자를 추가 할 수없다.
- Menu의 필드(인스턴스 변수)를 추가할 수 없다.
- 단, 기존 필드(인스턴스 변수)의 데이터 타입은 변경할 수 있다.
- 필드(인스턴스 변수)의 접근제어자는 private으로 구현해야 한다.
- MenuRepository 클래스를 활용해 구현해야 한다.•
- 데이터를 조회하는 DB역할을 한다.
- MenuRepository의 기존코드는 수정할 수 없다.
- 단, 추가는 가능하다.
- Table 클래스를 활용해 구현해야 한다.
- Table에 기본생성자를 추가할 수 없다.
- 필드(인스턴스 변수)의 접근제어자는 private으로 구현해야 한다.
- TableRepository 클래스를 활용해 구현해야 한다. - 데이터를 조회하는 DB역할을 한다. - TableRepository의 기존코드는 수정할 수 없다. - 단, 추가는 가능하다.
- 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다.
- 규칙 2: else 예약어를 쓰지 않는다.
- 규칙 3: 모든 원시값과 문자열을 포장한다.
- 규칙 6: 모든 엔티티를 작게 유지한다.
- 규칙 8: 일급 콜렉션을 쓴다.
- 규칙 9: 게터/세터/프로퍼티를 쓰지 않는다
- View에서 사용하는 getter는 제외한다.
- 테스트커버리지
- 도메인 80% 이상으로 한다.