상세 컨텐츠

본문 제목

고급자바_1222-1

자바

by 정재화니 2022. 12. 22. 10:16

본문

어제 배운 Map을 통하여 예시문제를 풀어봅니다.


문제) 호텔 객실을 관리하는 프로그램을 작성하시오.

   조건1)  호텔 객식을 나타내는 Room클래스는 방번호(int), 방종류, 투숙객이름 필드로 구성되어 있고      
           방번호와 방종류는 다음과 같다.
           - 201~209 : 싱글룸
           - 301~309 : 더블룸
           - 401~409 : 스위트룸

   조건2) 전체 객실 관리는 Map을 이용한다.
          (Map의 key값은 방번호로 하고 value값은 Room의 인스턴스로 한다.)
          생성자에서는 방번호와 방종류를 초기화한다.




실행예시)

*********************************************
       호텔문을 열었습니다. 어서오십시요.
*********************************************


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

----------------------------------------------
   체크인 작업
----------------------------------------------
 * 201~209 : 싱글룸
 * 301~309 : 더블룸
 * 401~409 : 스위트룸
----------------------------------------------
방 번호 입력 >> 101     <--- 입력
101호 객실은 존재하지 않습니다.

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

----------------------------------------------
   체크인 작업
----------------------------------------------
 * 201~209 : 싱글룸
 * 301~309 : 더블룸
 * 401~409 : 스위트룸
----------------------------------------------
방 번호 입력 >> 201     <--- 입력
누구를 체크인 하시겠습니까?
이름 입력 >> 홍길동
체크인이 완료되었습니다.

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

----------------------------------------------
   체크인 작업
----------------------------------------------
 * 201~209 : 싱글룸
 * 301~309 : 더블룸
 * 401~409 : 스위트룸
----------------------------------------------
방 번호 입력 >> 201     <--- 입력
201호 객실은 이미 손님이 있습니다.

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

----------------------------------------------
현재 객실 상태
----------------------------------------------
방 번호  방 종류  투숙객 이름
----------------------------------------------
201  싱글룸  홍길동
202  싱글룸    -
203  싱글룸    -
204  싱글룸    -
205  싱글룸    -
206  싱글룸    -
207  싱글룸    -
208  싱글룸    -
209  싱글룸    -
301  더블룸    -
302  더블룸    -
303  더블룸    -
304  더블룸    -
305  더블룸    -
306  더블룸    -
307  더블룸    -
308  더블룸    -
309  더블룸    -
401 스위트룸   -
402 스위트룸   -
403 스위트룸   -
404 스위트룸   -
405 스위트룸   -
406 스위트룸   -
407 스위트룸   -
408 스위트룸   -
409 스위트룸   -
----------------------------------------------

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

----------------------------------------------
   체크아웃 작업
----------------------------------------------
체크아웃 할 방 번호를 입력하세요.
방번호 입력 >> 101    <--- 입력
101호 객실은 존재하지 않습니다.

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

----------------------------------------------
   체크아웃 작업
----------------------------------------------
체크아웃 할 방 번호를 입력하세요.
방번호 입력 >> 303    <--- 입력
303호 객실에는 체크인 한 사람이 없습니다.

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

----------------------------------------------
   체크아웃 작업
----------------------------------------------
체크아웃 할 방 번호를 입력하세요.
방번호 입력 >> 201    <--- 입력
201호 객실의 홍길동님 체크아웃을 완료하였습니다.

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


----------------------------------------------
현재 객실 상태
----------------------------------------------
방 번호  방 종류  투숙객 이름
----------------------------------------------
201  싱글룸    -
202  싱글룸    -
203  싱글룸    -
204  싱글룸    -
205  싱글룸    -
206  싱글룸    -
207  싱글룸    -
208  싱글룸    -
209  싱글룸    -
301  더블룸    -
302  더블룸    -
303  더블룸    -
304  더블룸    -
305  더블룸    -
306  더블룸    -
307  더블룸    -
308  더블룸    -
309  더블룸    -
401 스위트룸   -
402 스위트룸   -
403 스위트룸   -
404 스위트룸   -
405 스위트룸   -
406 스위트룸   -
407 스위트룸   -
408 스위트룸   -
409 스위트룸   -
----------------------------------------------


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

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


예시를 통하여 작성해보면

public class HotelTestTT {
	Map<Integer, Room> hotelMap;
	Scanner sc;
	
