2023.12.07(목) TIL

quinones·2023년 12월 7일

오늘은 키오스크 프로그래밍을 끝내려고 한다.

lv6

  • 메뉴에 번호를 추가해서 할인쿠폰을 발급해주세요. 특정금액 이상 구매할 시 할인될 수 있도록 해주세요.

우선 메뉴판에 보기를 하나 늘려서,

fun subMenu(){
    println("[ ORDER MENU ]")
    println("5. Order      | 장바구니를 확인 후 주문합니다.")
    println("6. Cancle     | 진행중인 주문을 취소합니다.")
    println("7. Coupon     | 할인권 발급하기.")
}

7번에 쿠폰을 발급해주는 번호를 추가해줬다. 해당 부분 로직은 먼저 Order클래스에서

public var coupon = false

쿠폰이라는 변수에 false를 넣어줬다. 그 후에, 메인에서 7번을 눌렀을때

if(order.coupon){
    println(" 이미 쿠폰을 발급받으셨습니다. 한번의 쿠폰만 발급 가능합니다.")
}else{
    order.coupon = true
    println("W15000 이상 구매시 사용가능한 1000원 할인쿠폰을 발급해드렸습니다.")
}

쿠폰을 true로 바꿔주고, 쿠폰에 대한 설명을 작성해줬다.
그리고 지난번에 Order클래스에서 만들었던 메서드인 isMyMoneyOk()안에 조건문을 하나 더 넣어줬는데

if(coupon == true && sum >= 15000){
    println("쿠폰 사용이 가능합니다. 사용하시겠습니까?")
    println("1.네   2. 아니오")
    var isCoupon = choiceNumber("orderOrCancle")
    when(isCoupon){
        1 -> {
            println("원래 금액 : $sum")
            sum -= 1000
            println("할인된 금액 : $sum")
        }
        2 -> {
            sum = sum
        }
        else -> {println("바른 번호선택이 아닙니다.")}
    }
}

쿠폰 사용조건인 15000원 이상, 그리고 쿠폰을 발급받은 상태인지 확인후에, 번호를 입력받아 쿠폰을 사용한다면 원래 주문하는 금액에서 1000원을 뺸 값을 저장해주고, 아니라면 그대로 진행시켜줬다.
이렇게 해서 쿠폰 발급 및 사용기능을 넣어줬다.

lv7

  • 프로그램이 실행되는 중 10초마다 랜덤하게 배달주문이 추가되게 만드세요.(메뉴명, 금액, 위도, 경도)
  • 메뉴에 번호를 추가해서 배달요청 목록을 출력하세요.

랜덤된 메뉴를 랜덤의 위치에서 배달을시켜줘야해서 DeliveryOrder를 object로 선언해줬다. 배달된 음식들을 저장할 리스트인 myDeliveryOrder도 새롭게 선언해주었고, 배달위치는 서울에서만 배달이 가능하게 만들어서 범위를 서울로 정했다.
음식은 만들어둔 리스트가 존재한다. 햄버거리스트, 치킨리스트, 음료리스트, 사이드리스트 총 4개이다. 그래서 0..3 랜덤을 돌렸고, 사이드를 제외한 각 메뉴에서 상세메뉴는 3가지가 존재한다. 그래서 0..2 랜덤을, 사이드는 5가지가 존재해서 0..4 랜덤을 돌려서 값을 가져와줬다.

data class randomDelivery(
    val menuName: String,
    val menuPrice: Int,
    val latitude: Double,
    val longitude: Double
)
object DeliveryOrder {
    public val myDeliveryOrder: MutableList<randomDelivery> = mutableListOf()
    val menuRandom = (0..3).random()
	val choiceRandom = (0..2).random()
	val sideRandom = (0..4).random()
    when (menuRandom) {
            0 -> {
                myFood = MenuInfo.burgerInfo[choiceRandom]
                myFood.deliveryOrder()
                println("주문 위치")
                println("위도 : $randomLatitude, 경도 : $randomLongitude")
                val myorder = randomDelivery(myFood.name, myFood.price, randomLatitude, randomLongitude)
                println()
                myDeliveryOrder.add(myorder)
            }
     }

코드의 일부분만 가져왔다. 이런식으로 랜덤한 음식을 가져오게 만들었고, 메인에서 코루틴을 이용해서 비동기적으로 메서드가 실행되게 Globalscope를 이용해서 선언해주었다.

    GlobalScope.launch {
        order.deliveryOrder()
    }
suspend fun deliveryOrder(){
    runBlocking {
        launch {
            while (true){
                delay(10000)
                DeliveryOrder.delivery()
            }
        }
    }
}

이렇게 해서 구현되어야 할 모든 부분을 구현시켜줬다.

우리 조원분들은 다들 잘하시는 분들이셔서, 이미 내가 끝내기도 전에 끝내고, 기다리고 계셨다..
오늘 모두가 각자의 방식으로 끝낸 키오스크 프로그래밍을 가지고 튜터님에게 가서 어떤 코드가 잘짜여진 코드인지 물어보고 제출할 하나의 코드를 고르기로 했다. 모두의 코드를 리뷰하고 내린결론은!? 모두가 각자의 방식으로 잘 했고, 하나를 고르기 어렵다! 라고 하셨다.. 하지만 피드백은 있었는데, 그 내용으로는

  1. Menu라는 부모 클래스를 만들어서 모든 음식들이 사용할 displayInfo()메서드 (음식의 이름, 가격, 정보를 출력해주는)이런 메서드를 만들어주고, 자식 클래스로는 치킨,햄버거,사이드,음료 클래스를 만들어줬다. 하지만 자식 클래스들 모두 파라미터가 이름,가격,정보 이렇게 같은 3가지가 들어가서 굳이 클래스를 구분시키지 않아도 될것같다고 하셨다.
  2. ui부분에서 더 깔끔하게 꾸며주고 조금더 이쁘게? 꾸며보면 좋을거같다고 하셨다.
  3. 모두가 잘했지만 서로가 잘한 부분의 메서드를 사용해서 하나로 뭉쳐주면 더 경쟁력있는? 코드가 될거같다고 말씀해주셨다.

위 피드백 내용을 적용해서 더 발전시켜 볼 예정이다.!

profile
이우진

1개의 댓글

comment-user-thumbnail
2023년 12월 7일

할일이 끝나지 않는 과제네요 화이팅!

답글 달기