首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和Java代码,填补代码中的空缺,将解答填入对应栏内。 【说明】 以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价
阅读以下说明和Java代码,填补代码中的空缺,将解答填入对应栏内。 【说明】 以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价
admin
2018-11-21
68
问题
阅读以下说明和Java代码,填补代码中的空缺,将解答填入对应栏内。
【说明】
以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。
【Java代码】
interface Item{
public void accept(ViSitor visitor);
public double getPrice();
}
clasS Book
(1)
{
private double price;
public Book(double price) {
(2)
}
public void accept(Visitor visitor){//访问本元素
(3)
;
}
public double getPrice(){
return price;
}
}
//其他物品类略
interface Visitor {
public void viSit(Book book);
//其他物品的visit方法
}
clasS Cashier
(4)
{
private double totalForCart;
//访问Book类型对象的价格并累加
(5)
{
//假设Book类型的物品价格超过10元打8折
if(book.getPrice()<10.0){
totalForCart+=book.getPrice();
}else
totalForCart+=book.getPrice() *0.8;
}
//其他visit方法和折扣策略类似,此处略
public double getTotal(){
return totalForCart;
}
}
class ShoppingCart {
//normal shopping cart Stuff
private java.util.ArrayList
=new java.util.ArrayList<>();
public double calculatePrice() {
Cashier viSitor=new Cashier();
for(Item item:items){
(6)
;
}
double total=viSitor.getTotal();
retumR tOtal;
}
public void add(Item e){
thiS.items.add(e);
}
}
选项
答案
(1)implements Item (2)this.price=price (3)visitor.visit(this) (4)implements Visitor (5)public void visit(Book book) (6)item.accept(visitor)
解析
本题考查Java语言程序设计能力,涉及接口、类、对象、方法的定义和使用。要求考生根据给出的案例和代码说明,认真阅读理清程序思路,然后完成题目。题目所给代码清晰,易于理清思路。本题也是典型的访问者(Visitor)设计模式的实现示例。访问者设计模式的典型类图如下所示。该模式中最核心的部分当属Visitor接口,其为元素对象结构中每一种具体元素(ConcreteElement)定义了visit操作。
先考查题目说明,实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。具体物品有图书(Book)、CD和DVD等。
根据题目说明进行设计,给出图5-1的类图,定义相关的接口、类及其之间的关系。其中ShoppingCart购物车中持有各种物品,物品(Item)定义为接口,声明两个方法,一个是getPrice()可以获得物品价格,另一个accept(visitor:Visitor)接受由visitor对象进行价格统计,方法由子类实现。Book、CD和DVD三个具体类实现接口Item,需要具体定义getPrice()和accept()方法的实现。Visitor定义为访问每个物品的接口,具体访问者即其实现类Cashier对ShoppingCart中的每个物品进行统计。
元素对象结构中,Item定义为接口,用interface关键字。其中声明的方法缺省为public,此处显式添加了public关键字,没有方法实现:
public void accept(ViSitor visitor);
public double getPrice();
接口无法直接创建对象,需要由具体类Book、CD和DVD实现Item中声明的方法接口后,才能创建对象。在Java中,采用implements关键字后加接口名,即:
Class Book implements Item{…}
clasS CD implements Item{…}
clasS DVD implements Item{…}
在具体实现类的构造器中,对象的属性与构造器参数price同名,用this关键字加以区分。其中this关键字用来引用当前对象或类实例,可以用点取属性或行为,即:
this.price=price;
其中,this.price表示当前对象的price属性,price表示参数。
public void accept(Visitor visitor)方法用于具体的收银员访问本元素以统计价格,即visitor对象使用其visit方法访问当前的物品对象:
visitor.visit(this);
这一类图中的核心是Visitor接口:interface Visitor{},该接口定义了一个访问Item对象结构中的每种具体物品元素的操作,即:
public void visit(Book book);
public void visit(CD cd);
public void visit(DVD dvd);
具体访问物品的收银员Cashier实现该Visitor接口,实现其中的visit方法。Cashier记录(存储)所统计的物品总价格totalForCart,在访问每个物品之后,将按具体规则对物品进行价格统计,累加至总价格。Cashier中定义public double getTotal()方法以返回购物车中物品的总价格。
ShoppingCart类定义购物车中一系列物品的集合:
private Java.util.ArrayList
items=new java.util.ArrayList<>();
其中,采用泛型元素类型
约束,从Java 7起,支持创建ArrayList等集合类对象时,从上下文推断其泛型元素类型,不用显式指出。即newjava.util.ArrayList<>()。
ShoppingCart中的calculatePrice()方法即为触发结账离开的行为,其中每个物品接受Cashier对象的价格统计:
for(Item item:iterns){
item.accept(viSitor);
}
最后通过visitor.getTotal()返回总价格。ShoppingCart中还定义一个方法用来向购物车添加物品:
public void add(Item e){
this.items.add(e);
}
整个系统在使用时先创建ShoppingCart对象,向其中添加物品,结账离开时调用calculatePrice()统计总价,在main()方法中如下定义:
public static void main(String…args){
ShoppingCart cart = new ShoppingCart();
cart.add(new Book(20));
cart.add(new CD(10));
cart.add(new DVD(20));
double total=cart.calculatePrice();
System.out.println(’’total:’’+total);
}
综上所述,空(1)需要标识实现接口 implements Item;空(2)要表示将参数price赋值给当前对象的price,即this.price=price;空(3)处需要使visitor对象调用visit当前对象来统计价格,即visitor.visit(this);空(4)为实现接口implements Visitor;空(5)处为具体类中实现接口中声明的方法public void visit(Book book);空(6)处为物品对象接受收银员对当前对象进行统计,item.accept(visitor)。
转载请注明原文地址:https://www.kaotiyun.com/show/I2jZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
计算机使用了一段时间后,系统磁盘空间不足,系统启动时间变长,系统响应延迟,应用程序运行缓慢,此时,需要对系统进行优化。(28)________________不属于系统优化工作。
在Excel的A1单元格中输入函数“=IF(12,1,2)”,按回车键后,A1单元格中的值为()。
某信息处理技术员正在做大批数据处理的大项目时,领导又交宋了另一项临时性的紧迫工作,要求优先处理。该信息处理技术员需要转而做新的工作,他对原工作的处理方式应该是(69)。
某企业的大数据工程项目包括如下四个阶段的工作:①数据获取,②数据清洗与整理,③数据分析,④数据展现。一般来说,工作量较大、花费时间较长的阶段是______(1),技术含量最高的阶段是______(2),准备向有关部门递交成果的阶段是______(3)。
某公司下设4个分公司A、B、C、D,上月各分公司的销售额及其在总公司所占比例如下表所示。由于此表单受潮,有些数据看不清了,但还可以推算出来。根据推算, D公司上月的销售额为(68)万元。
下面记录的是某班36人期末考试的数学成绩:971009596100879610089100936999891008188
以下定性的分类变量中,(9)属于有序变量(能排序)。
由多台计算机组成的一个系统,这些计算机之间可以通过通信来交换信息,互相之间无主次之分,它们共享系统资源,程序由系统中的全部或部分计算机协同执行,执行过程对用户透明。管理上述计算机系统的操作系统是_________。
阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。说明在一台计算机上安装完成Windows2000服务器及相应的服务组件。
随机试题
患者40岁,右下颌剧烈牙痛并放射至耳颞部,同侧面颊部明显红肿、疼痛、下唇麻木、张口受限5日。体温39.6℃,右下颌体、颊部弥漫性红肿,触痛明显,张口2cm,残根,叩痛明显,松动Ⅱ度,龈袋溢脓,白细胞总数18×109/L,中性粒细胞90%。最可能的诊断是
劳力型心绞痛是自发型心绞痛是
航空公司将客票售出,便意味着与旅客签订了()。
狭义的督查工作是指对领导专门批示或交办的事项催促办理落实。()
()指社会公众在了解和经验的基础上,对政府在运行过程中显示的行为特征和精神状况的总体印象和评价。
语言学中,把由词根、语素和词缀组合起来构成的词称为_______词。(北京大学)
drunkdriving
一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为
ThementalhealthmovementintheUnitedStatesbeganwithaperiodofconsiderableenlightenment.DorotheaDixwasshockedtof
A、$60.B、$50.C、$40.D、$10.C这是一道计算题。根据对话内容,房间原价是50美元,这个月人住可以享受八折优惠,因此房间的实际价格是40美元。注意20%discount的意思是“八折”。
最新回复
(
0
)