ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 4장 11번
    C++ 2018. 10. 30. 01:16

    11. 다음은 커피자판기로 작동하는 프로그램을 만들기 위해 필요한 두 클래스이다.


    class CoffeeVendingMachine { // 커피자판기를 표현하는 클래스
        Container tong[3]; // tong[0]는 커피, tong[1]은 물, tong[2]는 설탕통을 나타냄
        void fill(); // 3개의 통을 모두 10으로 채움
        void selectEspresso(); // 에스프레소를 선택한 경우, 커피 1, 물 1 소모
        void selectAmericano(); // 아메리카노를 선택한 경우, 커피 1, 물 2 소모
        void selectsugarCoffee(); // 설탕커피를 선택한 경우, 커피 1, 물 2 소모, 설탕 1 소모
        void show(); // 현재 커피, 물 설탕의 잔량 출력
    public:
        void run(); // 커피 자판기 작동
        int sw;
    };
    class Container { // 통 하나를 나타내는 클래스
        int size; // 현재 저장 량, 최대 저장량은 10
    public:
        Container() { size = 10; }
        void fill(); // 최대량(10)으로 채우기
        void consume(); // 1만큼 소비하기
        int getSize(); // 현재 크기 리턴
    };


    다음과 같이 실행되도록 main() 함수와 CoffeeVendingMachine, Container를 완성하라. 만일 커피, 물, 설탕 중 잔량이 하나라도 부족해 커피를 제공할 수 없는 경우 '원료가 부족합니다.'를 출력하라


    소스코드


    #include <iostream>
    using namespace std;
    class Container { // 통 하나를 나타내는 클래스
        int size; // 현재 저장 량, 최대 저장량은 10
    public:
        Container() { size = 10; }
        void fill(); // 최대량(10)으로 채우기
        void consume(); // 1만큼 소비하기
        int getSize(); // 현재 크기 리턴
    };
    void Container::fill() {
        size = 10;
    }
    void Container::consume() {
        --size;
    }
    int Container::getSize() {
        return size;
    }
    class CoffeeVendingMachine { // 커피자판기를 표현하는 클래스
        Container tong[3]; // tong[0]는 커피, tong[1]은 물, tong[2]는 설탕통을 나타냄
        void fill(); // 3개의 통을 모두 10으로 채움
        void selectEspresso(); // 에스프레소를 선택한 경우, 커피 1, 물 1 소모
        void selectAmericano(); // 아메리카노를 선택한 경우, 커피 1, 물 2 소모
        void selectsugarCoffee(); // 설탕커피를 선택한 경우, 커피 1, 물 2 소모, 설탕 1 소모
        void show(); // 현재 커피, 물 설탕의 잔량 출력
    public:
        void run(); // 커피 자판기 작동
        int sw;
    };
    void CoffeeVendingMachine::fill() {
        for (int i = 0; i <3; ++i)
            tong[i].fill();
        sw = 0;
    }
    void CoffeeVendingMachine::selectEspresso() {
        for (int i = 0; i <3; ++i) { //원료가 충분한가 확인
            if (tong[i].getSize() == 0) {
                sw = 1;
                break;
            }
        }
        if (sw == 1) {
            cout << "원료가 부족합니다" << endl;
        }
        else {
            tong[0].consume(); tong[1].consume();
            sw = 0;
            cout << "에스프레소 드세요" << endl;
        }
    }
    void CoffeeVendingMachine::selectAmericano() {
        for (int i = 0; i <3; ++i) { //원료가 충분한가 확인
            if (tong[i].getSize() == 0) {
                sw = 1;
                break;
            }
        }
        if (sw == 1) {
            cout << "원료가 부족합니다" << endl;
        }
        else {
            tong[0].consume(); tong[1].consume(); tong[1].consume();
            sw = 0;
            cout << "아메리카노 드세요" << endl;
        }
    }
    void CoffeeVendingMachine::selectsugarCoffee() {
        for (int i = 0; i <3; ++i) { //원료가 충분한가 확인
            if (tong[i].getSize() == 0) {
                sw = 1;
                break;
            }
        }
        if (sw == 1) {
            cout << "원료가 부족합니다" << endl;
        }
        else {
            tong[0].consume(); tong[1].consume(); tong[1].consume(); tong[2].consume();
            sw = 0;
            cout << "설탕커피 드세요" << endl;
        }
    }
    void CoffeeVendingMachine::show() {
        cout << "커피 " << tong[0].getSize() << ",물 " << tong[1].getSize() << ",설탕 " << tong[2].getSize() << endl;
    }
    void CoffeeVendingMachine::run() {
        int num;
        cout << "****** 커피자판기를 작동합니다. *****" << endl;
        for (;;) {
            cout << "메뉴를 눌러주세요(1:에스프레소, 2:아메리카노, 3:설탕커피, 4:잔량보기, 5:채우기)>>";
            cin >> num;
            switch (num)
            {
            case 1:
                selectEspresso();
                break;
            case 2:
                selectAmericano();
                break;
            case 3:
                selectsugarCoffee();
                break;
            case 4:
                show();
                break;
            case 5:
                fill();
                show();
                break;
            default:
                cout << "입력오류";
                break;
            }
        }
    }
    int main() {
        CoffeeVendingMachine p;
        p.run();
    }


    실행결과



    sw는 원료가 비었나를 확인하는 변수입니다.

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

    명품 C++ 4장 13번  (0) 2018.10.30
    명품 C++ 4장 12번  (0) 2018.10.30
    명품 C++ 4장 10번  (0) 2018.10.30
    명품 C++ 4장 9번  (0) 2018.10.30
    명품 C++ 4장 8번  (1) 2018.10.30

    댓글

© 2018 TISTORY. All rights reserved.