	public HotelTestTT() {
		hotelMap = new HashMap<Integer, Room>();
		sc = new Scanner(System.in);
		
		//객실 초기화
		for(int i = 2; i <= 4; i++) {
			String type = null;
			switch(i){
			case 2 : type = "싱글룸";break;
			case 3 : type = "더블룸";break;
			case 4 : type = "스위트룸";break;
			}
			for(int j = 1; j <= 9; j++) {
				int num = i * 100 + j;
				hotelMap.put(num, new Room(num, type));
			}
		}
	}

생성자를 만들어서 객실을 만들어 놓습니다.

private void start() {
		System.out.println("*****************************************");
		System.out.println("    호텔문을 열었습니다. 어서오십시요.");
		System.out.println("*****************************************");
		System.out.println();
		
		while(true) {
			int choice = displayMenu();
			switch(choice) {
			case 1:		
				checkIn();   //체크인
				break;
			case 2:	
//				checkOut();//체크아웃
				break;
			case 3:	
//				roomStatus();//객실상태
				break;
			case 4:
				System.out.println("*****************************************");
				System.out.println("           #영업 종료요~~~#");
				System.out.println("*****************************************");
				return;
			default :
				System.out.println("잘못 입력했습니다. 다시 입력해주세요");
				break;
			}
		}
		
	}

시작하는 메서드를 만들고 while문을 통하여 반복을 합니다.

필요한 메서드를 하나씩 만드는데 checkIn먼저 만들어보겠습니다.

private void checkIn() {
		System.out.println("---------------------------");
		System.out.println("체크인 작업");
		System.out.println("---------------------------");
		System.out.println("* 201 ~ 209 : 싱글룸");
		System.out.println("* 301 ~ 309 : 더블룸");
		System.out.println("* 401 ~ 409 : 스위트룸");
		System.out.println("---------------------------");
		System.out.print("방번호 입력 >>");
		int num = sc.nextInt();
		
		//입력한 방번호가 Map의 key값에 없으면 없는 방번호이다.
		if(! hotelMap.containsKey(num)) {
			System.out.println(num + "호 객실은 존재하지 않습니다.");
			return;
		}
		// 해당 객실에 이미 다른 손님이 있는지 검사
		if(hotelMap.get(num).getGuestName() != null	) {
			System.out.println(num + "호 객실에는 이미 손님이 있습니다.");
			return;
		}
		System.out.println("누구를 체크인 하시겠습니까?");
		System.out.println("이름 입력 >>");
		String name = sc.next();
		
		// 입력받은 손님 이름을 해당 객실의 투숙객이름이 저장될 변수에 저장한다.
		hotelMap.get(num).setGuestName(name);
		
		System.out.println(name + "씨" + num + "호 객실에 체크인 했습니가.");
		
		
	}

만들어지지 않은 방번호나 이미 사람이 예약되어 있다면 예약할 수 없기 때문에 if문으로 걸러줘야합니다.

위에서 미리 202호에 예약을 해놨습니다.

 

다음은 예약상태에 예약한 사람이 입력이 되는지 확인하는 메서드를 만들어 보도록하겠습니다.

private void roomStatus() {
		
		// 방번호를 순서대로 나오게 하기 위해서 방번호(Map의 key값)만 List에 넣은 후 정렬해서 사용한다.
		List<Integer> numList = new ArrayList<Integer>(hotelMap.keySet());

		//정렬하기
		Collections.sort(numList);
		
		System.out.println();
		
		System.out.println("-------------------------------");
		System.out.println("현재 객실 상태");
		System.out.println("-------------------------------");
		System.out.println("방번호   방종류     투숙객이름");
		System.out.println("-------------------------------");
		
		//List에서 방번호 하나씩 차례로 꺼내와서 Map에서 해당 방번호에 저장된 Room객체를 구해서 출력한다.
		for(int i = 0; i < numList.size(); i++) {
			Room r = hotelMap.get(numList.get(i));
			
			String name = "-";
			if(r.getGuestName()!=null) {
				name = r.getGuestName();
			}
			
			System.out.println(r.getRoomNum() + "\t" + r.getRoomType() + "\t" + r.getGuestName());
		}
		System.out.println("-----------------------------------------------");
		System.out.println();
		
		
	}

Map에서는 정렬이 되어서 나오지 않기 때문에 방번호를 List로 변환하여 정렬해서 뽑아야 합니다.

정렬된 방번호를 볼수 있으며 null인것은 "-"로 나오도록 바꿨습니다....

다음은 체크아웃하는 메서드를 만들어보겠습니다.

 

private void checkOut() {
		System.out.println("-----------------------------");
		System.out.println("   체크아웃 작업");
		System.out.println("-----------------------------");
		System.out.print("방번호 입력>>");
		int num = sc.nextInt();
		
		// 입력한 방번호가 Map의 key값에 없으면 없는 방번호이다.
		if(! hotelMap.containsKey(num)) {
			System.out.println(num + "호 객실은 존재하지 않습니다.");
			return;
		}
		
		// 해당 객실에 손님이 없는지 여부 검사
		if(hotelMap.get(num).getGuestName() == null) {
			System.out.println(num + "호 객실에는 체크인한 사람이 없습니다.");
			return;
		}
		
		// 체크아웃 작업은 해당 객실의 손님 이름을 null로 변경하면 된다.
		String name = hotelMap.get(num).getGuestName();		// 현재의 손님 이름 구하기
		
		hotelMap.get(num).setGuestName(null);
		
		System.out.println(num + "호 객실에서" + name + "손님이 체크아웃했습니다.");
		
		
	}

마찬가지로 객실이 존재하는지 확인하고 해당객실에 체크인한 사람이 있는지 확인합니다.


결과!

체크인 하기
예약 확인
체크아웃

 

'자바' 카테고리의 다른 글

고급자바_1223-1  (0) 2022.12.23
고급자바_1222-2  (2) 2022.12.22
고급자바_1221-1  (0) 2022.12.21
고급자바_1220-1  (0) 2022.12.20
고급자바1219-2  (0) 2022.12.19

관련글 더보기