1、题目1
一家音像制品店销售了各式各样的音像制品,包含如CD唱片、VCD影片、DVD影片和蓝光影片等。 由于目前处理销售淡季,音像制品店老板希望做一些促销活动,针对一些特定的产品推出一些优惠活动,活动内容如下: 1)任意客户一次性购买VCD碟片满200元,送一张蓝光影片一张; 2)任意客户一次性购买DVD D9碟片满8张,就打9折; 要求: 1)针对上述需求写一个简单的分析(字数不限) 2)设计相应的数据结构 3)请用自己最熟悉的语言写一个收银机程序,该程序能够自动计算出总价,并打印明细。
package test.shoppingcart.model; import java.io.Serializable; /** * 商品 * * @author Administrator * */ public abstract class Commodity implements Serializable { private static final long serialVersionUID = 7111046014915319904L; protected String name; protected double price; protected String sn; protected String validate; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getSn() { return sn; } public void setSn(String sn) { this.sn = sn; } public String getValidate() { return validate; } public void setValidate(String validate) { this.validate = validate; } @Override public String toString() { return "Commodity [name=" + name + ", price=" + price + ", sn=" + sn + ", validate=" + validate + "]"; } }
package test.shoppingcart.model; public class DVD extends Commodity { private static final long serialVersionUID = -5938569445753451675L; }
package test.shoppingcart.model; public class DVD9 extends DVD { private static final long serialVersionUID = 2680014167158542125L; public DVD9() { super.name = "DVD9"; super.price = 60.0d; super.sn = "123456"; super.validate = "20991231"; } }
package test.shoppingcart.model; public class DVDBlue extends Commodity { private static final long serialVersionUID = 3559142666893595895L; public DVDBlue() { super.name = "DVDBlue"; super.price = 50.0d; super.sn = "4215"; super.validate = "20991231"; } }
package test.shoppingcart.model; /** * 购物条目录 * * @author Administrator * */ public class Entry { Commodity commodity; /** 数量 */ int copies = 0; /** 原价 */ double originalPirce; /** 折扣价 */ double currentPrice; public Entry(Commodity commodity, int copies, double originalPirce, double currentPrice) { this.commodity = commodity; this.copies = copies; if (originalPirce == 0) { this.originalPirce = commodity.getPrice() * copies; } this.currentPrice = currentPrice; } public Commodity getCommodity() { return commodity; } public void setCommodity(Commodity commodity) { this.commodity = commodity; } public int getCopies() { return copies; } public void setCopies(int copies) { this.copies = copies; } public double getOriginalPirce() { return originalPirce; } public void setOriginalPirce(double originalPirce) { this.originalPirce = originalPirce; } public double getCurrentPrice() { return currentPrice; } public void setCurrentPrice(double currentPrice) { this.currentPrice = currentPrice; } @Override public String toString() { return "Entry [commodity=" + commodity + ", copies=" + copies + ", originalPirce=" + originalPirce + ", currentPrice=" + currentPrice + "]"; } }
package test.shoppingcart.model; public class VCD extends Commodity { private static final long serialVersionUID = 5127362020171422936L; public VCD() { super.name = "VCD"; super.price = 10.0d; super.sn = "123456"; super.validate = "20991231"; } }
package test.shoppingcart.model; public class CD extends Commodity { private static final long serialVersionUID = 3487982392117475933L; }
策略模式应用:
package test.shoppingcart.strategy; import java.util.List; import test.shoppingcart.model.Entry; /** * 折扣基类 * * @author Administrator * */ public abstract class Discount { /** * 折扣 * @param entry 购物单的中物品条目 * @param buyEntries 购物单中的物品 */ public abstract void calcDiscount(Entry entry,List<Entry> buyEntries); }
package test.shoppingcart.strategy; import java.util.List; import test.shoppingcart.model.Commodity; import test.shoppingcart.model.Entry; /** * 商品折扣 * * @author Administrator * */ public class CommodityDiscount extends Discount { @Override public void calcDiscount(Entry entry,List<Entry> buyEntries) { Commodity c = entry.getCommodity(); entry.setOriginalPirce(new Double(c.getPrice() * entry.getCopies())); entry.setCurrentPrice(new Double(c.getPrice() * entry.getCopies())); } }
package test.shoppingcart.strategy; import java.util.List; import test.shoppingcart.model.Commodity; import test.shoppingcart.model.DVD9; import test.shoppingcart.model.Entry; public class DVD9Discount extends CommodityDiscount { @Override public void calcDiscount(Entry entry, List<Entry> buyEntries) { super.calcDiscount(entry, buyEntries); Commodity c = entry.getCommodity(); if (c instanceof DVD9 && entry.getCopies() >= 8) { entry.setCurrentPrice(new Double(c.getPrice() * entry.getCopies() * 0.95)); } } }
package test.shoppingcart.strategy; import java.util.List; import test.shoppingcart.model.DVDBlue; import test.shoppingcart.model.Entry; import test.shoppingcart.model.VCD; public class VCDDiscount extends CommodityDiscount { @Override public void calcDiscount(Entry entry, List<Entry> buyEntries) { // 商品的价格优惠 super.calcDiscount(entry, buyEntries); // VCD的赠送 if (entry.getCommodity() instanceof VCD && entry.getCopies() * entry.getCommodity().getPrice() >= 200d) { // 赠送的 Entry present = new Entry(new DVDBlue(), 1, 0d, 0d); buyEntries.add(present); } } }
责任链模式应用:
package test.shoppingcart; import java.util.List; import test.shoppingcart.model.Entry; import test.shoppingcart.strategy.Discount; /** * 责任链 * @author Administrator * */ public class DiscountChain { private DiscountChain next; private Discount discount; public DiscountChain(DiscountChain next, Discount discount) { this.next = next; this.discount = discount; } public void handle(Entry entry, List<Entry> buyEntries) { discount.calcDiscount(entry, buyEntries); if (next != null) { next.handle(entry, buyEntries); } } }
程序入口:
package test.shoppingcart; import java.util.ArrayList; import java.util.List; import test.shoppingcart.model.DVD9; import test.shoppingcart.model.Entry; import test.shoppingcart.model.VCD; import test.shoppingcart.strategy.DVD9Discount; import test.shoppingcart.strategy.VCDDiscount; /*** * 结算 * * @author Administrator * */ public class Charge { public static void main(String[] args) { List<Entry> buyEntries = new ArrayList<Entry>(); List<Entry> presentEntries = new ArrayList<Entry>(); Entry vcdEntry = new Entry(new VCD(), 20, 0, 0); Entry dvd9Entry = new Entry(new DVD9(), 8, 0, 0); buyEntries.add(vcdEntry); buyEntries.add(dvd9Entry); // 创建责任链条 DiscountChain chain = new DiscountChain(new DiscountChain(null, new DVD9Discount()), new VCDDiscount()); Entry entry = null; double totalCost = 0d;// 消费总价 for (int i = 0; i < buyEntries.size(); i++) { entry = buyEntries.get(i); chain.handle(entry, presentEntries); totalCost += entry.getCurrentPrice();//累加消费金额 } buyEntries.addAll(presentEntries);// 添加赠送的商品 System.out.println("总价:" + totalCost); System.out.println(buyEntries.toString()); } }
相关推荐
UML设计模式笔试题 UML 设计模式笔试题是 Java 程序设计的重要组成部分,本文档涵盖了 UML 设计模式、Java 基础知识、多线程编程、Struts2 框架、MVC 模式、设计模式等多方面的知识点。 一、选择题 1. UML 设计...
UML 设计模式笔试题答案 UML(Unified Modeling Language,统一建模语言)是一种软件设计的标准语言,用于描述、构建和文档化软件系统。UML 提供了一种通用的语言和图形表示法,帮助软件开发者更好地理解和描述软件...
设计模式和框架笔试题 在软件开发中,设计模式和框架扮演着非常重要的角色。设计模式是一种通用的解决问题的方法,它可以被应用于不同的场景中,而框架则是一种半成品,可以帮助开发者快速地开发出软件系统。在这里...
设计模式是软件工程中一种重要的工具和概念,它代表着针对特定问题而形成的可复用的解决方案。在软件开发中,设计模式通常被分为三大类:创建型模式、结构型模式和行为型模式,它们各自解决不同层面的设计问题。在...
Java笔试题常常涉及到Java语言和J2EE框架的相关知识,以下是对这些知识点...以上就是Java笔试题和J2EE相关的知识要点,这些知识点涵盖了Web应用开发的核心技术和设计模式,对于理解和掌握企业级Java应用开发至关重要。
6. **编程问题**:错误定位、程序优化、设计模式等实战题目。 通过深入学习和解答这些题目,不仅可以巩固理论知识,还能锻炼解决问题的能力,为校招笔试和面试做好充分准备。无论是对初学者还是有一定经验的开发者...
2009福富笔试题(java,c/c++)海外,电信 以下是从给定的文件信息中生成的相关知识点: 1. 复习要点1.jsp 基础(转向,9 大对象) 知识点:jsp 基础、服务器端编程、Java Web 开发 解释:jsp 是一种服务器端编程语言...
Java作为一门广泛使用的编程语言,其笔试题涵盖了基础语法、数据结构、算法、多线程、网络编程、设计模式等多个方面。本资料集合了大量Java笔试题,旨在帮助求职者全面复习并准备Java相关的笔试环节,同时包含了各大...
Java作为一门广泛使用的编程语言,其面试笔试题涵盖了众多领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、数据库操作、设计模式、JVM优化等。以下是对这些知识点的详细阐述: 1. **...
【南瑞笔试题集合】是针对应届毕业生设计的一系列笔试试题,旨在考察应聘者在IT领域的基础知识、专业技能和解决问题的能力。南瑞,作为中国电力行业的重要企业,其笔试环节通常涵盖计算机科学、软件工程、电力系统等...
【标题】2016年4月方正Java软件工程师笔试题 这是一份针对2016年4月方正公司招聘Java软件工程师时所使用的笔试题目集。方正集团是中国知名的IT企业,其对Java工程师的技术要求通常涵盖了基础语法、面向对象编程、...
这份"java笔试题汇总及答案(另附各大公司笔试题)"提供了丰富的学习资源,涵盖了多方面的Java知识,包括但不限于基本语法、集合框架、多线程、异常处理、IO流、网络编程、设计模式等。 1. **Java基本语法**:这...
### Spring笔试题知识点详解 #### 一、依赖注入与控制反转 **知识点1:依赖注入的概念** - **定义**: 依赖注入(Dependency Injection, DI)是一种设计模式,它提倡通过构造函数、setter方法或者接口来注入一个类...
Java笔试题是评估应聘者Java编程能力的重要环节,通常包括单选题、多选题、判断题和简答题。这些题目覆盖了Java语言的核心概念、类库、编程规范以及问题解决能力。以下是一些可能出现在Java笔试题中的关键知识点: ...
10. **设计模式**:熟悉常见的设计模式,如单例、工厂、观察者等,它们是解决特定问题的标准解决方案。 在解答Delphi的笔试题时,可能会遇到编写代码片段、分析代码错误、优化性能、实现特定功能等问题。对于...
综上所述,这份笔试题覆盖了算法设计、数据结构、编程实现、时间管理等多个方面,是一个综合性很强的技术能力评估。通过这些题目,智线可以筛选出真正具备扎实基础、高效解决问题能力和良好编程习惯的候选人。
【百度笔试题】中的知识点主要涉及三个方面:编程题、算法题和系统设计。下面将分别对这三个方面进行详细的解析。 1. **编程题** 这道编程题要求编写一个函数`is_include(char *a, char *b)`,判断字符串`b`的所有...
2018京东秋招设计类笔试题 这是一份京东2018秋招设计类笔试题,涵盖了多个领域的知识点,包括公共关系、领导力、社会学、道德律、逻辑思维、设计等。以下是对每个问题的详细解析: 1. 假设你是单位公关部职员,...
7. **设计模式**:可能会考察单例、工厂、观察者等常见设计模式的理解与应用。 "java外包笔试F卷.docx"的难度相对较高,可能是为中高级程序员准备的,可能涵盖以下进阶知识点: 1. **JVM内存模型**:理解堆、栈、...