호텔 예약 프로그래밍 서비스 만들기
- 완성본
- 문제 해결 1 : [1] 객실 예약 선택에서 입력한 객실 번호와 체크인 ~ 체크아웃 날짜 사이에 이미 예약된 내역이 있으면 예약이 불가능하게 하기
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)
}
}
- 문제 해결 2 : 5번을 누르면 reservationList에 저장된 예약자인지 조회하는 시스템
→ ‘filter’ 기능 사용
※ 동명이인일 경우? 영어 이름은 대, 소문자 구분?
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("성함을 다시 입력 하세요.")
}
}
}