Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[치킨] 박준수 미션 제출합니다. #2

Open
wants to merge 57 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
5360819
docs: 기능목록/에러 처리 정의
GaBaljaintheroom Sep 1, 2023
718a8c6
feat: 원하는 기능 선택
GaBaljaintheroom Sep 1, 2023
d3d1a39
refactor: Main enum타입 추출
GaBaljaintheroom Sep 1, 2023
ea8f345
feat: ErrorMessage INPUT_TABLE_NUMBER_ERROR추가
GaBaljaintheroom Sep 1, 2023
6e234a7
feat: InputView 테이블 번호 입력 추가
GaBaljaintheroom Sep 1, 2023
25e3161
feat: Table 생성
GaBaljaintheroom Sep 1, 2023
882b844
feat: TableList 생성
GaBaljaintheroom Sep 1, 2023
a991bda
feat: ProgressMessage 테이블 메시지 추가
GaBaljaintheroom Sep 1, 2023
f589f75
feat: OutputView 테이블 메시지 추가
GaBaljaintheroom Sep 1, 2023
dfbeb98
test: 테이블 숫자가 옳지 않으면 오류가 발생
GaBaljaintheroom Sep 1, 2023
27fb63f
feat: Menu 생성
GaBaljaintheroom Sep 1, 2023
2487be1
feat: MenuList 생성
GaBaljaintheroom Sep 1, 2023
e6c4356
feat: ErrorMessage 추가
GaBaljaintheroom Sep 2, 2023
22bdc96
feat: InputView readMenuNumber 추가
GaBaljaintheroom Sep 2, 2023
471214a
feat: InputView readMenuQuantity 추가
GaBaljaintheroom Sep 2, 2023
ec9c4fe
feat: Menu getMenu 추가
GaBaljaintheroom Sep 2, 2023
3b34403
feat: OutputView 출력문 추가
GaBaljaintheroom Sep 2, 2023
f8bd96d
feat: ProgressMessage 출력문 추가
GaBaljaintheroom Sep 2, 2023
e4bc0ac
feat: OrderList 생성
GaBaljaintheroom Sep 2, 2023
052e807
refactor: Table 저장 수정
GaBaljaintheroom Sep 2, 2023
17c4ca1
test: 옳지 않은 메뉴 숫자를 입력하면 오류가 발생
GaBaljaintheroom Sep 2, 2023
a698923
test: 옳지 않은 메뉴 양을 입력하면 오류가 발생
GaBaljaintheroom Sep 2, 2023
9cd8d3e
feat: printMainFunction 추가
GaBaljaintheroom Sep 2, 2023
87c902e
refactor: validateMenuQuantity 역할 이동
GaBaljaintheroom Sep 2, 2023
161777d
refactor: 출력 형식 수정
GaBaljaintheroom Sep 2, 2023
beb4f48
feat: PosController 생성
GaBaljaintheroom Sep 2, 2023
9039fbb
refactor: TableList getTable 수정
GaBaljaintheroom Sep 2, 2023
95de9dc
feat: ErrorMessage 추가
GaBaljaintheroom Sep 2, 2023
ccc783b
feat: InputView readPaymentNumber 추가
GaBaljaintheroom Sep 2, 2023
e6fbe15
feat: OrderList toString 작성
GaBaljaintheroom Sep 2, 2023
fb76451
feat: OutputView 추가
GaBaljaintheroom Sep 2, 2023
b394c80
feat: ProgressMessage 추가
GaBaljaintheroom Sep 2, 2023
3017147
feat: PaymentMethod 생성
GaBaljaintheroom Sep 2, 2023
b183279
feat: Main/Menu 로직 추가
GaBaljaintheroom Sep 2, 2023
131d9fb
test: 옳지 않는 결제 번호를 입력하면 오류가 발생
GaBaljaintheroom Sep 2, 2023
6bdadc9
refactor: saveOrder 수정
GaBaljaintheroom Sep 2, 2023
ed00a36
feat: OutputView 출력문 추가
GaBaljaintheroom Sep 2, 2023
80e1fba
feat: Payment 생성
GaBaljaintheroom Sep 2, 2023
4bf27ed
feat: ProgressMessage 메시지 추가
GaBaljaintheroom Sep 2, 2023
097a35e
feat: TableList changeTablePaymentStatus 추가
GaBaljaintheroom Sep 2, 2023
0656940
feat: PosController makePayment작성
GaBaljaintheroom Sep 2, 2023
f3fe316
feat: main 함수 작성
GaBaljaintheroom Sep 2, 2023
4bb3a5b
feat: PosService 분리
GaBaljaintheroom Sep 2, 2023
9ec4b7e
refactor: 출력문 수정
GaBaljaintheroom Sep 2, 2023
91bca7a
refactor: getTotalQuantity 중복 코드 추출
GaBaljaintheroom Sep 2, 2023
3f6796b
refactor: TableStatus 추출
GaBaljaintheroom Sep 2, 2023
683b6bd
refactor: Payment 추출
GaBaljaintheroom Sep 2, 2023
2d38081
refactor: Layout역할 수정
GaBaljaintheroom Sep 5, 2023
d6cac06
test: 초기화된 테이블들이 저장되는지 확인
GaBaljaintheroom Sep 6, 2023
e632f60
test: 테이블 번호와 일치하는 테이블을 반환
GaBaljaintheroom Sep 6, 2023
4dbbeca
test: 1번 테이블이 결제 되었을 때 세팅이 되는지 확인
GaBaljaintheroom Sep 6, 2023
3558b31
test: 1번 테이블이 주문 되었을 때 세팅이 되는지 확
GaBaljaintheroom Sep 6, 2023
b659d46
test: FunctionScreenTest
GaBaljaintheroom Sep 6, 2023
0d0b259
test: MenuTest
GaBaljaintheroom Sep 6, 2023
6dd4651
test: 치킨을 1마리 시켰을 때 주문이 등록되는지 확인
GaBaljaintheroom Sep 6, 2023
583b008
test: PaymentTest
GaBaljaintheroom Sep 6, 2023
6dfdee8
style: 패키지 구조 추가
GaBaljaintheroom Sep 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions docs/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
## 기능 목록
- inputView
- 원하는 기능을 선택한다.
1. 주문 등록
2. 결제하기
3. 프로그램 종료
- 주문등록 시 테이블을 선택한다.
- 테이블 선택 후 등록할 메뉴를 선택한다.
- 메뉴의 수량을 선택한다.
- 결제하기
1. 신용카드
2. 현금

