重构-改善代码既有设计第一章的差代码c++实现,方便大家练习

#include <iostream>

#include <string>

#include <vector>

using namespace std;



class Movie

{

public:

    enum MOVETYPE

    {

        REGULAR,

        NEW_RELEASE,

        CHILDRENS

    };

    Movie() = default;

    Movie(string title, int priceCode)

    {

        _title = title;

        _priceCode = priceCode;

    }

    Movie(const Movie &other) = default;

    int getPriceCode()

    {

        return _priceCode;

    }

    void setPriceCode(int arg)

    {

        _priceCode = arg;

    }

    string getTitle()

    {

        return _title;

    };



private:

    string _title;

    int _priceCode;

};



class Rental

{

public:

    Rental() = default;

    Rental(Movie movie, int daysRented)

    {

        _movie = movie;

        _daysRented = daysRented;

    }

    Rental(const Rental &other) = default;

    int getDaysRented()

    {

        return _daysRented;

    }

    Movie getMovie()

    {

        return _movie;

    }



private:

    Movie _movie;

    int _daysRented;

};



class Customer

{

private:

    string _name;

    std::vector<Rental> _rentals;



public:

    Customer(string name)

    {

        _name = name;

    };

    void addRental(Rental arg)

    {

        _rentals.push_back(arg);

    };

    string getName()

    {

        return _name;

    };

    string statement()

    {

        double totalAmount = 0;

        int frequentRenterPoints = 0;

        string result = "Rental Record for " + getName() + "\n";

        for (Rental each : _rentals)

        {

            double thisAmount = 0;

            switch (each.getMovie().getPriceCode())

            {

            case Movie::REGULAR:

                thisAmount += 2;

                if (each.getDaysRented() > 2)

                {

                    thisAmount += (each.getDaysRented() - 2) * 1.5;

                }

                break;

            case Movie::NEW_RELEASE:

                thisAmount += each.getDaysRented() * 3;

                break;

            case Movie::CHILDRENS:

                thisAmount += 1.5;

                if (each.getDaysRented() > 3)

                {

                    thisAmount += (each.getDaysRented() - 3) * 1.5;

                }

                break;

            }

            // add frequent renter points 

            frequentRenterPoints ++; 

            // add bonus for a two day new release rental

            if ((each.getMovie().getPriceCode() == Movie::NEW_RELEASE) && each.getDaysRented() > 1)

            {

                frequentRenterPoints++;

            }

            //show figures for this rental 

            result += "\t" + each.getMovie().getTitle()+ "\t" + std::to_string(thisAmount)+ "\n";

            totalAmount += thisAmount;

            //add footer lines 

            result += "Amount owed is " + std::to_string(totalAmount)+ "\n";

            result += "You earned " + std::to_string(frequentRenterPoints) + " frequent renter points";

            return result;

        }

    };

};

int main()

{

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值