阅读下列说明、图和c++代码。[说明]某订单管理系统的部分UML类图如下图所示。上图中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。请完善类Order的成员函数getOrderedAmount()和类SalesSystem的stafistic()方法,各个类的属性及部分方法定义参见下面的C++代码。[C++代码]class Product {

题目

阅读下列说明、图和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”。
更多“ 阅读下列说明、图和c++代码。[说明]某订单管理系统的部分UML类图如下图所示。上图中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条”相关问题
  • 第1题:

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

    [说明]

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

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

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

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

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

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

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


    正确答案:这是一道要求读者掌握Java语言中的java.util.ArrayListE>和for…each循环的程序分析题。本题的解答思路如下。 仔细阅读Java程序7-1——类OrderList的Java代码可知类OrderList中具有一个类型为 ArrayListOrder>的属性。结合图5-16订单管理系统的部分UML类图可知类OrderList和Order之间具有聚集关系。由试题给出的关键信息“可以使用类java.util.ArrayListE>来实现对象的聚集关系”、“如果要使用for…each循环来遍历对象集合那么包含该对象集合的类必须实现接口java.util.IterableT>”可以推理出(1)空缺处所填写的内容是“implements IterableOrder>”。 在定义了ArrayListE>的类中必须实现接口IteratorOrder>中的方法iteratorOrder>∷iterator()因此(2)空缺处所填写的实现体应为:return this.orders.iterator()或return orders.iterator()。 仔细阅读Java程序7-2——方法statistic的Java代码可以初步判断要填写(3)~(5)空缺处首先要将方法statistic的功能及实现流程分析清楚。而且(3)~(5)空缺处所填写的内容与for…each循环的使用有关;使用for…each循环时关键是要确定所遍历的是哪一个对象集合。在类SalesSystem中已经具有两个对象集合即属性catalog和sales。 方法statistic的功能是依次统计产品目录中每个产品的订购总量并打印出每个产品的编号、说明、订购总量和订购金额。若要统计产品目录中每个产品的订购总量需要对3个对象集合进行遍历;产品目录(ProductList)、订单列表(OrderList)及Order(需要对订单中的所有订单项进行查询统计每个订单上所订购的产品的数量)。由此可以得出实现该方法的基本流程是:①从产品目录中取出一个产品→②在订单目录依次查询每张订单→③逐一查询某个订单中的所有订单项。 ①从产品目录中取出一个产品这对应第1条for…each语句此时被遍历的对象集合为ProductList。根据试题给出的for…each循环的语法——“for(用来接收集合中元素的变量:需要遍历的对象集合)”和(3)空歌处前半句的“Productproduct:”可以推断出(3)空缺处应填写ProductList类的对象而类SalesSystem中的catalog就是ProductList的实例。并且结合图5-16的UML类图可知类ProductList和Product之间具有聚集关系。依照Java的程序设计规范引用类的属性时应使用“this.”属性名的形式。因此(3)空缺处的答案为this.catalog(或catalog)。 ②在订单目录依次查询每张订单其对应于第2条for…each语句。根据第(3)空缺处的解题思路可以确定出(4)空缺处应填写OrderList类的对象即类SalesSystem的属性sales。因此(4)空缺处的答案为this.sales(或sales)。 ③逐一查询某个订单中的所有订单项其对应于第3条for…each语句。由图5-16类图上可以看出与类Order具有聚集关系的类是OrderItem。由此可以确定(5)空缺处应填写类OrderItem的对象。由于类SalesSystem中没有这种类型的属性因此需要在这里定义一个临时对象。另外在if语句中出现了一个标识符item但是在上下文中并没有出现对它的定义。由此可以推断item的定义应该在(5)空缺处提供。因此(5)空缺处的答案为OrderItem item。
    这是一道要求读者掌握Java语言中的java.util.ArrayListE>和for…each循环的程序分析题。本题的解答思路如下。 仔细阅读Java程序7-1——类OrderList的Java代码可知,类OrderList中具有一个类型为 ArrayListOrder>的属性。结合图5-16订单管理系统的部分UML类图可知,类OrderList和Order之间具有聚集关系。由试题给出的关键信息“可以使用类java.util.ArrayListE>来实现对象的聚集关系”、“如果要使用for…each循环来遍历对象集合,那么包含该对象集合的类必须实现接口java.util.IterableT>”可以推理出,(1)空缺处所填写的内容是“implements IterableOrder>”。 在定义了ArrayListE>的类中,必须实现接口IteratorOrder>中的方法iteratorOrder>∷iterator(),因此(2)空缺处所填写的实现体应为:return this.orders.iterator(),或return orders.iterator()。 仔细阅读Java程序7-2——方法statistic的Java代码可以初步判断,要填写(3)~(5)空缺处,首先要将方法statistic的功能及实现流程分析清楚。而且(3)~(5)空缺处所填写的内容与for…each循环的使用有关;使用for…each循环时,关键是要确定所遍历的是哪一个对象集合。在类SalesSystem中已经具有两个对象集合,即属性catalog和sales。 方法statistic的功能是依次统计产品目录中每个产品的订购总量,并打印出每个产品的编号、说明、订购总量和订购金额。若要统计产品目录中每个产品的订购总量,需要对3个对象集合进行遍历;产品目录(ProductList)、订单列表(OrderList)及Order(需要对订单中的所有订单项进行查询,统计每个订单上所订购的产品的数量)。由此可以得出实现该方法的基本流程是:①从产品目录中取出一个产品→②在订单目录依次查询每张订单→③逐一查询某个订单中的所有订单项。 ①从产品目录中取出一个产品,这对应第1条for…each语句,此时被遍历的对象集合为ProductList。根据试题给出的for…each循环的语法——“for(用来接收集合中元素的变量:需要遍历的对象集合)”和(3)空歌处前半句的“Productproduct:”可以推断出,(3)空缺处应填写ProductList类的对象,而类SalesSystem中的catalog就是ProductList的实例。并且结合图5-16的UML类图可知,类ProductList和Product之间具有聚集关系。依照Java的程序设计规范,引用类的属性时,应使用“this.”属性名的形式。因此(3)空缺处的答案为this.catalog(或catalog)。 ②在订单目录依次查询每张订单,其对应于第2条for…each语句。根据第(3)空缺处的解题思路,可以确定出(4)空缺处应填写OrderList类的对象,即类SalesSystem的属性sales。因此(4)空缺处的答案为this.sales(或sales)。 ③逐一查询某个订单中的所有订单项,其对应于第3条for…each语句。由图5-16类图上可以看出,与类Order具有聚集关系的类是OrderItem。由此可以确定(5)空缺处应填写类OrderItem的对象。由于类SalesSystem中没有这种类型的属性,因此需要在这里定义一个临时对象。另外在if语句中出现了一个标识符item,但是在上下文中并没有出现对它的定义。由此可以推断item的定义应该在(5)空缺处提供。因此(5)空缺处的答案为OrderItem item。

  • 第2题:

    在某信息管理系统中存在两个类:类“客户”和类“订单”。它们之间的业务关系是:①一个客户提交零个或多个订单;②一个订单由一个且仅由一个客户提交。能够正确表示这个业务关系的UML类图是(47)。

    A.

    B.

    C.

    D.


    正确答案:D
    解析:由试题中的关键信息“①一个客户提交0个或多个订单;②一个订单由一个且仅由一个客户提交”可知,对应每个“订单”类的实例,都必须存在1个“客户”类的实例,对应每个“客户”类的实例,可能存在0个或多个“订单”类的实例。可见,正确表示该信息管理系统中类“客户”和类“订单”之间业务关系,是选项D的UML类图。选项A的图示“”表示的是一种泛化关系(继承关系的反关系);选项B的图示“”表示的是一种聚集关系(一种特殊的关联关系),空心菱形的一端表示整体的概念;选项C的图示“id_csrmsdsm_crmsdschoosecn_00272(20101)”也是表示一种关联关系,但该UML类图所表达的关联多重度不符合试题的描述。

  • 第3题:

    以下关于销售模块订单结束码的说明,错误的是?

    A.“N:未结束“表示该张订单没有全数交货,可能只交了一部分

    B.”N:未结束“表示该张订单尚未开始交货,一个都没有交

    C.“Y:自动结束“表示已全数交货

    D.“y:指定结束“表示人为通过“订单变更单”或“结束订单”对该订单进行指定结束。


    ”N:未结束“表示该张订单尚未开始交货,一个都没有交

  • 第4题:

    阅读下列说明、图以及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());

    }

    }

    //其余的方法末列出

    }


    正确答案:(1) implements IterableOrder> (2) this.orders.iteratorO或 orders.iterator() (3) this.catalog 或 catalog (4) this.sales 或 sales (5) OrderItem item
    (1) implements IterableOrder> (2) this.orders.iteratorO,或 orders.iterator() (3) this.catalog, 或 catalog (4) this.sales, 或 sales (5) OrderItem item 解析:本题考查的是Java语言中的java.util.ArrayListE>和for-each循环。
    java.util.ArrayListE>可以用来实现对象的聚集关系。for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接收集合中每个元素的变量,其语法如下:
    for(用来接收集合中元素的变量:需要遍历的对象集合)
    如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口 java.util.IterableT>。由此可以得到第(1)空的答案。因为类OrderList中具有一个类型为 ArrayListOrder>的属性,而且从类图也能看出类OrderList和Order之间具有聚集关系。因此第(1)空应填implementslterableOrder>。
    在定义了AnayListE>的类中,必须实现接口IterableOrder>中的方法Iterator Order>∷iterator(),其实现体应为return this.orders.iterator()。因此第(2)空应填this. orders.iterator()。
    空(3)~(5)考查的是for-each循环的使用。使用for-each循环时,关键是要确定所遍历的是哪一个对象集合。在类SalesSystem中已经具有两个对象集合,即属性catalog和 sales。要填写空(3)~(5),首先要将方法statistic的功能及实现流程分析清楚。
    方法statistic的功能是依次统计产品目录中每个产品的订购总量,并打印出每个产品的编号、说明、订购总量和订购金额。若要统计产品目录中每个产品的订购总量,需要对3个对象集合进行遍历:产品目录(ProductList)、订单列表(OrderList)以及Order (需要对订单中的所有订单项进行查询,统计每个订单上所订购的产品的数量)。由此可以得出实现该方法的基本流程:
    ①从产品目录中取出一个产品,这对应第一条for-each语句,这时被遍历的对象集合为ProductList。根据for-each循环的语法,第(3)空应填写ProductList类的对象,而类 SalesSystem中的catalog就是ProductList的实例。按照Java的程序设计规范,引用类的属性时,应使用this.属性名的形式。因此第(3)空的答案为this.catalog。其实,从前半句 Product product也可以推断出第(3)空的答案,因为从类图上可以看到ProductList和 Product之间具有聚集关系。
    ②在订单目录一次查询每张订单,这里对应第一条for-each语句。根据第(3)空的解题思路,可以很容易地确定第(4)空应填OrderList类的对象,即类SalesSystem的属性 sales。因此第(4)空的答案为this.sales。
    ③逐一查询某个订单中的所有订单项,这里对应第三条for-each语句。由类图上可以看出,与类Order具有聚集关系的类是Orderltem。所以第(5)应填写类OrderItem的对象。类SalesSystem中没有这种类型的属性,在这里定义一个临时对象。另外在if语句中出现了一个标识符item,但是在上下文中并没有出现对它的定义。在这里可以推断item的定义应该在第(5)空提供。因此第(5)空的答案为OrderItem item。

  • 第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()”。