사이먼's 코딩노트
[Java] 호텔 예약 관리 프로그램 제작(4) 본문
[호텔 예약 관리 프로그램 제작]
- 작성된 모든 코드는 저의 깃허브 리포지터리에서 확인하실 수 있습니다.
- 깃허브 리포지터리 주소 : https://github.com/psm817/hotel_booking_proj
[로그인 상태 확인 로직 Controller로 이전]
- 회원의 로그인 상태를 확인하는 isLogined() 메서드와, 로그인된 회원의 정보를 담고있는 loginedGuest 변수는 RoomController.java 클래스 외에도 모든 컨트롤러에서 사용이 가능할 수 있기 때문에 부모인 Controller.java 클래스로 이전하는 것이 좋다.
package org.example.controller;
import org.example.dto.Guest;
public abstract class Controller {
public static Guest loginedGuest;
public abstract void doAction(String cmd, String actionMethodName);
public static boolean isLogined() {
return loginedGuest != null;
}
}
- 이 때 loginedGuest와 isLogined() 모두 반드시 static으로 변수와 메서드를 선언해야한다.
- 만약 static이아닌 loginedGuest라면 무한한 로그인과 로그인을 하게 될 것이기 때문에 공공재로서 오직 하나의 값만 가지게 해야한다.
[로그인/로그아웃 필요한 서비스 필터링]
- 이제는 회원에 관한 기능들을 마무리 지었기 때문에 나머지 서비스들에 대해서 isLogined를 통해 로그인이 되었을 때 실행이 가능하거나 로그아웃일 때 실행이 가능하도록 필터링을 해줄 수 있다.
- 해당 코드는 App.java 클래스에서 서비스 명령어를 입력한 후, 각 서비스에 맞는 컨트롤러와 연결된 후에 판단한다.
while(true) {
System.out.print("서비스를 입력해주세요) ");
String cmd = sc.nextLine();
cmd = cmd.trim();
if(cmd.length() == 0) {
continue;
}
if(cmd.equals("exit")) {
break;
}
String[] cmdBits = cmd.split(" ");
if(cmdBits.length == 1) {
System.out.println("존재하지 않는 서비스입니다.");
continue;
}
String controllerName = cmdBits[0];
String actionMethodName = cmdBits[1];
Controller controller = null;
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 {
System.out.println("존재하지 않는 서비스입니다.");
continue;
}
String actionName = controllerName + "/" + actionMethodName;
// 로그인을 요구하는 서비스
switch(actionName) {
case "booking/room" :
case "booking/check" :
case "booking/modify" :
case "booking/delete" :
case "guest/logout" :
case "booking/review" :
if(Controller.isLogined() == false) {
System.out.println("로그인 후 이용가능합니다.");
continue;
}
break;
}
// 로그아웃을 요구하는 서비스
switch(actionName) {
case "guest join" :
case "guest login" :
if(Controller.isLogined()) {
System.out.println("로그아웃 후 이용가능합니다.");
continue;
}
break;
}
controller.doAction(cmd, actionMethodName);
}
- 서비스 입력은 무한루프 while(true)를 통해 프로그램 종료인 'exit'가 입력되기 전까지 계속해서 실행된다.
- 모든 서비스들은 room list 와 같이 2개의 단어를 작성하게 되는데 이 때 split()를 사용하여 띄어쓰기 된 부분을 기준으로 문자열을 나눈다.
- 큰 기능 역할을 부분을 앞 단어에서 가져와 controllerName에 저장하고, 세부 기능 역할 부분을 뒷 단어에서 가져와 actionMethodName에 저장한다.
- 그 다음 switch 문을 통해 로그인이 필요한 서비스와 로그아웃이 필요한 서비스를 나눠 isLogined() 메서드를 통한 조건문을 추가하여 필터링을 한다.
- switch 문에 포함되지 않는 서비스들은 로그인/로그아웃과 관계없이 이용이 가능한 서비스들이다.
[서비스 다시보기 추가]
- 서비스들이 많아짐에 따라 프로그램 시작 시 나타나는 모음집을 다시 보고 싶을 때가 있을 것이라 생각이 든다.
- 현재 상태에서는 프로그램을 재시작해야만 서비스 모음집을 다시 볼 수 있기 때문에 이런 번거로움을 조금이라도 덜어내기 위해 서비스 다시보기 명령어도 추가하려한다.
- 해당 코드는 App.java 클래스에 추가해주면 된다. 아래 코드는 추가한 코드만 보여주기 위해 구현되었던 다른 코드들은 잠시 보이지 않도록 한 점 참고 부탁드립니다.
package org.example;
public class App {
public void start() {
callAllServices();
while(true) {
System.out.print("서비스를 입력해주세요) ");
String cmd = sc.nextLine();
cmd = cmd.trim();
if(cmd.equals("service")) {
callAllServices();
continue;
}
}
}
private void callAllServices() {
System.out.println("호텔 예약 관리 시스템에 오신 것을 환영합니다.");
System.out.printf("오늘 날짜 : %s", Util.getTodayDate());
System.out.printf("\n");
System.out.println("=============== 서비스 모음 ===============");
System.out.println("1. 호텔 소개 : hotel introduce");
System.out.println("2. 객실 예약현황 : room list");
System.out.println("3. 객실 예약하기 : booking room"); // id, roomId, floor, guestName, guestPhone, type, regDate
System.out.println("4. 예약 확인하기 : booking check");
System.out.println("5. 예약정보 수정 : booking modify");
System.out.println("6. 예약 취소 : booking delete");
System.out.println("7. 로그인/로그아웃 : guest login/logout");
System.out.println("8. 회원 가입 : guest join");
System.out.println("9. 리뷰 남기기 : booking review");
System.out.println("10. 서비스 다시보기 : service");
System.out.println("===========================================");
System.out.printf("\n");
}
}
- App.java 클래스의 start()와 동시에 callAllServices() 라는 메서드를 호출하여 프로그램 시작과 동시에 서비스 모음집을 제공한다.
- callAllServices() 메서드는 App.java 클래스의 하단에 배치하였다.
- 무한루프를 통해 서비스 명령어를 입력하는 부분에서 조건문을 통해 만약 명령어가 'service' 라면 다시 한번 callAllServices() 를 호출하여 서비스 모음집을 다시 보여준다.
반응형
'프로젝트 > [Java] 호텔 예약 관리 프로그램 제작' 카테고리의 다른 글
[Java] 호텔 예약 관리 프로그램 제작(6) (0) | 2024.04.17 |
---|---|
[Java] 호텔 예약 관리 프로그램 제작(5) (0) | 2024.04.16 |
[Java] 호텔 예약 관리 프로그램 제작(3) (0) | 2024.04.16 |
[Java] 호텔 예약 관리 프로그램 제작(2) (0) | 2024.04.16 |
[Java] 호텔 예약 관리 프로그램 제작(1) (0) | 2024.04.16 |