Java:Ch4 실습 문제

aiden·2023년 8월 29일

Java

목록 보기
7/30

#12

간단한 콘서트 예약 시스템을 만들어보자. 다수의 클래스를 다루고 객체의 배열을 다루기에는 아직 자바 프로그램 개발이 익숙하지 않은 초보자에게 다소 무리가 있을 것이다. 그러나 반드시 넘어야 할 산이다. 이 도전을 통해 산을 넘어갈 수 있는 체력을 키워보자. 예약 시스템의 기능은 다음과 같다.

  • 공연은 하루에 한 번 있다.
  • 좌석은 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

오늘은 우선 밑의 조건은 충족하지 않았다.

없는 이름, 없는 번호, 없는 메뉴, 잘못된 취소 등에 대해서 오류 메시지를 출력하고 사용자가 다시 시도하도록 한다.

profile
파인애플 좋아하세요?

0개의 댓글