관리 메뉴

거니의 velog

230829_컬렉션 프레임워크 6 본문

대덕인재개발원_자바기반 애플리케이션

230829_컬렉션 프레임워크 6

Unlimited00 2023. 8. 29. 14:46

[MyHotel.java]

package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

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

조건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 MyHotel {

	private HashMap<Integer, Room2> hotelMap;
	private Scanner sc;
	
	// 생성자 ==> 객실 초기화 작업
//	- 201~209 : 싱글룸
//  - 301~309 : 더블룸
//  - 401~409 : 스위트룸
	
	public MyHotel() {
		
		hotelMap = new HashMap<Integer, Room2>();
		sc = new Scanner(System.in);
		
		// 객실 초기화
		for(int i=2; i<=4; i++) {
			// 방 종류 구하기
			String roomType = null;
			switch(i) {
				case 2: roomType = "싱글룸"; break;
				case 3: roomType = "더블룸"; break;
				case 4: roomType = "스위트룸"; break;
			}
			
			// 각 객실(Room객체)을 생성해서 Map에 저장한다.
			for(int j=1; j<=9; j++) {
				int roomNum = i * 100 + j;
				Room2 room = new Room2(roomNum, roomType);
				hotelMap.put(roomNum, room);
			}
		}
		
	}
	
	public static void main(String[] args) {
		
		new MyHotel().hotelStart();
		
	}
	
	// 시작 메서드
	public void hotelStart() {
		
		System.out.println();
		System.out.println("**************************************");
		System.out.println("        호 텔 영 업 관 리 프 로 그 램");
		System.out.println("**************************************");
		System.out.println();
		
		while(true) {
			int choice = displayMenu();
			switch(choice) {
				case 1: // 1. 체크인
					checkIn(); break;
				case 2: // 2. 체크아웃
					checkOut(); break;
				case 3: // 3. 객실상태
					displayRoomState(); break;
				case 4: // 4. 업무종료
					System.out.println();
					System.out.println("*********************************************");
					System.out.println("       호텔문을 닫았습니다.");
					System.out.println("*********************************************");
					return;
				default: 
					System.out.println("작업 선택 번호를 잘못 입력했습니다.");
					System.out.println("다시 입력하세요...");
			}
		}
		
	}
	
	// 메뉴를 출력하고 선택 번호를 입력 받아 반환하는 메서드
	public int displayMenu() {
		
		System.out.println();
		System.out.println("-----------------------------------------------------------");
		System.out.println("어떤 업무를 하시겠습니까?");
		System.out.println("1. 체크인    2. 체크아웃    3. 객실상태    4. 업무종료");
		System.out.println("-----------------------------------------------------------");
		System.out.print("선택 >> ");
		return sc.nextInt();
		
	}
	
	// 체크인 처리 메서드
	public void checkIn() {
		System.out.println();
		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 roomNum = sc.nextInt();
		
		// 입력한 값이 Map의 key값에 없으면 존재하지 않는 방번호 이다.
		if(!hotelMap.containsKey(roomNum)) {
			System.out.println(roomNum + "호 객실은 존재하지 않습니다.");
			return;
		}
		
		// 해당 객실에 투숙객이 있는지 검사
		if(hotelMap.get(roomNum).getName()!=null) {
			System.out.println(roomNum + "호 객실에는 이미 손님이 있습니다.");
			return;
		}
		
		System.out.println("누구를 체크인 하시겠습니까?");
		System.out.print("이름 입력 >> ");
		String guestName = sc.next();
		
		// 입력 받은 투숙객 이름을 해당 객실의 투숙객이름으로 저장한다.
		hotelMap.get(roomNum).setName(guestName);
		
		System.out.println(guestName + "씨가 " + roomNum + "호 객실에 체크인 되었습니다...");
	}
	
	// 객실 상태를 출력하는 메서드
	public void displayRoomState() {
		System.out.println();
		System.out.println("----------------------------------------------");
		System.out.println("		현재 객실 상태");
		System.out.println("----------------------------------------------");
		System.out.println("방 번호" + "\t\t" + "방 종류" + "\t\t" + "투숙객 이름");
		System.out.println("----------------------------------------------");
		
		Set<Integer> roomNumSet = hotelMap.keySet();
		ArrayList<Integer> roomNumList = new ArrayList<Integer>(roomNumSet);
		Collections.sort(roomNumList); // 방번호를 오름차순으로 정렬
		
		for(int roomNum : roomNumList) {
			Room2 r = hotelMap.get(roomNum);
			System.out.print(r.getNum() + "\t\t");
			System.out.print(r.getType() + "\t\t");
			String name = r.getName() == null ? "-" : r.getName();
			System.out.println(name);
		}
		System.out.println("----------------------------------------------");
	}
	
	// 체크아웃 처리 메서드
	public void checkOut() {
		System.out.println();
		System.out.println("----------------------------------------------");
		System.out.println("   체크아웃 작업");
		System.out.println("----------------------------------------------");
		System.out.println("체크아웃 할 방 번호를 입력하세요.");
		System.out.print("방번호 입력 >> ");
		int roomNum = sc.nextInt();
		
		// 입력한 값이 Map의 key값에 없으면 존재하지 않는 방번호 이다.
		if(!hotelMap.containsKey(roomNum)) {
			System.out.println(roomNum + "호 객실은 존재하지 않습니다.");
			return;
		}
		
		// 해당 객실에 투숙객이 없는지 검사
		if(hotelMap.get(roomNum).getName()==null) {
			System.out.println(roomNum + "호 객실에는 체크인 한 손님이 없습니다.");
			return;
		}
		
		// 해당 객실에 현재 투숙 중인 투숙객 이름 구하기
		String guestName = hotelMap.get(roomNum).getName();
		
		// 체크 아웃 작업은 해당 객실의 투숙객 이름을 null로 변경한다.
		hotelMap.get(roomNum).setName(null);
		
		System.out.println(roomNum + "호 객실의 " + guestName + "님이 체크아웃을 완료했습니다.");
	}
	
}

