阅读下列说明、图以及Java程序。[说明]某订单管理系统的部分UML类图如下图所示。上图中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,Orderltem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如下表所示。可以使用类java.util.ArrayList<E>米实现对象的聚集关系,如上图中OrderList与 Order之间的聚集关系。for-each循环提供了一种

题目

阅读下列说明、图以及Java程序。

[说明]

某订单管理系统的部分UML类图如下图所示。

上图中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,Orderltem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如下表所示。

可以使用类java.util.ArrayList<E>米实现对象的聚集关系,如上图中OrderList与 Order之间的聚集关系。

for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接收集合中每个元素的变量,其语法如下:

for(用来接收集合中元素的变量:需要遍历的对象集合)

如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口 java.util.Iterable<T>。

Java程序7-1和Java程序7-2分别给出了类OrderList和方法statistic的Java代码

[Java程序7-1]

import java.util.*;

public class OrderList (1) {

private ArrayList<Order> orders;

public OrderList0 {

this.orders = new ArrayList<Order>();

}

public void addOrder(Order orde0

this.orders.add(order);

}

public Iterator<Order> iterator() {

return (2);

}

public iht getNumberOfOrders0 {

return this.orders.size();

}

}

[Java程序7-21]

import java.u61.*;

public class SalesSystem {

private ProductList catalog;

private OrderList sales;

private static PrintWriter stdOut = new PrintWriter(System.out, true);

public void statistic() {

for (Product product: (3)) {

iht number = 0;

for (Order order: (4)) {

for ((5): order) {

if (produet.equals(item.getProduct()))

number += item. getQuantity();

}

}

stdOut.println(product .getCode() +" "

+ product.getDescription() +" "

+ number +" "+ number * product.getPrice());

}

}

//其余的方法末列出

}


