코드 처리하기 문제가 어려웠다...
결국엔 풀긴 풀었는데 문제를 정확히 이해하지 못해서 생긴 문제였다.
저거만 잡고 30분 이상 고민했었는데, 점점 알고리즘 난이도가 높아져서 알고리즘 카테고리를 새로 만들고 거기에 풀이과정 올려야겠다고 생각.. 시간 날 때마다 지금까지 풀었던 것들 업로드 할 예정입니다...
오늘 개인 프로젝트 계획
장바구니
- 장바구니에 상품 추가
- 장바구니에 담긴 상품 확인 + 장바구니 내의 상품 가격 합계
- 장바구니 비우기
- 주문 및 주문번호 출력
우선 장바구니 구현 과정 설명
장바구니에 상품 추가
void addBasket (Product orderProduct) {
System.out.println();
// 여기에 주문을 추가하는 메소드가 들어갈 것
// basket에 담고 메인으로 돌아가야함
System.out.println(orderProduct.name + " | " +orderProduct.price + " | " + orderProduct.explain);
System.out.println("위 메뉴를 장바구니에 추가하시겠습니까?");
System.out.println("1. 확인 2. 취소");
System.out.println();
int orderSelect = orderScanner.nextInt();
if (orderSelect == 1){
this.basket.add(orderProduct);
System.out.println();
System.out.println(orderProduct.name + "가 장바구니에 추가되었습니다.");
} else if (orderSelect == 2){
System.out.println();
System.out.println("메인화면으로 돌아갑니다.");
}
}
Product[] sideMenu = new Product[]{
new Product("트러플 치즈 프라이", "트러플소스와 바삭한 프렌치프라이에 고소한 치즈까지", 3900.0),
new Product("너겟킹 4조각", "바삭하고 촉촉한 부드러운 너겟킹", 3100.0),
new Product("크리미모짜볼 10조각", "겉은 바삭~ 속은 부드러운 크림치즈가 쏘옥, 크리미모짜볼", 5600.0)
};
System.out.println();
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 상품메뉴판을 보시고 상품을 골라 입력해주세요");
System.out.println();
// System.out.println("[ " + mainmenu[2].name + " MENU ]");
for (int i = 0; i < sideMenu.length; i++) {
System.out.println(i + 1 + ". " + sideMenu[i].name + "\t | " + sideMenu[i].price + "\t | " + sideMenu[i].explain);
}
System.out.println();
System.out.println("[ ORDER MENU ]");
System.out.println("4. 장바구니 확인");
System.out.println("5. 주문 취소");
System.out.println();
int setOrder = mainScanner.nextInt();
if (setOrder == 1) {
order.addBasket(sideMenu[0]);
} else if (setOrder == 2) {
order.addBasket(sideMenu[1]);
} else if (setOrder == 3) {
order.addBasket(sideMenu[2]);
여기서 객체를 만들고 그 객체를 Basket에다 담는 메소드를 불러준다.
sideMenu 인자는 메소드의 인자로 들어가서 그 인자를 list.add() 활용하여 담아주는 그런 과정..
장바구니에 담은 상품확인 + 장바구니 내의 가격 합계
void getBasket () throws InterruptedException {
System.out.println();
// 주문 내역 확인 및 토탈 가격 확인
System.out.println("[ Orders ]");
if (this.basket.isEmpty()) {
{
System.out.println("장바구니가 비어있습니다.");
}
} else {
for (int i = 0; i < this.basket.size(); i++) {
double price = this.basket.get(i).price;
String name = this.basket.get(i).name;
String explain = this.basket.get(i).explain;
System.out.println(name + " | " + price + " | " + explain);
this.basketTotalPrice += price;
}
}
System.out.println();
System.out.println("[ Total ]");
System.out.println(this.basketTotalPrice);
System.out.println();
System.out.println("1. 주문하기 2. 메뉴판");
System.out.println();
int orderSelect = orderScanner.nextInt();
if (orderSelect == 1){
if (this.basket.isEmpty()){
System.out.println();
System.out.println("장바구니가 비어있어서 주문을 할 수 없습니다.");
getBasket();
} else {
setOrderNumber();
}
}
if (orderSelect == 2){
basketTotalPrice = 0;
System.out.println();
System.out.println("메인화면으로 돌아갑니다.");
}
}
basket 이라는 리스트에 아무것도 없으면 아무것도 없다는 메세지를 출력해줄 것이다.
그래서 if else 문과 리스트의 메소드인 isEmpty() 사용
안 비어져있다면 basket을 for문으로 차례로 돌며 안에 있는 상품들을 찍어주며 가격 총 합을 알려줄 것인데..
basketTotalPrice이라는 필드를 새로 만들고 basketTotalPrice에 계속 더해주는 식으로 해결했다.
이제 주문하기를 눌렀을 때 장바구니가 비어있으면 주문을 할 수 없게하고 다시 장바구니 화면을 띄운다
장바구니가 차있으면 주문하는 메소드로 이동
void setOrderNumber () throws InterruptedException {
System.out.println();
// 여기에 주문 번호를 넣어주는 메소드가 들어갈 것
// orderNumber++..?
for (int i = 0; i < basket.size(); i++) {
double price = this.basket.get(i).price;
String name = this.basket.get(i).name;
String explain = this.basket.get(i).explain;
salesTotalPrice += price;
}
System.out.println("주문이 완료되었습니다!");
System.out.println();
orderNumber++;
System.out.println("대기번호는 [ " + orderNumber +" ] 번 입니다.");
basket.clear();
basketTotalPrice = 0;
System.out.println("(3초후 메뉴판으로 돌아갑니다.)");
// 주문 번호 주고 3초 뒤 메인으로 다시 돌아가야 함
// Timer 유틸 쓸거임!! 공부하고 적용 / 어떻게 쓰지..?
Thread.sleep(3000);
}
저 for문 안의 name, explain은 신경쓰지 않아도 된다.
토탈 주문 내역을 출력해주는 메소드를 짤 것인데.. 아직은 쓰이지 않고있다.
상품을 주문하면 orderNumber를 ++하고 그대로 출력 후
basket 리스트를 clear 해준다.
basketTotalPrice를 0으로 해주는 이유는 필드를 계속 사용하기 때문... 이거 맘에 조금 안 드는데 어떻게 바꿀지 생각이 안 난다. 우선순위에서도 밀렸음
그 후 3초 기다렸다가 메뉴판으로 돌아가게 하려고 Time 유틸을 쓰려고 했는데
우선 Task 글 읽어보다가 도통 이해가 안돼서 쓰레드를 잠깐 멈추는 걸로 대체했다.. 진짜 맘에 안듦
장바구니 비우기
void cancleBasket () {
System.out.println();
// 여기에 주문을 전부 취소하는 메소드가 들어갈 것
// 진행하던 주문을 취소하시겠습니까?
System.out.println("진행하던 주문을 취소하시겠습니까?");
System.out.print("1. 확인 2. 취소");
System.out.println();
// 스캐너로 확인, 취소
int orderSelect = orderScanner.nextInt();
if (orderSelect == 1){
basket.clear();
basketTotalPrice = 0;
System.out.println();
System.out.println("진행하던 주문이 취소되었습니다.");
// 캔슬 하면 메인으로 다시 돌아가야 함
} else if (orderSelect == 2) {
System.out.println();
System.out.println("메인화면으로 돌아갑니다.");
}
}
장바구니를 비우는 메소드다. 위의 것들이랑 비슷해서 설명은 불 필요해 보인다.
List.clear() 썼다는 점만 있다
주문 금액 토탈
void adminPassword () {
System.out.println();
System.out.println("[ ONLY ADMIN ]");
System.out.println();
System.out.println("1. 비밀번호 입력 2.돌아가기");
System.out.println();
int orderSelect = orderScanner.nextInt();
if (orderSelect == 1) {
System.out.println();
System.out.println("[ 비밀번호를 입력하세요 ]");
System.out.println();
int password = orderScanner.nextInt();
if (password == 1004) {
getSalesTotalPrice();
} else {
System.out.println();
System.out.println("비밀번호를 틀렸습니다.");
adminPassword();
}
} else if (orderSelect == 2) {
System.out.println();
System.out.println("메인화면으로 돌아갑니다.");
}
}
void getSalesTotalPrice () {
System.out.println();
System.out.println("[ 총 판매금액 현황 ]");
System.out.println("현재까지 총 판매된 금액은 [ " + salesTotalPrice + " ] 입니다.");
System.out.println();
System.out.println("1. 돌아가기");
System.out.println();
int orderSelect = orderScanner.nextInt();
if (orderSelect == 1) {
System.out.println();
System.out.println("메인화면으로 돌아갑니다.");
}
}
Scanner 가 재밌어서 장난을 좀 쳤다
비밀번호를 입력하면 팔린 상품의 가격 총합을 보는 메소드를 부른다
위의 주문 하기에서 salesTotalPrice 에 계속 넣어주는 이유가 이거다
비밀번호 만드는게 재밌었다ㅋㅋ...
이제 리팩토링을 해야하는데 진짜 감이 안잡힌다..
사실 진짜 뼈대만 잡아놓은 느낌이라서
Class의 사용처를 명확히 하고 메소드를 진짜 잘활용하는 과정으로 리팩토링을 하고 싶은데
아직 이해를 못한 개념이 많은 듯... 추상 메소드를 쓰고 싶은데... 써야되는 부분이 분명 있는 거같은데... 왜 난 모를까
내일 아무리 진행해도 프로젝트 발전은 못시킬 거 같은데 내일은 공부 진짜 열심히 해야겠다.
'TIL' 카테고리의 다른 글
TIL 2023-10-23 Class별 역할 충실히하기 / 키오스크 프로젝트 완료 (0) | 2023.10.23 |
---|---|
TIL 2023-10-20 깊은 고뇌, 추상 클래스와 인터페이스 차이 (0) | 2023.10.20 |
TIL 2023-10-18 프로그래머스 조건 문자열, 키오스크 개인 프로젝트 설계 및 구현 시작 (0) | 2023.10.18 |
TIL 2023-10-17 매개변수, 인자, 가변길이란 무엇인가 (0) | 2023.10.17 |
TIL 2023-10-16 문자열 겹쳐쓰기, 객체지향 4가지 특징 (0) | 2023.10.16 |