호텔 예약 프로그래밍 서비스 만들기


while (true) {
        println("메뉴를 선택 하세요.")
        when (inputInfo("selectNumber")) {
            1 -> {
                val myName = inputMyInfo("name", null).toString()
                val myRoomNumber = inputMyInfo("roomNumber", null).toString().toInt()
                val myCheckIn = inputMyInfo("checkIn", null) as LocalDate
                val myCheckOut = inputMyInfo("checkOut", myCheckIn) as LocalDate
                val myMoney = inputMyInfo("money", null).toString().toInt()
                val myRealMoney = myMoney - 100000
                // 예약금 10만원으로 고정

                **val existingReservation = reservationList.find {
                    it.roomNumber == myRoomNumber &&
                            (it.checkIn.isBefore(myCheckOut) || it.checkIn == myCheckOut) &&
                            (it.checkOut.isAfter(myCheckIn) || it.checkOut == myCheckIn)**
                }

                **if (existingReservation != null) {
                    println("해당 객실은 ${existingReservation.checkIn}부터 ${existingReservation.checkOut}까지 예약이 불가능합니다.")
                    println("체크인과 체크아웃 날짜를 변경하여 다시 예약해 주세요.")**
                } else {
                    println("예약이 완료되었습니다.")
                    println("이름 : $myName")
                    println("객실 번호 : $myRoomNumber")
                    println("체크인 날짜 : $myCheckIn")
                    println("체크아웃 날짜 : $myCheckOut")
                    println("잔액 : $myRealMoney")

                    val reservation = Reservation(myName, myRoomNumber, myCheckIn, myCheckOut, myMoney, myRealMoney)
                    reservationList.add(reservation)

                }
            }
5 -> {
                println("예약자 성함을 입력 하세요.")
                while(true) {
                    try {
                        val nameToSearch = readLine()?.trim()
                        val foundReservation = reservationList.filter {it.name == nameToSearch}
                        if(nameToSearch?.first() != '_' && nameToSearch?.first() != '!') {
                            if (foundReservation.isEmpty()) {
                                println("예약 내역이 없습니다. 예약자 성함을 다시 입력 하세요.")
                            } else {
                                println("입금 내역 : ${foundReservation[0].money}")
                                println("출금 내역 : 100000원")
                                println("잔액 : ${foundReservation[0].realMoney}")
                                break
                            }
                        } else {
                            println("성함을 다시 입력 하세요.")
                        }
                    } catch(e:Exception) {
                        println("성함을 다시 입력 하세요.")

                    }
                }
            }