231019 TIL

SEULBI LEE·2023년 10월 19일
2

TIL

목록 보기
6/25

개인과제_키오스크

Java 클래스 설계 시 필수 요구사항!

  • 메뉴 클래스는 이름, 설명 필드를 가지는 클래스로 만들어주세요.
  • 상품 클래스는 이름, 가격, 설명 필드를 가지는 클래스로 만들어주세요.
  • 상품 클래스의 이름, 설명 필드는 메뉴 클래스를 상속받아 사용하는 구조로 개발해주세요.
  • 주문 클래스도 만들어서 상품 객체를 담을 수 있도록 해주세요.

화면 구성

  1. 메인 메뉴판 화면
    • 메인 메뉴판이 출력되며 메뉴판에는 상품 (카테고리) 메뉴가 출력 됩니다.
    • 상품 메뉴는 간단한 설명과 함께 출력 되며 최소 3개 이상 출력 됩니다.
    • 상품 메뉴 아래에는 Order(주문)와 Cancel(주문 취소) 옵션을 출력해줍니다.

  2. 상품 메뉴판 화면
    • 상품 메뉴 선택 시 해당 카테고리의 메뉴판이 출력됩니다.
    • 메뉴판에는 각 메뉴의 이름과 가격과 간단한 설명이 표시됩니다.

  3. 구매 화면
    • 상품 선택 시 해당 상품을 장바구니에 추가할지 확인하는 문구가 출력 됩니다.
    • 1.확인 입력 시 장바구니에 추가되었다는 안내 문구와 함께 메인 메뉴로 다시 출력 됩니다.

  4. 주문 화면
    • 5.Order 입력 시 장바구니 목록을 출력해줍니다.
    • 장바구니에서는 추가된 메뉴들과 총 가격의 합을 출력해줍니다.
    • 1.주문 입력 시 주문완료 화면으로 넘어가고, 2.메뉴판 입력 시 다시 메인 메뉴로 돌아옵니다.

  5. 주문완료 화면
    • 1.주문 입력 시 대기번호를 발급해줍니다.
    • 장바구니는 초기화되고 3초 후에 메인 메뉴판으로 돌아갑니다.

  6. 주문 취소 화면
    • 메뉴판에서 6.Cancel 입력시 주문을 취소할지 확인을 요청하는 문구가 출력 됩니다.
    • 1.확인 을 입력하면 장바구니는 초기화되고 취소 완료 문구와 함께 메뉴판이 출력 됩니다.

개인 과제 설계안

메뉴(Menu)

  • 메뉴(3차원)
    • [{카테고리, 설명},{상품, 설명},{가격}], [{카테고리, 설명},{상품, 설명},{가격}] ...
    • 가격 : string → float

상품(Product)

  • 카테고리별 상품 (상품 클래스의 이름, 설명 필드는 메뉴 클래스를 상속)
    ★ 입력 받은 상품 리스트에 저장 메서드
    ★ 입력 받은 상품 삭제 메서드

주문(Order)

  • 메뉴 클래스 상속
  • 주문(order/cancel)
    - order ■
    ■ 주문 완료 및 리스트, 합계 출력
    ■ 대기 번호 발급

    - cancel ♣
    취소 선택 시 리스트 모두 지움.

  • 장바구니(shoppingBasket)

메인(Main)

"환영 문구 출력"
카테고리 메뉴판 출력(menu, order)
카테고리 Scnnner


입력 받을 시 해당하는 명령 출력 (switch) (
-----------------------
case : 상품 메뉴판
상품 scanner
★ 입력받은 상품 리스트에 저장
★ 입력받은 상품 리스트 출력
장바구니 출력
장바구니 유도 scanner
if() : 1. 확인 선택 시 상품 리스트 유지 / 2. 취소 선택 시 상품 리스트에서 ★ 삭제 및 상품 메뉴판 재출력
-----------------------
case : 장바구니 확인 및 주문
리스트 출력
if() :
1. 주문 선택 시
■ 주문 완료 및 리스트, 합계 출력
■ 대기 번호 발급
메인 화면 호출 (3초)
2. 메뉴판 선택 시
메인 화면 호출
-----------------------
case : ♣ 취소
취소 선택 시 리스트 모두 지움. 메인 화면 호출
)

