Skip to content

team-boutique/BoutiqueHotel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 

Repository files navigation

Team-Boutique

호텔 예약 서비스 구현 🏨

Back-EndDB를 연결해 호텔, 모텔, 리조트 등을 예약하는 서비스

0️⃣ 개발 환경

  • ORACLE
  • SQLDeveloper
  • Eclipse
  • JAVA 11 버전
  • Miro (Front UI 설계 툴)
  • Draw.io (Usecase 설계 툴)

1️⃣ 팀원 소개


이준모

조용훈


이해연


조아름


Usecase Diagram 설계



고객은 크게 3가지 예약, 회원가입, 조회 에 접근 할 수 있음

예약을 해야만 예약을 변경, 취소 할 수 있기 때문에 예약과 예약 취소, 변경은 include 관계


2️⃣ Usecase Diagram 재설계



처음 설계한 usecase-diagram 은 문제점이 많았음

- 특정 행동 위주가 아닌 사용자 기준으로 만듦
- 색상을 사용하지 않아 가시성이 부족했었음
- `include` 의 방향이 잘못 됐었음

따라서 해당 usecase-diagram 에서의 문제점을 수정 후 다시 그림

고객은 파란색, 관리자는 빨간색

고객은 예약, 회원가입, 조회, 게임하기 에 접근 할 수 있음

관리자는 숙박시설 등록, 회원 조회, 목록 조회 에 접근 할 수 있음

공통으로 접근 할 수 있는 숙박시설 조회는 흰색을 적용함


3️⃣ DB 모델링



eXERD 를 이용해 DB 모델링

Customer (고객) 와 Accommodation (숙소) 는 서로 다 vs 다 관계

각각 PKFK 로 주어 1 vs 다 구조로 변경해주어야 함

따라서 Book (예약) table 을 생성해 비실체화 함


Class Diagram 구성



상단의 DB 모델링을 이용해 Class Diagram 을 설계 했음

각각의 Hotel, Motel, Resort, Pension 은 특정한 변수를 갖고 있으며 Accommodation 을 상속받음


4️⃣ Class Diagram 재구성



상단의 DB 모델링을 이용해 Class Diagram 을 재설계 했음

처음 설계한 class-diagram 은 아쉬운 부분이 있음

- 처음에는 Book 의 class 의 존재 이유를 알지못해 구현하지 않음 (누락)
- Book이 존재해야하는 이유 (예약번호 등...)
- method 를 구현 할 필요 없이 큰 틀로만 작성해야했음
- 색상이 없고 너무 커서 가독성이 떨어짐

Has a 관계와 Extands 관계를 잘 알아볼 수 있게 작성했으며

CustomerDate, Book 은 서로서로 Hasing 관계 에 놓일 수 있도록 설계

Accommodation (숙박시설) 은 Pension ,Hotel 등의 부모 Class 이므로 extends 설계

package com.jdbc.dao;
// 해당 Class Diagram 으로 Implement 설계

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.jdbc.exception.DuplicateSSNException;
import com.jdbc.exception.InvalidBookingException;
import com.jdbc.exception.RecordNotFoundException;
import com.jdbc.vo.Accommodation;
import com.jdbc.vo.Book;
import com.jdbc.vo.Customer;

public interface DatabaseTemplate {
    //공통 디비 관련 함수
    Connection getConnect() throws SQLException;
    void closeAll(Connection conn, PreparedStatement ps) throws SQLException;
    void closeAll(Connection conn, PreparedStatement ps, ResultSet rs) throws SQLException;

    //ssn과 id로 존재 여부 확인하기
    boolean isExist(Connection conn, String ssn) throws SQLException;
    boolean isExist(Connection conn, int id) throws SQLException;
    boolean isExist(Connection conn, int id, String ssn) throws SQLException;

    //예약 관련
    boolean canBook(Connection conn, int id, String bookDate, int people) throws SQLException, RecordNotFoundException, InvalidBookingException;
    void booking(Book book) throws SQLException, RecordNotFoundException, InvalidBookingException; //void booking(String ssn, int id, String bookDate, int people);
    void updateBooking(Book book) throws SQLException, RecordNotFoundException; //void updateBooking(String ssn, int id, String bookDate);
    void deleteBooking(String ssn, int id) throws SQLException, RecordNotFoundException;

    //고객 관련
    //isExist(String ssn) 먼저
    void addCustomer(Customer customer) throws SQLException, DuplicateSSNException;
    void updateCustomer(Customer customer) throws SQLException, RecordNotFoundException;
    void deleteCustomer(String ssn) throws SQLException, RecordNotFoundException;

    //숙소 관련
    //isExist(int id) 먼저
    void addAccom(Accommodation accom) throws SQLException;
    void updateAccom(Accommodation accom) throws SQLException, RecordNotFoundException;
    void deleteAccom(int id) throws SQLException, RecordNotFoundException;

