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设计模式笔试题.docUML设计模式笔试题.docUML设计模式笔试题.docUML设计模式笔试题.doc
UML设计模式笔试题答案.docUML设计模式笔试题答案.docUML设计模式笔试题答案.doc
关于设计模式和框架的笔试面试题,找了好久才找到 的,应届生绝对用的着
设计模式面试专题及答案
本压缩包主要内容为c#教程(书籍)及一些经典资料,主要包括有: ...23种设计模式.pdf c++笔试面试宝典2009版.doc 程序员面试宝典.pdf 高质量C++-C编程指南.mht 注意:共有两个分卷,这是分卷2。
本压缩包主要内容为c#教程(书籍)及一些经典资料,主要包括有: ...23种设计模式.pdf c++笔试面试宝典2009版.doc 程序员面试宝典.pdf 高质量C++-C编程指南.mht 注意:共有两个分卷,这是分卷1。
迅雷2010Java笔试题哈尔滨站第二轮笔试题 1. 以下代码是某种设计模式的一种实现方式: public class LazyModel { private static LazyModel instance =null; private static Object lock = new Object(); ...
应聘Java程序员参考资料。共149题,含参考答案。主要包括以下几方面的试题:Java基础、多线程、JSP、Servlet、JDBC、XML、EJB、服务器、MVC、JavaEE、设计模式、Linux、代码改错等。
4399⼤数据笔试题 今天晚上参加了厦门 今天晚上参加了厦门4399公司的⼤数据笔试,⾃⼰没有拍下题⽬,⼀下是根据⾃⼰在草稿纸上简要记录回忆下 公司的⼤数据笔试,⾃⼰没有拍下题⽬,⼀下是根据⾃⼰在草稿纸上简要...
海量面试题,含答案,带答案, 华为,百度,新浪,阿里巴巴,微软,microsoft,IBM,腾讯,中软,Google,网易,神州数码,新蛋,思科,Cisco 淘宝,奇虎,中国移动,东软,...面试题,笔试题,Java,设计模式,算法,前端
整除、超级键盘、算数、数字迷宫、设计模式中,适配器模式和装饰器模式有什么区别?
招银网络java科技笔试题 2018 秋招刷题汇总 :flexed_biceps: 如果你觉得有帮助请点个 star,谢谢!欢迎 Follow 我 :hot_beverage: 深入Java虚拟机 简单的Java虚拟机探索之旅以及内存溢出问题探究 堆内存溢出(不断...
c++面试笔试练习题,各种面试题 23种设计模式(C++).pdf 2008年9月二级C++笔试真题及答案【选择题】.pdf 2009_C++笔试题目B.doc C+++_set.pdf C++面试汇总.doc
是一个关于java的笔试题集,其中包括javaEE部分,javaSE部分,以及java中的23中设计模式,是个不错的笔试题集。
一套Java开发工程师笔试试题 (请不要在试题上留任何痕迹,所有答案均写在答题纸上) ...最后一道简答题关于设计模式的题目见博客: https://blog.csdn.net/zhangvalue/article/details/104236638
2010.11北京中科大洋笔经 设计模式题 多次出现
高级java笔试题 java 欢迎大家进入马士兵大学,希望大家在这里能够学到自己想要学习的技术,获得提升,找到理想的工作! 本课程最贴合企业级需求的java基础课程,向上有完整的知识点覆盖,除了语言自身,...
设计模式,还要通过java代码看懂属于哪种设计模式 2. 如何提⾼读写性能 3. 异常类的继承 4. java修饰符的使⽤ 5. 内部类的作⽤范围 6. 继承与重载 7. 看java代码计算结果 8. hashmap,hashtable区别 9. ArrayList,...
Java就业面试题大全 包括: 1. Java基础部分 2. 特高深的Java问题 2. Java代码查错 2. 算法与编程 ...9. 软件工程与设计模式 10. Linux 10. 问得稀里糊涂的题 10. 其他 真的很全啊。word 文档就 400kb.