[Kotlin 문법 심화] 팀과제 - 키오스크 Lv5. (2)

0
post-thumbnail

🍥구현 기능

  • 결제 시 현재 시간과 비교하여, 특정 시간대에는 결제할 수 없도록 구현하기

🍥구현하기

DateAndTimeManager 클래스

  • 날짜와 시간 관련 작업을 구현한 클래스
  • 메소드:
    • getDateString():String
      현재 날짜를 yyyy-MM-dd 형식으로 나타낸 문자열 반환
    • getTimeString():String
      현재 시각을 HH:mm:ss 형식으로 나타낸 문자열 반환
    • timeCompare(timeString1:String, timeString2: String):Boolean
      시각을 HH:mm:ss 형식으로 나타낸 두 개의 문자열을 매개변수로 받아, 첫번째 문자열이 나타내는 시각이 두번째 문자열이 나타내는 시각보다 작은 경우 true 반환
class DateTimeManager {

    fun getDateString(): String {
        val currentDate = LocalDate.now()
        val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
        return currentDate.format(dateFormatter)
    }

    fun getTimeString():String{
        val currentDateTime = LocalDateTime.now()
        val timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss")
        return currentDateTime.format(timeFormatter)
    }

    fun timeCompare(timeString1:String, timeString2:String):Boolean{
        val time1 = timeString1.split(':')
        val time2 = timeString2.split(':')

        //시 비교
        if(time1[0] < time2[0]) return true
        if (time1[0] == time2[0]){
            //분 비교
            if(time1[1] < time2[1]) return true
            if (time1[1] == time2[1]){
                //초 비교
                return time1[2] < time2[2]
            }
        }
        return false
    }
}

OrderPaymentScreen 클래스

  • 현재 시각이 은행 점검 시간일 때에는 결제가 진행될 수 없도록 구현하기
[주문 결제 화면]
현재 시각은 23:15:10 입니다.
은행 점검 시간(23:10:00 ~ 23:20:00)에는 결제할 수 없습니다.
잠시 후 메인 화면으로 돌아갑니다...
  • 프로퍼티 추가:
    • bankTime1
      은행 점검 시작 시간을 HH:mm:ss 형식으로 나타낸 문자열
    • bankTime2
      은행 점검 종료 시간을 HH:mm:ss 형식으로 나타낸 문자열
  • 메소드 추가:
    • printPaymentFailScreen(currentTime:String)
      은행 점검 시간으로 결제를 진행할 수 없는 경우의 화면 출력
class OrderPaymentScreen : Screen() {
    var costSum = 0
    var balance = 0

    val bankTime1 = "23:10:00" //은행 점검 시작 시간
    val bankTime2 = "23:20:00" //은행 점검 종료 시간

    override fun run(): String {
        //은행 점검시간 확인
        val dateTimeManager = MyKiosk.dateTimeManager
        var currentTime = dateTimeManager.getTimeString()
        if(dateTimeManager.timeCompare(bankTime1, currentTime) && dateTimeManager.timeCompare(currentTime, bankTime2)){
            printPaymentFailScreen(currentTime)
            return "false"
        }

        //결제 가능한 경우
        //...생략...
    }

    private fun printPaymentFailScreen(currentTime:String) {
        println("[주문 결제 화면]")
        println("현재 시각은 ${currentTime} 입니다.")
        println("은행 점검 시간(${bankTime1}~${bankTime2})에는 결제할 수 없습니다.")
        println("잠시 후 메인 화면으로 돌아갑니다...")
    }

    override fun getInput(): String {
        //...생략... 
    }

    override fun printScreen() {
        //...생략...
    }
}

OrderCompleteScreen 클래스

  • 주문이 완료되었을 때, 현재 시각 출력하기
[주문 완료 화면]
주문이 완료되었습니다. (2023-12-08 23:25:12)
현재 잔고는 10000원 입니다.
잠시 후 첫 화면으로 이동합니다...
    override fun printScreen(){
        println("[주문 완료 화면]")
        val currentDate = MyKiosk.dateTimeManager.getDateString()
        val currentTime = MyKiosk.dateTimeManager.getTimeString()
        println("주문이 완료되었습니다. (${currentDate} ${currentTime})")
        println("현재 잔고는 ${MyKiosk.paymentManager.getBalance()}원 입니다.")
        println("잠시 후 첫 화면으로 이동합니다...")
    }

MyKiosk 클래스

  • companion object에 dateTimeManager 프로퍼티 추가
    companion object{
        //싱글톤 패턴
        private var instance:MyKiosk? = null

        fun newInstance():MyKiosk{
            if(instance == null) instance = MyKiosk()
            return instance!!
        }

        val myMenu = MyMenu()
        val shoppingCart = MenuItemCollection()
        val paymentManager = PaymentManager()
        val taskDelayManager = TaskDelayManager()
        val dateTimeManager = DateTimeManager()
        var isTakeOut:Boolean = false
    }
profile
Be able to be vulnerable, in search of truth

0개의 댓글