Quote class
Quote.h
#pragma once
#include <iostream>
#include <string>
class Quote {
public:
Quote() = default;
Quote(const std::string &bookNo, double book_price);
std::string isbn() const;
double print_total(std::ostream &out, Quote &item, size_t n) const;
virtual double net_price(size_t n) const;
virtual void debug() const;
virtual ~Quote();
private:
std::string bookNo;
protected:
double price;
};
Quote.cpp
#include "Quote.h"
Quote::Quote(const std::string &bookNo, double book_price)
: bookNo(bookNo), price(book_price) {}
std::string Quote::isbn() const {
return bookNo;
}
double Quote::print_total(std::ostream &out, Quote &item, size_t n) const {
double ret = item.net_price(n);
out << "The book " << item.isbn() << " sold: " << n <<
" total price " << ret << std::endl;
return ret;
}
double Quote::net_price(size_t n) const {
return n * price;
}
void Quote::debug() const {
std::cout << "===This is a Quote call debug" << std::endl;
std::cout << "The book number is: " << bookNo << " and the price is: " << price << std::endl;
}
Quote::~Quote() {}
Bulk_quote class
Bulk_quote.h
#pragma once
#include "Quote.h"
class Bulk_quote : public Quote {
public:
Bulk_quote() = default;
Bulk_quote(const std::string &bookNo, double book_price, size_t min_qty, double discount);
virtual double net_price(size_t n) const;
virtual void debug() const;
virtual ~Bulk_quote();
private:
size_t min_qty;
double discount;
};
Bulk_quote.cpp
#include "Bulk_quote.h"
Bulk_quote::Bulk_quote(const std::string &bookNo, double book_price, size_t min_qty, double discount)
: Quote(bookNo, book_price), min_qty(min_qty), discount(discount) {}
double Bulk_quote::net_price(size_t n) const {
if (n >= min_qty) {
return n * (1 - discount) * price;
} else {
return n * price;
}
}
void Bulk_quote::debug() const {
std::cout << "===This is a Bulk_quote object call" << std::endl;
Quote::debug();
std::cout << "The min number of books is: "
<< min_qty << " and the discount is: "
<< discount << std::endl;
}
Bulk_quote::~Bulk_quote() {}
Limit_quote class
Limit_quote.h
#pragma once
#include "Bulk_quote.h"
class Limited_quote : public Bulk_quote {
public:
Limited_quote() = default;
Limited_quote(const std::string &bookNo, double book_price, size_t min_qty, double discount, size_t max_qty);
virtual double net_price(size_t n) const;
virtual void debug() const;
~Limited_quote();
private:
size_t max_qty;
};
Limit_quote.cpp
#include "Limited_quote.h"
Limited_quote::Limited_quote(const std::string &bookNo, double book_price, size_t min_qty, double discount, size_t max_qty)
: Bulk_quote(bookNo, book_price, min_qty, discount), max_qty(max_qty) {}
double Limited_quote::net_price(size_t n) const {
if (min_qty < n && n < max_qty) {
return n * (1 - discount) * price;
} else {
return n * price;
}
}
void Limited_quote::debug() const {
std::cout << "===This is a Limited_quote object call" << std::endl;
Bulk_quote::debug();
std::cout << "The max number of books is: " << max_qty << std::endl;
}
Limited_quote::~Limited_quote() {}
main.cpp
#include <iostream>
#include <string>
#include "Quote.h"
#include "Bulk_quote.h"
using namespace std;
int main() {
Quote *b = new Limited_quote("tree", 25, 3, 0.3, 10);
b->print_total(cout, *b, 8);
b->debug();
delete b;
}
本文介绍了一个图书销售系统中使用的三种不同折扣策略:普通折扣、批量折扣和限量折扣。通过继承和多态,实现了灵活的价格计算,包括普通价格、批量折扣价格和限量折扣价格。文章详细解释了每种策略的实现方式,并提供了一个示例,展示了如何使用这些策略来计算购买图书的总价格。
343

被折叠的 条评论
为什么被折叠?