일단 이 정도 작성하고 시작한다. 설계 소요 시간 2시간

지금 3차원 배열로 저장, 장바구니에 담기 및 전체 삭제까지는 구현했다.
이제 주문 목록 출력 기능을 구현하면 되는데, filter 메소드가 잘 어울릴 것 같아 튜터님께 질문드리니 stream().filter() 형태로 작성하면 된다고 하신다.
filter 안에는 수가 아니라 if 조건문 등의 형태, 람다 함수 형태로 원하는 조건을 찾고, jumplist를 이용해 값을 출력해야 한다고 한다.
공식 문서로 이동하는 법도 알았고 많은 도움이 되었지만
람다 함수를 내가 아직 모른다.
파라미터도 이해 못했다.
그리고 출력 값을 보니 내가 하고 싶은 대로 예쁘게 나열할 수 없을 것 같다.
아쉽지만 포기하고 다른 방법을 찾자.(여기까지 3시간 30분)

사소하지만 내 시간을 잡아먹은 내용

만난 오류 메시지

Index 2 out of bounds for length 0
배열이 비어있는데 접근하려고 할 때
혹은 배열의 범위를 벗어난 인덱스에 접근하려고 할 때

Arraylist에 값을 저장했고, 그 값을 꺼내오고 싶은데 저렇게 나온다.
isEmpty를 이용해서 리스트가 비었는지 확인했는데 아니라고 한다.

배열 전체를 그냥 냅~다 sout에 넣어서 생긴 현상이었다.

해결 코드

System.out.println(a.shoppingBasket.get(0));

잊지 말자. 메서드 호출은 (.)온점을 통해서.

오늘 남은 숙제

public String getShoppingBasket(){
        // 쇼핑리스트의 0(2)2(2)4(1)5...(묶음) 가져오기
       // (i, i+2, i+3, i+4),(i+6,i+8,i+9,i+10)...
       if(shoppingBasket.isEmpty()){
           System.out.println("장바구니가 비어있습니다.");
       }else{
           //if(int i = 0; ){}
           System.out.print(shoppingBasket.get(0) + " ");
           System.out.print(shoppingBasket.get(2) + " ");
           System.out.print(shoppingBasket.get(3) + " ");
           System.out.println(shoppingBasket.get(4));

           //매개 변수 i를 주고, i를 6씩 증가시키고, 값을 가져올 수 없을 때?? shoppingBasket의 길이가 i+6보다 작을 때?? int size break를 걸어??
       }
        return orderList;
    }

내 앞에 2가지 숙제가 있다.
1. orderList로 저장할 것인가? void 형식으로 바꿀 것인가 결정(후순위)
2. 3차원 배열을 무너뜨렸고... 1차원 배열의 수로 다시 for문을 돌리자.


오늘 하루를 마무리하며

리스트에 어떻게 저장하는지 전혀 감을 못 잡고 있어서, 너무 아쉽다.
다른 분들 보면 key값을 잘 저장해서 쓰기 좋고 보기 좋게 불러오시는 것 같다.
3차원 배열을 무너뜨리는 부분은 내가 생각해도 웃기다.
오늘 제일 많이 들은 말은
일단 돌아가기만 하면 된다...
위로가 되는 말이었고 ㅋㅋㅋㅋ 공부를 더 해야겠다는 생각도 강하게 든다.
과정도 중요하지만 결과도 중요하니까!
이대로 열심히 공부해서 결국 제 몫을 하면 된다.
아자아자

추가) 무식한 코드지만 장바구니 출력도 완성했다.
if문과 for문의 짬뽕이지만 그게 어디야~
인스턴스 변수 난무하더라도 일단 내 손으로 코드 짜본 게 어디냐~

0개의 댓글