[Kotlin 문법 기초] 과제 - 호텔 예약 프로그램 Lv1.

0
post-thumbnail

🍥구현 기능

  • 사용자가 호텔 예약을 할 수 있는 메뉴 표시하기
      1. 방 예약
      1. 예약 목록 출력
      1. 예약 목록 (정렬) 출력
      1. 시스템 종료
      1. 금액 입금-출금 내역 목록 출력
      1. 예약 변경/취소
  • 메뉴 1번 구현하기
    • 방 예약 플로우: 성함 입력받기 -> 방 번호 입력받기 -> 체크인 날짜 입력받기 -> 체크아웃 날짜 입력받기
    • 방 번호의 범위: 100호실~999호실
    • 체크인 날짜: 지금 날짜와 비교해서 이전날짜는 입력받을 수 없다
    • 체크아웃 날짜: 체크인 날짜보다 이전이거나 같을 수는 없다
    • 방 예약이 완료되면 임의의 금액이 입금되고 호텔 예약비로 출금된다
  • 메뉴 4번 구현하기

🍥구현하기

ReservationInfo 클래스

data class ReservationInfo(val name: String, var roomNum:Int, var checkIn:String, var checkOut:String)

TransactionInfo 클래스

data class TransactionInfo (val name:String, val info:String, val money:Int)

HotelReservation 클래스

import android.util.Log
import java.time.LocalDate
import java.time.format.DateTimeFormatter

class HotelReservation {
    init{
        println("호텔 예약 프로그램입니다.")
    }

    //메뉴 목록
    private val menus = arrayOf(
        "방 예약",
        "예약 목록 출력",
        "예약 목록 (정렬) 출력",
        "시스템 종료",
        "금액 입금-출금 내역 목록 출력",
        "예약 변경/취소")

    //예약 목록
    private var reservationInfoList = arrayOf<ReservationInfo>()
    //입출금 내역 목록
    private var transactionInfoList = arrayOf<TransactionInfo>()
    
    fun start(){
        while(true) {
            //메뉴 목록 출력
            printMenu()

            var input = readLine()!!.toInt()
            when (input) {
                1 -> runMenu1()
                2 -> runMenu2()
                3 -> runMenu3()
                4 -> {
                    runMenu4()
                    return
                    }
                5 -> runMenu5()
                6 -> runMenu6()
                else -> println("존재하지 않는 메뉴입니다.")
            }
        }
    }

    private fun printMenu(){
        println("[메뉴]")
        for(i in 0 until menus.size){
            print("${i+1}. ${menus[i]}.\t")
        }
        println()
    }

    //메뉴 1. 방 예약
    private fun runMenu1(){
        //(1) 이름 입력 받기
        println("예약자분의 성함을 입력해주세요.")
        val name = readLine()!!

        //(2) 방 번호 입력받기
        var roomNum = 0
        while(roomNum < 100 || 999< roomNum) {
            println("예약할 방 번호를 입력해주세요.")
            roomNum = readLine()!!.toInt() - '0'.code

            if(roomNum < 100 || 999< roomNum) println("올바르지 않은 방 번호입니다. 방 번호는 100부터 999까지 입니다.")
        }

        //(3) 체크인 날짜 입력받기
        //오늘 날짜 받아오기
        var nowDate = LocalDate.now()
        val formatter = DateTimeFormatter.ofPattern("yyyyMMdd")
        val nowDateStr = nowDate.format(formatter)

        var checkIn = "00000000"
        while(checkIn.toInt() < nowDateStr.toInt()) {
            //println("${nowDateStr.toInt()} ${checkIn.toInt()}")
            println("체크인 날짜를 입력해주세요. (표기 방식: 20230631)")
            checkIn = readLine()!!

            if(checkIn.toInt() < nowDateStr.toInt()) println("체크인 날짜로 지난 날짜를 선책할 수 없습니다.")
        }

        //(4) 체크아웃 날짜 입력받기
        var checkOut = "00000000"
        while(checkOut.toInt() <= checkIn.toInt()){
            println("체크아웃 날짜를 입력해주세요. (표기 방식: 20230631)")
            checkOut = readLine()!!

            if(checkOut.toInt() <= checkIn.toInt()) println("체크아웃 날짜로 체크인 날짜보다 전이거나 같은 날짜를 선택할 수 없습니다.")
        }

        //(4) 예약비 입금 후 출금
        transactionInfoList += TransactionInfo(name, "예약비 입금", 50000)
        transactionInfoList += TransactionInfo(name, "예약비 출금", -50000)

        //(5) 호텔 예약 내역 저장하기
        val newReservationInfo = ReservationInfo(name, roomNum, checkIn, checkOut)
        reservationInfoList += newReservationInfo
        println("호텔 예약이 완료되었습니다.")
    }
    //메뉴 2. 예약 목록 출력
    private fun runMenu2(){

    }
    //메뉴 3. 예약 목록 (정렬) 출력
    private fun runMenu3(){

    }
    //메뉴 4. 시스템 종료
    private fun runMenu4(){
        println("시스템을 종료합니다.")
    }
    //메뉴 5.금액 입금-출금 내역 목록
    private fun runMenu5(){

    }
    //메뉴 6. 예약 변경/취소
    private fun runMenu6(){

    }
}

MyHotelReservation.kt

fun main(){
    val hotelReservation = HotelReservation()
    hotelReservation.start()
}
profile
Be able to be vulnerable, in search of truth

0개의 댓글