首页 > 题库 > 职业考证 > 软考 > 软件设计师 > 案例题
阅读下列说明和 C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某航空公司的会员积分系统将其会员划分为:普卡(Basic)、银卡(Silver)和金卡(Gold)三个等级。非会员 (Non Member)可以申请成为普卡会员。会员的等级根据其一年内累积的里程数进行调整。描述会员等级调整的状态图如图 5-1 所示。现采用状态 (State) 模式实现上述场景,得到如图 5-2 所示的类图。



 #include <iostream>
 using namespace std;
 class FrequentFlyer; class Cbasic; class Csilver; class Cgold; class CnoCustomer; // 提前引用
//提前引用
class CState {
private: int flyMiles; // 里程数
public:
(1) ; // 根据累积里程数调整会员等级
};
 class FrequentFlyer {
 friend class Cbasic; friend class Csilver; friend class Cgold;
private:
 Cstate *state; Cstate *nocustomer; Cstate *basic; Cstate *silver; Cstate *gold;
 double flyMiles;
public:
  CFrequentFlyer(){ flyMiles = 0; setState(nocustomer); }
  void setState(CState *state){ this->state = state; }
  void travel(int miles) {
    double bonusMiles = state->travel(miles,this);
    flyMiles = flyMiles + bonusMiles;
 }
};
 class CnoCustomer : public CState { // 非会员
 public:
    double travel(int miles, FrequentFlyer* context) { // 不累积里程数
      cout << “Your travel will not account for points\n”; return miles;
   }
 };
 class CBasic : public CState { // 普卡会员
public:
   double travel(int miles, FrequentFlyer* context) {
  if(context->flyMiles >= 25000 && context->flyMiles < 50000)
       (2) ;
  if(context->flyMiles >=50000) (3) ;
 return miles + 0.5*miles; // 累积里程数
 }
};
 class CGold : public CState { // 金卡会员
 public:
    double travel(int miles, FrequentFlyer* context) {
    if(context->flyMiles >= 25000 && context->flyMiles < 50000)
           (4) ;
    if(context->flyMiles < 25000)   (5) ;
    return miles + 0.5*miles; // 累积里程数
 }
};
 class Csilver : public CState { // 银卡会员
 public:
    double travel(int miles, FrequentFlyer* context) {
      if(context-> flyMiles < 25000)
        context->setState(context->basic);
      if(context-> flyMiles >= 50000)
        context->setState(context->gold);
      return(miles + 0.25*miles);
   }
};

参考答案: 查看答案 查看解析 查看视频解析 下载APP畅快刷题

相关知识点试题

相关试卷