阅读下列说明、图和c++代码。 [说明] 某订单管理系统的部分UML类图如下图所示。 上图中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条目,Or

admin2008-02-15  55

问题 阅读下列说明、图和c++代码。
   [说明]
   某订单管理系统的部分UML类图如下图所示。
     
   上图中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。
   请完善类Order的成员函数getOrderedAmount()和类SalesSystem的stafistic()方法,各个类的属性及部分方法定义参见下面的C++代码。
[C++代码]
    class Product {                                        //产品
   private:
        string pid;                                       //产品识别码
        string description;                              //产品描述
        double price;                                   ///产品单价
   public:
        void setProductPrice(double price);            //设置产品单价
        string getProduetld();                         //获取产品识别码
        string getProduetDescriprion 0;              //获取产品描述
        double getProductPrice0;                    //获得产品单价
        //其他成员省略
   };         
   class ProductList {                             //产品列表类
   private:
        vector <Product> products;
   public:
        ProductList();
        Product getProductBylndex(int i);          //获得产品列表中的第i件产品
        void addProduct(Product t);                //在产品列表中加入一件产品
        Product * getProductByID(string pid);      //获得识别码为pid的产品指针
        unsigned iht getProductAmount();           //获得产品列表中的产品娄量
    };
   class OrderItem {                               //订单条目类
   private:
        Product *productPtr;                      //指向被订购产品的指针
        int quantity;                             //订购数量
   public:
        OrderItem (Product *,iht);
        Product * getProductptr O;                //获得指向被订购产品的指针
        int getQuantity ();                       //获取被订刚强产品数量
   };
   class Order {                                  //订单类
   private:
         unsigned int orderid;                    //订单识别号
         vector<Orderltem> items;               //订单内容(订单项)
   public:
        Order(unsigned int orderid);              //获得识别码为fid的产品在当前订单中被订购的数量
        int getOrderedAmount(string fid);
        void additem(Product *productPtr,unsigned int n);    //在订单中增加一个订单项
   };
   class OrderList {                                        //订单列表类
   private:
         vector<Order> orders;
   public:
        OrderList();
        //Begin()返回指向订单列表第一个元素的迭代器(指针)
        virtual vector<Order>::iterator OrderList::Begin();
       //End()返回指向订单列表最后一个元素之后的迭代器(指向一个不存在的元素)
       virtual vector<Order>::iterator orderList::End();
       void addOrder(Order t);             //在订单列表中加入一份订单
   //其他成员省略
   };
   class SalesSystem{
   private:
        ProductList catalog;                 //产品目录
        OrderList sales;                    //订单列表
   public:
       SalesSystem();
        void statistic();                  //统计所有产品的订购情况
       //其他成员省略
   };
   //在订单中查找识别码为tid的产品的订购数量,若该产品没有被订购,则返回0
   int Order::getOrderedAmount(string tid)
   {   for (int k=0; k < items.size(); k++) {
         if((1)==tid)
             return (2);
   }
    return 0;
   }
   //方法statistic()依次统计产品目录中每个产品的订购总量,并打印输出
   //每个产品的识别码、描述、订购总量和订购金额
   void SalesSystem::statistic()
   {   unsigned int k, t, ordered_qty = 0;
       vector<Order>::iterator it;   Product p;
       cout<<’’产品识别码\t描述\t\t订购数量\t金额’’<<endl;
       for (k = 0; k < catalog.gctProductAmount(); k++){//遍历产品列表
            p =(3);            //从产品列表取得一件产品信息存入变量p
            ordered_qty = 0;
            //通过迭代器变量it遍历订单列表中的每一份订单
            for (it = sales. Begin(); (4): it++) {
            //根据产品识别码获得产品p在当前订单中被订购的数量
            t =(5) (p.getProductld());
            ordered_qty +=t;
       }
         cout << p.getProducfld() << "\t\t"<< p.gntProductDescription() << "\t\t";
         cout <<ordered_qty << "\t\t" << p.getProductPrice() * ordered_qty << endl;
       }
   }

选项

答案(1)items[k].getProductptr()->getProductId() (2) items [k].getQuantity() (3) catalog.getProductBylndex(k) (4) it != sales. End() , 或 it < sales.End() (5) it->getOrderedAmount

解析 本题考查C++程序设计及STL的使用。   
   从题中可知,类Order的数据成员orderid表示一份订单的识别号,从题目给出的类图中可知,每份订单上可有多个订单项,因此数据成员items是个类型为Orderltem的向量(数组)。类Order的成员函数getOrderedAmount()的功能是在订单中查找指定识别码的产品的订购数量,其定义如下:
        int Order::getOrderedAmount(string tid)
    {   for (int k = O; k < items.size(); k++) {
          if (  (1)  == fid)
                 return   (2)   ;
    }
    remm 0;
   }
    对于每个订单项,显然需要取出对应产品的识别号。从以上代码可以看出,变量k用于遍历并索引一份订单中的每个订单项(items[k])。由于Orderltem类提供的成员函数 getProductptr()可获取指向被订购产品的指针,因此可通过“items[k].getProduetptr() ->getProduetld()”获取被订购产品的识别号,若指定的产品识别号等于该订单项的产品识别号,就通过“items[k].getQuantity()”返回该产品被订购的数量。
   类SalesSystem的成员函数statistic()用于统计产品目录中每个产品的订购总量,并打印输出每个产品的识别码、描述、订购总量和订购金额。若要统计产品目录中每个产品的订购总量,需要对3个对象集合进行遍历:产品目录(ProductList)、订单列表 (OrderList)以及Order(需要对订单中的所有订单项进行查询,统计每个订单上所订购的产品的数量)。由此可以得出实现该方法的基本流程:
   ①从产品目录中取出一个产品。对应语句“for(k=0;k<catalog.getProductAmount(); k++)”用于遍历产品目录中的每件产品。由于存放产品目录(产品列表)的数据成员catalog的类型为ProductList,要取得某产品的相关信息,需要通过ProductList类提供的成员函数getProductBylndex(int i)获得产品目录中的第i件产品,因此空(3)处应填入“catalog.getProductBylndex(k)”。
  ②查询给定产品在每份订单中的订购情况。对应的语句“for(it=sales.Begin();
(4)  ;it++)”用于遍历所有的订单,对于给定产品和订单,可调用订单类Order的成员函数getOrderedAmount(tid)获得识别码为dd的产品在当前订单中被订购的数量。由于类 OrderList提供的方法Begin()、End()分别指向订单列表的第一个元素和最后一个元素之后,而迭代器变量it实际是指向订单列表(向量sales)中某订单的指针,因此空(4)处应填入“it!=sales.End()”或“it<sales.End()”,空(5)处填入“it->getOrderedAmount”。
转载请注明原文地址:https://jikaoti.com/ti/nhi7FFFM
0

相关试题推荐
最新回复(0)