프로젝트 이름 : 키오스크 프로그램
프로젝트 인원 : 1명(본인)
프로젝트 기간 : 2일
제공된 목록으로는 필수요구사항, 선택요구사항, 출력화면의 예시가 제공되었다.
요구사항에 나와있는 틀에 맞춰 클래스는 총 4개로 제작하였다.
Main.java는 자유적으로 제작하였다.
MainMenu.java는 상품명, 상품가격, 상품설명과 다양한 메서드를 제작하였다.
FoodMenu.java는 상품의 정보를 저장하고 이름, 가격, 설명등을 리턴해줄 수 있도록 제작하였다.
Order.java는 장바구니 역할을 하고, 주문대기번호, 사용자에게 총가격을 알려줄 수 있도록 제작하였다.
Main.java
Main.java이다. 간단하게 MainMenu 클래스에 대한 인스턴스변수만 선언해준후 MainMenu클래스 안의 showMainMenu() 메서드를 출력해 주는 역할로 Main클래스의 역할은 종료시켰다.
MainMenu.java
MainMenu클래스의 시작점이다. 음식들의 이름, 가격, 설명을 제공받았는데 이것을 어떻게 처리할지 고민했다. 나는 Listㅇ나에 음식들의 정보를 넣어서 사용하는 방식을 선택하였다. 각각의 음식 카테고리에 따라서 리스트를 만들어주었다.
리스트에 메뉴이름을 넣는 작업을 할 때 이게 맞나? 싶었다. 더 좋은 방법이 있는지 찾아보다가 괜히 스스로 난이도를 높이는 그림이 나올 거 같아서 List에 열심히 상품내용을 넣어주었다.
Main.java에서 출력했던 showMainMenu() 메서드이다. 이 메서드를 출력하면 사용자에게 메뉴판목록을 제공하고 선택할 수 있도록 해준다. 사용자가 번호로 입력을 하면 choice변수 안에 넣어주었다.
switch-case문을 이용해서 사용자가 선택한 목록에 따라 기능을 실행하도록 구현하였다. 1~4번은 버거의 메뉴판을 출력하도록 하였고, 5번은 장바구니 목록을 보여준 후 주문을 할지 선택하도록 구현, 6번은 장바구니 목록을 보여주며 주문을 취소할지 선택하도록 하였다.
ShowBurgerMenu()이다. 이것과 나머지 3개(showFrozenCustardMenu(), showDrinksMenu(), showBeerMenu())는 동일한 코드로 작성하였다.
만들고 나서 보니 코드가 너무 길었다. 더 간략하게 할 수 있는 부분이 있지 않을까? 하며 주석을 작성했다. 하지만 찾아보아도 아직 어려운 개념이었다. 그래서 그냥 조금 길어지더라도 직접 코딩해 보며 제작하기로 하였다.
우선 BurgerMenu배열 안에 저장된 배열의 길이만큼 출력하여 사용자에게 메뉴를 제공하였다. 그 후 사용자가 상품을 선택하게 되면 선택한 버거의 정보를 넣어주기 위해 번호에서 -1을 해주었다. 그 뒤 사용자에게 다시 한번 확인을 한 뒤 1. 확인을 선택하게 되면 장바구니에 추가하는 식으로 제작하였다. 2번 취소를 누를 시에는 장바구니에 추가가 취소되었다고 출력하였고, 1,2번이 아닌 다른 숫자를 입력할 시 "숫자를 잘못 입력하였습니다."라고 출력하였다.
showOrderMenu()는 주문내역이 맞는지 체크하고 주문을 하는 기능을 구현하였다. 먼저 order클래스 안의 getbasket() 메서드를 사용하여 장바구니 안에 있는 내용을 basket에 넣어주었다. 그 후 for문을 사용하여 배열의 길이만큼 상품의 이름, 가격, 설명을 출력하였다. 그 뒤 order클래스의 totalPrice() 메서드를 사용해서 가격을 종합해 온 뒤 사용자에게 제공하였다. 그 후 주문을 선택하면 OrderComplete() 메서드를 불러와서 주문완료 메서드로 이동하도록 하였다. 2. 메뉴판을 선택할 시 다시 처음으로 돌아가도록 하였다.
OrderComplete() 메서드는 주문완료 시 언급될 것이고, 대기번호를 부여하도록 하였다. order클래스의 getOrderNumber() 메서드를 이용하여 주문번호를 가져온다. 그 후 대기번호를 알려준 뒤 카트를 초기화시켜 준다. 초기화 한 뒤에는 주문번호가 상승해야 하니 orderNumber에 +1을 해주었다. 3초 후 메인메뉴판으로 돌아가도록 구현해야 했다. 그래서 검색해 본 결과 sleep를 사용하면 되었다. try-catch를 사용하여 3초간 지연시킨 후 메뉴판을 출력하도록 하였다. 예외상황 발생 시는 경고문을 출력하도록 하였다.
OrderCancel은 주문을 취소하는 메서드이다. 주문을 취소할지 체크를 해주고, 주문을 취소할 시에는 카트를 비워주고 메인메뉴로 돌아간다. 주문을 취소하지 않을 시 장바구니는 그대로 두고 "주문을 유지하고 메뉴판으로 돌아갑니다."라는 말을 출력하고 메인메뉴로 돌아간다.
FoodMenu.java
FoodMenu클래스이다. 상품의 이름, 가격, 설명을 넘겨받아서 인스턴스 변수에 대입한다. 그 후 다른 클래스에서 상품의 이름, 가격, 설명이 필요한 시점이 있으면 값들을 리턴해서 사용하게 해 준다.
Order.java
Order.java에서는 생성자에는 리스트를 생성해 주고 초기 주문번호를 1로 설정해 주었다.
각각의 간단한 개념이다. 리턴해주는 메서드들과 장바구니에 추가하고 제거하는 식의 기능을 맡는다.
totalPrice라는 가격 계산 메서드이다. 이 부분에서 시간을 많이 투자하였다. 우선 장바구니 안에 있는 정보를 menu에 넣어주었다. 그 후 total안에 모든 값들을 더해서 넣어주었다. getPrice() 메서드를 호출해서 가격을 가져오고, 문자열 일부를 추출해 오기 위해 substring()을 출력하였다. 가격 형태가 W 6.5 이런 식으로 되어있기 때문에 띄어쓰기 포함 2번 문자열부터 추출하여 가져왔다. 가져온 문자열을 double형태로 가져왔다. 마지막으로 total값을 리턴해주면 끝이다.
후기
개인프로젝트 과제를 받았는데 기본 제공 코드가 없었다. 그래서 하나하나 다 구현해야겠구나 생각하고 알고 있던 지식과 최고의 친구 구글과 함께 프로그램을 구현하였다. 직접 찾아보고 하나하나 수정하며 구현에 성공해 나갔다. 메서드 하나하나 구현하고 내가 생각하던 대로 기능이 수행되면 많이 뿌듯했다. 처음에는 검색을 하며 코딩을 하면 실력이 상승할지 걱정이었다. 하지만 얻는 게 생각보다 많았다. 오류가 뜨는 부분을 직접 검색해 가며 해결해 나가니 후에 같은 상황이 발생하면 먼저 해결방법이 떠올랐다. 현재 내가 코딩한 코드들도 다양한 java의 메서드들을 이용하면 더 간결하게 표현할 수도 있다고 생각한다. 수업을 듣고 과제를 할 때는 몰랐는데 직접 하나하나 메서드를 제작해 가고, 클래스를 제작해 가며 프로그램을 완성하려 노력하다 보니 코딩하는 동안은 시간이 빠르게 흘렀다. 아직 1번째지만 언젠가 100번째 프로그램을 만들 날도 올 것이다. 그날까지 포기하지 않고 달려야겠다.
'프로젝트' 카테고리의 다른 글
[Spring] 최종 프로젝트 - 코끼리 (스파르타코딩클럽) (0) | 2023.09.19 |
---|---|
[Spring] 팀프로젝트 - trello (스파르타코딩클럽) (0) | 2023.08.17 |
[Spring] 팀프로젝트 - 밖에서 오늘 뭐하지? (스파르타코딩클럽) (0) | 2023.07.24 |
[Spring] 개인프로젝트 - 게시판, 댓글, 좋아요 (스파르타코딩클럽) (0) | 2023.07.13 |
[Spring] 팀프로젝트 - Pettalk (스파르타코딩클럽) (2) | 2023.07.13 |
남건욱's 공부기록