코딩/JAVA

TPJ-호텔 예약 프로그램 (3)

Funold 2023. 11. 1. 23:08

231024~231030C 1031W

루프문의 향연, HotelLounge

이제 데이터를 만들었으니 이것들이 차례대로 동작하고 계산되고, 출력되게 만들어 줘야 한다.

 

우리 팀은 작성하고, 작성될 코드들이 순차적으로 돌아가는 메서드들을 HotelLounge에 작성했는데 큰 틀은 While 루프문 이었다.

루프문 내에서 순차적으로 적재적소에 들어갈 메서드 들을 잘 넣어주면 나중에 Run(실행) 시킬 시, 해당 출력화면에서 어떤 값을 입력하느냐에 따라 해당메소드로 이동하고 그 메서드 내에서 또 다른 메서드들이 호출되고 마지막에 이르러선 메인으로 돌아가고, 다시 시작하고… 이렇게 계속해서 반복할 수 있게 된다. 적어도 실행을 멈추거나, 뜻하지 않는 에러를 만나기 전까진.

 

그 과정에서 데이터 값들이 서로 맞물리고 계산되는 코드들은 Service패키지로 나누어 작성해 나갔는데, 사실상 내 파트에서는 크게 다룰 일이 없었다.

 

프로그램 실행시 내 파트에서 진행될 과정은 이렇다.

팀원이 작업한 메인페이지가 있는데, 여기서 1번을 누르면 ‘객실현황리스트’가 나오고, 이 중에서 원하는 객실번호를 선택할 시 ‘해당 객실을 장바구니에 넣겠냐는 확인 화면’ 한 번, '장바구니에 넣고 메인화면으로 돌아간다는 텍스트가 뜨는 화면 한 번’이다.

private void showCustomerMainView() {
    roomService.resetReserved(); //시간 체크 후 reserved 변경
    boolean flag = true;
    while (flag) {
        mainOutput.printCustomerMainView(customer);
        int inputNumber = inputView.getInputNumber(1, 5);
        switch (inputNumber) {
            case 1: //객실선택, 장바구니에 담기
                showSelectRoomView(); //<===========여기에서 내 파트로 이동!
                break;
            case 2:
                showCancelReservationView();
                break;
            case 3: //장바구니 화면
                showBasketView();
                break;
            case 4:
                showMyPage();
                break;
            case 5:
                flag = showLogoutView();
                break;
        }
    }
}

 

private void showSelectRoomView() {
    Map<Integer, Room> roomList = roomService.getRoomList();
    int roomLength = roomList.size();

    roomCheckOutput.printSelectRoomView(customer, roomList);

    int inputNumber = inputView.getInputNumber(0, roomLength);
    Room selectRoom = roomList.get(inputNumber);
    if (inputNumber == 1) {
        if (selectRoom.isReserved()) {
            showAlreadyReservedRoomView();//"이미 예약됬습니다."
            oneSecHold();//1초 대기
            showSelectRoomView();//선택화면 다시 출력
        } else {
            showCheckRoomView(selectRoom); //확인 후 장바구니에 담을지 선택
        }
    }
}

작성이 완료된 후 여서 진행중에 발생한 시행착오의 과정을 담지 못한게 아쉽지만, 찬찬히 뜯어보도록 하자. 장황한 연결과정은 넘어가고.

 

  1. 우선 Map인 roomList를 Database→Service를 거치며 가져와 Map의 지역변수roomList에 대입해준다.
  2. 이 Map의 사이즈를 int roomLength에 대입해놓는다.
  3. 이 후에 ‘객실 리스트’를 한 번 출력시켜주는데, 이 출력문들은 모두 output 이라는 패키지에 또 각 목적에 맞는 클래스별로 나누어 작성해놓았다.
  4. 입력을 받는 메서드를 호출하고 범위를 설정 후 inputNumber변수에 대입한다.
  5. 이 inputNumber를 맵 roomList의 가져올 ‘키 값’으로 받아주면 이렇게 된다. ex) 3번을 입력 == 맵roomList 의 3번 Key값의 Value를 선택
  6. 이제 이 Value값을 Room클래스의 지역변수 selectRoom에 대입시키는데, 이 때 Room의 생성자는 매개인자로 Value값의 각 값을 모두 받도록 이미 작성 되어있으므로, 말은 좀 길었지만 결국 잘 들어와졌다.

이제 “선택된 번호==선택된 방” 을 if문을 돌려 그 다음 메소드를 호출한다.

  1. 선택된 방이 이미 ‘true==예약완료’ 라면 “이미 예약됬다”는 메세지와 함께 선택화면을 다시 출력.
  2. 선택된 방이 ‘false==예약가능’ 이라면 장바구니에 담을 것인지 확인하는 메서드로 넘어감.

 

사실상 순차적으로 실행되도록 하는 뼈대를 작성하고, 각 차례마다 필요한 출력문이나 추가적인 메서드가 필요할 시 작성하고, 그 메서드 호출문을 넣어주는 식의 작업순서를 거쳤다.

 

시간이 없다. 다음으로.

 

 

//선택한 객실을 예약할 것인지에 대한 로직 취소할 시, 메인 화면으로 이동
    private void showCheckRoomView(Room selectRoom) {
        roomCheckOutput.printRoomInfo(selectRoom); //선택한 객실 확인 메세지

        int inputNumber = inputView.getInputNumber(1, 2); //누를 수 있는 숫자의 범위
        if (inputNumber == 1) {
            // 확인
            basketService.addRoom(selectRoom); // 장바구니로 선택된 객실을 옮기는 메서드
            showConfirmedCheckedRoomView(); // "성공적으로 장바구니에 담겼습니다."
            waitForThreeSec();  // 3초 sleep
        } else {
            // 취소
            showCancelReserveRoomView(); // "취소하였습니다. 메인화면으로 돌아갑니다."
        }
    }

예약 가능한 방을 선택했을 때 나오는 화면.

 

우선 “선택한 객실을 장바구니에 담을거냐” 라고 묻는 메세지가 나오고, 그 다음 입력값을 받는다.

여기에선 ‘1.확인, 2.취소’ 밖에 선택지가 없으므로 범위는 (1, 2)로 설정한다.

1번을 누르면 선택된 객실이 ‘예약대기목록’으로 넘어가는 메서드를 거친 뒤, 3초를 기다렸다가 해당 메서드를 빠져나가고, 그 전 메서드도 빠져나간 뒤 다시 메인화면으로 돌아간다.

2번을 누르면 다른 동작은 없이 동일하게 메인화면으로 돌아나간다.

 

기다리는 메서드는 thread의 sleep을 이용했다.

스레드는 복습 할 시간 없이 슥 맛뵈기만 해서 잘 모르기 때문에, 따로 다뤄봐야겠다. try,catch문의 예외처리 또한 그렇다.

 

 

이렇게 까지가 내가 맡은 구간의 작업이었다. 작업 경험이 많은게 아니기에 작성한 코드가 무사히 끝까지 도달하는 걸 봤을 때의 그 쾌감은 역시나 끝내준다.

 

하지만 아직 끝난 건 아니다. 이제 한 번 작업을 완료 한 것일 뿐.

'코딩 > JAVA' 카테고리의 다른 글

TPJ-호텔 예약 프로그램 (5)  (1) 2023.11.02
TPJ-호텔 예약 프로그램 (4)  (1) 2023.11.01
TPJ-호텔 예약 프로그램 (2)  (1) 2023.11.01
TPJ-호텔 예약 프로그램 (1)  (0) 2023.11.01
오케~ 또시피~  (1) 2023.10.16