[Project] Week3 Assignment

Minjun Kim·2023년 7월 26일
0
post-thumbnail

이번 3주차에는 키오스크 기능 을 간단하게 구현하는 팀 프로젝트를 진행했습니다.

컨셉은 대전의 자랑 성심당 을 선택했습니다.

  • 대략적인 진행
  1. 키오스크 실행
  2. 메뉴판 출력
  3. 메뉴 선택 시 상세 상품 목록 출력
  4. 상품를 고르면 장바구니에 추가
  5. 결제 선택 시 장바구니 목록과 보유 잔액 출력

저는 class Menuclass WaitCount 를 맡았습니다. (자세한 사항은 팀 노션으로)

  • class Menu
import java.text.DecimalFormat

open class Menu {
    val dec = DecimalFormat("#,###")

    val breadArray = arrayOf(   // 빵 상세 품목
        arrayOf("튀소패밀리", dec.format(10800)),
        arrayOf("파이만주세트", dec.format(9600)),
        arrayOf("오키도키슈", dec.format(3500)),
        arrayOf("오키도키슈세트", dec.format(14000)),
        arrayOf("김과장세트", dec.format(40000))
    )

    val snacksArray = arrayOf(  // 전통 과자 상세 품목
        arrayOf("대전부르스약과", dec.format(1200)),
        arrayOf("쑥떡앙빵", dec.format(1800)),
        arrayOf("파래미니전병", dec.format(3500)),
        arrayOf("땅콩미니전병", dec.format(1000)),
        arrayOf("대전부르스만주 1호", dec.format(17000))
    )

    val cakeArray = arrayOf(    // 케이크 상세 품목
        arrayOf("축복 4호", dec.format(41000)),
        arrayOf("키리쉬모짜르트", dec.format(35000)),
        arrayOf("티라미수 1호", dec.format(30000)),
        arrayOf("딸기요거트", dec.format(30000)),
        arrayOf("클래식치즈케이크", dec.format(30000))
    )

    val rollsAndPoundArray = arrayOf(   // 롤파운드 상세 품목
        arrayOf("순수마들렌 1호", dec.format(5000)),
        arrayOf("제로쿠키세트", dec.format(25000)),
        arrayOf("대흥동 종소리", dec.format(30000)),
        arrayOf("성심갸또컬렉션 2호", dec.format(39000)),
        arrayOf("마들파운드 2호", dec.format(30000))
    )
    open fun add(orderList: MutableSet<String>) {
        // 장바구니에 추가
    }
}

  • class WaitCount
import java.util.Timer
import java.util.TimerTask
import kotlin.random.Random

class WaitCount {
	fun waitCount() {
		// 1부터 20까지 무작위 대기자
		var waitCount = Random.nextInt(1, 21)

		// 타이머 객체 선언
		val timer = Timer()

		// 타이머 동작 시간 지정 및 작업 내용 지정
		timer.schedule(object : TimerTask() {
			override fun run() {
				// 최초 대기자 수 출력
				println("이와 같이 주문 하시겠습니까? (현재 주문 대기수: ${waitCount})")

				// 1부터 3까지 무작위 픽업
				val pickupCount = Random.nextInt(1, 4)

				// 대기자 수 감소
				if (waitCount > pickupCount) {
					waitCount -= pickupCount
				} else {
					waitCount--
				}

				// 대기자가 0명이 되면 타이머 종료
				if (waitCount <= 0) {
					println("[현재 주문 대기자가 없습니다!]")
					timer.cancel()
				}
			}
		}, 0, 5000)   // 즉시 실행, 5초 마다 반복
	}
}

23/07/28 추가

header

🙆🏻‍♂️ Team Members

  • 팀명 : 꿈을 '일구'조
  • 팀 소개 : 19조 인거랑 땅을 일궈내듯이 꿈을 일궈내자는 뜻!
이름역할MBTIBLOG
추민수팀장ENFJ바로가기!
김민준팀원ENTP바로가기!
신민지팀원ISFP바로가기!
손현준팀원INTP바로가기!
이혜명팀원INFP & ENTP바로가기!

📖 Notion


📽️ Project

  • 주제 : 키오스크 프로그래밍

  • 프로젝트명 : 🥐 대전의 자랑 🥐

  • 프로젝트 소개 : 대전의 자랑 ‘성심당’의 키오스크 구현하기


💡IDEA

  • WireFrame

img


☑️ Implementation Function

  • Main.kt 실행 시 Balance, Datetime Class를 불러와 현재시간 및 현재 잔액 표시
  • Datetime : 현재 실시간 정보를 받아와 은행점검 이외의 시간에만 결제가 가능하도록 구현한 클래스
  • Balance : 랜덤함수를 통해 처음 실행 시 20 ~ 30 만원 사이의 값을 랜덤으로 받아와 저장하도록 구현한 클래스
  • 우상단의 메뉴판을 보고 클릭 시 각자의 클래스를 호출해와 화면에 출력

  • 선택한 번호에 따라 각각의 메뉴들에 대한 항목들이 출력되도록 구현

  • 항목 선택 시 추가되었다는 메시지와 함께 구현 해놓은 orderList 에 항목 추가됨
  • ① 클릭 시 다시 상단의 [성심당 MENU] 로 돌아가 추가주문 구현
  • ② 클릭 시 현재의 List의 정보를 가지고 결제를 담당하는 Order 클래스 호출

  • 결제 클릭 시Order class 내부에서 장바구니(orderList) 를 불러와 항목 출력 후 총 가격 표시
  • 결제하시겠습니까 메시지가 뜨면서 WaitCount 클래스르 호출해 현재 대기자 수를 랜덤으로 불러오고 5초마다 한번씩 랜덤으로 대기자가 줄어들게 구현

image

  • 최종적으로 결제하기를 누르게 되면 Datetime클래스를 거쳐 현재 점검시간이 아니라면 결제가 가능하다는 메시지와 함께 현재 잔액또한 표시됨

예외처리

profile
응애 나 아기 뉴비

0개의 댓글