어제 배운 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 |