카테고리 없음

호텔 예약프로그램

JOY_1102 2021. 2. 6. 16:33
/* 호텔예약시스템설계
 * -방의 종류(type)
 * -방의 갯수 12개 room[12]
 * -메뉴구성 : 1.호텔예약 2.예약취소 3.방조회
 * -99를 누르면 종료
 * -room의 값이 0이면 예약가능, 1이면 예약불가
 * 기능 구현
 * 1.메뉴화면 구성 =>menu();
 * 2.초기화(룸초기화) =>init();
 * 3.예약가능 =>preRoom(room)(static안하면)  => preRoom();
 * 4.취소기능  =>removeRoom();
 * 5.호실보기 기능 =>printRoom();
 * 6.검색기능 : 방 상태확인 => boolean searchRoom(int n);
 * 
 * 1.방 예약 2.예약 취소 3.호실 확인 99.종료
 */
package kr.co.dong.array;

import java.util.Arrays;
import java.util.Scanner;

public class HotelCheck03 {
	static int[] room = new int[12]; //방선언
	static Scanner scan = new Scanner(System.in);
	
	public static void main(String[] args) {
		controlRoom();
	}

	private static void controlRoom() {
		boolean done = false;
		int n = 0;
		
		System.out.println("호실예약프로그램 ver1.0");
		init();
		
		while(!done)
			switch(menu()) {
				case 1:
					System.out.println("예약확인칸");
					n = allRes();
					if(n!=55) {
						preRoom();
					}
					else {
						break;
					}
					break;
				case 2:
					System.out.println("예약취소칸");
					removeRoom();
					break;
				case 3:
					System.out.println("전체방보기");
					printRoom();
					break;
				case 99:
					System.out.println("프로그램 종료");
					done = true;
					break;
					default:
						System.out.println("메뉴의 숫자를 입력하세요.");
						break;		
			} //end of switch(menu())
				
	}

	private static int allRes() {
		int count = 0, n = 0;
		
		for(int i=0;i<room.length;i++) {
			if(room[i]==1) {
				count++;
			}
			}		
		
			if(count==12) {
				n=55;
				System.out.println("모든 방의 예약이 끝났습니다.");
				System.out.println("메뉴로 돌아갑니다.");
		}
		return n;
	}

	private static boolean searchRoom(int n) { //방의 상태확인
			//0이면 예약가능 1이면 예약중
			if(room[n]==0) {
				System.out.println(101+n + "호:예약가능/취소불가");
				return true;
			}
			else {
				System.out.println(101+n + "호:예약중/취소가능");
				return false;			
			}
	}

	private static void printRoom() {
		
		for (int i=0;i<room.length;i++) {
			
			if(room[i]==0) {
				System.out.println(i+101 +"호실: 예약가능");
			}
			else {
				System.out.println(i+101 +"호실: 예약중");
			}
		}

	}

	private static void removeRoom() {
		boolean control = false; //예약확인 먼저확인
		int n = 0, sel = 0; 
		boolean done = false; //다른 방 취소 or 메뉴로 돌아갈래
		
		System.out.println("=101호|102호|103호|104호|105호|106호|107호|108호|109호|110호|111호|112호");
		
		while(!control) {
			//n이 0~12의 값이여야한다.
			n = isidx();
			
			//각 방의 상태 확인(예약가능[true]/불가능[false])
			boolean booking = searchRoom(n);
			
			//만약 불가능이라면 방번호 다시 입력
			if(booking == true) {
				System.out.println("취소할 수 없습니다.");
				return;
			}
			else {
				control = true;
			}
		}//end of control
		
			//control문을 빠져나와 예약가능한 방을 진행하려면
			System.out.println("취소 절차 진행하려면 1번, 다시 메뉴로 돌아가려면 2번을 누르세요.");
			sel = Integer.parseInt(isNumber());
		
			while(!done) {
				if(sel==1) {
					System.out.println("취소가 확정되었습니다.");
					room[n] = 0;
					System.out.println("메뉴로 돌아갑니다.");
					control = true;
					break;
				}
				else if(sel==2) {
					System.out.println("메뉴로 돌아갑니다.");
					control = true;
					break;
				}
			}
	}

	private static int isidx() {
		int n=0;
		boolean idx = false; //인덱스의 값이 아니다
		
		//각 방의 상태 (알고싶은 방을 받아서 하자)
		while(!idx) {
			
			System.out.println("=방번호를 입력하세요:");
			n = Integer.parseInt(isNumber());
			
			if(!(n>=101 && n<=112)) {
				System.out.println("방번호는 101호부터 112호까지 있습니다."); //여기서 다시 방번호를 입력해달라고
				idx = false;
			}
			else {
				idx = true;
				break;
			}
		}
		return n%100-1;
	}

	private static void preRoom() {
		boolean control = false; //전체 흐름을 관장
		int n = 0;
		boolean done = false; //예약 가능 확인 후 확정 or 메뉴 돌아가기
		int sel = 0;//예약 절차 진행
		
		//예약 불가 or 예약 가능
			System.out.println("=101호|102호|103호|104호|105호|106호|107호|108호|109호|110호|111호|112호");
			
			while(!control) {
				
				n = isidx();
				
				//각 방의 상태 확인(예약가능[true]/불가능[false])
				boolean booking = searchRoom(n);
				
				//만약 불가능이라면 방번호 다시 입력
				if(booking == false) {
					System.out.println("예약할 수 없습니다.");
					return;
				}
				else {
					control = true;
				}
			}//end of control
				
			//control문을 빠져나와 예약가능한 방을 진행하려면
					System.out.println("예약 절차 진행하려면 1번, 다시 메뉴로 돌아가려면 2번을 누르세요.");
					sel = Integer.parseInt(isNumber());
					
					while(!done) {
						if(sel==1) {
							System.out.println("예약이 확정되었습니다.");
							room[n] = 1;
							System.out.println("메뉴로 돌아갑니다.");
							control = true;
							break;
						}
						else if(sel==2) {
							System.out.println("메뉴로 돌아갑니다.");
							control = true;
							break;
						}
					}

	}



	private static int menu() {
		String str= null;
		int sel = 0;
		
		System.out.println("===========호텔예약시스템============");
		System.out.println("1.호텔예약 2.예약취소 3.전체방보기 99.종료");
		System.out.println("원하시는 숫자를 입력해주세요: ");
		str = isNumber();//숫자확인판별
		sel = Integer.parseInt(str);
		return sel;
	}

	private static String isNumber() {
		char ch = 'C';
		String str = null;
		boolean isNumber = false; //숫자 아님
		
		while(!isNumber) {
			str = scan.next(); //입력
			
			for(int i=0;i<str.length();i++) {
				ch = str.charAt(i);
				
				if(ch>='0'&&ch<='9') {
					isNumber = true;
				}
				else {
					System.out.println("숫자만 입력할 수 있습니다. 다시 입력해주세요.");
					isNumber = false;
					break;
				}
			}
		}
		return str;
	}

	private static void init() {
		//초기화 메소드
		for(int i=0;i<room.length;i++) {
			room[i] = 0;
		}
	}
}