2.写一个商品信息录入代码,包括编号、商品名称、进货日期、价格

格式:1,牛肉,2013-3-17,35

拆分字符串,自定义key存入HashMap<String,String>,每个商品对应一个map

输入一个商品完成后,提示是否继续输入,n结束,y继续

多个商品信息放入ArrayList<HashMap<String,String>>中

所有商品信息录入完毕,从ArrayList取出所有商品信息,每个商品转换成一个Product对象,再放入一个新的ArrayList<Product>中

按id判断是否包含指定商品

package homework;
import java.util.*;
/**
 * 商品录入程序
 * 练习常用集合ArrayList和HashMap的用法。
 */
public class ProductInput {
    public static void main(String[] args) {
        ProductInput pi = new ProductInput();
        // 存放商品信息的list的初始化
        ArrayList<HashMap<String, String>> mapList = pi.initList();
        // 存放商品对象的list的初始化
        ArrayList<Product> pList = pi.initProductList(mapList);
        // 通过id查找商品
        pi.findProductById(pList);
    }
    /**
     * 商品录入模块,将录入的信息拆分后存入HashMap中。
     * 用ArrayList保存多个HashMap,也即多个商品信息。类似二维数组的思维。
     * @return 返回封装有多个商品的ArrayList对象。
     */
    public ArrayList<HashMap<String, String>> initList() {
        Scanner scan = new Scanner(System.in);
        ArrayList<HashMap<String, String>> mapList = new ArrayList<HashMap<String, String>>();
        for (;;) {
            System.out.println("请输入商品信息");
            System.out.println("格式:编号,商品名称,进货日期,价格");
            String strMsg = scan.next();
            String[] strArrPro = strMsg.split(",");
            // 此处用于录入控制,可以自己扩展,使程序尽可能的健壮。
            if (strArrPro.length != 4) {
                System.out.println("格式错误!");
                continue;
            }
            String strPid = strArrPro[0];
            String strPname = strArrPro[1];
            String strDate = strArrPro[2];
            String strPrice = strArrPro[3];
            // 创建HashMap,用于存放商品信息键值对。一个HashMap对应一种商品。
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("pid", strPid);
            map.put("pname", strPname);
            map.put("date", strDate);
            map.put("price", strPrice);
            // 将封装有一个个商品信息的map存入list中
            mapList.add(map);
            System.out.println("是否继续?Y继续/N退出");
            String s = scan.next();
            if ("N".equalsIgnoreCase(s)){
                break;
            }
        }
        return mapList;
    }
    /**
     * 完成 ArrayList<Product>的初始化工作:将存放有map的list中的商品信息取出,
     * 完成一个个具体商品Product的初始化,然后用一个新ArrayList存储这些商品对象。
     * @param mapList 由含有商品信息的map组成的ArrayList
     * @return 存储有多个商品对象的新ArrayList
     */
    public ArrayList<Product> initProductList(
            ArrayList<HashMap<String, String>> mapList) {
        ArrayList<Product> pList = new ArrayList<Product>();
        for (int i = 0; i < mapList.size(); i++) {
            HashMap<String, String> map = mapList.get(i);
            String strPid = map.get("pid");
            String strPname = map.get("pname");
            String strDate = map.get("date");
            String strPrice = map.get("price");
            String[] strArrDate = strDate.split("-");
            // 字符串的日期转换为Date类型的日期
            Calendar cal = Calendar.getInstance();
            cal.set(Integer.parseInt(strArrDate[0]),
                    Integer.parseInt(strArrDate[1]) - 1,// 注意此处要-1
                    Integer.parseInt(strArrDate[2]));
            Date date = cal.getTime();
            // 字符串型的价格转换为double型的价格
            double douPrice = Double.parseDouble(strPrice);
            // 将商品信息封装为商品Product对象
            Product p = new Product(strPid, strPname, date, douPrice);
            pList.add(p);
        }
        return pList;
    }
    /**
     * 通过Id查找商品
     * @param pList 存储有多个商品的ArrayList。
     */
    public void findProductById(ArrayList<Product> pList) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入要查找的ID:");
        String strId = scan.next();
        Iterator<Product> it = pList.iterator();
        boolean flag = false;
        Product p = null;
        while(it.hasNext()){
            p = it.next();
            if(p.getPid().equals(strId)){
                flag = true;
            }
        }
        // 也可以通过如下方式查找:该方式能查找到是否含有,并没有拿出真正的商品对象
        /*Product p = new Product();
        p.setPid(strId);
        // contains是依据元素的equals方法来判断是否包含
        boolean flag = pList.contains(p);*/
        if(flag){
            System.out.println("存在该商品,如下:\n"+p);
        }else{
            System.out.println("你所要查找的商品不存在");
        }
    }
}
package homework;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Product {
    private String pid;
    private String pname;
    private Date date;
    private double price;
        
    public Product() {
        super();
    }
    public Product(String pid, String pname, Date date, double price) {
        super();
        this.setDate(date);
        this.setPid(pid);
        this.setPname(pname);
        this.setPrice(price);
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((pid == null) ? 0 : pid.hashCode());
        return result;
    }
        
    @Override
    public String toString() {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String strDate = df.format(this.date);
        return "Product [pid=" + pid + ", pname=" + pname + ", date=" + strDate
                + ", price=" + price + "]";
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Product other = (Product) obj;
        if (pid == null) {
            if (other.pid != null)
                return false;
        } else if (!pid.equals(other.pid))
            return false;
        return true;
    }
    public String getPid() {
        return pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
        
}

请输入商品信息

格式:编号,商品名称,进货日期,价格

1,niurou,2013-2-3,36

是否继续?Y继续/N退出

y

请输入商品信息

格式:编号,商品名称,进货日期,价格

2,yangrou,2013-2-4,34

是否继续?Y继续/N退出

y

请输入商品信息

格式:编号,商品名称,进货日期,价格

3,bocai,2013-2-5,12

是否继续?Y继续/N退出

n

请输入要查找的ID:

2

存在该商品,如下:

Product [pid=3, pname=bocai, date=2013-02-05, price=12.0]