사이먼's 코딩노트

[Java] 호텔 예약 관리 프로그램 개요 본문

프로젝트/[Java] 호텔 예약 관리 프로그램 제작

[Java] 호텔 예약 관리 프로그램 개요

simonpark817 2024. 4. 16. 18:08

[호텔 예약 관리 프로그램 제작]

  • 개인 프로젝트로서 호텔 예약 관리 프로그램이라는 주제를 가지고 최대한 구현해보고자 합니다.
  • 프로그램을 제작하기에 앞서, 전체 프로그램의 개요(기능 및 데이터 정의)에 대해 작성하려 합니다.

 

[기능 구성]

  • 호텔 예약 관리 프로그램의 기본 기능 구성은 아래와 같습니다.
  1. 프로그램시작
  2. 호텔 소개 (hotel introduce)
  3. 객실 조회 (room list)
  4. 객실 예약 (booking room)
  5. 예약 확인 (booking check)
  6. 예약 취소 (booking delete)
  7. 회원 로그인 (guest login)
  8. 회원 로그아웃 (guest logout)
  9. 회원가입 (guest join)
  10. 숙박 리뷰 남기기 (review write)
  11. 리뷰 보기 (review list)
  12. 숙박 리뷰 html로 추출하기 (export html)
  13. 프로그램 종료 (exit)

 

[프로그램 시작]

  • 호텔 예약 관리 시스은 시작과 동시에 서비스 모음집을 제공한다.
  • 사용자는 콘솔창을 통해 원하는 서비스를 입력할 수 있고, 서비스 모음집을 다시 보고 싶다면 'service' 를 입력해야한다.

 

[호텔 소개]

  • 호텔 소개는 서비스 입력창에 'hotel introduce' 라는 명령어를 입력해야 실행이 가능하다.
  • 로그인이 되어있지 않은 상태에서도 열람이 가능하다.
  • 호텔 소개의 기본 정보는 상호명, 위치, 전화번호, 영업시간, 객실 정보, 호텔 정책에 대한 내용이 포함되어 있다.
  • 또한 호텔 소개와 더불어 간단한 아스키아트를 이용한 각 층별 객실의 위치를 보여준다.

 

[객실 조회]

  • 객실 조회는 서비스 입력창에 'room list' 라는 명령어를 입력해야 실행이 가능하다.
  • 로그인이 되어있지 않은 상태에서도 조회가 가능하다.
  • 객실 조회는 원하는 날짜와 층을 입력하여 조회가 가능하고, 이 때 날짜는 현재(오늘) 날짜를 기준으로 일주일 간의 날짜만 조회가 가능하다.
  • 객실 정보는 객실번호, 객실타입, 예약여부를 보여준다.
  • 여기서 말하는 객실번호는 303호 같은 번호를 뜻하고, 객실 타입은 각 객실번호의 끝자리가 홀수인 객실은 싱글룸, 짝수인 객실은 더블룸으로 구분하였다.

 

[객실 예약]

  • 객실 예약은 서비스 입력창에 'booking room' 이라는  명령어를 입력해야 실행이 가능하다.
  • 로그인이 되어있는 상태에서만 예약이 가능하다.
  • 객실 예약은 예약하고 싶은 객실번호와 체크인/체크아웃 날짜를 입력해야 예약이 가능하고, 이 때 날짜는 현재(오늘) 날짜를 기준으로 일주일 간의 날짜만 예약이 가능하다.
  • 만약 선택한 객실번호의 예약여부가 '예약불가' 라면 객실 예약이 불가능하고, '예약가능' 이라면 객실 예약이 가능하다.
  • '예약가능' 인 상태의 객실을 선택했다면 총 숙박 기간을 보여주고, 총 인원 체크를 하게되는데 만약 인원이 싱글룸 기준 2인을 초과하거나 더블룸 기준으로 4명이 초과한다면 초과 인원당 추가 요금이 부여되고 지불해야할 요금을 안내한다.
  • 예약을 계속 진행한다면 예약이 완료됐다는 안내와 함께 해당 날짜 기간의 객실 예약여부를 모두 '예약불가' 로 변경한다.

 

