Skip to content

aneunwook/kiosk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kiosk

📚 프로젝트 소개

콘솔 기반으로 한 키오스크 프로그램이며, 객체지향적 설계를 통해서 단계적으로 구현한 프로젝트 입니다. 사용자는 제공 되는 메뉴를 보고 원하는 상품을 장바구니에 추가하고 결제까지 진행 할 수 있습니다.

⏰ 프로젝트 기간

  • 2025.04.24 ~ 2025.05.01

⚙️ 개발 환경

  • java: 17
  • jdk: 17.0.1
  • IDE : IntelliJ

📌 기능 설명

1️⃣ Lv1. 기본적인 키오스크

  • Scanner로 사용자 입력을 받아 햄버거 메뉴를 출력하고 선택할 수 있도록 구현
  • while 반복문과 조건문으로 흐름 제어
  • 0 입력 시 종료 처리

2️⃣ Lv2. 매뉴를 클래스로 관리

  • MenuItem 클래스 생성: 이름, 가격, 설명을 필드로 가짐
  • 여러 MenuItemList로 관리하고 반복문으로 출력
  • 메뉴 선택 시 해당 항목 출력

3️⃣ Lv3. 전체 로직을 Kiosk 클래스로 분리

  • Kiosk 클래스 생성: 메뉴 출력과 사용자 입력 처리를 start() 메서드로 구현
  • main() 메서드는 Kiosk.start()만 호출
  • 프로그램의 흐름을 Kiosk 클래스가 전담하여 구조 개선

4️⃣ 메뉴를 카테고리별로 관리하는 Menu 클래스 추가

  • Menu 클래스 생성: 여러 MenuItem(Burgers, Drinks, Desserts)에 속하는 메뉴들을 묶어 관리
  • 카테고리: Burgers / Drinks / Desserts
  • 선택에 따라 카테고리 내부 메뉴 출력 후 메뉴 선택 가능, 메뉴 선택 시 상세 정보 출력

5️⃣ Lv5. 캡슐화 적용

  • 모든 클래스의 필드 접근제어자 private로 변경
  • Getter / Setter 메서드를 통해 필드 접근
  • 외부에서 객체 내부 데이터에 직접 접근하지 못하도록 보호

1️⃣ 도전 Lv1. 장바구니 및 주문 기능 추가

  • 메뉴 선택 시, 해당 메뉴를 장바구니에 추가할지 여부를 사용자에게 확인
  • 장바구니에 메뉴 이름, 수량, 가격 정보를 저장
  • 장바구니 내용을 출력하고 총 금액 계산
  • “주문하기” 기능 추가: 장바구니 항목들을 출력 후, 주문 확정 시 장바구니 초기화
  • 예외 처리: 유효하지 않은 메뉴 번호, 잘못된 입력 등에 대한 적절한 안내

2️⃣ 도전 Lv2. Enum, 람다 & 스트림을 활용한 주문 및 장바구니 관리

  • MenuItem, Cart, PersonType, Menu, Kiosk 클래스로 기능 분리
  • 사용자 유형의 Enum 정의 및 각 사용자 유형에 따른 할인율 설정
  • PersonType enum을 활용해 할인율 적용 로직 분리
  • 메뉴 항목 출력 시 Stream.forEachLambda 사용
  • 장바구니에서 특정 메뉴 삭제 시 Stream.filter 활용
  • Stream을 통한 총 금액 계산

💻 실행 예시

[ MAIN MENU ]
1 Burgers
2 drinks
3 desserts
0. 종료      | 종료
주문 번호: 1

[ BURGERS MENU ]
1. ShackBurger || 6.9 || 토마토, 양상추, 쉑소스가 토핑된 치즈버거
2. SmokeShack || 8.9 || 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
3. Cheeseburger || 6.9 || 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거
4. Hamburger || 5.4 || 비프패티를 기반으로 야채가 들어간 기본버거
0. 뒤로가기
음식을 선택해 주세요: 1

**ShackBurger || 6.9 || 토마토, 양상추, 쉑소스가 토핑된 치즈버거**

위 메뉴를 장바구니에 추가 하시겠습니까?
1. 확인        2. 취소
1
ShackBurger 이 장바구니에 추가되었습니다.
[ MAIN MENU ]
1 Burgers
2 drinks
3 desserts
0. 종료      | 종료

[ ORDER MENU ]
4. Orders       | 장바구니를 확인 후 주문합니다 
5. Cancel       | 진행중인 주문을 취소합니다
주문 번호: 4
아래와 같이 주문 하시겠습니까?

[ Orders ]
1. ShackBurger || 6.9 || 토마토, 양상추, 쉑소스가 토핑된 치즈버거

[ Total ]
총 수량 : 1 || 총 금액 : 6.9
1. 주문      2. 메뉴판      3. 장바구니 삭제
1
할인 정보를 입력해주세요.
 1. 군인     :  30%
 2. 학생     :  10%
 3. 일반인     :  0%
1
주문이 완료되었습니다. 금액은 4.83 입니다

📂 예외 처리 예시

  • 유효하지 않은 메뉴 번호, 잘못된 입력 등에 대한 예외 (다시 입력 받도록 처리)

1. 메뉴 번호 범위 초과 입력

[ MAIN MENU ]
1 Burgers
2 drinks
3 desserts
0. 종료      | 종료

[ ORDER MENU ]
4. Orders       | 장바구니를 확인 후 주문합니다 
5. Cancel       | 진행중인 주문을 취소합니다
주문 번호: 6
1 ~ 5 까지만 선택해주세요!

2. 숫자가 아닌 문자 입력

[ MAIN MENU ]
1 Burgers
2 drinks
3 desserts
0. 종료      | 종료

[ ORDER MENU ]
4. Orders       | 장바구니를 확인 후 주문합니다 
5. Cancel       | 진행중인 주문을 취소합니다
주문 번호: s
숫자로 입력해 주세요!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages