Kotlin 문법 심화 - 3

두주·2023년 12월 13일

Lv.4 에 도전한다

예외를 처리하고, 장바구니 기능을 추가하여
구매 가능 상태를 정의해야 한다.

fun main() {


    println("SHAKESHACK BURGER에 오신 것을 환영합니다.")
    println("메뉴판을 보시고 메뉴를 골라 입력해 주세요.")

    println("[SHAKESHACK MENU]")
    println(String.format("%-1s. %-32s | %s ","1", "Burgers", "앵거스 비프 통살을 다져 만든 버거."))
    println(String.format("%-1s. %-32s | %s ","2", "Forzen Custard", "매장에서 신선하게 만드는 아이스크림."))
    println(String.format("%-1s. %-32s | %s ","3", "Drinks", "매장에서 직접 만드는 음료."))
    println(String.format("%-1s. %-32s | %s ","4", "Beer", "뉴욕 브루클린 브루어리에서 양조한 맥주"))
    println()
    println("[ ORDER MENU ]")
    println(String.format("%-1s. %-32s | %s ","5", "Order", "장바구니를 확인한 후 주문합니다."))
    println(String.format("%-1s. %-32s | %s ","6", "Cancle", "진행 중인 주문을 취소합니다."))



    while(true) {
        try {
            val selectNumber = readlnOrNull()?.toInt()
            when (selectNumber) {
                1 -> {
                    MenuBurger().displayMenu()
                    val burgerSelect = readlnOrNull()?.toInt()
                    when (burgerSelect) {
                        1 -> AddCart().addCart(burgerSelect)
                        2 -> AddCart().addCart(burgerSelect)
                        3 -> AddCart().addCart(burgerSelect)
                        4 -> AddCart().addCart(burgerSelect)
                        5 -> AddCart().addCart(burgerSelect)
                        0 -> {
                            println("뒤로 가기")
                            return main()
                        }
                        else -> println("메뉴를 확인하신 뒤 숫자를 다시 입력해 주세요.")
                    }
                }

                2 -> {
                    MenuFrozenCustard().displayMenu()
                    val frozenCustardSelect = readlnOrNull()?.toInt()
                    when (frozenCustardSelect) {
                        1 -> AddCart().addCart(frozenCustardSelect)
                        2 -> AddCart().addCart(frozenCustardSelect)
                        3 -> AddCart().addCart(frozenCustardSelect)
                        4 -> AddCart().addCart(frozenCustardSelect)
                        5 -> AddCart().addCart(frozenCustardSelect)
                        0 -> {
                            println("뒤로 가기")
                            return main()
                        }
                        else -> println("메뉴를 확인하신 뒤 숫자를 다시 입력해 주세요.")
                    }
                }
                3 -> {
                    MenuDrinks().displayMenu()
                    val drinksSelect = readlnOrNull()?.toInt()
                    when (drinksSelect) {
                        1 -> AddCart().addCart(drinksSelect)
                        2 -> AddCart().addCart(drinksSelect)
                        3 -> AddCart().addCart(drinksSelect)
                        4 -> AddCart().addCart(drinksSelect)
                        5 -> AddCart().addCart(drinksSelect)
                        0 -> {
                            println("뒤로 가기")
                            return main()
                        }
                        else -> println("메뉴를 확인하신 뒤 숫자를 다시 입력해 주세요.")
                    }
                }

                4 -> {
                    MenuBeers().displayMenu()
                    val beersSelect = readlnOrNull()?.toInt()
                    when (beersSelect) {
                        1 -> AddCart().addCart(beersSelect)
                        2 -> AddCart().addCart(beersSelect)
                        3 -> AddCart().addCart(beersSelect)
                        4 -> AddCart().addCart(beersSelect)
                        5 -> AddCart().addCart(beersSelect)
                        0 -> {
                            println("뒤로 가기")
                            return main()
                        }
                        else -> println("메뉴를 확인하신 뒤 숫자를 다시 입력해 주세요.")
                    }
                }

                5 -> {
                    val callcart = OrderCart()
                    callcart.orderCart()
                }

                6 -> {
                    println("프로그램을 종료합니다.")
                 break
                }


                0 -> {
                    println("프로그램을 종료합니다.")
                    break
                }

                else -> println("메뉴를 확인하신 뒤 숫자를 다시 입력해 주세요.")

            }
        } catch (e: java.lang.NumberFormatException) {
            println("메뉴를 확인하신 뒤 숫자를 다시 입력해 주세요.")
        }
   }

먼저 while(true)로 반복문을 생성해 준 뒤, 조건을 만족하지 않을 경우
계속 표시될 수 있도록 try-catch를 사용했다.

요청하는 수를 제외한 문자열이나, 공백 등의 발생할 수 있는 예외를 처리했다.

그리고 장바구니 기능을 구현.. 모르겠다.. ㅠㅠ

class AddCart {

    fun addCart(burgerSelect: Int) {
        val burger = MenuBurger().menuList[burgerSelect - 1]

        cart.add(dataOrder(burger.recommend, burger.name, burger.price, burger.details))

        println("${burger.name}가 장바구니에 추가되었습니다.")
    }
}
class OrderCart {

    fun orderCart() {

        ShowCart().showCart()

        println("장바구니에 담긴 햄버거들을 주문하시겠습니까?")
        println("1. 확인")
        println("2. 취소")

        while (true) {
            val answer = readlnOrNull()?.toInt()

            when (answer) {
                1 -> {
                    if (cart.isEmpty()) {
                        println("장바구니가 비어있습니다.")
                        println("메인 화면으로 돌아갑니다.")
                    } else {
                        println("주문이 완료되었습니다. 감사합니다.")
                        cart.clear()
                        break
                    }
                }

                2 -> {
                    println("주문이 취소되었습니다. 다시 선택해주세요.")
                    return main()
                }

                else -> {
                    println("잘못된 입력입니다. 1 또는 2을 입력해주세요.")
                }
            }
        }

    }
}
class OrderMenu {

    fun orderMenu() {

        println(String.format("%-1s. %-32s | %s ","5", "Order", "장바구니를 확인한 후 주문합니다."))
        println(String.format("%-1s. %-32s | %s ","6", "Cancle", "진행 중인 주문을 취소합니다."))

        var orderCheck = readLine()?.toInt()

    }

}
class ShowCart {

    val cart = mutableListOf<dataOrder>()
            fun showCart() {

            println("장바구니에는 총 ${cart.size}개의 햄버거가 있습니다.")

            cart.forEach { println(it) }

            val totalPrice = cart.sumOf { it.price }
            println("장바구니에 담긴 햄버거들의 총 가격은 ${totalPrice}원입니다.")
        }
    }

일단 이렇게 만들어 진 상태인데

내일 수정해 봐야 뭔가 틀이 잡힐 것 같다

profile
야옹.

0개의 댓글