商品信息錄入

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]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章