package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class HotelRoom {
static HashMap<Integer, RoomInfo> map;// = new HashMap();
//RoomInfo r = new RoomInfo(null, 0, null);
static Scanner sc;// = new Scanner(System.in);
//생성자 *******************************
public HotelRoom(){
System.out.println("d");
map = new HashMap<Integer, RoomInfo>();
sc = new Scanner(System.in);
//객실 초기화
//map.put(201, new RoomInfo("-",201, "싱글룸"));
for (int i= 2 ; i <=4 ; i++) {
String roomType = null;
switch(i) {
case 2 : roomType = "싱글룸"; break;
case 3 : roomType = "더블룸"; break;
case 4 : roomType = "스위트룸"; break;
}
for(int j=1 ; j <=9 ; j++) {
int roomNum = i * 100 + j ;
RoomInfo room = new RoomInfo("-", roomNum , roomType );
map.put(roomNum, room);
}
}
}
public static void main(String[] args) {
new HotelRoom().start();
}
void start () {
/* RoomInfo r = new RoomInfo(null, 0, null);
for(int i = 201 ; i < 210 ; i++){
//roomNumber = i ;
r = new RoomInfo("-", i, "싱글룸");
map.put(i, r);
}
for(int i = 301 ; i < 310 ; i++){
r = new RoomInfo("-", i, "트윈룸");
map.put(i, r);
}
for(int i = 401 ; i < 410 ; i++){
r = new RoomInfo("-", i, "스위트룸");
map.put(i, r);
}
*/
System.out.println("호텔문을 열었습니다. 어서오십시요");
System.out.println("어떤 업무를 하시겠습니까?");
System.out.println("1.체크인 \t 2.체크아웃\t 3.객실상태 \t 4. 업무종료");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
switch(num) {
case 1 : checkIn(); break;
case 2 : checkOut(); break;
case 3 : viewAll(); break;
case 4 : System.out.println("업무가 종료되었습니다.");
System.exit(0);
} //switch 의 끝
} // start() 메소드 끝
void checkIn () {
String cusName = "-";
int roomNumber = 0 ;
String roomType = "초기화";
System.out.println("Welcome * 체크인 페이지 ");
while(roomNumber <200 || roomNumber > 410) {
System.out.println("방번호를 입력하세요");
roomNumber = sc.nextInt();
if ( roomNumber < 201 || roomNumber > 409 ) {
System.out.println(roomNumber + "방이 존재하지 않습니다.");
checkIn(); } //if 문 끝
if ( !map.get(roomNumber).getCusName().equals("-")) {
System.out.println("예약되어 있는 방입니다.");
checkIn();
}
if ( roomNumber > 200 && roomNumber < 210 ) {
roomType = "싱글룸";
}
else if (roomNumber > 300 && roomNumber < 310 ) {
roomType = "더블룸";
}
else if (roomNumber > 400 && roomNumber < 410 ) {
roomType = "스위트룸";
}
}//while() 문 끝
sc.nextLine();
System.out.println("이름을 입력하세요 ");
cusName = sc.nextLine();
map.put(roomNumber, new RoomInfo(cusName, roomNumber, roomType));
System.out.println(map.get(roomNumber).getCusName() + "님의 " + roomType + "방이 체크인이 되었습니다.");
start();
}// check in 끝
void checkOut() {
System.out.println("체크아웃 작업 ");
System.out.println("체크아웃 할 방을 입력해 주세요");
int roomNumber = sc.nextInt();
if ( !map.containsKey(roomNumber) ) {
System.out.println("예약내용이 존재하지 않습니다.") ;
checkIn();
}
Scanner sc_ = new Scanner(System.in);
System.out.println("성함을 입력해주세요");
String cusName = sc_.nextLine();
if(!map.get(roomNumber).getCusName().equals(cusName) ) {
System.out.println("성함이 체크하실 방과 일치하지 않습니다.");
checkOut();
}
else {
map.remove(roomNumber);
System.out.println(cusName +"님의 방 " + roomNumber + "번 방이 체크아웃 되었습니다.");
}
} //checkOut() 메소드 끝
void viewAll(){
System.out.println("현재 객실 상태입니다.");
System.out.println("방번호 \t 방 종류\t 투숙객 이름 ");
for ( int i = 2 ; i <= 4 ; i++) {
for( int j = 1 ; j <10 ; j++) {
System.out.println(i * 100 + j + "\t" + map.get(i * 100 + j).getRoomType() + "\t" + map.get(i * 100 + j).getCusName() );
}
} //for 끝
start();
} //viewAll 메소드 끝
private void showRoom() {
System.out.println();
//방번호를 순서대로 나오게 하기 위해서 방번호(Map 의 key 값) 만 List 에 넣어서 사용한다.
ArrayList<Integer> roomNumList = new ArrayList<>();
for(int num : map.keySet()) { //Map 의 key 값을 List 에 추가하기
roomNumList.add(num);
}
Collections.sort(roomNumList); // 방번호를 오름차순으로 정렬하기
System.out.println();
System.out.println("----------------------------------------");
System.out.println("현재 객실 상태");
System.out.println("----------------------------------------");
System.out.println("방번호 \t 방종류 \t 투숙객 이름");
System.out.println("----------------------------------------");
//List 에서 방번호를 하나씩 꺼내와 Map 에서 해당 방번호에 해당하는 Room 객체를 구해서 출력한다.
for(int i = 0 ; i <roomNumList.size() ; i++ ) {
RoomInfo r = map.get(roomNumList.get(i));
System.out.println(r.getRoomNumber() + "\t" + r.getRoomType() + "\t" + r.getCusName());
}
System.out.println("----------------------------------------");
System.out.println();
}
} //hotelRoom 클래스 끝
class RoomInfo {
private String cusName;
private int roomNumber ;
private String roomType;
public RoomInfo ( String cusName, int roomNumber , String roomType ) {
this.cusName = cusName;
this.roomNumber = roomNumber ;
this.roomType = roomType;
}
public int getRoomNumber() {
return roomNumber;
}
public void setRoomNumber(int roomNumber) {
this.roomNumber = roomNumber;
}
public String getCusName() {
return cusName;
}
public void setCusName(String cusName) {
this.cusName = cusName;
}
public String getRoomType() {
return roomType;
}
public void setRoomType(String roomType) {
this.roomType = roomType;
}
}
-----------------------------------------------------------------------------------------------------선생님 코드
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class DeadeokHotel {
Map<Integer, Room> hotelMap;
Scanner scan;
// 생성자
public DeadeokHotel() {
hotelMap = new HashMap<Integer, Room>();
scan = new Scanner(System.in);
// 객실초기화
//hotelMap.put(201, new Room(201, "싱글룸"));
for(int i=2; i<=4; i++) {
String roomType = null;
switch(i) {
case 2: roomType = "싱글룸"; break;
case 3: roomType = "더블룸"; break;
case 4: roomType = "스위트룸"; break;
}
for(int j=1; j<=9; j++) {
int roomNum = i * 100 + j;
Room room = new Room(roomNum, roomType);
hotelMap.put(roomNum, room);
}
}
}
public static void main(String[] args) {
new DeadeokHotel().hotelStart();
}
private void hotelStart() {
System.out.println();
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 : // 객실상태
showRoom();
break;
case 4 : // 업무종료
System.out.println("*********************************************");
System.out.println(" 호텔문을 닫았습니다.");
System.out.println("*********************************************");
return;
default :
System.out.println("작업번호를 잘못 입력했습니다. 다시 선택하세요.");
}
}
}
// 체크인을 처리하는 메서드
private void checkIn() {
System.out.println();
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 roomNum = scan.nextInt();
// 입력한 방번호가 있는지 검사(키값으로 입력한 방번호가 있는지 검사)
if(!hotelMap.containsKey(roomNum)) {
System.out.println(roomNum + "호 객실은 존재하지 않습니다.");
//return;
}else if(hotelMap.get(roomNum).getGuestName()!=null) { // 해당 객실에 손님이 있는지 검사
System.out.println(roomNum + "호 객실에는 이미 손님이 있습니다.");
//return;
}else {
System.out.println("누구를 체크인 하시겠습니까?");
System.out.print("이름 입력 >> ");
String name = scan.next();
// 입력받은 객실의 투숙객 명단에 입력받은 이름을 저장한다.
hotelMap.get(roomNum).setGuestName(name);
System.out.println(name + "씨가 " + roomNum + "호 객실에 체크인 되었습니다.");
}
}
// 체크아웃을 처리하는 메서드
private void checkOut() {
System.out.println();
System.out.println("------------------------------------");
System.out.println(" 체크아웃 작업");
System.out.println("------------------------------------");
System.out.println("체크 아웃할 방 번호를 입력하세요.");
System.out.print(" 방 번호 입력 >> ");
int roomNum = scan.nextInt();
// 입력한 방번호가 있는지 검사(키값으로 입력한 방번호가 있는지 검사)
if(!hotelMap.containsKey(roomNum)) {
System.out.println(roomNum + "호 객실은 존재하지 않습니다.");
return;
}
// 해당 객실에 손님이 없는지 검사
if(hotelMap.get(roomNum).getGuestName()==null) {
System.out.println(roomNum + "호 객실에는 체크아웃할 손님이 없습니다.");
return;
}
// 체크 아웃 작업은 해당 객실의 손님의 이름을 null로 변경하는 것을 말한다.
String name = hotelMap.get(roomNum).getGuestName(); // 현재 손님이름을 구한다.
hotelMap.get(roomNum).setGuestName(null); // 손님이름을 null로 설정
System.out.println(roomNum + "호 객실의 " + name + "님의 체크아웃을 완료했습니다.");
}
// 객실 상태를 출력하는 메서드
private void showRoom() {
System.out.println();
// 방번호를 순서대로 나오게 하기 위해서 방번호(Map의 key값)만 List에 넣어서 정렬하여 사용한다.
ArrayList<Integer> roomNumList = new ArrayList<>();
for(int num : hotelMap.keySet()) { // Map의 key값을 List에 추가하기
roomNumList.add(num);
}
Collections.sort(roomNumList); // 방번호를 오름차순으로 정렬하기
System.out.println();
System.out.println("-----------------------------");
System.out.println(" 현재 객실 상태");
System.out.println("-----------------------------");
System.out.println("방번호\t 방종류\t 투숙객 이름");
System.out.println("-----------------------------");
// List에서 방번호를 하나씩 꺼내와 Map에서 해당 방번호에 해당하는 Room객체를 구해서 출력한다.
for(int i=0; i<roomNumList.size(); i++) {
Room r = hotelMap.get( roomNumList.get(i) );
System.out.print(r.getRoomNum() + "\t " + r.getRoomType() + "\t ");
String name = " -";
if(r.getGuestName()!=null) { // 방에 손님이 있으면...
name = r.getGuestName();
}
System.out.println(name);
}
System.out.println("-----------------------------");
System.out.println();
}
// 메뉴를 출력하고 작업번호를 입력받아 반환하는 메서드
private int displayMenu() {
System.out.println();
System.out.println("-----------------------------------------------------------");
System.out.println("어떤 업무를 하시겠습니까?");
System.out.println("1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료");
System.out.println("-----------------------------------------------------------");
System.out.print(" 선택>> ");
int num = scan.nextInt();
return num;
}
}
class Room{
private int roomNum;
private String roomType;
private String guestName;
public Room(int roomNum, String roomType) {
super();
this.roomNum = roomNum;
this.roomType = roomType;
}
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 getGuestName() {
return guestName;
}
public void setGuestName(String guestName) {
this.guestName = guestName;
}
}
댓글
댓글 쓰기