조건
- 호실과 이름을 입력하여 입실
- 현재 입실중인 호실을 입력하여 퇴실, 입실중이 아닌 호실을 입력하면 오류
- 객실상태를 실행하면 모든 입실자를 출력
- 종료를 선택하면 프로그램이 종료
필드
- isOpen : while문 실행을 위해 true 저장
- roomMap : 객실의 정보를 Map에 저장, 객실의 순차정렬을 위해 TreeMap사용
class HotelService {
private Scanner scanner;
private boolean isOpen;
private TreeMap<Integer, Room> roomMap;
public HotelService() {
scanner = new Scanner(System.in);
isOpen = true;
roomMap = new TreeMap<Integer, Room>();
}
- 처음 출력되는 초기화면
public void displayMenu() {
System.out.println(" ************************* ");
System.out.println(" 호텔 델루나 업무 시작 ");
System.out.println(" ************************* ");
System.out.println("---------------------------------------------");
System.out.println(" 어떤 업무를 하시겠습니까? ");
System.out.println(" 1.체크인 2.체크아웃 3.객실상태 4.업무종료 ");
System.out.println("---------------------------------------------");
}
- 다른 메소드들을 호출하여 실행
- 예외처리 실행
public void open() {
displayMenu();
while (isOpen) {
switch (menu()) {
case 1:
try {
checkIn();
} catch (Exception e) {
System.err.println("호실을 정수로 입력하세요.");
}
break;
case 2:
try {
checkOut();
} catch (Exception e) {
System.err.println("호실을 정수로 입력하세요.");
}
break;
case 3:
roomInfo();
break;
case 4:
close();
break;
default:
System.err.println("메뉴에 있는 번호를 입력하세요.");
}
}
}
- 체크인을 위해 객실번호와 이름을 입력받고 roomMap에 저장하는 메소드
- 이미 입실한 객실번호를 입력하면 다른 객실을 입력받음
- 입력받은 객실번호(inNum)를 roomMap의 key로 사용하여
get한 데이터가 !=null(null이 아님)이면 이미 inNum을 key로하는 데이터가 roomMap에 저장되어 있다는 뜻이므로
데이터의 중복을 체크할 수 있다.roomMap.get(inNum) != null
public void checkIn() throws Exception{
int inNum;
System.out.println();
System.out.println("몇호실에 체크인 하시겠습니까?");
do {
System.out.print("실 번호 입력 : ");
inNum = Integer.parseInt(scanner.next());
if (roomMap.get(inNum) != null) { // 중복데이터 검사
System.err.println(inNum + "호는 사용중입니다.");
System.out.println("다른 호실 번호를 입력해주세요.");
}
} while (roomMap.get(inNum) != null);
System.out.println("");
System.out.print("이름 입력 : ");
String name = scanner.next();
roomMap.put(inNum, new Room(inNum, name));
System.out.println(name + "님 체크인 되었습니다.");
}
- 체크아웃할 객실번호를 입력하면 roomMap에서 데이터를 삭제하는 메소드
- 입실하지 않은 객실번호를 입력하면 '체크인한 사람이 없다'는 메세지 출력
- 입력받은 객실번호(outNum)을 key로 roomMap에서 remove할 때
삭제되는 데이터가 존재하지 않으면 null을 반환하기 때문에
outNum을 key로하는 객실데이터가 존재하지않는다는 뜻이다.roomMap.remove(outNum) == null
public void checkOut() throws Exception{
System.out.println("몇호실을 체크아웃 하시겠습니까?");
System.out.print("실 번호 입력 : ");
int outNum = Integer.parseInt(scanner.next());
Room r = roomMap.get(outNum);
if (roomMap.remove(outNum) == null) {
System.out.println(outNum + "호실에는 체크인한 사람이 없습니다.");
return;
} else {
String outName = r.getName();
System.out.println(outName + "님 체크아웃 되었습니다.");
}
}
- 입실한 모든 사람의 정보를 출력하는 메소드
- roomMap의 key를 Set에 저장한 후 크기가 0이면 '등록된 정보 없음' 을 출력
keySet.size() == 0
public void roomInfo() {
Set<Integer> keySet = roomMap.keySet();
if (keySet.size() == 0) {
System.out.println("등록된 정보가 없습니다.");
} else {
System.out.println("=============================");
System.out.println(" 실 번호 이름 ");
System.out.println("=============================");
for (Integer roomNum : keySet) {
Room r = roomMap.get(roomNum);
System.out.println(" " + r.getRoomNum() + "\t" + r.getName());
}
}
}
- 프로그램 종료 메소드
- inOpen에 false를 저장하여 while문을 종료한다.
public void close() { System.out.println(" ************************* "); System.out.println(" 호텔 델루나 업무 종료 "); System.out.println(" ************************* "); isOpen = false; }
- 메뉴에 지정된 값이 아닌 다른 값을 입력할 때 예외처리하는 메소드
public int menu() {
while (true) {
try { // 스캐너로 입력받은 번호를 반환
System.out.println();
System.out.print("메뉴 선택: ");
int num = scanner.nextInt();
return num;
} catch (Exception e) { // 오류발생시 재실행
System.err.println("Error : 잘못된 값이 입력되었습니다.");
scanner.next();
}
}
}
Room객체를 생성하고 입력된 정보를 저장하는 Room클래스
class Room {
private int roomNum;
private String name;
public Room(int inNum, String name) {
super();
this.roomNum = inNum;
this.name = name;
}
public int getRoomNum() {
return roomNum;
}
public void setRoomNum(int roomNum) {
this.roomNum = roomNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Room [roomNum=" + roomNum + ", name=" + name + "]";
}
}