package com.example.mykiosk
fun main() {
val menu = Menu(name = "", price = 0)
val burger = Burger(burgerName = "", burgerPrice = 0)
val mcCafe = McCafe(mcCafeName = "", mcCafePrice = 0)
val orderCart = OrderCart(menu)
val bugerOrder = OrderCart(burger)
val mcCafeOrder = OrderCart(mcCafe)
println("")
println("[맥도날드 키오스크]")
while (true) {
println("")
println("---------------------------------------------------------------------------------------------")
println("[전체 메뉴 : 번호를 입력하시면 상세 메뉴 페이지로 이동합니다.]")
println("[1] 햄버거 단품 : 주문 즉시 조리하는 햄버거 ")
// println("[2] 햄버거 세트 : 햄버거 + 감자튀김 + 음료 세트")
println("[3] 맥카페 : 다양한 음료")
// println("[4] 사이드 : 디저트 및 사이드 메뉴")
// println("[5] 맥모닝 : 새벽 4시부터 오전 10시30분까지 주문 가능")
println("")
println("[주문 : 주문 완료를 위해 올바른 번호를 입력해주세요.]")
println("[9] 장바구니로 이동하여 결제")
println("[0] 주문 취소 및 프로그램 종료")
var selectMainMenu = InputNumber().inputNumber("selectInt").toString().toInt()
when (selectMainMenu) {
1 -> {
println("햄버거 단품의 상세 페이지로 이동합니다.")
bugerOrder.detailedOrder(burger)
burger.detailedBurger()
}
3 -> {
println("맥카페의 상세 페이지로 이동합니다.")
mcCafeOrder.detailedOrder(mcCafe)
mcCafe.detailedMcCafe()
}
9 -> {
println("주문내역을 확인합니다.")
orderCart.detailedOrder(menu)
}
0 -> {
println("프로그램이 종료됩니다.")
break
}
else -> {
println("잘못된 번호입니다. 올바른 번호를 입력해주세요.")
}
}
}
}
package com.example.mykiosk
class InputNumber {
fun inputNumber(type: String): Any? {
return when (type) {
"selectInt" -> {
println("원하는 번호를 입력해주세요.")
while (true) {
try {
var selectInt: String? = readLine()
return selectInt?.toInt() ?: -1
} catch (e: Exception) {
println("올바른 번호를 다시 선택해주세요. 숫자만 입력 가능 합니다.")
}
}
}
"selectDouble" -> {
println("원하는 번호를 입력해주세요.")
while (true) {
try {
var selectDouble: String? = readLine()
return selectDouble?.toDouble() ?: -1
} catch (e: Exception) {
println("올바른 번호를 다시 선택해주세요. 숫자(소수점 가능)만 입력 가능 합니다.")
}
}
}
else -> {
return "no"
}
}
}
}
package com.example.mykiosk
open class Menu(var name : String, var price : Int) {
}
package com.example.mykiosk
class Burger(var burgerName: String, var burgerPrice: Int) : Menu(burgerName, burgerPrice) {
val orderCart = OrderCart(this)
fun detailedBurger() {
val sanghai = Burger("맥스파이시 상하이 버거 단품", 5500)
val deluxe = Burger("맥크리스피 디럭스 버거 단품", 6800)
while (true) {
println("")
println("---------------------------------------------------------------------------------------------")
println("[햄버거 단품 메뉴 목록]")
println("[1] ${sanghai.burgerName}: ${sanghai.burgerPrice}원 ")
println("[2] 맥크리스피 디럭스 버거 단품: 6,800원")
println("")
println("[8] 장바구니 확인하기")
println("[9] 메인메뉴로 돌아가기")
println("[0] 프로그램 종료")
var selectBurgerMenu = InputNumber().inputNumber("selectInt").toString().toInt()
when (selectBurgerMenu) {
1 -> {
order(sanghai)
}
2 -> {
order(deluxe)
}
8 -> {
orderCart.detailedOrder(this)
}
9 -> {
println("메인메뉴로 돌아갑니다.")
return
}
0 -> {
println("프로그램을 종료합니다.")
break
}
else -> {
println("잘못된 번호입니다. 올바른 번호를 입력해주세요.")
}
}
}
}
fun order(burger: Burger) {
println("")
println("${burger.burgerName}은 ${burger.burgerPrice}원 입니다. 장바구니에 추가하시겠습니까?")
println("[1] 추가 [2] 취소")
var selectBurgerOrder = InputNumber().inputNumber("selectInt").toString().toInt()
when (selectBurgerOrder) {
1 -> {
orderCart.addToCart(burger.burgerName, burger.burgerPrice)
println("${burger.burgerName} 장바구니 추가 완료!")
}
2 -> {
println("취소하셨습니다. 이전 메뉴로 돌아갑니다.")
return
}
}
}
}
package com.example.mykiosk
class McCafe(var mcCafeName : String, var mcCafePrice : Int) : Menu(mcCafeName,mcCafePrice) {
val orderCart = OrderCart(this)
fun detailedMcCafe() {
val dripHot = McCafe("Hot-드립커피", 2000)
val dripIce = McCafe("Ice-드립커피", 1800)
while (true) {
println("")
println("---------------------------------------------------------------------------------------------")
println("[맥카페 메뉴 목록]")
println("[1.1] Hot-드립커피 : 2,000원")
// println("[1.2] Ice-드립커피 : 1,800원")
// println("[2.1] Hot-드립커피 : 2,000원")
println("[2.2] Ice-드립커피 : 1,800원")
println("")
println("[9] 메인메뉴로 돌아가기")
println("[0] 프로그램 종료")
var selectMcCafeMenu = InputNumber().inputNumber("selectDouble").toString().toDouble()
when (selectMcCafeMenu) {
1.1 -> {
order(dripHot)
}
2.2 -> {
order(dripIce)
}
9.0 -> {
println("메인메뉴로 돌아갑니다.")
return
}
0.0 -> {
println("프로그램을 종료합니다.")
break
}
else -> {
println("잘못된 번호입니다. 올바른 번호를 입력해주세요.")
}
}
}
}
fun order(mcCafe :McCafe) {
println("")
println("${mcCafe.mcCafeName}은 ${mcCafe.mcCafePrice}원 입니다. 장바구니에 추가하시겠습니까?")
println("[1] 추가 [2] 취소")
var selectBurgerOrder= InputNumber().inputNumber("selectInt").toString().toInt()
when(selectBurgerOrder) {
1 -> {
orderCart.addToCart(mcCafe.mcCafeName, mcCafe.mcCafePrice)
println("${mcCafe.mcCafeName} 장바구니 추가 완료!")
orderCart.detailedOrder(this)
}
2-> {
println("취소하셨습니다. 이전 메뉴로 돌아갑니다.")
return
}
}
}
}
package com.example.mykiosk
class OrderCart(private val menu: Menu) {
var orderList = mutableMapOf<String,Int>()
fun addToCart(name:String,price : Int) {
orderList.put(name,price)
var order = orderList.keys
println("${order} 가 장바구니에 담겼습니다.")
}
fun detailedOrder(menu: Menu) {
println("아래와 같이 주문하시겠습니까?")
orderList.forEach{ name,price ->
println("$name ($price)")
}
println("총 가격은 ${orderList.values.sum()}")
}
}
오늘 코드는 완성코드가 아니고 오늘까지 한 내용 백업 코드이다. 제일 문제인건 OrderCart클래스. 장바구니 담는 것 때문에 시행착오가 많았고, 아직도 시행착오 중인 코드.. 장바구니 문제 외에 메뉴를 선택하는 것들은 문제가 없긴하다.
OrderCart클래스에서 장바구니역할을 할 orderList를 map으로 선언해줬다. addToCart 펑션으로 map이니까 put()을 사용해서 버거,음료 등 상세메뉴선택에서 이름과 가격 값을 넣어주는데 까지는 됐는데! 그 넣어준 값이 addToCart 펑션 안에서 끝났다. 같은 클래스안에 있는 detailedOrder()까지 값이 저장이 안됐다.
=> 왜냐면.. OrderCart클래스를 변수에 인스턴스로 저장해서 값이 저장되게 했어야 했는데, 그냥 OrderCart().detailedOrder()로 직접 연결해버리니까 값이 저장될 틈없이 새로 불러오고 새로불러와서 저장이 안되는 거였다. 괜히 클래스를 변수에 담아서 사용하는게 아니었다. 주의해야겠다.
근데 그렇게 변수 선언해서 orderCart.detailedOrder()를 연결해줬더니 딱 변수 선언한 클래스에서만 값이 유효했다. 전체적으로 값이 공유가 안된다.
=>팀원들과 코드 공유하는 시간에 얘기해봤는데, 사실 지금 형태로는 Burger따로 McCafe따로 있어서 당연히 전체적으로 값을 공유할 수 없는 상황이라고 하셨다. 상속을 받는다고 자식 클래스들 끼리 묶이는 건 아니니까.. 이건 내일 할 일을 통해서 해결하도록 하겠다.