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}원입니다.")
}
}
일단 이렇게 만들어 진 상태인데
내일 수정해 봐야 뭔가 틀이 잡힐 것 같다