영보의 SystemOut.log

[Java] 자바 공연 예약 어플리케이션 만들기 본문

국비교육(아이티센 입사교육)/Java

[Java] 자바 공연 예약 어플리케이션 만들기

영보로그 2021. 10. 7. 13:50
반응형
자바/스프링 기반 디지털 융합 웹 개발자 양성과정 8일차

 

 

시나리오 & 클래스다이어그램 

 

[ 간단한 공연 예약 시스템 ] - Seat클래스, SeatType클래스, Reserve클래스

- 공연은 하루에 한 번 있다.

- 좌석은 R석(5석), S석(7석), A석(10석), B석(15석) 타입이 있다.

좌석은 R석(Royal석), S석(Superior), A석(A grade석), B석(B grade석) 타입이 있다.

- 공연 예약 시스템의 메뉴는 "예약", "조회", "취소", "종료"가 있다.

- "예약" 은 한 자리만 예약할 수 있고 좌석 타입, 예약자 이름, 좌석 번호를 순서대로 입력받아 예약한다.

- "조회"는 예약자 이름을 입력하여 취소한다.

- "취소"는 예약자 이름을 입력하여 취소한다.

- 없는 예약자 이름, 없는 좌석번호, 없는 메뉴, 예약 또는 취소시 없는 좌석타입 등에 대해서 오류 메세지를 출력하고 사용자가 다시 시도하도록 한다

   (예)

  " 예약자 이름을 찾을 수 없습니다."

  " 잘못된  좌석번호 입니다."

  " 메뉴를 잘못 입력하셨습니다."

  " 예약시 잘못된 좌석타입입니다."

  " 취소시 잘못된 좌석타입입니다."

 

 

클래스다이어그램

 

 

 

 

소스 코드

 

SeatType.java

package 공연예약어플리케이션만들기_1007;

import java.util.Scanner;
import java.util.stream.Stream;

public class SeatType {
    private char type;
    private Seat[] aSeat;       // 연관 관계 => Seat클래스의 객체를 맴버 변수로 참조를 하겠다

    // 생성자
    public SeatType(char type, int num){     // 인자값이 좌석의 유형, 좌석수
        this.type = type;
        aSeat = new Seat[num];              // 배열 객체 생성

        for (int i = 0; i<aSeat.length; i++) {
            aSeat[i] = new Seat();
        }
    }

    // 사용자 정의 메소드 구현
    public boolean seatReserve() {
        Scanner in = new Scanner(System.in);
        int seatNum;
        String name;
        show();
        System.out.print("이름 : ");
        name = in.next();
        System.out.print("좌석 번호 : ");
        seatNum = in.nextInt();

        if(seatNum < 1 || seatNum > aSeat.length){
            System.out.println("잘못된 좌석번호 입니다.");
            return false;
        }
        if (aSeat[seatNum-1].isOccupeied()){
            System.out.println("이미 예약된 좌석번호 입니다.");
            return false;
        }
        aSeat[seatNum-1].reserveName(name);
        return true;
    }
    public boolean cancel() {
        Scanner in = new Scanner(System.in);
        show();
        System.out.print("이름: ");
        String name = in.next();        // 취소할 예약자 이름 입력

        if (name != null){
            for(int i=0; i<aSeat.length; i++){
                if(aSeat[i].match(name)){
                    aSeat[i].cancel();
                    return true;
                }
            }
            System.out.println("예약자 이름을 찾을 수 없습니다.");
        }
        return false;
    }

    public void show() {
        System.out.println(type + "석 예약 : ");

        for ( int i=0; i<aSeat.length; i++){
            if(aSeat[i].isOccupeied())
                System.out.print(aSeat[i].getName());
            else
                System.out.print("---");
            System.out.print(" ");
        }
        System.out.println();
    }
}

 

 

Seat.java

package 공연예약어플리케이션만들기_1007;

public class Seat {
    private String name;

    public Seat() {
        name = null;
    }

    public void reserveName(String name) {
        this.name = name;
    }

    public boolean isOccupeied() {
        if (name == null)
            return false;
        else
            return true;
    }

    public boolean match(String name) {
        return (name.equals(name));
    }

    public void cancel() {
        name = null;
    }

    // getter 메소드만 구현
    public String getName() {
        return name;
    }
}

 

ReserveTest.java

package 공연예약어플리케이션만들기_1007;

import java.util.*;

public class ReserveTest extends Seat {

    public static void main(String[] args) {
        SeatType[] aSeatType = new SeatType[4];

        aSeatType[0] = new SeatType('R',5);     // 최고급석 (로얄석)
        aSeatType[1] = new SeatType('S',7);     // 고급석 (Superior)
        aSeatType[2] = new SeatType('A',10);     // A 등급석
        aSeatType[3] = new SeatType('B',15);     // B 등급석

        int choice = 0 ;

        while(choice != 4 ) {
            int type;
            System.out.println("=============== 메인 메뉴 =============== ");
            System.out.println(" 다음 중 하나의 메뉴를 선택하세요.");
            System.out.println(" 1. 예약");
            System.out.println(" 2. 조회");
            System.out.println(" 3. 취소");
            System.out.println(" 4. 종료");
            System.out.println(" 선택하세요 >>>>> ");

            Scanner in = new Scanner(System.in);
            choice = in.nextInt();

            switch (choice) {
                case 1: // 예약
                    System.out.println("<좌석 구분>");
                    System.out.println("1. R석 (5석)");
                    System.out.println("2. S석 (7석)");
                    System.out.println("3. A석 (10석)");
                    System.out.println("4. B석 (15석)");

                    type = in.nextInt();

                    if (type < 1 || type > 4) {
                        System.out.println("예약시 잘못된 자석 타입 입니다.");
                        break;
                    }
                    aSeatType[type - 1].seatReserve();
                    break;
                case 2:  // 조회
                    for (int i=0; i<aSeatType.length; i++) {
                        aSeatType[i].show();
                    }
                    System.out.println("조회를 완료하였습니다.");
                    break;
                case 3: // 취소
                     System.out.println("<좌석 구분>");
                     System.out.println("1. R석 (5석)");
                     System.out.println("2. S석 (7석)");
                     System.out.println("3. A석 (10석)");
                     System.out.println("4. B석 (15석)");
                     type = in.nextInt();

                     if(type < 1 || type > 4) {
                         System.out.println("취소시 잘못된 자석 타입입니다");
                         break;
                     }
                     aSeatType[type-1].cancel();
                     break;
                case 4:  // 종료
                    break;

                default:
                    System.out.println("메뉴를 잘못 입력했습니다.");
            }
        }
    }
}

 

 

반응형