早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->软考中级 -->

阅读下列说明、图和c++代码。 [说明] 某订单管理系统的部分UML类图如下图所示。 上图中,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++代码。...的网友还看了以下:

如图,半径为r,内径很小的光滑半圆管竖直放置,质量都为m的小球a.b以不同的速度进入管内,a通过最高 物理 2020-03-31 …

离地足够高处有一竖直空管!M.N为空管的上下两端,管长24米,某时刻,空管在外力作用下以2米每秒的 物理 2020-05-13 …

如图所示,半径为R,内径很小的光滑半圆管竖直放置.两个质量均为m的小球a、b以不同的速度进入管内, 物理 2020-05-22 …

如图所示,半径为R,内径很小的光滑半圆管竖直放置,两个质量均为m的小球A、B以不同速率进入管内,A 物理 2020-05-22 …

如图所示,半径为R,内径很小的光滑半圆管竖直放置,两个质量均为m的小球A、B以不同速率进入管内,A 物理 2020-05-23 …

如图所示,不可伸长的轻绳穿过光滑竖直固定细管,细管长为l,两端拴着质量分别为m、2m的小球A和小物 物理 2020-07-13 …

什么家庭用品可以代替以下化学实?有哪些家庭用品可以代替以下化学实验仪器?试管试管夹玻璃棒酒精灯胶头 化学 2020-07-16 …

如图所示,半径为R,内径很小的光滑半圆管竖直放置.两个质量均为m的小球a、b以不同的速度进入管内, 物理 2020-07-31 …

4.有一个半径为R,内径很小的光滑半圆管竖直放置,两个质量均为m的小球a、b以不同速度进入管内,a通 物理 2020-12-17 …

一种测量稀薄气体压强的仪器如图(a)所示,玻璃泡M的上端和下端分别连通两竖直玻璃细管K1和K2.K1 物理 2021-01-18 …