선택한 메뉴 카테고리의 아이템 목록을 보여주는 부분에서 선택한 아이템을 장바구니에 담는 부분을 추가로 구현했다. Cart 클래스는 장바구니에 아이템을 담고 장바구니 목록을 보여주고 가격의 총합을 보여주기 위한 클래스이다.
class Cart {
private val cartList = ArrayList<AbstractMenu>()
fun addItem(item: AbstractMenu?) {
if (item == null) {
println("선택하신 상품이 존재하지 않습니다. 관리자에게 문의해주세요.")
} else {
cartList.add(item)
}
}
fun checkAddItem(item: AbstractMenu?): Boolean {
if (item == null) {
println("선택하신 상품이 존재하지 않습니다. 관리자에게 문의해주세요.")
return false
} else {
println(
"\"${MenuManage(item).displayInfo()}\"\n" +
"위 메뉴를 장바구니에 추가하시겠습니까?\n" +
"1. 확인 2. 취소"
)
while (true) {
val input = readln()
var select: Int
if (input.isNumber()) {
select = input.toInt()
} else {
continue
}
return when (select) {
1 -> {
println("${item.name}이(가) 장바구니에 추가되었습니다.")
true
}
2 -> {
false
}
else -> {
println("잘 못 된 번호를 입력했어요. 다시 입력해주세요.")
continue
}
}
}
}
}
fun displayCart() {
if (cartList.isEmpty()) {
println("장바구니가 비어 있습니다.")
} else {
var total: Int = 0
cartList.forEach { item ->
total += item.price
println(MenuManage(item).displayInfo())
}
println("\n[ Total ]\n" +
"₩ $total")
}
}
}
이전에는 메뉴 아이템에 관련 된 부분과 메인 카테고리를 보여주는 부분을 한 클래스 안에 구현하였는데 메인 카테고리를 보여주는 부분을 분리하였고 사용자가 메뉴 카테고리를 선택했을 때 카테고리의 타이틀을 출력해주는 함수를 추가하였다.
class MainProduct {
private val mainList = mutableMapOf<String, String>()
private var mapKeys = listOf<String>()
private var mapValues = listOf<String>()
init {
initMainList()
}
private fun initMainList() {
mainList["Burger"] = "주문 즉시 바로 조리해 더욱 맛있는, 맥도날드의 다양한 버거를 소개합니다."
mainList["Side & Dessert"] = "버거와 함께 즐기면 언제나 맛있는 사이드와 디저트 메뉴!"
mainList["Mac Cafe & Beverage"] = "언제나 즐겁게, 맥카페와 다양한 음료를 부담없이 즐기세요!"
mainList["Order"] = "장바구니를 확인 후 주문합니다."
mainList["Cancel"] = "진행중인 주문을 취소합니다."
mapKeys = mainList.keys.toList()
mapValues = mainList.values.toList()
}
fun displayMain() {
println(
"\n아래 메뉴판을 보시고 메뉴를 골라 입력해주세요. \n\n" +
"[ McDonald's's MENU ]"
)
for (i in 0 until mainList.size) {
println("%d. %-20s | %s".format(i + 1, mapKeys[i], mapValues[i]))
}
}
fun displayTitle(index: Int) {
if (index < 0 || index > mainList.size) {
return
}
println("[${mapKeys[index - 1]} MENU]")
}
}
fun main() {
val productManage = ProductManage()
val mainProduct = MainProduct()
val cart = Cart()
while (true) {
mainProduct.displayMain()
val input = readln()
var select: Int
if (input.isNumber()) {
select = input.toInt()
} else {
continue
}
mainProduct.displayTitle(select)
when (select) {
1 -> {
val menu = "burger"
productManage.displayMenu(menu)
while (true) {
val enter = readln()
var number: Int
if (enter.isNumber()) {
number = enter.toInt()
} else {
continue
}
if (number == 0) {
break
} else if (number < 0 || number > productManage.getMenuCount(menu)) {
println("잘 못 된 번호를 입력했어요. 다시 입력해주세요.")
} else {
val item = productManage.getSelectedItem(menu, number)
if (cart.checkAddItem(item)) {
cart.addItem(item)
}
break
}
}
}
2 -> {
val menu = "fried"
productManage.displayMenu(menu)
while (true) {
val enter = readln()
var number: Int
if (enter.isNumber()) {
number = enter.toInt()
} else {
continue
}
if (number == 0) {
break
} else if (number < 0 || number > productManage.getMenuCount(menu)) {
println("잘 못 된 번호를 입력했어요. 다시 입력해주세요.")
} else {
val item = productManage.getSelectedItem(menu, number)
if (cart.checkAddItem(item)) {
cart.addItem(item)
}
break
}
}
}
3 -> {
val menu = "beverage"
productManage.displayMenu(menu)
while (true) {
val enter = readln()
var number: Int
if (enter.isNumber()) {
number = enter.toInt()
} else {
continue
}
if (number == 0) {
break
} else if (number < 0 || number > productManage.getMenuCount(menu)) {
println("잘 못 된 번호를 입력했어요. 다시 입력해주세요.")
} else {
val item = productManage.getSelectedItem(menu, number)
if (cart.checkAddItem(item)) {
cart.addItem(item)
}
break
}
}
}
4 -> { // Order
cart.displayCart()
}
5 -> {
println("프로그램을 종료합니다.")
break
}
else -> {
println("잘 못 된 번호를 입력했어요. 다시 입력해주세요.")
}
}
}
}
실행 결과를 보면 아이템을 출력할 때 아이템 이름 영역의 길이를 맞추는 부분이나 가격을 출력할 때 3자리 단위로 쉼표를 표시하지 못 하는게 아쉬워 우선적으로 수정해야겠다는 생각이 든다. 🤔
아래 메뉴판을 보시고 메뉴를 골라 입력해주세요.
[ McDonald's's MENU ]
1. Burger | 주문 즉시 바로 조리해 더욱 맛있는, 맥도날드의 다양한 버거를 소개합니다.
2. Side & Dessert | 버거와 함께 즐기면 언제나 맛있는 사이드와 디저트 메뉴!
3. Mac Cafe & Beverage | 언제나 즐겁게, 맥카페와 다양한 음료를 부담없이 즐기세요!
4. Order | 장바구니를 확인 후 주문합니다.
5. Cancel | 진행중인 주문을 취소합니다.
1
[Burger MENU]
1. Big Mac | ₩ 5500 | 100% 순 쇠고기 패티 두 장에 치즈, 양상추, 피클
2. McCrispy Deluxe Burger | ₩ 6800 | 100% 통다리살 케이준 치킨 패티, 포테이포 브리오쉬 번
3. McSpicy Shanghai Burger | ₩ 5500 | 100% 닭가슴살 통살 위에 양상추, 토마토, 치킨 패티
0. 뒤로가기 | 뒤로가기
2
"McCrispy Deluxe Burger | ₩ 6800 | 100% 통다리살 케이준 치킨 패티, 포테이포 브리오쉬 번"
위 메뉴를 장바구니에 추가하시겠습니까?
1. 확인 2. 취소
1
McCrispy Deluxe Burger이(가) 장바구니에 추가되었습니다.
아래 메뉴판을 보시고 메뉴를 골라 입력해주세요.
[ McDonald's's MENU ]
1. Burger | 주문 즉시 바로 조리해 더욱 맛있는, 맥도날드의 다양한 버거를 소개합니다.
2. Side & Dessert | 버거와 함께 즐기면 언제나 맛있는 사이드와 디저트 메뉴!
3. Mac Cafe & Beverage | 언제나 즐겁게, 맥카페와 다양한 음료를 부담없이 즐기세요!
4. Order | 장바구니를 확인 후 주문합니다.
5. Cancel | 진행중인 주문을 취소합니다.
2
[Side & Dessert MENU]
1. Cheese Sticks - 2조각 | ₩ 2000 | 자연 모짜렐라 치즈로 빈틈 없이 고소한 치즈스틱
2. Cheese Sticks - 4조각 | ₩ 4200 | 자연 모짜렐라 치즈로 빈틈 없이 고소한 치즈스틱
3. McNuggets - 4조각 | ₩ 2600 | 바삭하고 촉촉한 치킨이 한 입에 쏙
4. McNuggets - 6조각 | ₩ 3800 | 바삭하고 촉촉한 치킨이 한 입에 쏙
0. 뒤로가기 | 뒤로가기
1
"Cheese Sticks - 2조각 | ₩ 2000 | 자연 모짜렐라 치즈로 빈틈 없이 고소한 치즈스틱"
위 메뉴를 장바구니에 추가하시겠습니까?
1. 확인 2. 취소
1
Cheese Sticks이(가) 장바구니에 추가되었습니다.
아래 메뉴판을 보시고 메뉴를 골라 입력해주세요.
[ McDonald's's MENU ]
1. Burger | 주문 즉시 바로 조리해 더욱 맛있는, 맥도날드의 다양한 버거를 소개합니다.
2. Side & Dessert | 버거와 함께 즐기면 언제나 맛있는 사이드와 디저트 메뉴!
3. Mac Cafe & Beverage | 언제나 즐겁게, 맥카페와 다양한 음료를 부담없이 즐기세요!
4. Order | 장바구니를 확인 후 주문합니다.
5. Cancel | 진행중인 주문을 취소합니다.
4
[Order MENU]
McCrispy Deluxe Burger | ₩ 6800 | 100% 통다리살 케이준 치킨 패티, 포테이포 브리오쉬 번
Cheese Sticks - 2조각 | ₩ 2000 | 자연 모짜렐라 치즈로 빈틈 없이 고소한 치즈스틱
[ Total ]
₩ 8800