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());
}
}