当前位置: 代码迷 >> J2SE >> 求一头向对象的题目的答案
  详细解决方案

求一头向对象的题目的答案

热度:98   发布时间:2016-04-24 00:31:42.0
求一面向对象的题目的答案
一个超市类SuperMaket作为主类,一个抽象商品类Goods,一个抽象家具类Furniture,一个具体桌子Table类。进货类Purchase,销售类Sell,库存类Deposite。要求商品进货时库存中商品自动增加,商品销售时库存商品自动减少;货物原有200,其中家具100,桌子0。 
输出:
进货: 桌子5
库存:桌子5,家具105,货物205
销售: 桌子1
库存:桌子4,家具104,货物204
要求:因为类似于桌子的商品成千上万,为了代码复用、具有普遍性,Purchase,Sell,Deposite三个类中不允许带有Table、Furniture名称或带有“桌子”“家具”字符串的语句,如果有,不给分。但可以带有Goods名称或“货物”字符串,因其具有通用性。Table类中可以带有“家具”字符串的语句,因为它是家具类的子类,具有通用性。

------解决方案--------------------
太2了。
谁能发明这么不切实际的题目啊~~.
真纠结
Java code
import java.util.HashMap;import java.util.Map;public class SuperMaket {    public interface TypeAware{        String getTypeName();        int getCount();    }    public static class Goods implements TypeAware{        private final static String TypeName="货物";        int count;        public Goods(int count) {            this.count = count;        }        public String getTypeName() {            return TypeName;        }        public int getCount() {            return count;        }    }    public static class Furniture extends Goods{        private final static String TypeName="家具";        public Furniture(int count) {            super(count);        }        public String getTypeName() {            return TypeName;        }    }    public static class Table extends Furniture{        private final static String TypeName= "桌子";        public Table(int count) {            super(count);        }        public String getTypeName() {            return TypeName;        }    }        public static class Purchase{        private Deposite deposite;        public Purchase(Deposite deposite) {            this.deposite = deposite;        }        void purchase(Goods goods){            deposite.add(goods);            print(goods);        }        void print(Goods goods){            System.out.println("进货:"+goods.getTypeName()+goods.getCount());            deposite.print();        }    }    public static class Sell{        private Deposite deposite;        public Sell(Deposite deposite) {            this.deposite = deposite;        }        void sell(Goods goods){            deposite.remove(goods);            print(goods);        }        void print(Goods goods){            System.out.println("销售:"+goods.getTypeName()+goods.getCount());            deposite.print();        }    }    public static class Deposite{        Map<String, Goods> depository = new HashMap<String, Goods>();        void add(Goods goods){            Goods g = depository.get(goods.getTypeName());            if(g==null){                depository.put(goods.getTypeName(), goods);            }else{                g.count += goods.count;            }            for(Map.Entry<String, Goods> e : depository.entrySet()){                if(e.getValue().getClass().isAssignableFrom(goods.getClass())){                    if(goods.getTypeName()==e.getKey()){                        continue;                    }                    e.getValue().count += goods.count;                }            }        }        void remove(Goods goods){            Goods g = depository.get(goods.getTypeName());            if(g!=null){                g.count -= goods.count;            }            for(Map.Entry<String, Goods> e : depository.entrySet()){                if(e.getValue().getClass().isAssignableFrom(goods.getClass())){                    if(goods.getTypeName()==e.getKey()){                        continue;                    }                    e.getValue().count -= goods.count;                }            }        }        void print(){            System.out.print("库存:");            boolean fistCycle=true;            for(Map.Entry<String, Goods> e : depository.entrySet()){                if(fistCycle){                    fistCycle=false;                }else{                    System.out.print(',');                }                System.out.print(e.getKey());                System.out.print(e.getValue().getCount());            }            System.out.println();        }    }    public static void main(String[] args) {        Deposite deposite = new Deposite();        deposite.add(new Goods(100));        deposite.add(new Furniture(100));        deposite.add(new Table(0));        deposite.print();        System.out.println("========我==是==分==割==线========");        Purchase purchase = new Purchase(deposite);        purchase.purchase(new Table(5));        Sell sell = new Sell(deposite);        sell.sell(new Table(1));    }}
  相关解决方案