호텔 객실관리프로그램 - hotel gaegsilgwanlipeulogeulaem

package kr.or.ddit.basic;

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

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

조건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 homework {
	
	private HashMap<Integer,Room> roomMap;
	private Scanner scan;

	public homework(){
		roomMap = new HashMap<>();
		scan = new Scanner(System.in);
		for (int i = 200; i < 500; i+=100) {
			for (int j = 1; j < 10; j++) {
				switch(i/100){
				case 2: 
					roomMap.put(i+j, new Room(i+j, "싱글룸", "-"));
					break;
				case 3: 
					roomMap.put(i+j, new Room(i+j, "더블룸", "-"));
					break;
				case 4: 
					roomMap.put(i+j, new Room(i+j, "스위트룸", "-"));
					break;
					
				}
			}
		}
	}


  public static void main(String[] args) {
	new homework().roomStart();
}

//프로그램 시작 메서드
public void roomStart(){
	System.out.println();
	System.out.println("*********************************************");
	System.out.println(" 호텔문을 열었습니다. 어서오십시요.");
	System.out.println("*********************************************");
	System.out.println();
	
	while(true){
		int choice = Task();
		switch(choice){
		case 1 :		 
			checkIn(); break;
		case 2 :		
			checkOut(); break;
		case 3 :		
			roomCondition(); break;
		case 4 : 
			System.out.println("*********************************************");
			System.out.println(" 호텔문을 닫았습니다.");
			System.out.println("*********************************************");
			return;
		default : 
			System.out.println("작업 번호를 잘못 입력했습니다.");
			System.out.println("다시 선택하세요.");
		
	}
  }
}

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.println("방 번호 입력 >>");
	int roomnum = scan.nextInt();
	
	//방번호가 없을때
	 if(!roomMap.containsKey(roomnum)){
		 System.out.println(roomnum + "호 객실은 존재하지 않습니다.");
		 return;
	 }
	
	 //방에 사람이 있을때
	if(!roomMap.get(roomnum).getGuest().equals("-")){
		 System.out.println(roomnum + "호 객실은 이미 손님이 있습니다.");
		 return;
	}
	
	System.out.println("누구를 체크인 하시겠습니까?");
	System.out.println("이름 입력 >>");
	String guest = scan.next();
	roomMap.get(roomnum).setGuest(guest);
	System.out.println("체크인이 완료되었습니다.");
}

private void checkOut(){
	System.out.println("----------------------------------------------");
	System.out.println("체크아웃 작업");
	System.out.println("----------------------------------------------");
	System.out.println("체크아웃 할 방 번호를 입력하세요.");
	System.out.println("방번호 입력 >>");
	int roomnum = scan.nextInt();
	//체크인한 사람이 없을때
	if(!roomMap.containsKey(roomnum)){
		System.out.println(roomnum + "호 객실.");
		return;
	}
	if(roomMap.get(roomnum).getGuest().equals("-")){
		 System.out.println(roomnum + "호 객실은 체크인한 사람이 없습니다.");
		 return;
	}
	System.out.println(roomnum + "호 객실의"+roomMap.get(roomnum).getGuest()+"님을 체크아웃을 완료하였습니다.");
	roomMap.get(roomnum).setGuest("-");
	
	
}

private void roomCondition(){
	System.out.println("----------------------------------------------");
	System.out.println(" 현재 객실 상태");
	System.out.println("----------------------------------------------");
	System.out.println("방 번호	 방 종류	 투숙객 이름");
	System.out.println("----------------------------------------------");
	List<Room>list = new ArrayList<>();
	for(Integer key : roomMap.keySet()){
		//맵에 있는 키값을 가져와서 set으로 반환해서 키에 넣기
		Room value = roomMap.get(key);
		list.add(value);
	}
	Collections.sort(list);
	for(int i = 0; i < list.size(); i++) {
		System.out.println(list.get(i).getRoomnum()+"\t"+list.get(i).getRoomtype()+"\t"+list.get(i).getGuest());
	}
	System.out.println("----------------------------------------------");
}

//업무 메서드
private int Task(){
	System.out.println("-----------------------------------------------------------");
	System.out.println("어떤 업무를 하시겠습니까?");
    System.out.print("1.체크인 ");
    System.out.print("2.체크아웃 ");
    System.out.print("3.객실상태 ");
    System.out.println("4.업무종료 "); 
    System.out.println("-----------------------------------------------------------");
	System.out.println("선택>>");
	int num = scan.nextInt();
	
	return num;
	
}

}


 class Room implements Comparable<Room>{
	private int roomnum;
	private String roomtype;
	private String guest;
	
	public Room(int roomnum, String roomtype, String guest) {
		super();
		this.roomnum = roomnum;
		this.roomtype = roomtype;
		this.guest = guest;
	}

	public int getRoomnum() {
		return roomnum;
	}

	public void setRoomnum(int roomnum) {
		this.roomnum = roomnum;
	}

	public String getRoomtype() {
		return roomtype;
	}

	public void setRoomtype(String roomtype) {
		this.roomtype = roomtype;
	}

	public String getGuest() {
		return guest;
	}

	public void setGuest(String guest) {
		this.guest = guest;
	}

	@Override
	public String toString() {
		return roomnum+"\t"+roomtype+"\t"+guest;
	}

	@Override
	public int compareTo(Room o) {
		return Integer.compare(this.getRoomnum(),o.getRoomnum());
	}
	
	 
	 
 }