C++/열혈 C++ 프로그래밍(윤성우 저)

열혈 C++ 프로그래밍 4-1 문제

꾸준함. 2017. 5. 30. 11:43

/*

Chapter 03에서 제시한 과일장수 시뮬레이션 예제 FruitSaleSim1.cpp에서 정의한 클래스의 멤버변수는 private으로 선언이 되어있다.

그러나 다음 조건을 유지할 있는 장치는 아무것도 되어있지 않다.

1.사과의 구매를 목적으로 0보다 작은수를 전달할 없다

위의 제약사항을 항상 만족시킬 있도록 예제를 변경하고, 예제의 안정성을 높일 있도록 일부 함수를 const 선언해보자

*/

 

/*

FruitSaleSim1.cpp

#include <iostream>

using namespace std;

 

class FruitSeller

{

private:

        int APPLE_PRICE;

        int numOfApples;

        int myMoney;

public:

        void InitMembers(int price, int num, int money)

        {

               APPLE_PRICE = price;

               numOfApples = num;

               myMoney = money;

        }

        int SaleApples(int money)

        {

               int num = money / APPLE_PRICE;

               numOfApples -= num;

               myMoney += money;

               return num;

        }

        void ShowSalesResult()

        {

               cout << "남은 사과: " << numOfApples << endl;

               cout << "판매 수익: " << myMoney << endl << endl;

        }

};

 

class FruitBuyer

{

        int myMoney; //private

        int numOfApples;//private

public:

        void InitMembers(int money)

        {

               myMoney = money;

               numOfApples = 0;

        }

        void BuyApples(FruitSeller &seller, int money)

        {

               numOfApples += seller.SaleApples(money);

               myMoney -= money;

        }

        void ShowBuyResult()

        {

               cout << "현재 잔액: " << myMoney << endl;

               cout << "사과 개수: " << numOfApples << endl;

        }

};

 

int main(void)

{

        FruitSeller seller;

        seller.InitMembers(1000, 20, 0);

        FruitBuyer buyer;

        buyer.InitMembers(5000);

        buyer.BuyApples(seller, 2000); //과일의 구매

 

        cout << "과일 판매자의 현황" << endl;

        seller.ShowSalesResult();;

        cout << "과일 구매자의 현황" << endl;

        buyer.ShowBuyResult();

        return 0;

}

*/

#include <iostream>

using namespace std;

 

class FruitSeller

{

private:

        int APPLE_PRICE;

        int numOfApples;

        int myMoney;

public:

        void InitMembers(int price, int num, int money)

        {

               APPLE_PRICE = price;

               numOfApples = num;

               myMoney = money;

        }

        int SaleApples(int money)

        {

               if (money < 0)

               {

                       cout << "돈을 지불하지 않아 판매를 하지 않습니다" << endl;

                       return -1;

               }

               int num = money / APPLE_PRICE;

               numOfApples -= num;

               myMoney += money;

               return num;

        }

        void ShowSalesResult() const

        {

               cout << "남은 사과: " << numOfApples << endl;

               cout << "판매 수익: " << myMoney << endl << endl;

        }

};

 

class FruitBuyer

{

        int myMoney; //private

        int numOfApples;//private

public:

        void InitMembers(int money)

        {

               myMoney = money;

               numOfApples = 0;

        }

        void BuyApples(FruitSeller &seller, int money)

        {

               if (money < 0)

               {

                       cout << "사과의 구매를 목적으로 0보다 작은 수를 전달할 없다" << endl;

                       return;

               }

               numOfApples += seller.SaleApples(money);

               myMoney -= money;

        }

        void ShowBuyResult() const

        {

               cout << "현재 잔액: " << myMoney << endl;

               cout << "사과 개수: " << numOfApples << endl;

        }

};

 

int main(void)

{

        FruitSeller seller;

        seller.InitMembers(1000, 20, 0);

        FruitBuyer buyer;

        buyer.InitMembers(5000);

        buyer.BuyApples(seller, -1); //일부러 돈을 0보다 적게 지불

        buyer.BuyApples(seller, 2000); //과일의 구매

 

        cout << "과일 판매자의 현황" << endl;

        seller.ShowSalesResult();;

        cout << "과일 구매자의 현황" << endl;

        buyer.ShowBuyResult();

        return 0;

}

 

 

개발 환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


[참고] 열혈 C++ 프로그래밍 윤성우 저


반응형