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]