DDIT_Advanced_Java <Map> 호텔서비스 프로그램

Gyeomii·2022년 5월 23일
0

DDITAdvancedJava

목록 보기
3/6
post-thumbnail

📌Full Code

💾 [깃허브 Full Code]


📌HotelServise Class

조건

  • 호실과 이름을 입력하여 입실
  • 현재 입실중인 호실을 입력하여 퇴실, 입실중이 아닌 호실을 입력하면 오류
  • 객실상태를 실행하면 모든 입실자를 출력
  • 종료를 선택하면 프로그램이 종료

필드

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

📌displayMenu()

  • 처음 출력되는 초기화면
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("---------------------------------------------");
	}

📌open()

  • 다른 메소드들을 호출하여 실행
  • 예외처리 실행
	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("메뉴에 있는 번호를 입력하세요.");

			}
		}
	}

📌checkIn()

  • 체크인을 위해 객실번호와 이름을 입력받고 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 + "님 체크인 되었습니다.");
	}

📌checkOut()

  • 체크아웃할 객실번호를 입력하면 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 + "님 체크아웃 되었습니다.");
		}
	}

📌roomInfo()

  • 입실한 모든 사람의 정보를 출력하는 메소드
  • 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());
			}
		}
	}

📌close()

  • 프로그램 종료 메소드
  • 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 Class

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 + "]";
	}

}
profile
김성겸

0개의 댓글