[예약 확인]

  • 예약 확인은 서비스 입력창에 'booking check' 이라는 명령어를 입력해야 실행이 가능하다.
  • 로그인이 되어있는 상태에서만 예약이 가능하다.
  • 일반 회원이 아닌 관리자가 해당 서비스를 실행했다면, 역대 예약 리스트가 모두 보여진다.
  • 일반 회원이 해당 서비스를 실행했다면, 총 몇 건의 예약이 있는지 먼저 안내하고, 1건 이상의 예약이 있다면 상세보기를 원하는 지 되묻게 된다.
  • 상세보기를 원한다면 해당 회원이 예약한 객실번호, 객실타입, 결제요금, 체크인/체크아웃 날짜를 보여준다.

 

[예약 취소]

  • 예약 취소는 서비스 입력창에 'booking delete' 라는 명령어를 입력해야 실행이 가능하다.
  • 로그인이 되어있는 상태에서만 예약 취소가 가능하다.
  • 예약 취소가 가능한 기준은 회원이 예약한 객실의 체크인 날짜가 현재(오늘) 날짜를 기준으로 지나지 않았다면 취소가 가능하다.
  • 일반 회원이 아닌 관리자는 모든 예약 건을 취소할 수 있는 권한이 있다.
  • 일반 회원이 해당 서비스를 실행했다면, 취소할 수 있는 예약이 몇 건인지 안내하고, 1건 이상의 예약이 있다면 취소 가능한 예약 리스트를 보여준다.
  • 예약 취소를 계속 진행한다면 예약 취소가 완료되었다는 안내와 함께 해당 날짜 기간의 객실 예약여부를 모두 '예약가능' 으로 변경한다.

 

[회원 로그인]

  • 회원 로그인은 서비스 입력창에 'guest login' 이라는 명령어를 입력해야 실행이 가능하다.
  • 로그아웃이 되어있는 상태에서만 로그인이 가능하다.
  • ID, PW를 등록된 모든 회원에서 확인하여 정보가 일치하면 로그인에 성공하고, 정보가 일치하지 않거나 등록되지 않았다면 로그인에 실패하게 된다.
  • 로그인에 성공 시 로그인이 완료되었다는 안내를 해준다.

 

[회원 로그아웃]

  • 회원 로그아웃은 서비스 입력창에 'guest logout' 이라는 명령어를 입력해야 실행이 가능하다.
  • 로그인이 되어있는 상태에서만 로그아웃이 가능하다.
  • 로그아웃에 성공 시 로그아웃이 완료되었다는 안내를 해준다. 

 

[회원가입]

  • 회원가입은 서비스 입력창에 'guest join' 이라는 명령어를 입력해야 실행이 가능하다.
  • 로그아웃이 되어있는 상태에서만 회원가입이 가능하다.
  • ID를 입력할 때 기존 회원의 ID와 중복된다면 회원가입이 불가하고, PW를 입력할 때 PW 체크를 하게되는데 이 때 일치하지 않게되면 회원가입이 불가하다.
  • 가입 완료 시 가입에 성공했다는 안내와 함께 새로운 회원의 정보를 추가한다.

 

[숙박 리뷰 남기기]

  • 리뷰 남기기는 서비스 입력창에 'review write' 라는 명령어를 입력해야 실행이 가능하다.
  • 로그인이 되어있는 상태에서만 리뷰 남기기가 가능하다.
  • 회원의 역대 예약 목록 중 현재(오늘) 날짜를 기준으로 체크아웃 날짜가 지난 예약 건을 기준으로 총 몇 건의 대해 리뷰 작성이 가능하다는 안내와 함께 리뷰 작성이 가능하다.
  • 만약 조건에 맞는 예약 리스트가 없다면 리뷰는 작성할 수 없다.

 

