ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 8장 9번
    C++ 2018. 11. 4. 22:59

    9. 비행기 예약 프로그램을 작성하라. 이 문제는 여려 개의 클래스와 객체들을 다루는 연습을 위한 것이다. 클래스 사이의 상소 관계는 없다. 항공사 이름은 '한성항공'이고, 8개의 좌석을 가진 3대의 비행기로 서울 부산 간 운항 사업을 한다. 각 비행기는 하루에 한 번만 운항하며 비행 시간은 07시, 12시, 17시이다. 비행기 예약 프로그램은 다음의 기능을 가진다.

    - 예약 : 비행 시간, 사용자의 이름, 좌석 번호를 입력받아 예약한다.

    - 취소 : 비행 시간, 사용자의 이름, 좌석 번호를 입력받고 예약을 취소한다.

    - 예약 보기 : 예약된 좌석 상황을 보여준다.


    소스코드


    air.h


    #include <iostream>
    #include <string>
    using namespace std;
    class Console {
    public:
        static void start();
        static int menu();
        static int time();
        static int num();
        static string name();
    };
    void Console::start() {
        cout << "***** 한성항공에 오신것을 환영합니다 *****" << endl;
    }
    int Console::menu() {
        cout << endl << endl;
        cout << "예약:1, 취소:2, 보기:3, 끝내기:4>> ";
        int n;
        cin >> n;
        return n;
    }
    int Console::time() {
        cout << "07시:1, 12시:2, 17시:3>> ";
        int t;
        cin >> t;
        return t;
    }
    int Console::num() {
        cout << "좌석 번호>> ";
        int num;
        cin >> num;
        return num;
    }
    string Console::name() {
        cout << "이름 입력>> ";
        string name;
        cin >> name;
        return name;
    }
    class Seat {
        string seatName;
    public:
        Seat() { seatName = "---"; }
        string getName() { return seatName; }
        void setName(string name) { seatName = name; }
    };
    class Schedule {
        Seat *seat;
        string time;
    public:
        Schedule() { seat = new Seat[8]; }
        ~Schedule() { delete[] seat; }
        void setTime(string t) { time = t; }
        void show() {
            cout << time << " :";
            for (int i = 0; i < 8; ++i)
                cout << seat[i].getName() << "\t";
            cout << endl;
        }
        void reservationSeat(int num, string name) {
            seat[num - 1].setName(name);
        }
        void cancleSeat(int num, string name) {
            seat[num - 1].setName("---");
        }
    };
    class AirlineBook {
        Schedule *schedule;
    public:
        AirlineBook() {
            schedule = new Schedule[3];
            schedule[0].setTime("07시");
            schedule[1].setTime("12시");
            schedule[2].setTime("17시");
        }
        ~AirlineBook() { delete[] schedule; }
        void reservation(int t) {
            schedule[t - 1].show();
            int num = Console::num();
            string name = Console::name();
            schedule[t - 1].reservationSeat(num, name);
        }
        void cancle(int t) {
            schedule[t - 1].show();
            int num = Console::num();
            string name = Console::name();
            schedule[t - 1].cancleSeat(num, name);
        }
        void showAll() {
            for (int i = 0; i < 3; ++i)
                schedule[i].show();
        }
    };


    main.cpp


    #include <iostream>
    #include <string>
    #include "air.h"
    using namespace std;
    int main() {
        AirlineBook airlinebook;
        Console::start();
        for (;;) {
            int n = Console::menu();
            if (n == 1) {
                int t = Console::time();
                airlinebook.reservation(t);
            }
            else if (n == 2) {
                int t = Console::time();
                airlinebook.cancle(t);
            }
            else if (n == 3) {
                airlinebook.showAll();
            }
            else if (n == 4) {
                cout << "예약 시스템을 종료합니다." << endl;
                break;
            }
            else {

            }
        }
    }


    실행결과


    AirlineBook 클래스는 Schedule 객체를 3개 생성하여 예약시스템을 작동합니다.

    Schedule 클래스는 하나의 스케쥴을 구현하는 클래스로, 8개의 Seat 객체를 생성합니다. Seat 객체에 예약 취소 보기 등을 관리합니다.

    Seat 클래스는 하나의 좌석을 구현하는 클래스, 예약자 이름 저장, 좌석에 대한 예약, 취소 보기 등을 관리합니다.

    Console 클래스는 메뉴를 출력하는 함수, 사용자로부터 메뉴선택 비행시간 사용자 이름 좌석 번호 등을 입력받는 멤버 함수들을 구현합니다.



    우선 메뉴창을 띄우고, 무엇을 할지 결정합니다.

    예약의 경우 시간들을 입력받는 메뉴를 출력하고 입력받습니다. 

    ex) 1입력시 schedule[0]의 시간 07시의 좌석을 출력합니다.

    입력된 시간의 좌석을 보여주고 좌석 번호와 이름을 입력받아 저장합니다.

    취소의 경우는 예약과 비슷하지만 이름으로 설정하는게 아니라 다시 ---로 설정합니다.

    보기의 경우 스케쥴 객체의 모든 내용을 출력합니다.

    메뉴를 static 멤버로 선언하여 클래스 어디서든 사용할 수 있게 만들었습니다.

    'C++' 카테고리의 다른 글

    명품 C++ 9장 1번 2번  (0) 2018.11.06
    명품 C++ 8장 Open Challenge  (0) 2018.11.04
    명품 C++ 8장 8번  (0) 2018.11.04
    명품 C++ 8장 7번  (0) 2018.11.04
    명품 C++ 8장 5번 6번  (0) 2018.11.04

    댓글

© 2018 TISTORY. All rights reserved.