간단한 콘서트 예약 시스템을 만들어보자. 다수의 클래스를 다루고 객체의 배열을 다루기에는 아직 자바 프로그램 개발이 익숙하지 않은 초보자에게 다소 무리가 있을 것이다. 그러나 반드시 넘어야 할 산이다. 이 도전을 통해 산을 넘어갈 수 있는 체력을 키워보자. 예약 시스템의 기능은 다음과 같다.
- 공연은 하루에 한 번 있다.
- 좌석은 S석, A석, B석으로 나뉘며, 각각 10개의 좌석이 있다.
- 예약 시스템의 메뉴는 "예약", "조회", "취소", "끝내기"가 있다.
- 예약은 한 자리만 가능하고, 좌석 타입, 예약자 이름, 좌석 번호를 순서대로 입력받아 예약한다.
- 조회는 모든 좌석을 출력한다.
- 취소는 예약자의 이름을 입력받아 취소한다.
- 없는 이름, 없는 번호, 없는 메뉴, 잘못된 취소 등에 대해서 오류 메시지를 출력하고 사용자가 다시 시도하도록 한다.
package main;
import java.util.Scanner;
class Seat{
int reservation; //if reserved set 1, empty set 0
String buyer;
public Seat(){this.reservation = 0;}
void reserve(String name){
reservation = 1;
buyer = name;
}
void cancel(){
reservation = 0;
buyer = "";
}
int seatCheck() {return reservation;}
}
public class Practice {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Seat seats[][] = new Seat[3][10]; //S as Seat[0], A as Seat[1], B as Seat[2]
for(int i = 0; i < 3; i++){
for(int j = 0; j < 10; j++)
seats[i][j] = new Seat();
}
while(true){
int menu;
System.out.print("메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : ");
menu = scanner.nextInt();
if(menu == 1){
int seatNum;
String seatClass, name;
System.out.print("좌석 타입, 예약자 이름, 좌석 번호를 입력하시오 : ");
seatClass = scanner.next();
name = scanner.next();
seatNum = scanner.nextInt();
switch (seatClass){
case "S":
case "s":
seats[0][seatNum - 1].reserve(name);
break;
case "A":
case "a":
seats[1][seatNum - 1].reserve(name);
break;
case "B":
case "b":
seats[2][seatNum - 1].reserve(name);
break;
}
}
else if(menu == 2){
System.out.print("S 좌석 정보 : ");
for(int i = 0; i < 10; i++){
if(seats[0][i].seatCheck() == 0) System.out.print("□");
else System.out.print("■");
}
System.out.println();
System.out.print("A 좌석 정보 : ");
for(int i = 0; i < 10; i++){
if(seats[1][i].seatCheck() == 0) System.out.print("□");
else System.out.print("■");
}
System.out.println();
System.out.print("B 좌석 정보 : ");
for(int i = 0; i < 10; i++){
if(seats[2][i].seatCheck() == 0) System.out.print("□");
else System.out.print("■");
}
System.out.println();
}
else if(menu == 3){
String name;
System.out.print("예약자 이름을 입력하시오 : ");
name = scanner.next();
for(int i = 0; i < 3; i++){
for(int j = 0; j < 10; j++){
if(seats[i][j].seatCheck() == 1 && seats[i][j].buyer.equals(name)) {
seats[i][j].cancel();
System.out.println("좌석이 취소되었습니다.");
}
}
}
}
else if(menu == 4) break;
else{
System.out.println("주어진 메뉴를 선택하세요");
}
}
}
}
메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : 2
S 좌석 정보 : □□□□□□□□□□
A 좌석 정보 : □□□□□□□□□□
B 좌석 정보 : □□□□□□□□□□
메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : 1
좌석 타입, 예약자 이름, 좌석 번호를 입력하시오 : a 홍길동 3
메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : 2
S 좌석 정보 : □□□□□□□□□□
A 좌석 정보 : □□■□□□□□□□
B 좌석 정보 : □□□□□□□□□□
메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : 1
좌석 타입, 예약자 이름, 좌석 번호를 입력하시오 : S 이순신 8
메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : 2
S 좌석 정보 : □□□□□□□■□□
A 좌석 정보 : □□■□□□□□□□
B 좌석 정보 : □□□□□□□□□□
메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : 3
예약자 이름을 입력하시오 : 이순신
좌석이 취소되었습니다.
메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : 2
S 좌석 정보 : □□□□□□□□□□
A 좌석 정보 : □□■□□□□□□□
B 좌석 정보 : □□□□□□□□□□
메뉴를 선택하시오(1번 예약, 2번 조회, 3번 취소, 4번 끝내기) : 4
오늘은 우선 밑의 조건은 충족하지 않았다.
없는 이름, 없는 번호, 없는 메뉴, 잘못된 취소 등에 대해서 오류 메시지를 출력하고 사용자가 다시 시도하도록 한다.