[리뷰 보기]

  • 리뷰 보기는 서비스 입력창에 'review list' 라는 명령어를 입력해야 실행이 가능하다.
  • 로그인이 되어있지 않는 상태에서도 리뷰 보기가 가능하다.
  • 내용은 객실번호, 평점, 작성자ID, 내용을 보여준다.

 

[숙박 리뷰 html로 추출하기]

  • html 추출하기는 서비스 입력창에 'export html' 라는 명령어를 입력해야 실행이 가능하다.
  • 서비스 실행과 동시에 전체 리뷰 건에 대해서 html 작업을 하여 파일에 저장한다.
  • 각 html 파일은 한 페이지 당 하나의 리뷰 내용을 담고 있으며, 내용은 리뷰 보기와 동일하다.

 

 

[데이터 설계]

  • 다음은 시스을 구성할 때 필요한 데이터들을 설계하였다.
  • 해당 데이터들은 나중에 DB 설계 시 필요한 것들 이라고 생각하면 좋다.

 

[회원(Guest)]

  1. id : 회원번호 (INT, UNSIGNED, NOT NULL, PRIMARY KEY, AUTO_INCREMENT)
  2. regDate : 회원등록날짜 (DATETIME, NOT NULL)
  3. loginId : 로그인ID (CHAR(100), NOT NULL, UNIQUE)
  4. loginPw : 로그인PW (CHAR(100), NOT NULL)
  5. name : 이름 (CHAR(100), NOT NULL)
  6. email : 이메일 주소 (CHAR(100), NOT NULL)
  7. phoneNum : 핸드폰 번호 (CHAR(100), NOT NULL)

 

[객실(Room)]

  1. id : 객실 분류번호 (INT, UNSIGNED, NOT NULL, PRIMARY KEY, AUTO_INCREMENT)
  2. roomNum : 객실의 호수 - 1호부터 5호까지 (INT, UNSIGNED, NOT NULL)
  3. floor : 객실의 층수 - 3층부터 5층까지 (INT, UNSIGNED, NOT NULL)
  4. type : 객실의 타입 호수가 홀수면 싱글룸, 짝수면 더블룸 (INT, UNSIGNED, NOT NULL)
  5. checkInDate : 체크인날짜 (CHAR(100))
  6. checkOutDate : 체크아웃날짜 (CHAR(100))
  7. booked : 예약여부 – ‘예약가능또는 예약불가’ (CHAR(100), NOT NULL)
  8. dayOfSelect : 선택 날짜 예약하고싶은 날짜 (DATE, NOT NULL)

 

[예약 목록(Booking)]

  1. id : 예약번호 (INT, UNSIGNED, NOT NULL, PRIMARY KEY, AUTO_INCREMENT)
  2. checkInDate : 체크인날짜 (DATE, NOT NULL)
  3. checkOutDate : 체크아웃날짜 (DATE, NOT NULL)
  4. roomId : 객실번호 - 301호부터 505호까지 (INT, UNSIGNED, NOT NULL)
  5. guestName : 예약자이름 (CHAR(100), NOT NULL)
  6. guestPhone : 예약자 핸드폰 번호 (CHAR(100), NOT NULL)
  7. roomType : 객실의 타입 객실번호가 홀수면 싱글룸, 짝수면 더블룸 (INT, UNSIGNED, NOT NULL)
  8. bookingPay : 결제요금 (INT, UNSIGNED, NOT NULL)

 

[리뷰(Review)]

  1. id : 리뷰번호 (INT, UNSIGNED, NOT NULL, PRIMARY KEY, AUTO_INCREMENT)
  2. regDate : 리등록날짜 (DATETIME, NOT NULL)
  3. bookingId : 예약번호 (INT, UNSIGNED, NOT NULL)
  4. guestId : 회원번호 (INT, UNSIGNED, NOT NULL)
  5. body : 후기 내용 (TEXT, NOT NULL)
  6. score : 평점 (INT, UNSIGNED, NOT NULL)
반응형