UML和模式应用书中C++版 NextGen POS代码

本文介绍了阅读《UML和模式应用》一书的心得体会,该书通过NextGen POS系统实例阐述UML设计。文中重点展示了类图,将Store的功能整合到Register中,探讨了类之间的关联、属性和成员函数的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看UML和模式应用一书,感觉获益匪浅,全书围绕两个示例进行分析,其中一个就是著名的POS机示例。

UML分为交互图和类图两个部分,交互图表明类与类之间的相互关联(强调方法),类图表明类本身的属性和成员函数(强调类本身),当然它也给出类之间的对应关系,表明类之间的组合,依赖等关系。

由于交互图篇幅比较大,故在此只上类图:



在实现中为了简单点,把Store 的功能加在了Register上。

类设计如下:

#ifndef __POS_H
#define __POS_H
#include <string>
#include <map>
#include <list>
#include <iostream>
using namespace std;
namespace pos {
enum Unit {
    RMB, DOLLAR, PONDS
};
class Money {
public:
    Money();
    Money(float ct, Unit ut);
    ~Money();
    Money& operator= (const Money& A) {
        count_ = A.count_;
        unit_ = A.unit_;
    };
    Money(const Money& A):count_(A.count_), unit_(A.unit_) {
    };
    Unit GetUnit() const;
    float GetCount() const;

private:
    float count_;
    Unit unit_;

};

class ProductDescription {
public:
    //    ProductDescription();
    ProductDescription(string desc, int id, Money pc);
    ProductDescription(const ProductDescription& A):description_(A.description_), item_id_(A.item_id_), price_(A.price_) {

    };
    ~ProductDescription();
    string GetDesc() const;
    int GetItemid() const;
    Money GetItemprice() const;

private:
    string description_;
    Money price_;
    int item_id_;
};

class SalesLineItem {
public:
    SalesLineItem();    SalesLineItem(ProductDescription* pdsc, int qty);
    float GetSubTotal() const;
private:
    int quality_;
    ProductDescription* product_desc_;
};

class ProductCatalog {
public:
    void AddDesc(int item_id, ProductDescription* pdesc);
    ProductDescription* get_pdesc(int item_id) ;
private:
    std::map<int, ProductDescription*> item_desc_;
};

class Payment {
public:
    Payment(Money money):pay_money_(money) {};
    Money get_pay_money() const {
        return this->pay_money_;
    };
private:
    Money pay_money_;
};

class Sale {
public:
    float GetTotal();
    void MakePayment(Money pay_money);
    void MakeLineItem(ProductDescription* pdsc, int qty);
    void BecomeComplete();
    bool is_complete() const {
        return is_complete_;
    };
    Payment* get_payment() const {
        return payment_;
    };

private:
    typedef std::list<SalesLineItem*>::iterator list_it;
    bool is_complete_;
    Payment* payment_;
    std::list<SalesLineItem*> sale_items_;
};

class Register {
public:
    void CreateItemStore();
    void AddCatalog();
    void MakeNewSale();
    void EnterItem(int item_id, int qty);
    void MakePayment(Money money);
    void EndSale();
    float GetRemain() const;
    void Clear();
private:
    typedef std::list<ProductDescription*>::iterator list_it;
    Sale* sale;
    ProductCatalog* catalog;
    std::list<ProductDescription*> pdesc_storage;
};
}
#endif



具体类的实现就不贴了,感兴趣的可以去我的github上看:https://github.com/wcwu/UMLexample-


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值