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
복사