수정된 부분
- 데이터 클래스 사용법 공부 후 적용해 보았다.! (https://occhiolism.tistory.com/43)
- sortBy 추가 공부하고 적용했다. (https://occhiolism.tistory.com/30)
느낀점
- 대충 이해하고 넘기면 적용할 때 시간소요가 상당히 많이 되는 것 같다. 한번 공부할 때 예제 여러개 확인 하고 규칙이랑 활용방법을 제대로 익히면 시간은 조금 걸려도 장기전으로 봤을 때에는 시간은 절약하는 방법인 것 같다!
- 응용 코드가 작동이 안돼니까 답답해서 어제 데이터 클래스든 sortBy 공부하기 너무 싫었는데 차근차근 천천히 보고 이해하고 적용하니까 기분이 너무 좋다 :)
package com.example.hotelreservationprogramme
fun main() {
// 첫번째 실행 (메뉴 선택)
val menuObject = MainMenu()
menuObject.mainMenu()
println("호텔 프로그램을 종료합니다.")
}
open 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: MainMenu() {
fun menu1(): BookingInfo {
var bookingInfo: MutableList<Any> = mutableListOf()
val readLinExceptionInt = ReadLineExceptionInt()
println("예약자분의 성함을 입력해주세요.")
val name = readLine()!!
println("예약할 방번호를 입력해주세요.")
var roomNumber = readLinExceptionInt.checkIfValid()
val roomNumberObject = RoomNumber()
roomNumber = roomNumberObject.checkIfValid(roomNumber)
println("체크인 날짜를 입력해주세요 표기형식. 20230631")
var checkInDate = readLinExceptionInt.checkIfValid()
val checkInDateObject = CheckInDate()
checkInDate = checkInDateObject.checkIfValid(checkInDate)
println("체크아웃 날짜를 입력해주세요 표기형식. 20230631")
var checkOutDate = readLinExceptionInt.checkIfValid()
val checkOutDateObject = CheckOutDate()
checkOutDate = checkOutDateObject.checkIfValid(checkInDate, checkOutDate)
val User = BookingInfo(name, roomNumber, checkInDate, checkOutDate)
return User
}
}
class Menu2 {
fun menu2(bookingInfo: MutableList<BookingInfo>) {
println("호텔 예약자 목록입니다.")
for (i in 0 until bookingInfo.size) {
var (name, roomNumber, checkInDate, checkOutDate) = bookingInfo[i]
println("${i + 1}. 사용자: ${name}, 방번호: ${roomNumber}호, 체크인: ${checkInDate}, 체크아웃: ${checkOutDate}")
}
}
}
class Menu3 {
fun menu3(bookingInfo: MutableList<BookingInfo>) {
var bookingInfo = bookingInfo
bookingInfo.sortBy{ it.checkInDate }
for (i in 0 until bookingInfo.size) {
var (name, roomNumber, checkInDate, checkOutDate) = bookingInfo[i]
println("${i + 1}. 사용자: ${name}, 방번호: ${roomNumber}호, 체크인: ${checkInDate}, 체크아웃: ${checkOutDate}")
}
}
}
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' 카테고리의 다른 글
[Calculator] 계산기 만들기 lv4.1 (1) | 2023.12.04 |
---|---|
[Hotel Reservation] 호텔 예약 프로그램 lv.3.0 (1) | 2023.12.03 |
[Hotel Reservation] 호텔 예약 프로그램 lv2.0 (0) | 2023.12.02 |
[Hotel Reservation] 호텔 예약 프로그램 lv.1.1 (0) | 2023.12.02 |
[Hotel Reservation] 호텔 예약 프로그램 lv.1.0 (0) | 2023.12.01 |