相似考题
更多“ 阅读下列说明、图以及Java程序。[说明]某订单管理系统的部分UML类图如下图所示。上图中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,Orderltem表示产品订”相关问题
  • 第1题:

    阅读下列说明、图和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;


    正确答案:(1)items[k].getProductptr()->getProductId() (2) items [k].getQuantity() (3) catalog.getProductBylndex(k) (4) it != sales. End() 或 it sales.End() (5) it->getOrderedAmount
    (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;kcatalog.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()”或“itsales.End()”,空(5)处填入“it->getOrderedAmount”。

  • 第2题:

    如下所示的UML图是(41),图中(Ⅰ)表示(42),(Ⅱ)表示(43)。

    A.序列图

    B.状态图

    C.通信图

    D.活动图


    正确答案:D

  • 第3题:

    对某产品进行价值分析,其产品功能与成本关系如下图所示,图中C1最有可能表示( )随产品功能变动的变化规律。


    A、用户购买产品的费用
    B、产品使用成本
    C、产品维护成本
    D、产品报废拆除所需费用

    答案:A
    解析:
    本题考查的是价值工程的特点。产品生产成本,是指发生在生产企业内部的成本,也是用户购买产品的费用,包括产品的科研、实验、设计、试制、生产、销售等费用及税金等。

  • 第4题:

    下图所示的UML序列图中,(39)表示返回消息,A.xferB.checkC.evaluation

    下图所示的UML序列图中,(39)表示返回消息,

    A.xfer

    B.check

    C.evaluation

    D.minus


    正确答案:C
    序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互。以本题为例,第1个消息——xfer(m:Money,a2)表示外部有对象要调取a1这个对象的xfer()操作。而evaluation就是在a1调用john的check()操作之后的一个消息反馈。在整个图中,evaluation是一个消息反馈,不需要由Account来实现,而check()操作应由Person实现,而非Account。所以Account需要实现的包括:xfer()、plus()和minus()。

  • 第5题:

    阅读以下关于某订单管理系统的技术说明、部分UML类图及C++代码,将C++程序中(1)~(5)空缺处的语句填写完整。

    [说明]

    某订单管理系统的部分UML类图如图5-15所示。

    图5-15中,Product表示产品,ProductList表示产品目录,Order表示产品订单,Orderltem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。

    请完善类Order的成员函数getOrderedAmount()和类SalesSystem的statistic()方法,各个类的属性及部分方法定义参见下面的C++代码。

    [C++代码]


    正确答案:这是一道要求读者掌握C++程序设计及STL使用的分析题。本题的解答思路如下。 仔细阅读[C++代码]可知类Order的数据成员orderid表示一份订单的识别号。结合图5-15订单管理系统的部分UML类图可知每个订单上可以有多个订单项因此数据成员items是一个类型为 OrderItem的向量(数据)。类Order的成员函数getOrderedAmount的功能是“在订单中查找识别码为tid的产品的订购数量若该产品没有被订购则返回0”。其定义如下: 对于每个订单项显然需要取出对应产品的识别号。从getOrderedAmount(string tid)定义代码中变量k用于遍历并索引一份订单中的每个订单项(items[k])。由于OrderItem类提供的成员函数getProductpt()可获取指向被订购产品的指针因此可通过(1)空缺处所填写的“items[k].getProductptr()->getProductId()”获取被订购产品的识别号。若指定的产品识别号等于该订单项的产品识别号就通过(2)空缺处所填写的“items[k].getQuantity()”返回该产品被订购的数量。 类SalesSystem的成员函数statistic()用于统计产品目录中每个产品的订购总量并打印输出每个产品的识别码、描述、订购总量和订购金额。若要统计产品目录中每个产品的订购总量需要对3个对象集合进行遍历:产品目录(ProductList)、订单列表(OrdeList)及Order(需要对订单中的所有订单项进行查询统计每个订单上所订购的产品的数量)。由此可以得出实现该方法的基本流程如下。 ①从产品目录中取出一个产品。对应语句“for(k=0;kcatalog.getProductAmount();k++)”用于遍历产品目录中的每件产品。由于存放产品目录(产品列表)的数据成员catalog的类型为ProductList要取得某产品的相关信息需要通过ProductList类提供的成员函数getProductByIndex(int I)获得产品目录中的第 i件产品因此(3)空缺处所填写的内容是“catalog.getProductByIndex(k)”。 ②查询给定产品在每份订单中的订购情况。对应的语句“for(it=sales.Begin(); (4) ;it++”用于遍历所有的订单根据产品识别码获得给定产品在当前订单中被订购的数量。对于给定产品和订单可调用订单类Order的成员函数getOrderedAmount(tid)获得识别码为tid的产品在当前订单中被订购的数量。因此(5)空缺处所填写的内容是“it->getOrderedAmount”。 由于类OrderList提供的方法Begin()、End()分别指向订单列表的第一个元素和最后一个元素之后而迭代器变量it实际是指向订单列表(向量sales)中某订单的指针因此(4)空缺处所填写的内容是“it!= sales.End()”或“itsales.End()”。
    这是一道要求读者掌握C++程序设计及STL使用的分析题。本题的解答思路如下。 仔细阅读[C++代码]可知,类Order的数据成员orderid表示一份订单的识别号。结合图5-15订单管理系统的部分UML类图可知,每个订单上可以有多个订单项,因此数据成员items是一个类型为 OrderItem的向量(数据)。类Order的成员函数getOrderedAmount的功能是“在订单中查找识别码为tid的产品的订购数量,若该产品没有被订购,则返回0”。其定义如下: 对于每个订单项,显然需要取出对应产品的识别号。从getOrderedAmount(string tid)定义代码中,变量k用于遍历并索引一份订单中的每个订单项(items[k])。由于OrderItem类提供的成员函数getProductpt()可获取指向被订购产品的指针,因此可通过(1)空缺处所填写的“items[k].getProductptr()->getProductId()”获取被订购产品的识别号。若指定的产品识别号等于该订单项的产品识别号,就通过(2)空缺处所填写的“items[k].getQuantity()”返回该产品被订购的数量。 类SalesSystem的成员函数statistic()用于统计产品目录中每个产品的订购总量,并打印输出每个产品的识别码、描述、订购总量和订购金额。若要统计产品目录中每个产品的订购总量,需要对3个对象集合进行遍历:产品目录(ProductList)、订单列表(OrdeList)及Order(需要对订单中的所有订单项进行查询,统计每个订单上所订购的产品的数量)。由此可以得出实现该方法的基本流程如下。 ①从产品目录中取出一个产品。对应语句“for(k=0;kcatalog.getProductAmount();k++)”用于遍历产品目录中的每件产品。由于存放产品目录(产品列表)的数据成员catalog的类型为ProductList,要取得某产品的相关信息,需要通过ProductList类提供的成员函数getProductByIndex(int I)获得产品目录中的第 i件产品,因此(3)空缺处所填写的内容是“catalog.getProductByIndex(k)”。 ②查询给定产品在每份订单中的订购情况。对应的语句“for(it=sales.Begin(); (4) ;it++”用于遍历所有的订单,根据产品识别码获得给定产品在当前订单中被订购的数量。对于给定产品和订单,可调用订单类Order的成员函数getOrderedAmount(tid)获得识别码为tid的产品在当前订单中被订购的数量。因此(5)空缺处所填写的内容是“it->getOrderedAmount”。 由于类OrderList提供的方法Begin()、End()分别指向订单列表的第一个元素和最后一个元素之后,而迭代器变量it实际是指向订单列表(向量sales)中某订单的指针,因此(4)空缺处所填写的内容是“it!= sales.End()”或“itsales.End()”。