zoukankan      html  css  js  c++  java
  • 软件设计师2007 年11月下午试题6(C++语言 责任链模式)

    【说明】

          已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。

    采用责任链设计模式(Chain of Responsibility)对上述过程进行设计后得到的类图如图6-1所示。

    [C++代码]

    #include <string>

    #include <iostream>

    using namespace std;

    class PurchaseRequest {

    public:

        double Amount;    // 一个采购的金额

        int Number;       // 采购单编号

        string Purpose;     // 采购目的

    };

     

    class Approver {       // 审批者类

    public:

        Approver(){ successor = NULL; }

        virtual void ProcessRequest(PurchaseRequest aRequest){

             if (successor != NULL){  successor->ProcessRequest(aRequest); }

    }

     

    void SetSuccessor(Approver *aSuccesssor){ successor = aSuccesssor; }

    private:

         Approver::successor;

    };

     

    class Congress : public Approver {

    public:

         void ProcessRequest(PurchaseRequest aRequest){

             if (aRequest.Amount >= 500000){ /* 决定是否审批的代码省略 */ }

             else Approver::ProcessRequest(aRequest);

         }

    };

     

    class Director : public Approver {

    public:

        void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */ }

    };

     

    class President : public Approver {

    public:

        void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */  }

    };

     

    class VicePresident : public Approver {

    public:

         void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */   }

    };

     

    void main(){

        Congress Meeting;  VicePresident Sam;  Director Larry ;  President Tammy;  

        // 构造责任链

        Meeting.SetSuccessor(NULL); Sam.SetSuccessor(&Tammy);

        Tammy.SetSuccessor(&Meeting); Larry.SetSuccessor(&Sam);

     

        PurchaseRequest aRequest;  // 构造一采购审批请求

        cin >> aRequest.Amount;   // 输入采购请求的金额

        Larry .ProcessRequest(aRequest);  // 开始审批

        return ;

    }

  • 相关阅读:
    bzoj [POI2015]Myjnie
    bzoj2217 [Poi2011]Lollipop
    Codeforces A Mist of Florescence
    bzoj4380 [POI2015]Myjnie
    bzoj4292 [PA2015]Równanie
    bzoj 3517翻硬币
    模块补充
    python解释器
    __file__、__name__、__dict__方法整理
    软件开发规范
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/2094973.html
Copyright © 2011-2022 走看看