- 23.10.24) 팀 프로젝트 - 호텔 예약 프로그램2023년 10월 24일 20시 50분 40초에 업로드 된 글입니다.작성자: oneseel
오늘 한 일
- 호텔 예약 프로그램 만들기
오늘부터 팀 프로젝트가 시작되었다. 팀 회의를 거쳐서 호텔 예약 프로그램을 만들기로 되었다.
호텔클래스와 고객클래스로 나누어 일단 진행하게 되었고, 호텔클래스 부분을 만들기로 했다.
<Hotel class>
- 호텔 클래스에는 HotelRoom class로 된 객체가 들어있는 리스트로 된 변수와 호텔자산 변수 Reservation class로 된 객체가 들어있는 리스트로 된 변수가 있다. (예약된 객실리스트의 경우 방의 UUID를 가져와 맵으로 사용하는게 더 좋을 것 같다.)
- 예약 가능한 메서드를 이용해 예약 가능한 객실의 리스트를 보여주고, 고객이 특정 객실을 선택하면 addRoom메서드를 이용해서 객실 리스트에 예약된 객실을 추가하다.
- 고객정보가 있으면 예약된 객실리스트 메서드도 만들 예정
import java.util.ArrayList; import java.util.List; public class Hotel { private List<HotelRoom> rooms; // 객실 리스트 private int hotelAsset; // 호텔 보유 자산(?) 이게 필요한가? private List<Reservation> reservationRoom; // 예약된 객실리스트 public Hotel() { rooms = new ArrayList<>(); hotelAsset = 0; reservationRoom = new ArrayList<>(); } // 객실리스트에 객실을 추가하는 메서드 public void addRoom(HotelRoom room) { rooms.add(room); hotelAsset += room.getPrice(); // 호텔 자산에 객실 가격이 추가됨(필수 사항 아님) } // 예약 가능한 객실리스트를 반환하는 메서드 public List<HotelRoom> getAvailableRoom() { List<HotelRoom> availableRoom = new ArrayList<>(); // 예약 가능한 객실 리스트 for (HotelRoom hotelRoom : rooms) { if(!hotelRoom.isBooked()) { availableRoom.add(hotelRoom); } } return availableRoom; } // 예약 받은 객실을 리스트에 추가하는 메서드 필요 (고객 정보 필요) }
<HotelRoom>
- 객실 클래스는 사이즈와 비용 변수와 객실이 예약이 되어있는지를 확인하는 변수를 가지고 있다.
- isBooked변수는 처음에는 비어있기 때문에 false로 초기값을 잡았다.
import java.util.UUID; public class HotelRoom { private String roomSize; // 객실 사이즈 private int price; // 객실 비용 private boolean isBooked; // 예약이 되어있는지 public HotelRoom(String roomSize, int price) { this.roomSize = roomSize; this.price = price; this.isBooked = false; // 처음에는 빈 객실 } // 객실 사이즈 반환하는 메서드 public String getRoomSize() { return roomSize; } // 객실 비용을 반환하는 메서드 public int getPrice() { return price; } // 객실이 예약되어있는지를 확인하는 메서드 public boolean isBooked() { return isBooked; } }
<Reservation>
- 예약 클래스에는 HotelRoom class의 객체와 예약된 방의 UUID 값, 고객이름, 전화번호, 예약날짜를 변수로 가진다.
- 전화번호와 날짜는 예외처리를 이용해 유효한 형태의 포맷에서만 작성하게 했다.
- 전화번호는 isVaildPhoneNumber 메서드를 가지고 있는데 전화번호는 정규식을 이용해서 받아왔다.
- 예약날짜는 isVaildDate 메서드를 가지고 있는데 특정형태로 받아왔다.
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Reservation { private HotelRoom hotelRoom; // 객실 객체 private UUID reservationId; // 예약된 방의 UUID; private String name; // 고객이름 private String phoneNumber; // 전화번호 private String date; // 예약날짜 public Reservation(UUID reservationId, HotelRoom hotelRoom, String name, String phoneNumber, String date) { this.reservationId = reservationId; this.hotelRoom = hotelRoom; this.name = name; // 전화번호가 유효하지 않을 때 예외처리 if (isValidPhoneNumber(phoneNumber)) { this.phoneNumber = phoneNumber; } else { throw new IllegalArgumentException("유효한 전화번호 형태가 아닙니다."); } // 날짜가 유효하지 않을 때 예외처리 if (isValidDate(date)) { this.date = date; } else { throw new IllegalArgumentException("유효한 날짜 형태가 아닙니다."); } } // reservationId를 반환하는 메서드 public UUID getReservationId() { return reservationId; } // 객실을 반환하는 메서드 public HotelRoom getHotelRoom() { return hotelRoom; } // 이름을 반환하는 메서드 public String name() { return name; } // 정규식에 맞는 유효한 전화번호인지 확인하는 메서드 public boolean isValidPhoneNumber(String phoneNumber) { // XXX-XXXX-XXXX 형식의 정규 표현식 String regex = "\\d{3}-\\d{4}-\\d{4}"; // \d : 숫자를 나타내는 메타 문자로, 0부터 9까지의 숫자 하나를 나타냅니다. Pattern pattern = Pattern.compile(regex); // Pattern 클래스를 사용하여 정규 표현식을 컴파일하여 pattern 객체를 만듭니다. // 이렇게 하면 정규 표현식을 검사하기 위한 패턴이 생성됩니다. Matcher matcher = pattern.matcher(phoneNumber); // Matcher 클래스를 사용하여 phoneNumber 문자열에 대한 정규 표현식 검사를 수행하는 matcher 객체를 만듭니다. return matcher.matches(); // matcher.matches() 메서드를 사용하여 phoneNumber 문자열이 정규 표현식에 일치하는지 확인합니다. // 이 메서드는 전체 문자열이 정규 표현식과 정확히 일치해야 true를 반환하며, 그렇지 않으면 false를 반환합니다. } // 전화번호를 반환하는 메서드 public String getPhoneNumber() { return phoneNumber; } // 유효한 날짜인지 확인하는 메서드 public boolean isValidDate(String date) { try { // ISO 8601 : ISO 8601은 날짜와 시간을 표현하기 위한 국제 표준 형식 중 하나로, // "yyyy-MM-dd'T'HH:mm:ss"와 같은 형식을 따릅니다. LocalDateTime.parse(date, DateTimeFormatter.ISO_DATE_TIME); // 주어진 문자열을 날짜형태로 파싱한다 return true; } catch (DateTimeParseException e) { return false; } } // 날짜를 반환하는 메서드 public String getDate() { return date; } }
정규식이나 날짜와 관련된 메서드, UUID에 대해 잘 몰랐으나 이번에 알게되었다.
내일 할 일
-
- 호텔 예약 프로그램 만들기
'TIL' 카테고리의 다른 글
23.11.06) TIL - 익명 게시판 만들기 (0) 2023.11.06 23.10.30) TIL - 재귀함수 (0) 2023.10.30 23.10.20) TIL - 개인프로젝트(키오스크) (1) 2023.10.20 23.10.19) TIL - 개인프로젝트(키오스크) (0) 2023.10.19 23.10.18) TIL - 개인프로젝트(키오스크) (1) 2023.10.18 댓글