2020.10.27 고급자바 과제 - 호텔 체크인체크아웃 만들기

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

}














댓글