호텔 예약 프로그램(1)

2023. 10. 24. 21:45Java/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' 카테고리의 다른 글