중급과정/HighJava

[Java] 호텔 운영 프로그램 예제 (Map)

whalerice 2023. 11. 30. 09:01

문제)

호텔 운영을 관리하는 프로그램 작성.(Map이용)
 - 키값은 방번호 
 
실행 예시)

**************************
호텔 문을 열었습니다.
**************************

*******************************************
어떤 업무를 하시겠습니까?
1.체크인  2.체크아웃 3.객실상태 4.업무종료
*******************************************
메뉴선택 => 1 <-- 입력

어느방에 체크인 하시겠습니까?
방번호 입력 => 101 <-- 입력

누구를 체크인 하시겠습니까?
이름 입력 => 홍길동 <-- 입력
체크인 되었습니다.

*******************************************
어떤 업무를 하시겠습니까?
1.체크인  2.체크아웃 3.객실상태 4.업무종료
*******************************************
메뉴선택 => 1 <-- 입력

어느방에 체크인 하시겠습니까?
방번호 입력 => 102 <-- 입력

누구를 체크인 하시겠습니까?
이름 입력 => 성춘향 <-- 입력
체크인 되었습니다

*******************************************
어떤 업무를 하시겠습니까?
1.체크인  2.체크아웃 3.객실상태 4.업무종료
*******************************************
메뉴선택 => 3 <-- 입력

방번호 : 102, 투숙객 : 성춘향
방번호 : 101, 투숙객 : 홍길동

*******************************************
어떤 업무를 하시겠습니까?
1.체크인  2.체크아웃 3.객실상태 4.업무종료
*******************************************
메뉴선택 => 2 <-- 입력

어느방을 체크아웃 하시겠습니까?
방번호 입력 => 101 <-- 입력
체크아웃 되었습니다.

*******************************************
어떤 업무를 하시겠습니까?
1.체크인  2.체크아웃 3.객실상태 4.업무종료
*******************************************
메뉴선택 => 1 <-- 입력

어느방에 체크인 하시겠습니까?
방번호 입력 => 102 <-- 입력

누구를 체크인 하시겠습니까?
이름 입력 => 허준 <-- 입력
102방에는 이미 사람이 있습니다.

*******************************************
어떤 업무를 하시겠습니까?
1.체크인  2.체크아웃 3.객실상태 4.업무종료
*******************************************
메뉴선택 => 2 <-- 입력

어느방을 체크아웃 하시겠습니까?
방번호 입력 => 101 <-- 입력
101방에는 체크인한 사람이 없습니다.

*******************************************
어떤 업무를 하시겠습니까?
1.체크인  2.체크아웃 3.객실상태 4.업무종료
*******************************************
메뉴선택 => 3 <-- 입력

방번호 : 102, 투숙객 : 성춘향

*******************************************
어떤 업무를 하시겠습니까?
1.체크인  2.체크아웃 3.객실상태 4.업무종료
*******************************************
메뉴선택 => 4 <-- 입력

**************************
호텔 문을 닫았습니다.
**************************

 

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Homework03_hotel {
	private Scanner scan;
	// key값 Integer(방번호), value값 HotelVO
	private Map<Integer, HotelVO> HotelMap;

	public Homework03_hotel() {
		scan = new Scanner(System.in);
		HotelMap = new HashMap<Integer, HotelVO>();
	}

	public void printVar() {
		System.out.println("***************************************");
	}

	public void printMenu() {
		System.out.println();
		printVar();
		System.out.println("\t어떤 업무를 하시겠습니까?");
		System.out.println();
		System.out.println("1. 체크인   2.체크아웃    3.객실상태   4.업무종료");
		printVar();
	}

	public void hotelStart() {
		printVar();
		System.out.println();
		System.out.println("\t호텔 문을 열었습니다.");
		System.out.println();
		printVar();

		while (true) {
			printMenu();
			int menuNum = scan.nextInt(); // 메뉴 번호 입력

			switch (menuNum) {
			case 1:
				checkIn(); // 체크인
				break;
			case 2:
				checkOut(); // 체크아웃
				break;
			case 3:
				displayRoom(); // 객실상태
				break;
			case 4:
				close(); // 업무종료
				return;
			default:
				System.out.println("잘못 입력했습니다. 다시 입력하세요.");
			} // switch문
		} // while문
	}

	private void close() {
		printVar();
		System.out.println("\t호텔 문을 닫았습니다. 안녕히 가세요.");
		printVar();
	}

	private void displayRoom() {
		printVar();
		Set<Integer> keySet = HotelMap.keySet();

		Iterator<Integer> it = keySet.iterator();

		// 순번
		while (it.hasNext()) {
			Integer roomNo = it.next();
			HotelVO hvo = HotelMap.get(roomNo);
			System.out.println("\t방 번호: " + hvo.getRoomNo() + ", 투숙객: " + hvo.getName());
		}
		printVar();

	}

	private void checkOut() {
		System.out.println();
		System.out.println("어느 방을 체크아웃 하시겠습니까?");
		System.out.print("방 번호 입력 => ");
		Integer roomNo = scan.nextInt();

		// 체크아웃 잘 됐는지 확인하기 위한 널 체크
		if (HotelMap.remove(roomNo) == null) {
			System.out.println(roomNo + "번 방에는 체크인한 사람이 없습니다.");
		} else {
			System.out.println(roomNo + "번 방 체크아웃 되었습니다.");
		}

	}

	/**
	 * 호텔 체크인을 하기 위한 메서드
	 */
	private void checkIn() {
		System.out.println();
		System.out.println("어느 방에 체크인 하시겠습니까?");
		System.out.print("방번호 입력 => ");
		Integer roomNo = scan.nextInt();

		// 이미 체크인 된 방인지 체크
		if (HotelMap.get(roomNo) != null) {
			System.out.println(roomNo + "번 방에는 이미 사람이 있습니다.");
			return; // 메서드 종료
		}
		scan.nextLine(); // 버퍼에 남아있는 엔터키 비워주기

		System.out.println("누구를 체크인 하시겠습니까?");
		System.out.print("이름 입력 => ");
		String name = scan.nextLine();

		HotelMap.put(roomNo, new HotelVO(roomNo, name));

		System.out.println("체크인 되었습니다.");
	}

	public static void main(String[] args) {
		new Homework03_hotel().hotelStart();
	}

	class HotelVO {
		private Integer roomNo; // 방번호
		private String name; // 이름

		// 생성자
		public HotelVO(Integer roomNo, String name) {
			super();
			this.roomNo = roomNo;
			this.name = name;
		}

		public Integer getRoomNo() {
			return roomNo;
		}

		public void setRoomNo(Integer roomNo) {
			this.roomNo = roomNo;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		@Override
		public String toString() {
			return "HotelVo [roomNo=" + roomNo + ", name=" + name + "]";
		}

	}

}