Search

영화관 예매 프로그램 만들기

대분류
Java
날짜
2024/07/26

Seat.java

package assignment; public class Seat { private String name; public void Seat() { this.name = "---"; } public void reserveSeat(String name) { this.name = name; } public void cancelSeat() { this.name = "---"; } public String getName() { return this.name; } }
Java
복사

ReserveProgram.java

package assignment; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ReserveProgram { static Seat[][] seats = new Seat[4][11]; // 입력값 - 1을 처리하지 않기 위해 배열 크기를 조정 static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static String name; static int number; static int seatType; static int seatNumber; public static void main(String[] args) throws IOException { init(); // 좌석(객체) 초기화 while (true) { try { printMenu(); // 메뉴 출력 number = Integer.parseInt(br.readLine()); // 숫자 입력 validateNumber(number); // 숫자 검증 System.out.println("========================================================"); } catch (Exception e) { printErrorMessage(e); // 에러 메세지 출력 continue; } // 메뉴번호에 따른 기능 처리 if (number == 1) { seatType = selectSeatType(); reserveSeat(seatType); } else if (number == 2) { checkSeats(); } else if (number == 3) { seatType = selectSeatType(); cancelSeats(seatType); } else if (number == 4) { break; } } } public static void init() { for (int i = 1; i < 4; i++) { for (int j = 0; j < 11; j++) { Seat seat = new Seat(); seat.Seat(); seats[i][j] = seat; } } } public static void printMenu() { System.out.println("========================================================"); System.out.println("글로벌인 콘서트 예약 프로그램입니다."); System.out.println("========================================================"); System.out.print("예약 : 1 | 조회: 2 | 취소: 3 | 종료: 4 => "); } private static void validateNumber(int number) { if (number < 1 || number > 4) { throw new IllegalArgumentException("메뉴는 1부터 4까지 존재합니다. 다시 입력해주세요."); } } private static void printErrorMessage(Exception e) { // 에러 출력 System.out.println("--------------------------------------------------------"); System.out.println("오류가 발생했습니다."); System.out.println("오류 메세지: " + e.getMessage()); System.out.println("--------------------------------------------------------"); System.out.println("메뉴를 다시 선택해주세요. 처음으로 돌아갑니다..."); System.out.println(); } private static int selectSeatType() throws IOException { // 좌석 선택 System.out.print("좌석구분 S(1) | A(2) | B(3) => "); return Integer.parseInt(br.readLine()); } private static void printSeatStatus(int seatType) { // 좌석상태 출력 if (seatType == 1) System.out.print("* S : "); if (seatType == 2) System.out.print("* A : "); if (seatType == 3) System.out.print("* B : "); for (int i = 1; i < 11; i++) { System.out.print(seats[seatType][i].getName() + " "); } if (seatType == 1) System.out.println("현재 S 석 상태"); if (seatType == 2) System.out.println("현재 A 석 상태"); if (seatType == 3) System.out.println("현재 B 석 상태"); System.out.println(" 1 2 3 4 5 6 7 8 9 10"); } public static void reserveSeat(int seatType) { try { System.out.println("========================================================"); System.out.println("콘서트 좌석 예약"); System.out.println("========================================================"); printSeatStatus(seatType); // 좌석 상태 출력 System.out.print("이름 : "); name = br.readLine(); System.out.print("번호 : "); seatNumber = Integer.parseInt(br.readLine()); validateSeatNumber(seatNumber); // 좌석 번호 검증 seats[seatType][seatNumber].reserveSeat(name); // 항상 검증된 값으로 객체를 갱신하기! System.out.println("--------------------------------------------------------"); System.out.println(">>>>>>>>>>>>>>예약이 완료되었습니다.<<<<<<<<<<<<<<<<<"); System.out.println("--------------------------------------------------------"); System.out.println(); } catch (Exception e) { printErrorMessage(e); } } private static void validateSeatNumber(int seatNumber) { if (seatNumber < 1 || seatNumber > 10) { throw new IllegalArgumentException("좌석 번호는 1번부터 10번 중에서 입력해주세요."); } } public static void checkSeats() { System.out.println("========================================================"); System.out.println("콘서트 좌석 조회"); System.out.println("========================================================"); for (int i = 1; i < 4; i++) { if (i == 1) System.out.print("* S : "); if (i == 2) System.out.print("* A : "); if (i == 3) System.out.print("* B : "); for (int j = 1; j < seats[i].length; j++) { System.out.print(seats[i][j].getName() + " "); } System.out.println(); } System.out.println("--------------------------------------------------------"); System.out.println(">>>>>>>>>>>>>>조회가 완료되었습니다.<<<<<<<<<<<<<<<<<"); System.out.println("--------------------------------------------------------"); System.out.println(); } public static void cancelSeats(int seatType) { try { System.out.println("========================================================"); System.out.println("콘서트 좌석 예약 취소"); System.out.println("========================================================"); printSeatStatus(seatType); System.out.print("이름 : "); name = br.readLine(); Seat seat = validateName(name, seatType); if (!seat.getName().equals("---")) { seat.cancelSeat(); System.out.println("--------------------------------------------------------"); System.out.println(">>>>>>>>>>>>>>취소가 완료되었습니다.<<<<<<<<<<<<<<<<<"); System.out.println("--------------------------------------------------------"); System.out.println(); } else { throw new IllegalArgumentException("예약 내역이 존재하지 않습니다. 예약자 성함을 다시 확인해주세요."); } } catch (Exception e) { printErrorMessage(e); } } private static Seat validateName(String name, int seatType) { for (int i = 1; i < 11; i++) { if (seats[seatType][i].getName().equals(name)) { return seats[seatType][i]; } } return seats[seatType][0]; } }
Java
복사