首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明、图和c++代码。 [说明] 某订单管理系统的部分UML类图如下图所示。 上图中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条目,Or
阅读下列说明、图和c++代码。 [说明] 某订单管理系统的部分UML类图如下图所示。 上图中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条目,Or
admin
2008-02-15
104
问题
阅读下列说明、图和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://www.kaotiyun.com/show/JfDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
在GB/T 17544中,软件包质量要求包括三部分,即产品描述要求、(53)、程序和数据要求。
逻辑路径覆盖法是白盒测试用例的重要设计方法,其中语句覆盖法是较为常用的方法,针对下面的语句段,采用语句覆盖法完成测试用例设计,测试用例见下表,对表中的空缺项(True或者False),正确的选择是(60)。语句段:if(A&&(B‖C))
文件系统中,设立打开文件(Open)系统功能调用的基本操作是(25)。
设有职工EMP(职工号,姓名,性别,部门号,职务,进单位时间,电话),职务JOB(职务,月薪)和部门DEPT(部门号,部门名称,部门电话,负责人)实体集。一个职务可以由多个职工担任,但一个职工只能担任一个职务,并属于一个部门,部门负责人是一个职工。下图所示
用等价类划分法设计8位长数字类型用户名登录操作的测试用例,应该分成(44)个等价区间。
软件能力成熟度模型(CMM)将软件能力成熟度自低到高依次划分为5级。目前,达到CMM第3级(已定义级)是许多组织努力的目标,该级的核心是(29)。
若有关系R(A,B,C,D)和S(C,D,E),则与表达式π3,4,7(σ4<5(R×S))等价的SQL语句如下:SELECT(17)FROM(18)WHERE(19);(18)
A模块通过简单数据类型(如整型)参数访问B模块,该参数在B模块内用于数据计算,则A、B模块之间存在______。
X软件公司的软件工程师张某兼职于Y科技公司,为完成Y科技公司交给的工作,做出了一项涉及计算机程序的发明。张某认为该发明是利用自己的业余时间完成的,可以以个人名义申请专利。此项专利申请权应归属()。
设系统中有R类资源m个,现有n个进程互斥使用。若每个进程对R资源的最大需求为w,那么当m、n、w取下表的值时,对于下表中的a~e五种情况,(26)两种情况可能会发生死锁。对于这两种情况,若将(27),则不会发生死锁。
随机试题
下列表示C类IP地址范围_______。
40岁女性,舌侧尖斜形折断2天,松动,颊侧半稳。叩诊轻度不适,牙冠稍短,口内余留牙及黏膜无异常。
在风险因素取值专家评定法中,要计算出期望值,必须知道的前提数值是()。
下列人员中,应在记账凭证上签章的有()。
车辆损失险的保险责任包括()造成保险车辆的损失、施救和保护费用。
2016年3月1日,甲公司从二级市场购入乙公司发行的股票100万股并划分为交易性金融资产,每股价格10元,另支付交易费用1万元。乙公司于3月5日宣告按每股0.1元的比例分配现金股利,甲公司于3月10日收到现金股利10万元。3月20日,甲公司以每股11元的价
在幼儿园课程评价中,既是课程评价对象又是课程评价主体的是()。
X分子具有Y结构,串联起了大量的原子,由该分子组成的某种物质在同类型的物质中具有很强的导热性。很明显,分子内包含大量原子是使得该物质拥有极强的导热性所必不可少的。以下哪项如果为真,最能削弱上述结论?()
关于中共六届七中全会通过的《关于若干历史问题的决议》,表述正确的有()
取之不尽的
最新回复
(
0
)