lv2
1. 메뉴에서 2번을 눌러 호텔 예약자 목록을 보여줘요. (예시. 1. 사용자: ㅇㅇㅇㅇ, 방 번호: ㅇㅇㅇ호, 체크인: 2023-07-21. 체크아웃: 2023-08-01) 메뉴에서 3번을 눌러 호텔 예약자 목록을 정렬 기능을 사용하여 체크인 날짜순으로 오름차순으로 정렬해 봐요
2. 예약 플로우를 수정해 봐요. 해당 체크인 체크아웃 날짜에 선택한 방 번호를 예약 가능한지 불가능한지 판단하게 변경해 봐요.
3. 예약이 불가능하면 체크인, 체크아웃 날짜를 변경해서 다시 검사해 보는 플로우를 만들어봐요.
수정된 부분
- 메인 메뉴에서 4번을 누르면 코드가 종료되도록 바꾸어주었다
- 메인 메뉴 선택 부분의 코드를 if 문에서 when 문으로 바꾸어주었다. 가독성이 높아짐.
- 호텔 예약 부분에서 입력 받은 고객 정보를 bookingInfo에 저장하였다. 각 checkIfValid 함수의 출력값이 생겨서 checkIfValid 의 부모 함수 및 모든 객체를 수정해 주었다.
- 2번인 예약 목록 추가 와 3번인 예약 목록 (정렬) 추가 클래스를 각각 만들어 주었다.
느낀점
- 정보를 저장하는 부분은 data class로 뺄 수 있다는 사실을 배웠다. data class에 대해 더 공부해보고 응용해서 넣어보면 좋을 것 같다.
- 예약 목록을 정렬할 줄 모르겠다.... 어떻게 하는거임... 기본 알고리즘 문제에서 나올법한 문제인데 한시간을 고민해도 안돼서 현타가 왔다....ㅜㅜ
- 코드가 정말 정말 길어졌다. 내가 썼으니까 대충 이해가 되는건데 실전에 들어가면 다른 사람이 작성한 코드도 이해해야한다는 사실에 압도되는 느낌이 든다. 나.. 잘 할 수 있겠지...??
package com.example.hotelreservationprogramme
import android.content.res.TypedArray
fun main() {
// 첫번째 실행 (메뉴 선택)
val menuObject = MainMenu()
menuObject.mainMenu()
println("호텔 프로그램을 종료합니다.")
}
class MainMenu {
fun mainMenu() {
var bookingInfo: MutableList<BookingInfo> = mutableListOf()
while (true) {
println("호텔예약 프로그램 입니다.")
println("1. 방예약, 2. 예약목록 출력, 3 예약목록 (정렬) 출력, 4. 시스템 종료, 5. 금액 입금-출금 내역 목록 출력 6. 예약 변경/취소")
val readLineExceptionInt = ReadLineExceptionInt()
val menu = readLineExceptionInt.checkIfValid()
when (menu) {
1 -> { // 방 예약
val menu1 = Menu1()
bookingInfo.add(menu1.menu1())
println(bookingInfo)
}
2 -> { // 예약목록 출력
val menu2 = Menu2()
menu2.menu2(bookingInfo)
}
3 -> { // 예약목록 (정렬) 출력
val menu3 = Menu3()
menu3.menu3(bookingInfo)
}
4 -> break // 시스템 종료
5 -> { // 금액 입금-출금 내역 목록 출력
}
6 -> { // 예약 변경/취소
}
else -> {}
}
}
}
}
class Menu1 {
fun menu1(): List<Any> {
var bookingInfo: MutableList<Any> = mutableListOf()
val readLinExceptionInt = ReadLineExceptionInt()
println("예약자분의 성함을 입력해주세요.")
val name = readLine()!!
bookingInfo.add(name)
println("예약할 방번호를 입력해주세요.")
var roomNumber = readLinExceptionInt.checkIfValid()
val roomNumberObject = RoomNumber()
roomNumber = roomNumberObject.checkIfValid(roomNumber)
bookingInfo.add(roomNumber)
println("체크인 날짜를 입력해주세요 표기형식. 20230631")
var checkInDate = readLinExceptionInt.checkIfValid()
val checkInDateObject = CheckInDate()
checkInDate = checkInDateObject.checkIfValid(checkInDate)
bookingInfo.add(checkInDate)
println("체크아웃 날짜를 입력해주세요 표기형식. 20230631")
var checkOutDate = readLinExceptionInt.checkIfValid()
val checkOutDateObject = CheckOutDate()
checkOutDate = checkOutDateObject.checkIfValid(checkInDate, checkOutDate)
bookingInfo.add(checkOutDate)
return bookingInfo
}
}
class Menu2 {
fun menu2(bookingInfo: MutableList<List<Any>>) {
println("호텔 예약자 목록입니다.")
for (i in 0 until bookingInfo.size) {
println("${i + 1}. 사용자: ${bookingInfo[i][0]}, 방번호: ${bookingInfo[i][1]}호, 체크인: ${bookingInfo[i][2]}, 체크아웃: ${bookingInfo[i][3]}")
}
}
}
class Menu3 {
fun menu3(bookingInfo: MutableList<List<Any>>) {
var bookingInfo = bookingInfo
bookingInfo.sortBy{ it.checkInDate }
for (i in 0 until bookingInfo.size) {
println("${i + 1}. 사용자: ${bookingInfo[i][0]}, 방번호: ${bookingInfo[i][1]}호, 체크인: ${bookingInfo[i][2]}, 체크아웃: ${bookingInfo[i][3]}")
}
}
}
data class BookingInfo(var name:String, var roomNumber: Int, var checkInDate: Int, var checkOutDate: Int)
abstract class CheckIfValid {
abstract fun checkIfValid(): Int
abstract fun checkIfValid(value1: Int): Int
abstract fun checkIfValid(value1: Int, value2: Int): Int
var todayDate: Int = 20231201
}
class RoomNumber : CheckIfValid() {
override fun checkIfValid(): Int {
TODO("Not yet implemented")
}
override fun checkIfValid(value1: Int): Int {
var roomNumber = value1
val readLineExceptionInt = ReadLineExceptionInt()
while (true) {
if (roomNumber in 100 until 10000) {
return roomNumber
} else {
println("올바르지 않은 방번호 입니다. 방번호는 100~999 영역 이내입니다.")
roomNumber = readLineExceptionInt.checkIfValid()
}
}
}
override fun checkIfValid(value1: Int, value2: Int): Int {
TODO("Not yet implemented")
}
}
class CheckInDate : CheckIfValid() {
override fun checkIfValid(): Int {
TODO("Not yet implemented")
}
override fun checkIfValid(value1: Int): Int {
var checkInDate = value1
val readLineExceptionInt = ReadLineExceptionInt()
while (true) {
if (checkInDate > todayDate) {
return checkInDate
} else {
println("체크인은 지난날은 선택할 수 없습니다.")
checkInDate = readLineExceptionInt.checkIfValid()
}
}
}
override fun checkIfValid(value1: Int, value2: Int): Int {
TODO("Not yet implemented")
}
}
class CheckOutDate : CheckIfValid() {
override fun checkIfValid(): Int {
TODO("Not yet implemented")
}
override fun checkIfValid(value1: Int): Int {
TODO("Not yet implemented")
}
override fun checkIfValid(value1: Int, value2: Int): Int {
val checkInDate = value1
var checkOutDate = value2
val readLineExceptionInt = ReadLineExceptionInt()
while (true) {
if (checkOutDate > checkInDate) {
return checkOutDate
} else {
println("체크인 날짜보다 이전이거나 같을 수는 없습니다. ")
checkOutDate = readLineExceptionInt.checkIfValid()
}
}
}
}
class ReadLineExceptionInt : CheckIfValid() {
override fun checkIfValid(): Int {
while (true) {
try {
val num = readLine()!!.toInt()
return num
} catch (e: java.lang.NumberFormatException) {
println("숫자를 입력하세요.")
}
}
}
override fun checkIfValid(value1: Int): Int {
TODO("Not yet implemented")
}
override fun checkIfValid(value1: Int, value2: Int): Int {
TODO("Not yet implemented")
}
}
'Android (Kotlin) > mini projects' 카테고리의 다른 글
[Hotel Reservation] 호텔 예약 프로그램 lv.3.0 (1) | 2023.12.03 |
---|---|
[Hotel Reservation] 호텔 예약 프로그램 lv.2.1 (0) | 2023.12.03 |
[Hotel Reservation] 호텔 예약 프로그램 lv.1.1 (0) | 2023.12.02 |
[Hotel Reservation] 호텔 예약 프로그램 lv.1.0 (0) | 2023.12.01 |
[Calculator] 계산기 만들기 lv.4 (0) | 2023.11.30 |