사이먼's 코딩노트
[Java] 호텔 예약 관리 프로그램 제작(19) 본문
[호텔 예약 관리 프로그램 제작]
- 작성된 모든 코드는 저의 깃허브 리포지터리에서 확인하실 수 있습니다.
- 깃허브 리포지터리 주소 : https://github.com/psm817/hotel_booking_proj
[리뷰 목록 html로 추출 구현]
- 이번 개인 프로젝트인 호텔 예약 관리 프로그램의 마지막 작업으로 회원이 남긴 리뷰를 html로 추출하는 기능을 추가하려한다.
- 'export html' 이라는 서비스 명령어와 함께 서비스가 실행됨과 동시에 모든 리뷰 목록을 가져와서 html로 추출하고 누구나 WEB 형식의 html을 확인할 수 있다.
- export에서는 Dao가 필요없는 이유는 DB를 통해서 가져오는 모든 리뷰 목록은 이미 ReviewDao에서 구현해놨기 때문이다.
- 기존의 서비스 명령어와는 다르기 때문에 export와 대한 각 Controller, Service를 구현해야한다.
- 먼저 export와 관련된 서비스 명령어가 추가되었기 때문에 App에서 해당 서비스를 구분하고 ExportController와 연결되는 코드를 추가해야한다.
if(controllerName.equals("hotel")) {
controller = hotelController;
}
else if(controllerName.equals("room")) {
controller = roomController;
}
else if(controllerName.equals("booking")) {
controller = bookingController;
}
else if(controllerName.equals("guest")) {
controller = guestController;
}
else if(controllerName.equals("review")) {
controller = reviewController;
}
else if(controllerName.equals("export")) {
controller = exportController;
}
else {
System.out.println("존재하지 않는 서비스입니다.");
continue;
}
- 서비스 이름으로 구분 짓는 부분에서 controllerName.equals("export")를 조건문에 추가하여 사용자가 export로 시작되는 서비스를 입력했을 때 해당 컨트롤러로 연결되도록 한다.
- 다음은 html 추출(export html)과 관련된 기능을 구현하기 위해 ExportController에 코드를 작성한다.
package org.example.controller;
import org.example.container.Container;
import org.example.service.ExportService;
public class ExportController extends Controller {
private ExportService exportService;
public ExportController() {
exportService = Container.exportService;
}
public void doAction(String cmd, String actionMethodName) {
switch(actionMethodName) {
case "html" :
doHtml();
break;
default :
System.out.println("존재하지 않는 서비스입니다.");
break;
}
}
private void doHtml() {
System.out.println("호텔 숙박 후기 html을 생성하였습니다.");
exportService.makeHtml();
}
}
- App에서 exportController와 연결되면 doAction을 통해 html 명령어를 받아 doHtml() 메서드를 호출하도록 한다.
- html 추출은 로그인 여부와 관계없이 모두 가능하기 때문에 session을 통한 로그인된 회원을 가져올 필요는 없다.
- doHtml() 에서는 html을 생성했다는 안내와 함께 바로 [exportService.makeHtml();] 코드를 통해 추출 작업을 exportService라는 직원을 통해 수행한다.
- 다음은 ExportService.java 클래스를 추가하고 새로 작성한 코드이다.
package org.example.service;
import org.example.container.Container;
import org.example.dto.Booking;
import org.example.dto.Guest;
import org.example.dto.Review;
import org.example.util.Util;
import java.util.List;
public class ExportService {
BookingService bookingService;
GuestService guestService;
ReviewService reviewService;
public ExportService() {
bookingService = Container.bookingService;
guestService = Container.guestService;
reviewService = Container.reviewService;
}
public void makeHtml() {
List<Review> reviews = reviewService.getForPrintReviews();
for(int i = reviews.size() - 1; i >= 0; i--) {
Review review = reviews.get(i);
Booking replyBooking = bookingService.getForPrintBooking(review.bookingId);
Guest replyGuest = guestService.getGuestByName(replyBooking.guestName);
String fileName = review.id + "번 리뷰.html";
String html = "<meta charset=\"UTF-8\">";
html += "<style>";
html += "body { font-family: Arial, sans-serif; }";
html += "div { margin-bottom: 10px; font-weight: bold; }";
html += ".btn {display: inline-block; margin-right: 10px; }";
html += "h1 { color: navy; }";
html += "a { color: inherit; text-decoration: none; }";
html += "a { display: inline-block; margin-top: 20px; padding: 10px 20px; border-radius: 8px; border: 1px solid black; background-color: #afafaf; }";
html += "a:hover { background-color: #000; color: #fff; }";
html += "</style>";
html += "</head>";
html += "<body>";
html += "<h1>숙박 후기</h1>";
html += "<div>리뷰번호 : " + review.id + "</div>";
html += "<div>객실번호 : " + replyBooking.roomId + "</div>";
html += "<div>평점 : " + review.score + " / 5.0" + "</div>";
html += "<div>작성자ID : " + replyGuest.loginId + "</div>";
html += "<div>내용 : " + review.body + "</div>";
if(review.id > 1) {
html += "<div class=\"btn\"><a href=\"" + (review.id - 1) + "번 리뷰.html\">이전글</a></div>";
}
if(review.id < reviews.size()) {
html += "<div class=\"btn\"><a href=\"" + (review.id + 1) + "번 리뷰.html\">다음글</a></div>";
}
Util.writeFileContents("exportHtml/" + fileName, html);
}
}
}
- ExportService는 리뷰를 작성한 회원의 정보, 객실번호를 함께 가져와야 하기 때문에 bookingService와 guestService를 추가해준다.
- makeHtml() 메서드는 reviewService.getForPrintReviews()를 통해 모든 리뷰를 먼저 리스트에 담아 가져오고, 반복문을 통해 각 리뷰를 쓴 회원의 ID, 리뷰 대상인 객실번호를 반복문을 통해 각각 가져온다.
- [String fileName = review.id + "번 리뷰.html";] 코드를 통해 추출된 모든 html의 파일의 이름을 "x번 리뷰.html" 로 통일시킨다.
- 마지막으로 html이라는 문자열 변수를 만들어 html 상에서 보여줄 부분을 코드화시켜준다.
- 현재 작성된 html은 상단에 css가 포함되어 있는 구조이다.
- 만약 리뷰의 개수가 1개 이상이라면 이전글과 다음글로 이동할 수 있는 버튼을 생성해주고, 마지막 리뷰에서는 다음글이라는 버튼은 제거한다.
- 지금까지 호텔 예약 관리 프로그램의 구현을 진행해보았는데 코드 작성에 있어서 아직 미숙한 부분이 많습니다.
- 가볍게 포스팅된 글 봐주시고 혹시 조언해주실 부분이 있다면 언제든지 조언 부탁드립니다.
- 다음 포스팅에는 완성된 프로그램이 실제 어떻게 동작하는지 사진과 영상을 통해 보여드리겠습니다.
반응형
'프로젝트 > [Java] 호텔 예약 관리 프로그램 제작' 카테고리의 다른 글
[Java] 호텔 예약 관리 프로그램 시연 영상 (0) | 2024.04.19 |
---|---|
[Java] 호텔 예약 관리 프로그램 제작(18) (1) | 2024.04.18 |
[Java] 호텔 예약 관리 프로그램 제작(17) (1) | 2024.04.18 |
[Java] 호텔 예약 관리 프로그램 제작(16) (1) | 2024.04.18 |
[Java] 호텔 예약 관리 프로그램 제작(15) (1) | 2024.04.18 |