- OutputView
- 테이블 목록 출력
- 주문이 등록된 테이블은 **결제가 이루어지기 전까지 테이블 목록에 별도로 표시**한다.
- 메뉴 목록 출력
- 최종 결제할 금액 출력

- Menu
- 메뉴 번호
- 종류
- 이름
- 가격

- Table
- 테이블 번호
- 테이블에 주문할 수 있는 한 메뉴의 최대 수량은 99개이다.

## 에러 처리

- 메뉴 숫자의 범위는 1부터 3이다.
- 한 테이블에서 주문할 수 있는 한 메뉴의 최대 수량은 99개이다.
- 테이블 번호는 1,2,3,5,6,8
- 메뉴 번호는 1,2,3,4,5,6,21,22
- 카드는 1,2 중 선택
19 changes: 3 additions & 16 deletions src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,8 @@
import domain.Menu;
import domain.MenuRepository;
import domain.Table;
import domain.TableRepository;
import view.InputView;
import view.OutputView;

import java.util.List;
import controller.PosController;

public class Application {
// TODO 구현 진행
public static void main(String[] args) {
final List<Table> tables = TableRepository.tables();
OutputView.printTables(tables);

final int tableNumber = InputView.inputTableNumber();

final List<Menu> menus = MenuRepository.menus();
OutputView.printMenus(menus);
PosController posController = new PosController();
posController.startProgram();
}
}
22 changes: 22 additions & 0 deletions src/main/java/DTO/TableDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package DTO;

import domain.TableList;
import domain.TableStatus;

public class TableDTO {
private final TableList tableList;
private final TableStatus tableStatus;

public TableDTO() {
this.tableList = new TableList();
this.tableStatus = new TableStatus(tableList);
}

public TableList getTableList() {
return tableList;
}

public TableStatus getTableStatus() {
return tableStatus;
}
}
21 changes: 21 additions & 0 deletions src/main/java/constants/ErrorMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package constants;

public enum ErrorMessage {
INPUT_MAIN_NUMBER_ERROR("기능 번호는 %s 부터 %s 입니다."),
INPUT_TABLE_NUMBER_ERROR("옳지 않는 테이블 번호입니다."),
INPUT_MENU_NUMBER_ERROR("옳지 않는 메뉴 번호입니다."),
INPUT_MENU_QUANTITY_ERROR("한 테이블에서 주문할 수 있는 한 메뉴의 최대 수량은 %s 개입니다."),
INPUT_PAYMENT_NUMBER_ERROR("신용 카드는 %s번, 현금은 %s번 입니다.");

private static final String ERROR = "[ERROR]";
private final String message;

ErrorMessage(String message) {
this.message = message;
}

@Override
public String toString() {
return ERROR + message;
}
}
48 changes: 48 additions & 0 deletions src/main/java/constants/FunctionScreen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package constants;

public enum FunctionScreen {
REGISTER_ORDER(1, "주문등록"),
MAKE_PAYMENT(2, "결제하기"),
PROGRAM_EXIT(3, "프로그램 종료");

private final int number;
private final String function;

FunctionScreen(int number, String function) {
this.number = number;
this.function = function;
}

public static void validateMainListNumber(Integer number) {
if (number < REGISTER_ORDER.number || number > PROGRAM_EXIT.number) {
throw new IllegalArgumentException(String.format(ErrorMessage.INPUT_MAIN_NUMBER_ERROR.toString()
, REGISTER_ORDER.number, PROGRAM_EXIT.number));
}
}

public static String showMainFunction() {
StringBuilder stringBuilder = new StringBuilder();
for (FunctionScreen main : FunctionScreen.values()) {
stringBuilder.append(String.format("%d - %s\n", main.number, main.function));
}
return stringBuilder.toString();
}

public static boolean isRegisterOrder(int number) {
return number == REGISTER_ORDER.number;
}

public static boolean isNotProgramExit(int number) {
return number != PROGRAM_EXIT.number;
}

public static boolean isMakePayment(int number) {
return number == MAKE_PAYMENT.getNumber();
}

public int getNumber() {
return number;
}


}
62 changes: 62 additions & 0 deletions src/main/java/constants/Menu.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package constants;

import java.util.Arrays;

public enum Menu {

MENU1("치킨", 1, "후라이드", 16000),
MENU2("치킨", 2, "양념치킨", 16000),
MENU3("치킨", 3, "반반치킨", 16000),
MENU4("치킨", 4, "통구이", 16000),
MENU5("치킨", 5, "간장치킨", 17000),
MENU6("치킨", 6, "순살치킨", 17000),
MENU21("음료", 21, "콜라", 1000),
MENU22("음료", 22, "사이다", 1000);


private final String type;
private final int number;
private final String name;
private final int price;

Menu(String type, int number, String name, int price) {
this.type = type;
this.number = number;
this.name = name;
this.price = price;
}

public static String showMenu() {
StringBuilder menuString = new StringBuilder();
for (Menu menu : values()) {
menuString.append(String.format("[%s] %d - %s : %d원\n", menu.type, menu.number, menu.name, menu.price));
}
return menuString.toString();
}

public static Menu getMenu(Integer number) {
return Arrays.stream(Menu.values())
.filter(menu -> menu.number == number)
.findFirst()
.orElse(null);
}

public static void validateMenuNumber(Integer number) {
if (Arrays.stream(Menu.values()).noneMatch(menu -> menu.number == number)) {
throw new IllegalArgumentException(ErrorMessage.INPUT_MENU_NUMBER_ERROR.toString());
}
}

public String getName() {
return name;
}

public int getPrice() {
return price;
}

public String getType() {
return type;
}
}

36 changes: 36 additions & 0 deletions src/main/java/constants/PaymentMethod.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package constants;

public enum PaymentMethod {
CREDIT_CARD(1, "신용 카드"),
CASH(2, "현금");

private static final int LAST_CHAR = 1;
private final int number;
private final String method;

PaymentMethod(int number, String method) {
this.number = number;
this.method = method;
}

public static void validatePaymentNumber(int number) {
if (number < CREDIT_CARD.number || number > CASH.number) {
throw new IllegalArgumentException(String.format(ErrorMessage.INPUT_PAYMENT_NUMBER_ERROR.toString()
, CREDIT_CARD.number, CASH.number));
}
}

public static String showPaymentMethod() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("##");
for (PaymentMethod paymentMethod : PaymentMethod.values()) {
stringBuilder.append(String.format(" %s는 %s번,", paymentMethod.method, paymentMethod.number));
}
stringBuilder.deleteCharAt(stringBuilder.length() - LAST_CHAR);
return stringBuilder.toString();
}

public static boolean isCashType(int number) {
return number == CASH.number;
}
}
25 changes: 25 additions & 0 deletions src/main/java/constants/ProgressMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package constants;

public enum ProgressMessage {
MAIN_MESSAGE("## 메인화면"),
SELECT_NUMBER("## 원하는 기능을 선택하세요."),
TABLE_LIST("## 테이블 목록"),
SELECT_TABLE("## 테이블을 선택하세요."),
SELECT_MENU("## 등록할 메뉴를 선택하세요."),
INPUT_MENU_QUANTITY("## 메뉴의 수량을 입력하세요."),
ORDER_HISTORY("## 주문 내역"),
HISTORY_ELEMENT("메뉴 수량 금액"),
PAYMENT_PROGRESS("## %s번 테이블의 결제를 진행합니다."),
PAYMENT_AMOUNT("## 최종 결제할 금액");

private final String message;

ProgressMessage(String message) {
this.message = message;
}

@Override
public String toString() {
return message;
}
}
72 changes: 72 additions & 0 deletions src/main/java/controller/PosController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package controller;

import constants.FunctionScreen;
import constants.Menu;
import domain.Payment;
import domain.Table;
import service.PosService;
import view.InputView;
import view.OutputView;

public class PosController {
private static final int INIT_NUMBER = 0;
private final PosService posService;
private final InputView inputView;
private final OutputView outputView;

public PosController() {
this.posService = new PosService();
this.inputView = new InputView();
this.outputView = new OutputView();
}

public void startProgram() {
int number = INIT_NUMBER;
while (FunctionScreen.isNotProgramExit(number)) {
number = selectMain();
executeFunction(number);
}
}

private int selectMain() {
outputView.printMainProgram();
outputView.printMainFunction();
return inputView.readMainNumber();
}

private void executeFunction(int number) {
registerOrder(number);
makePayment(number);
}

public void registerOrder(int number) {
if (FunctionScreen.isRegisterOrder(number)) {
outputView.printTableStatus(posService.getTableStatus());
Table table = inputView.readTableNumber(posService.getTableList());

outputView.printMenuList();
Menu menu = inputView.readMenuNumber();

int quantity = inputView.readMenuQuantity(table.getOrderList(), menu);

posService.saveOrderList(table, menu, quantity);
posService.updateTableOrderStatus(table);
}
}

public void makePayment(int number) {
if (FunctionScreen.isMakePayment(number)) {
outputView.printTableStatus(posService.getTableStatus());
Table table = inputView.readTableNumber(posService.getTableList());

outputView.printOrderHistory(table.getOrderList());
int paymentNumber = inputView.readPaymentNumber(table.getNumber());

outputView.printPaymentAmount();
Payment payment = posService.applyDiscount(table, paymentNumber);

outputView.printPaymentPrice(payment);
posService.updateTablePaymentStatus(table);
}
}
}
17 changes: 0 additions & 17 deletions src/main/java/domain/Category.java

This file was deleted.

20 changes: 0 additions & 20 deletions src/main/java/domain/Menu.java

This file was deleted.

Loading