    //고객 조회 기능
    ArrayList<Book> getBookList(String ssn) throws SQLException;
    ArrayList<Customer> getCustomerByName(String name) throws SQLException;
    Customer getCustomerBySsn(String ssn) throws NumberFormatException, SQLException;
    ArrayList<Customer> getAllCustomer() throws NumberFormatException, SQLException;

    //호텔 조회 기능
    Accommodation getAccom(int id) throws SQLException;
    ArrayList<Accommodation> printAllAccom() throws SQLException;
    ArrayList<Accommodation> findAccomsBylocation(String location) throws SQLException;
    ArrayList<Accommodation> findAccomsByPrice(int s_price, int e_price) throws SQLException;
    ArrayList<Accommodation> findAccomsByStar(int star) throws SQLException;
    ArrayList<Accommodation> findAccomsByAccomName(String name) throws SQLException;
    ArrayList<Accommodation> findAccomsByType(String type) throws SQLException;

    //알고리즘 기능
    void playGame(String ssn) throws SQLException;
}

5️⃣ FE-UI 구현

  • FE 기술을 사용하지 않아도 출력화면을 구현을 해야 구조를 이해하기 편함
  • 생각치 못한 부분을 떠올릴 수 있음
  • 고객과 관리자로 두가지 구현


상단 바에 숙소 명을 기입해 찾을 수 있음

호텔, 모텔, 리조트, 팬션 버튼을 이용해 하단의 LIST 에 해당 조건에 맞는 출력 할 수 있음

가격대별, 지역별로 조회 가능


특정 호텔을 클릭 후 예약날짜를 기입, 숙박 명수 를 기입 해 예약


우측에는 회원정보 기입란이 있으며 해당 정보를 등록하면 주민등록번호 (SSN) 이 중복되지 않는 이상 해당 고객을 등록

중복되는 SSN 을 갖고 있을 경우 Exception 발생


하단에 해당 고객의 예약 정보를 조회 가능, 만약 예약 날짜를 변경할 경우 중단에 날짜 기입을 한 후 수정


해당 화면은 관리자 탭

상단의 검색 바에서 아이디, 이름, 지역 등 카테고리에 일치하는 값을 찾아 리스트에 출력

만약 호텔을 추가할 경우 하단의 업체명과 Radio-Button 을 이용해 숙박 시설을 선택

호텔의 등급을 별모양을 눌러 적용 및 최대 수용가능인원 입력

입력 받은 값으로 등록과 수정이 가능함


우측 고객조회 란은 고객 조회를 할 수 있으며 아이디, 이름을 이용해 조회

하단에 고객의 상세정보를 조회 할 수 있음

우측에는 선택 고객의 예약 리스트 를 볼 수 있음


6️⃣ DB 설정


해당 프로젝트 구동을 위해 DB 에 기본 데이터 세팅

좌측부터 Accommodation, Book, Customer Table

각각의 테이블의 형식에 맞게 데이터 값을 입력


7️⃣ 콘솔결과 확인하기

미니프로젝트 이므로 Front-UI 는 구현❌

따라서 결과값 출력을 Console 로 확인



각각의 시나리오를 구성해 해당 시나리오에 알맞는 값을 입출력


8️⃣ 팀원들의 한마디


팀 원 좋았던 점 아쉬웠던 점

이준모
알고 있는 것과 만들어 본 것은 다르다는 걸 다시금 느끼게 되는 계기가 되었다. 시간이 2일밖에 주어지지 않아 설계를 시작할 때 빈약한 부분이 보여 아쉬웠고, 짧은 시간이었지만 합을 맞추며 정들었던 팀원들과 헤어질 생각을 하니 아쉽다.

조용훈
우리팀의 의사소통이 원활하게 진행 되어서 만족스러웠으며 각자 주력으로 하는 분야가 달라서 겹치지 않고 분업이 잘 되어 서로 부족한 부분을 채워 줄 수 있어 좋았다. '남들이 이해하기 쉬운 코드를 짜야한다'는 것을 직접 느끼게 되었고 '기초 설계를 정말 꼼꼼히 해야한다'는 것을 배웠다.

이해연
usecas diagram, class diagram, db modeling, business logic 작성 방법과 그 필요성에 대해서 알 수 있어 좋았다. 꼼꼼하게 인터페이스를 작성했다고 생각했지만 여기저기서 조금씩 잘못된 부분이 나왔고, 에러가 발생한 부분을 찾는데 오래 걸렸다는 점이 아쉬웠다.

조아름
여러명이 함께하다보니 나의 부족한점을 보완해줄 수 있었다. 처음부터 끝까지 이해를 하지 못하면 구멍이 생기는 것을 알게되는 계기가 되었다.

About

Create Hotel Service (Back-end & Database)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages