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


import java.time.LocalDate
import java.time.format.DateTimeFormatter

fun inputMyInfo(type: String, **checkInDate: LocalDate?**): Any? {
    **val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")**

    return when(type) {
        "checkIn" -> {
            println("체크인 날짜를 입력해주세요. 표기 형식 : 2023-07-20")
            while(true) {
                try {
                    **val originCheckIn = LocalDate.parse(readLine(), formatter)**
                    val localDate: LocalDate = LocalDate.now()
                    if (originCheckIn > localDate) {
                        return originCheckIn
                    } else {
                        println("체크인은 지난 날은 선택할 수 없습니다. 다시 입력해주세요.")
                    }
                } catch(e:Exception) {
                    println("체크인 날짜를 다시 입력해주세요. 표기 형식 : 2023-07-20")
                }
            }
        }
        "checkOut" -> {
            println("체크아웃 날짜를 입력해주세요. 표기 형식 : 2023-07-20")
            while(true) {
                try {
                    **val originCheckOut = LocalDate.parse(readLine(), formatter)
                    if (originCheckOut > checkInDate) {**
                        return originCheckOut
                    } else {
                        println("체크인 날짜보다 이전이거나 같을 수 없습니다. 다시 입력해주세요.")
                    }
                } catch(e:Exception) {
                    println("체크 아웃 날짜를 다시 입력해주세요. 표기 형식 : 2023-07-20")
                }
            }
        }

        else -> {
            return "no"
        }
    }
}
package com.example.hoterreservation

import java.time.LocalDate
import java.time.format.DateTimeFormatter

class Reservation {
    var name: String = ""
    var roomNumber: Int = 0
    var checkIn: LocalDate = LocalDate.now()
    var checkOut: LocalDate = LocalDate.now()
}

fun main() {
    **val reservationList = mutableMapOf<String, Any?>()**

    println("호텔 예약 서비스입니다.")
    println("메뉴를 선택하세요.")

    when (inputInfo("selectNumber", reservationList)) {
        1 -> {
            val myName = inputMyInfo("name", null, reservationList).toString()
            val myRoomNumber = inputMyInfo("roomNumber", null, reservationList).toString().toInt()
            val myCheckIn = inputMyInfo("checkIn", null, reservationList).toString()
            val myCheckOut = inputMyInfo("checkOut", LocalDate.parse(myCheckIn), reservationList).toString()
            val myMoney = inputMyInfo("money", null, reservationList).toString().toInt()
            // 예약금 10만원으로 고정
            val money = myMoney - 100000

            println("예약이 완료되었습니다.")
            println("이름: $myName")
            println("객실 번호: $myRoomNumber")
            println("체크인 날짜: $myCheckIn")
            println("체크아웃 날짜: $myCheckOut")
            println("잔액: $money")

            // Store reservation information in the 'reservationList'
            reservationList["name"] = myName
            reservationList["roomNumber"] = myRoomNumber
            reservationList["checkIn"] = LocalDate.parse(myCheckIn)
            reservationList["checkOut"] = LocalDate.parse(myCheckOut)
        }
        4 -> return println("종료합니다.")

        else -> println("올바른 메뉴 번호를 선택하세요.")
    }
}
fun main() {
    val reservationList = mutableMapOf<String, Any?>()

    println("호텔 예약 서비스입니다.")

    **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).toString()
                val myCheckOut = inputMyInfo("checkOut", LocalDate.parse(myCheckIn)).toString()
                val myMoney = inputMyInfo("money", null).toString().toInt()
                // 예약금 10만원으로 고정
                val money = myMoney - 100000

                println("예약이 완료되었습니다.")
                println("이름 : $myName")
                println("객실 번호 : $myRoomNumber")
                println("체크인 날짜 : $myCheckIn")
                println("체크아웃 날짜 : $myCheckOut")
                println("잔액 : $money")

                reservationList["name"] = myName
                reservationList["roomNumber"] = myRoomNumber
                reservationList["checkIn"] = myCheckIn
                reservationList["checkOut"] = myCheckOut
            }
            2 -> print(reservationList)
            4 -> {
                println("종료합니다.")
                **break**
            }
            else -> println("올바른 메뉴 번호를 선택하세요.")
        }
    }
}
fun main() {
    val reservationList = mutableListOf<Reservation>()

    println("호텔 예약 서비스입니다.")

    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()
                // 예약금 10만원으로 고정
                val money = myMoney - 100000

                println("예약이 완료되었습니다.")
                println("이름 : $myName")
                println("객실 번호 : $myRoomNumber")
                println("체크인 날짜 : $myCheckIn")
                println("체크아웃 날짜 : $myCheckOut")
                println("잔액 : $money")

                **val reservation = Reservation()
                reservation.name = myName
                reservation.roomNumber = myRoomNumber
                reservation.checkIn = myCheckIn
                reservation.checkOut = myCheckOut
                reservation.money = money

                reservationList.add(reservation)**
            }

            2 -> printReservationList(reservationList)

            3 -> {
                **val sortedList = reservationList.sortedBy { it.checkIn }
                printReservationList(sortedList)**
            }

            4 -> {
                println("종료합니다.")
                return
            }

            else -> println("올바른 메뉴 번호를 선택 하세요.")
        }
    }
}

**fun printReservationList(reservations: List<Reservation>) {
    for ((index, reservation) in reservations.withIndex()) {
        println("Reservation ${index + 1}")
        println("이름: ${reservation.name}")
        println("객실 번호: ${reservation.roomNumber}")
        println("체크인 날짜: ${reservation.checkIn}")
        println("체크아웃 날짜: ${reservation.checkOut}")
        println("잔액: ${reservation.money}")
        println()**
    **}
}**
import java.time.LocalDate
import java.time.format.DateTimeFormatter

class Reservation {
    var name: String = ""
    var roomNumber: Int = 0
    var checkIn: LocalDate = LocalDate.now()
    var checkOut: LocalDate = LocalDate.now()
    var money: Int = 0

    **constructor(name: String, roomNumber: Int, checkIn: LocalDate, checkOut: LocalDate, money: Int) {
        this.name = name
        this.roomNumber = roomNumber
        this.checkIn = checkIn
        this.checkOut = checkOut
        this.money = money**
    }
}
fun main() {
    val reservationList = mutableListOf<Reservation>()

    println("호텔 예약 서비스입니다.")

    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", LocalDate.parse(myCheckIn.toString())) as LocalDate
                val myMoney = inputMyInfo("money", null).toString().toInt()

                **// Reservation object 생성(readLine에 입력된 값을 받는 변수)
                val reservation = Reservation(myName, myRoomNumber, myCheckIn, myCheckOut, myMoney)

                // readLine에 입력 된 값 reservation에 저장 → 이를 reservationList에 추가
                reservationList.add(reservation)**
            }