C語言中文網 目錄

Java圖書信息查詢

< 上一頁Java泛型 Java枚舉下一頁 >

前面詳細介紹了 Java 中各集合的使用,像 Set 集合List 集合等,另外,還結合泛型講解了一些高級應用。在實際開發中,泛型集合是較常用的,一般定義集合都會使用泛型的形式來定義。本節將使用泛型集合來模擬實現某圖書管理系統的查詢功能。

在圖書管理系統中為了方便管理圖書,將圖書劃分為幾個類別。每個類別下有很多圖書,每本圖書都有相對應的類別,這就具備了一對多的關系映射,即一個類別對應多本圖書。

在這種情況下就可以使用 Map 映射來存儲類別和圖書信息,其鍵為 Category(類別) 類型,值為 List<Book> 類型(Book 類為圖書類),然后使用嵌套循環遍歷輸出每個類別所對應的多個圖書信息。具體的實現步驟如下。

(1) 創建表示圖書類別的 Category 類,在該類中有兩個屬性:id 和 name,分別表示編號和類別名稱,并實現了它們的 setXxx() 和 getXxx() 方法,具體內容如下:
public class Category
{
    private int id;    //類別編號
    private String name;    //類別名稱
    public Category(int id,String name)
    {
        this.id=id;
        this.name=name;
    }
    public String toString()
    {
        return "所屬分類:"+this.name;
    }
    //上面兩個屬性的setXxx()和getXxx()方法
        public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id=id;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name=name;
    }
}

(2) 創建表示圖書明細信息的 BookInfo 類,在該類中包含 5 個屬性:id、name、price、author 和 startTime,分別表示圖書編號、名稱、價格、作者和出版時間,同樣實現了它們的 setXxx() 和 getXxx() 方法,具體內容如下:
public class BookInfo
{
    private int id;    //編號
    private String name;    //名稱
    private int price;    //價格
    private String author;    //作者
    private String startTime;    //出版時間
    public BookInfo(int id,String name,int price,String author,String startTime)
    {
        this.id=id;
        this.name=name;
        this.price=price;
        this.author=author;
        this.startTime=startTime;
    }
    public String toString()
    {
        return this.id+"\t\t"+this.name+"\t\t"+this.price+"\t\t"+this.author+"\t\t"+this.startTime;
    }
    //上面5個屬性的 setXxx() 和 getXxx() 方法
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id=id;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name=name;
    }
    public int getPrice()
    {
        return price;
    }
    public void setPrice(int price)
    {
        this.id=price;
    }
    public String getAuthor()
    {
        return author;
    }
    public void setAuthor(String author)
    {
        this.author=author;
    }
    public String getStartTime()
    {
        return startTime;
    }
    public void setStartTime(String startTime)
    {
        this.startTime=startTime;
    }
}

(3) 創建 CategoryDao 類,在該類中定義一個泛型的 Map 映射,其鍵為 Category 類型的對象,值為 List<BookInfo> 類型的對象,并定義 printCategoryInfo() 方法,用于打印類別和圖書明細信息。具體代碼如下:
public class CategoryDao
{
    //定義泛型Map,存儲圖書信息
    public static Map<Category,List<Bookinfo>>categoryMap=new HashMap<Category,List<BookInfo>>();
    public static void printDeptmentInfo()
    {
        for(Category cate:categoryMap.keySet())
        {
            System.out.println("所屬類別:"+cate.getName());
            List<BookInfo> books=categoryMap.get(cate);
            System.out.println("圖書編號\t\t圖書名稱\t\t圖書價格\t\t圖書作者\t\t出版時間");
            for(int i=0;i<books.size();i++)
            {
                BookInfo b=books.get(i);    //獲取圖書
                System.out.println(b.getId()+"\t\t"+b.getName()+"\t\t"+b.getPrice()+"\t\t"+b.getAuthor()+"\t\t"+b.getStartTime());
            }
            System.out.println();
        }
    }
}

(4) 創建測試類 Test17,在該類中定義 4 個 Deptment 對象和 8 個 People 對象,并將 8 個 People 對象分成 4 組,存儲到 4 個 List 集合中,然后將 4 個 Deptment 對象和 4 個 List 集合按照——對應的關系存儲到 DeptmentDao 類中的 peoplesMap 映射中。最后調用 DeptmentDao 類中的 printDeptmentInfo() 方法打印類別及對應的圖書信息。具體的代碼如下:
public class Test17
{
    public static void main(String[] args)
    {
        Category category1=new Category(1,"數據庫"); //創建類別信息
        Category category2=new Category(2,"程序設計");    //創建類別信息
        Category category3=new Category(3,"平面設計");    //創建類別信息
        BookInfo book1=new BookInfo(1,"細說 Java 編程",25,"張曉玲","2012-01-01");    //創建圖書信息
        BookInfo book2=new BookInfo(2,"影視后期處理寶典",78,"劉水波","2012-10-05");    //創建圖書信息
        BookInfo book3=new BookInfo(3,"MySQL 從入門到精通",41,"王志亮","2012-3-2");    //創建圖書信息
        BookInfo book4=new BookInfo(4,"Java 從入門到精通",27,"陳奚靜","2012-11-01");    //創建圖書信息
        BookInfo book5=new BookInfo(5,"SQL Server 一百例",68,"張曉玲","2012-01-01");    //創建圖書信息
        List<BookInfo> pList1=new ArrayList<BookInfo>();    //向類別 1 添加圖書
        pList1.add(book1);
        pList1.add(book4);
        List<BookInfo> pList2=new ArrayList<BookInfo>();    //向類別 2 添加圖書
        pList2.add(book3);
        pList2.add(book5);
        List<BookInfo> pList3=new ArrayList<BookInfo>();    //向類別 3 添加圖書
        pList3.add(book2);
        CategoryDao.categoryMap.put(category1,pList1);
        CategoryDao.categoryMap.put(category2,pList2);
        CategoryDao.categoryMap.put(category3,pList3);
        CategoryDao.printDeptmentInfo();
    }
}

在該程序中,使用了泛型 List 和泛型 Map 分別存儲圖書類別和特定類別下的圖書明細信息。從中可以看出使用泛型不僅減少了代碼的編寫量,也提高了類型的安全性。

運行該程序,輸出的結果如下所示。
所屬類別:數據庫
圖書編號        圖書名稱        圖書價格        圖書作者        出版時間
1        細說 Java 編程        25        張曉玲        2012-01-01
4        Java 從入門到精通        27        陳奚靜        2012-11-01

所屬類別:平面設計
圖書編號        圖書名稱        圖書價格        圖書作者        出版時間
2        影視后期處理寶典        78        劉水波        2012-10-05

所屬類別:程序設計
圖書編號        圖書名稱        圖書價格        圖書作者        出版時間
3        MySQL 從入門到精通        41        王志亮        2012-3-2
5        SQL Server 一百例        68        張曉玲        2012-01-01
< 上一頁Java泛型 Java枚舉下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo