내일배움캠프 13일차

김재현·2024년 3월 14일

Lv. 3

  • 어제에 이어서 lv3를 구현했다.

Kiosk.kt

fun main(){
    while (true) {
        try {
            println("아래 메뉴판을 보시고 메뉴를 골라 입력해주세요")
            println("")
            println(
                "[ SHAKESHACK MENU ]\n" +
                        "1. Burgers         | 앵거스 비프 통살을 다져만든 버거\n" +
                        "2. Frozen Custard  | 매장에서 신선하게 만드는 아이스크림\n" +
                        "3. Drinks          | 매장에서 직접 만드는 음료\n" +
                        "4. Beer            | 뉴욕 브루클린 브루어리에서 양조한 맥주\n" +
                        "0. Exit            | 프로그램 종료" +
                        "\n" +
                        "\n" +
                        "[ ORDER MENU ]\n" +
                        "5. Order           | 장바구니를 확인 후 주문합니다.\n" +
                        "6. Cancel          | 진행중인 주문을 취소합니다."
            )
            var pick = readln().toInt()
            val cartMenu = Cart()
            when (pick) {
                1 -> Burgers().displayInfo()
                2 -> FrozenCustard().displayInfo()
                3 -> Drinks().displayInfo()
                4 -> Beer().displayInfo()
                5 -> cartMenu.displayCart()
                6 -> cartMenu.cartMenu.clear()
                0 -> {
                    println("프로그램을 종료합니다.")
                    break
                } else -> println("잘못된 번호입니다 다시 입력해주세요.")
            }
        } catch (e: NumberFormatException) {
            println("숫자로 입력해주세요.")
            println("")
            return continue
        }
    }
}
  • 메인 화면에서는 각 메뉴로 통하게 그대로 구현하였고 ORDER MENU를 추가하면서 장바구니 확인을 할 수 있도록 만들어주었다. (아직 미완)
  • 조건문에서는 해당 되지않는 숫자가 나오면 문구가 나오게 else로 간단하게 예외처리 해주었고 전체 반복문에서는 try catch를 통해 다른 자료형이 입력될시 문구가 나오도록 예외처리 해주었습니다.

  • 문자를 입력하였을때

  • 잘못된 번호를 입력하였을때

class Item

abstract class Item() {
    abstract fun displayInfo(): Unit
}
  • 추상클래스에서는 displayInfo 함수를 끌어다 썼는데 이렇게 써도 되는건지 사실 잘 모르겠습니다.

class Menu

class Menu(var num: Int, var name: String, var price: String) {
    fun displayInfo(): Unit {
    }
}
  • class Menu에서는 하위 클래스들의 각 메뉴 변수를 상속 받을 수 있게 해주었습니다.

class Burgers

class Burgers() : Item() {
    val bugerList = arrayListOf<Menu>(
        Menu(1, "ShackBurger", "₩ 6,900"),
        Menu(2, "SmokeShack", "₩8,900"),
        Menu(3, "Shroom Burger", "₩9,400"),
        Menu(4, "Cheeseburger", "₩6,900"),
        Menu(5, "Hamburger", "₩5,400"),
        Menu(0, "뒤로가기", "")
    )
    val cart = Cart()
    override fun displayInfo(): Unit {
        println("[ Burgers MENU ]")
        for (menu in bugerList) {
            println("${menu.num}. ${menu.name} | ${menu.price}")
        }
        while (true) {
            try {
                when (readln().toInt()) {
                    1 -> {
                        println("${bugerList[0].name} | ${bugerList[0].price} 입니다.")
                        cart.addMenu(bugerList[0])
                    }
					//
                    2 -> {
                        println("${bugerList[1].name} | ${bugerList[1].price} 입니다.")
                        cart.addMenu(bugerList[1])
                    }
					//
                    3 -> {
                        println("${bugerList[2].name} | ${bugerList[2].price} 입니다.")
                        cart.addMenu(bugerList[2])
                    }
					//
                    4 -> {
                        println("${bugerList[3].name} | ${bugerList[3].price} 입니다.")
                        cart.addMenu(bugerList[3])
                    }
					//
                    5 -> {
                        println("${bugerList[4].name} | ${bugerList[4].price} 입니다.")
                        cart.addMenu(bugerList[4])
                    }
					//
                    0 -> {
                        break
                    }
					//
                    else -> println("잘못된 번호입니다 다시 입력해주세요.")
                }
            } catch (e: NumberFormatException) {
                println("숫자로 입력해주세요.")
                println("")
                return continue
            }
        }
    }
}
  • list에 bergers 메뉴를 넣어서 for 반복문으로 번호, 이름 ,가격 순으로 출력되게 하였고
    1번을 누르면 리스트 각 번호에 맞는 이름과 가격이 나오고 cart에 있는 mutableList로 add되도록 설정하였습니다. 처음에는 list에 담은 인덱스 값을 어떻게 출력하지 하는 의문에 이틀은 보낸것 같은데 다른 분의 예시 코드 보면서 많이 참고한 형태입니다.
  • 계산기와는 다르게 각 담당 클래스의 코드가 굉장히 많아져서 맞는지 헷갈리지만 한번 진행해 보았습니다.
  • 마지막은 Kiosk.kt와 마찬가지로 예외처리 해주었습니다.

class Cart

class Cart {
    val cartMenu: MutableList<Menu> = mutableListOf()
    fun addMenu(menu: Menu) {
        cartMenu.add(menu)
        println("카트에 ${menu.name}을 넣었습니다.")
    }
	//
    fun displayCart() : Unit {
        return if (cartMenu.isEmpty()) {
            println("카트가 비어 있습니다.")
        } else {
            displayCartList()
            println("${cartMenu}")
        }
    }
	//
    private fun displayCartList() {
        val listGroup = cartMenu.groupingBy { it }.eachCount()
        for ((item, count) in listGroup) {
            println("${item.displayInfo()} (${count})")
        }
    }
}
  • Cart 클래스에서는 mutableList를 통해 담긴 내용을 관리하려고 하였고 각 메뉴에서 메뉴를 선택하면 cartMenu.add를 통해 메뉴가 cart에 들어가고 아래 displayCart 함수를 통해 메인화면에서 기능을 담당하게 뿌려줄려고 하였으나... 출력과는 별개로 mutableList에 담기지가 않아서 아직 미완성입니다.

  • 카트에 넣었다는 메세지는 출력이되지만

  • 메인으로 돌아가 확인을 하면 비어있다고 뜨는 모습.

list에 대한 추가 공부 후 수정해봐야겠습니다.

  • 사실 lv.4부터는 추가구현이지만 하다보니 욕심이 나서 더 구현해보려했으나 아직은 좀 어려운것 같습니다... class와 상속 추상클래스도 제대로 모르고 사용한거라 그 부분부터 더 공부를 해야하지않나 싶습니다.

하루의 마무리

  • 이번 개인과제를 진행하면서 배운점도 있고 제가 아직 모자란 부분을 알게된 것 같습니다.

    아직은 클래스와 상속에 대해서 완벽하지않고 추상클래스는 거의 모르고 있지않나 생각합니다.

    구현보다는 완벽하게 알아가야하는 이번 주였기에 강의와 구글링을 통한 추가 공부가 필요하다고

    생각하며 오늘 과제를 마무리 했습니다.

0개의 댓글