// Room클래스는 방번호(int), 방종류, 투숙객이름 필드로 구성
class Room2 {
	
	private int num; // 방 번호
	private String type; // 방 종류
	private String name; // 투숙객 이름
	
	public Room2() {}
	public Room2(int num, String type) {
		super();
		this.num = num;
		this.type = type;
	}
	
	public int getNum() {
		return num;
	}
	
	public void setNum(int num) {
		this.num = num;
	}
	
	public String getType() {
		return type;
	}
	
	public void setType(String type) {
		this.type = type;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Room2 [num=" + num + ", type=" + type + ", name=" + name + "]";
	}
	
}


[PropertiesTest.java]

package kr.or.ddit.basic;

import java.util.Properties;

public class PropertiesTest {

	public static void main(String[] args) {
		
		/*
		 * Properties 객체
		 * - Properties는 Map보다 축소된 기능의 객체라고 할 수 있다.
		 * 
		 * - Map은 key값과 value 값에 모든 종류의 객체를 사용할 수 있지만
		 *   Properties는 key값과 value 값에 String만 사용할 수 있다.
		 *   
		 * - Map은 put(), get() 메서드를 이용하여 데이터를 입출력하지만
		 *   Properties는 setProperty(), getProperty() 메서드를 통해서 데이터를 입출력한다.
		 *   
		 * - Properties는 데이터를 파일로 입출력하는 기능이 있다.
		 */
		
		Properties prop = new Properties();
		
		prop.setProperty("name", "홍길동");
		prop.setProperty("age", "20");
		
		int age = 30;
//		prop.setProperty("age2", age + "");
		prop.setProperty("age2", String.valueOf(age));
		
		prop.setProperty("tel", "010-1111-2222");
		prop.setProperty("addr", "대전");
		
		//----------------------------------------------------------
		
		String name = prop.getProperty("name");
		int tempAge = Integer.parseInt(prop.getProperty("age"));
		int tempAge2 = Integer.parseInt(prop.getProperty("age2"));
		String tel = prop.getProperty("tel");
		String addr = prop.getProperty("addr");
		
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + tempAge);
		System.out.println("나이2 : " + tempAge2);
		System.out.println("전화번호 : " + tel);
		System.out.println("주소 : " + addr);
		
//		이름 : 홍길동
//		나이 : 20
//		나이2 : 30
//		전화번호 : 010-1111-2222
//		주소 : 대전
		
	}

}