影片出租店 重構方法(1)

2021-09-18 01:49:52 字數 2747 閱讀 5274

影片出租店是《重構:改善既有**的設計》裡面的第乙個例子。使用了多種重構方法。

影片出租店:計算每一位顧客的消費金額並列印詳單。

操作者告訴程式:顧客租了哪些影片,租期多長,程式便根據租賃時間和影片型別算出費用。影片分為三類:普通片,兒童片和新片。除了計算費用,還要為常客計算積分,積分會根據租片種類是否為新片而有不同。

重構之前的**:

refector_1.h
#ifndef refector_1_h

#define refector_1_h

#include #include class movie

;class rental

;class customer

;#endif // refector_1_h

refector_1.cpp
#include "refector_1.h"

#include movie::movie(qstring title, int pricecode)

int movie::getpricecode()

void movie::setpricecode(int pricecode)

qstring movie::gettitle()

rental::rental(movie *movie, int daysrented)

int rental::getdaysrented()

movie *rental::getmovie()

customer::customer(qstring name)

void customer::addrental(rental *rental)

qstring customer::getname()

qvectorcustomer::getrentals()

qstring customer::statement()

break;

case movie::new_release:

thisamount += rental->getdaysrented() * 3;

break;

case movie::children:

thisamount += 1.5;

if (rental->getdaysrented() > 3)

break;

}frequentrenterpoints++;

if (movie::new_release == (rental->getmovie()->getpricecode()) &&

rental->getdaysrented() > 1 )

result += "\t" + rental->getmovie()->gettitle() + "\t" + qstring("%1").arg(thisamount) + "\n";

totalamout += thisamount;

}result += "amount owed is " + qstring("%1").arg(totalamout) + "\n";

result += "you earned " + qstring("%1").arg(frequentrenterpoints) + " frequent renter points";

qdebug() << qprintable(result) ;

return result;

}

main.cpp

movie movie1("movie1", 0);

movie movie2("movie2", 1);

movie movie3("movie3", 2);

movie movie4("movie4", 0);

movie movie5("movie5", 1);

movie movie6("movie6", 2);

movie movie7("movie7", 0);

rental rental1(&movie1, 1);

rental rental2(&movie2, 2);

rental rental3(&movie3, 3);

rental rental4(&movie4, 4);

rental rental5(&movie5, 5);

rental rental6(&movie6, 6);

rental rental7(&movie7, 7);

customer ctmer("tester");

ctmer.addrental(&rental1);

ctmer.addrental(&rental2);

ctmer.addrental(&rental3);

ctmer.addrental(&rental4);

ctmer.addrental(&rental5);

ctmer.addrental(&rental6);

ctmer.addrental(&rental7);

ctmer.statement();

執行結果:

影片出租店 重構方法(2)

影片出租店是 重構 改善既有 的設計 裡面的第乙個例子。使用了多種重構方法。影片出租店 計算每一位顧客的消費金額並列印詳單。操作者告訴程式 顧客租了哪些影片,租期多長,程式便根據租賃時間和影片型別算出費用。影片分為三類 普通片,兒童片和新片。除了計算費用,還要為常客計算積分,積分會根據租片種類是否為...

影片出租店 重構方法(3)

影片出租店是 重構 改善既有 的設計 裡面的第乙個例子。使用了多種重構方法。影片出租店 計算每一位顧客的消費金額並列印詳單。操作者告訴程式 顧客租了哪些影片,租期多長,程式便根據租賃時間和影片型別算出費用。影片分為三類 普通片,兒童片和新片。除了計算費用,還要為常客計算積分,積分會根據租片種類是否為...

影片出租店 重構方法(6)

影片出租店是 重構 改善既有 的設計 裡面的第乙個例子。使用了多種重構方法。影片出租店 計算每一位顧客的消費金額並列印詳單。操作者告訴程式 顧客租了哪些影片,租期多長,程式便根據租賃時間和影片型別算出費用。影片分為三類 普通片,兒童片和新片。除了計算費用,還要為常客計算積分,積分會根據租片種類是否為...