호텔 예약 프로그램(1)
2023. 10. 24. 21:45ㆍJava/project
호텔 예약 프로그램
- system.out.println()형태로 호텔 예약 프로그램을 만듭니다.
-
UUID, LocalDateTime, 정규 표현식 사용
초기 클래스 필드와 메서드
class Hotel{
private List<Room> rooms;
private List<Reservation> reservations;
private Double money;
UUID reservation(String customerName, String customerPhoneNumber);
List<Reservation> findAllReservations();
Reservation findReservationByUUID(UUID uuid);
List<Reservation> findReservationsByUUIDs(List<UUID> uuids);
void cancelReservation(String reservationId);
}
class Room{
Double size;
Double price;
List<Reservation> reservations;
public void addReservation();
public void removeReservation(UUID uuid);
}
class Reservation{
private UUID uuid;
private Room room;
private String customerName;
private String customerPhoneNumber;
private LocalDateTime reservationDate;
}
Main main
main() {}
hotel(){
action()
view()
input()
}
hotel {
Hotel hotel
Admin admin
Customer customer
User user= customer
main (
while (flag) {
view()
userInput() // if 0 -> admin -> customer -> admin
action() // hotel.reservation(user);
}
)
}
interface User {
getRole()
}
class Customer {
private Role role;
private String name;
private String phoneNumber;
private Double money;
private List<UUID> reservationIds;
}
class ViewManagement {
private final Scanner sc = new Scanner(System.in);
handle()
private showCancelReservation();
private showCancelReservationSuccess();
private showCancelReservationFailed();
}
맡은 역할 : 예약 프로세스
1. ViewManagement.java
- 아직 출력화면과 메서드들을 ViewManagement.java에서 관리하고 있음.
- 추가적으로 바뀔 예정
package com.nbc.hotel.model;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
import java.util.UUID;
public class ViewManagement {
private static final Scanner sc = new Scanner(System.in);
Hotel hotel = new Hotel();
Reservation reservation = new Reservation();
private int roomNumber = 1;
private int reservationNum = 1;
public void test() {
System.out.println("호텔을 예약하시겠습니까? ");
System.out.println("1. 예약 2. 취소 3. 조회");
int select = sc.nextInt();
switch(select) {
case 1:
reservationHotel();
break;
case 2:
// 예약 조회
break;
case 3:
// 예약 취소
break;
default :
break;
}
}
public void reservationHotel() {
System.out.println("날짜를 입력해주세요 : ");
String selectDate = sc.next();
roomNumber = 1;
System.out.println("============================");
System.out.println("해당 날짜 : "+ selectDate+" 방 예약");
System.out.println("============================");
// 만들어져있는 방을 가져옴
hotel.getRooms().stream().forEach((room)-> {
int roomSize = room.getSize().intValue();
System.out.println(roomNumber + ". " + "size: " + roomSize + " price: $" + room.getPrice());
roomNumber++;
});
// 출력
System.out.println("============================");
System.out.println("선택하고 싶은 방을 골라주세요 : ");
int selectRoomNumber = sc.nextInt();
System.out.println("======해당 방이 맞으십니까?======");
Integer selectRoomSize = hotel.getRooms().get(selectRoomNumber-1).getSize().intValue();
Double selectRoomPrice = hotel.getRooms().get(selectRoomNumber-1).getPrice();
System.out.println("========="+ selectDate+"=========");
System.out.println(selectRoomNumber+". size : "+selectRoomSize+" price : $"+selectRoomPrice);
System.out.println("=====1. 예약하기 2. 취소하기=====");
//System.out.println(selectDate);
int test = sc.nextInt();
switch(test) {
case 1:
System.out.println("예약자 성함을 알려주세요 : ");
String customerName = sc.next();
UUID uuid = UUID.randomUUID();
reservation.setUUID(uuid);
// uuid 저장
reservation.setRoom(hotel.getRooms().get(selectRoomNumber-1));
// 해당 룸 저장
reservation.setCustomerName(customerName);
// 예약자 이름 저장
reservation.setReservationId(reservationNum);
reservationNum++;
// 예약 번호 저장
System.out.println("예약자 전화번호를 입력해주세요 : ");
String customerPhoneNumber = sc.next();
reservation.setCustomerPhoneNumber(customerPhoneNumber);
LocalDate testTime = reservationDate(selectDate);
reservation.setReservationDate(testTime);
LocalDateTime testReservation = reservationDate2();
reservation.setReservationDate2(testReservation);
// reservation.setReservationDate(testTime);
// -> 해당사항 LocalDateTime을 getter, setter하고 있으니 추후 변경 예정
System.out.println(reservation.getCustomerName()+"님 예약 완료되셨습니다.");
System.out.println(reservation.getCustomerName()+"님 예약 번호는 "+reservation.getReservationId()+"입니다.");
myTest(reservation);
break;
case 2:
System.out.println("취소되었습니다.");
System.out.println();
reservationHotel();
break;
default :
System.out.println("다시 시도해주세요.");
break;
}
// 내일 할 것
// 1. 날짜에 해당하는 호텔방 삭제
// 2. 예외처리 신경쓰기
// 3. 해당 객체별 method분류
// 4. 고객은 이름, 전화번호, 소지금을 가지고 있음 -> 해당 소지금이 적으면 예약불가
// 5.
}
public void myTest(Reservation reservation){
System.out.println("================================");
System.out.println("name : "+reservation.getCustomerName());
System.out.println("phoneNumber : "+reservation.getCustomerPhoneNumber());
System.out.println("reservationId : "+reservation.getReservationId());
System.out.println("reservationDate : "+reservation.getReservationDate());
System.out.println("reservationDate2 : "+reservation.getReservationDate());
System.out.println("reservationUUID : "+reservation.getUUID());
System.out.println("reservationPrice : "+reservation.getRoom().getPrice());
System.out.println("roomSize : "+reservation.getRoom().getSize());
System.out.println("================================");
}
public LocalDate reservationDate(String selectDate) {
// selectDate = 2023-11-23
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate ld = LocalDate.parse(selectDate, formatter);
// 원하는 값은 여기까지 잘됨
// LocalDateTime dateTime = LocalDateTime.of(ld, LocalTime.now());
// t~~~까지 붙히고 있다.
return ld;
// localDate
}
public LocalDateTime reservationDate2() {
return LocalDateTime.now();
}
2. Reservation.java
package com.nbc.hotel.model;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.UUID;
public class Reservation {
private UUID uuid;
private Room room;
private Integer reservationId;
private String customerName;
private String customerPhoneNumber;
private LocalDate reservationDate;
private LocalDateTime reservationDate2;
public Reservation() {
}
public Reservation(UUID uuid, Room room, String customerName, Integer reservationId, String customerPhoneNumber, LocalDate reservationDate, LocalDateTime reservationDate2) {
this.uuid = uuid;
this.room = room;
this.reservationId = reservationId;
this.customerName = customerName;
this.customerPhoneNumber = customerPhoneNumber;
this.reservationDate = reservationDate;
this.reservationDate2 = reservationDate2;
}
public UUID getUUID() {
return this.uuid;
}
public void setUUID(UUID uuid) {
this.uuid = uuid;
}
public Room getRoom() {
return this.room;
}
public void setRoom(Room room) {
this.room = room;
}
public Integer getReservationId() {
return this.reservationId;
}
public void setReservationId(Integer reservationId) {
this.reservationId = reservationId;
}
public String getCustomerName() {
return this.customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getCustomerPhoneNumber() {
return this.customerPhoneNumber;
}
public void setCustomerPhoneNumber(String customerPhoneNumber) {
this.customerPhoneNumber = customerPhoneNumber;
}
public LocalDate getReservationDate() {
return this.reservationDate;
}
public void setReservationDate(LocalDate reservationDate) {
this.reservationDate = reservationDate;
}
public LocalDateTime getReservationDate2() {
return this.reservationDate2;
}
public void setReservationDate2(LocalDateTime reservationDate2) {
this.reservationDate2 = reservationDate2;
}
}
3. Room.java
package com.nbc.hotel.model;
import java.util.List;
import java.util.UUID;
public class Room {
Double size;
Double price;
List<Reservation> reservations;
public Room(Double size, Double price) {
this.size = size;
this.price = price;
}
public Double getSize() {
return this.size;
}
public Double getPrice() {
return this.price;
}
public void addReservation() {
}
public void removeReservation(UUID uuid) {
}
}
4. Customer.java
package com.nbc.hotel.model;
import java.util.List;
import java.util.UUID;
public class Customer {
private Role role;
private String name;
private String phoneNumber;
private Double money;
private List<UUID> reservationIds;
public Customer(Role role, String name, String phoneNumber, Double money, List<UUID> reservationIds) {
this.role = role;
this.name = name;
this.phoneNumber = phoneNumber;
this.money = money;
this.reservationIds = reservationIds;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public List<UUID> getReservationIds() {
return reservationIds;
}
public void setReservationIds(List<UUID> reservationIds) {
this.reservationIds = reservationIds;
}
}
5. Hotel.java
package com.nbc.hotel.model;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class Hotel {
private List<Room> rooms = new ArrayList<>(); // 현재 방목록
private List<Reservation> reservations; // 현재 예약목록
private Double money; // 총자산
Boolean cancelReservations = false;
public Hotel() {
rooms.add(new Room(1.0,90.0));
rooms.add(new Room(1.0,110.0));
rooms.add(new Room(1.0,130.0));
rooms.add(new Room(1.0,190.0));
rooms.add(new Room(2.0,140.0));
rooms.add(new Room(2.0,160.0));
rooms.add(new Room(2.0,200.0));
rooms.add(new Room(2.0,220.0));
}
public List<Room> getRooms(){
return this.rooms;
}
UUID reservation(String customerName, String customerPhoneNumber) {
return null;
}
List<Reservation> findAllReservations(){
return null;
}
Reservation findReservationByUUID(UUID uuid) {
return null;
}
List<Reservation> findReservationsByUUIDs(List<UUID> uuids){
return null;
}
}
-예약 화면 예시
호텔을 예약하시겠습니까?
1. 예약 2. 취소 3. 조회
1
날짜를 입력해주세요 :
2023-11-23
============================
해당 날짜 : 2023-11-23 방 예약
============================
1. size: 1 price: $90.0
2. size: 1 price: $110.0
3. size: 1 price: $130.0
4. size: 1 price: $190.0
5. size: 2 price: $140.0
6. size: 2 price: $160.0
7. size: 2 price: $200.0
8. size: 2 price: $220.0
============================
선택하고 싶은 방을 골라주세요 :
5
======해당 방이 맞으십니까?======
=========2023-11-23=========
5. size : 2 price : $140.0
=====1. 예약하기 2. 취소하기=====
1
예약자 성함을 알려주세요 :
papa
예약자 전화번호를 입력해주세요 :
010-2222-3333
papa님 예약 완료되셨습니다.
papa님 예약 번호는 1입니다.
================================
name : papa
phoneNumber : 010-2222-3333
reservationId : 1
reservationDate : 2023-11-23
reservationDate2 : 2023-11-23
reservationUUID : f3d268a8-d64b-45cd-b8ad-46704659b489
reservationPrice : 140.0
roomSize : 2.0
================================
예약 선택 화면
예약 조회 메뉴 화면
객실 예약 조회
1. 모든 예약 조회(관리자 기능)
2. 내 예약 목록 조회
3. 예약 번호로 조회
4. 돌아가기
모든 예약을 조회합니다.
[예약 정보]
예약 ID: 1234 방: 방 예약자 이름: 김진훈 휴대폰 번호: 010-1234-5678 예약 일자: 2023-11-11
내 예약 목록을 조회합니다.
[예약 정보]
~~~ 위와 동일
예약 번호로 조회합니다.
[예약 정보]
위와 동일
or 예약 번호로 조회할 수 없습니다.
- 예약 취소 예시
예약 취소 선택 메뉴 화면
객실 예약 취소
취소할 객실의 예약 번호를 입력해주세요.
입력>
0. 돌아가기
예약 취소 완료 화면
객실 에약이 취소 되었습니다.
객실 예약 취소
객실 정보:
객실명 :
금액 :
3초 뒤 메인 화면으로 돌아갑니다....
예약 취소 실패 화면
객실 에약 취소가 실패하였습니다.
(이유?)
내일 할 일
1. 날짜에 해당하는 호텔방 삭제
2. 예외처리 신경쓰기
3. 해당 객체별 method분류
4. 고객은 이름, 전화번호, 소지금을 가지고 있음 -> 해당 소지금이 적으면 예약불가
5. 전화번호 블랙리스트
6. reservationId 지우고 uuid로
'Java > project' 카테고리의 다른 글
호텔 예약 프로그램(3) (0) | 2023.10.27 |
---|---|
호텔 예약 프로그램(2) (1) | 2023.10.26 |
[JAVA] 키오스크 만들기(2일차) (1) | 2023.10.19 |
[JAVA] 키오스크 만들기(1일차) (0) | 2023.10.18 |