首先繪製思惟導圖。右下的user臨時不管先……java
先作Book。抽象化屬性,核心功能。sql
而後是繪製BookManager的主要功能編程
而後直接導出到Eclipse進行改動調整,完畢功能的內部結構例如如下:dom
package com.lovo.BookManager; import java.sql.Date; import java.text.SimpleDateFormat; /** * @author Abe * @version 1.0 * @created 05-十一月-2011 15:58:35 */ public class Book implements Comparable<Book>{ final long THE_DAY = 1000 * 60 * 60 * 24; private String name; private String isbn; private double price; private boolean lended; private int counter; private long lendDate; /** * 構造器 */ public Book(String isbn, String name , double price){ this.isbn = isbn ; this.name = name ; this.price = price; this.counter = (int)(Math.random()* 50); } /** * 借出 * @return */ public boolean lendOut() { if (!lended) { lended = true; counter++; lendDate = System.currentTimeMillis(); return true; } return false; } /** * 歸還 * @return */ public double returnBack() { if (lended) { lended = false; long currentTime = System.currentTimeMillis(); int days = (int) Math.ceil((currentTime - lendDate) / THE_DAY); lendDate = 0; return days * price; } return 0; } public String getName() { return name; } public String getIsbn() { return isbn; } public double getPrice() { return price; } public boolean isLended() { return lended; } public int getCounter() { return counter; } /** * 出借日期 * @return */ public String getLendDate() { if (lended) { Date date = new Date(lendDate); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); return sdf.format(date); } else { return "---"; } } public void setName(String name) { this.name = name; } public void setPrice(double price) { this.price = price; } public void setCounter(int counter) { this.counter = counter; } /** * 重寫比較的方法 */ @Override public int compareTo(Book other) { return (other.counter - this.counter); } @Override public String toString() { return " name=" + name + ", isbn=" + isbn + ", price=" + price + ", lended=" + lended + ", counter=" + counter + ", lendDate=" + lendDate + "]"; } }
package com.lovo.BookManager; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Abe * @version 1.0 * @created 05-十一月-2011 15:58:35 */ public class BookManager { private List<Book> list = new ArrayList<Book>(); public BookManager() { // 加入圖書做爲測試數據 list.add(new Book("111", "編程思想", 1.5)); list.add(new Book("222", "鹿鼎記", 0.5)); list.add(new Book("333", "育兒百科", 1.2)); list.add(new Book("444", "尋秦記", 0.7)); list.add(new Book("555", "斗羅大陸", 1.1)); } /** * 方法:新增書籍 * @param Book */ public boolean add(Book book) { if (findByISBN(book.getIsbn()) == null) { list.add(book); return true; } return false; } /** * 移除書籍 * @param isbn */ public boolean deleteByISBN(String isbn) { if (findByISBN(isbn) == null) { return false; } else { list.remove(findByISBN(isbn)); return true; } } /** * 方法:返回全部容器 * @return */ public List<Book> findAll() { return list; } /** * 按isbn查找目標書籍 * @param isbn */ public Book findByISBN(String isbn) { for (Book b : list) { if (b.getIsbn().equals(isbn)) { return b; } }return null; } public Book[] findTop10() { if (list != null) { Book[] tempBook = new Book[list.size()]; tempBook = list.toArray(tempBook); Arrays.sort(tempBook); //匿名內部類藉口 A Book[] top10 = new Book[list.size() < 10 ? list.size() : 10]; System.arraycopy(tempBook, 0, top10, 0, top10.length); return top10; } else { return null; } } /** * 歸還 * @param b * @return 租金 */ public double getBackFromUser(String isbn) { if (findByISBN(isbn) != null) { return findByISBN(isbn).returnBack(); } return 0; } /** * 借出 * @param b * @return 是否借書成功 */ public boolean lendedToUser(String isbn) { if (findByISBN(isbn) != null) { return findByISBN(isbn).lendOut(); } return false; } }
package com.lovo.BookManager; import java.util.List; import java.util.Scanner; /** * @author Abe * @version 1.0 * @created 05-十一月-2014 15:37:33 */ public class SystemUI { public static void main(String[] args) { BookManager manager = new BookManager(); Scanner sc1 = new Scanner(System.in); Scanner sc2 = new Scanner(System.in); do { int choice = 0; do { System.out.println("\n---------------\n"); System.out.println("1. 新增圖書"); System.out.println("2. 刪除圖書"); System.out.println("3. 改動圖書"); System.out.println("4. 查看所有圖書"); System.out.println("5. 查找圖書"); System.out.println("6. 借書"); System.out.println("7. 還書"); System.out.println("8. 查看排行榜"); System.out.println("9. 退出系統"); System.out.println("\n---------------\n"); System.out.print("請選擇: "); choice = sc2.nextInt(); } while(choice < 1 || choice > 9); switch(choice) { case 1: System.out.print("請輸入書的編號: "); String isbn1 = sc1.nextLine(); System.out.print("請輸入書的名稱: "); String name = sc1.nextLine(); System.out.print("請輸入書的日租金: "); double price = sc2.nextDouble(); Book newBook = new Book(isbn1, name, price); System.out.println(manager.add(newBook)?除了改動,都能正常執行"加入成功!" : "加入失敗!"); break; case 2: System.out.print("請輸入書的編號: "); String isbn2 = sc1.nextLine(); System.out.println(manager.deleteByISBN(isbn2)? "刪除成功!" : "刪除失敗!"); break; case 3: break; case 4: List<Book> bookList = manager.findAll(); System.out.println("名稱\t\t日租金\t狀態\t借出日期\t借出次數"); for(Book b : bookList) { System.out.println(b.getName() + "\t\t" + b.getPrice() + "\t" + (b.isLended()? "已借出" : "未借出") + "\t" + b.getLendDate() + "\t" + b.getCounter()); } break; case 5: System.out.print("請輸入書的編號: "); String isbn3 = sc1.nextLine(); Book temp = manager.findByISBN(isbn3); if(temp != null) { System.out.println("書名: " + temp.getName()); System.out.println("日租金: " + temp.getPrice()); System.out.println("借出狀態: " + (temp.isLended()? "已借出" : "未借出")); System.out.println("借出日期: " + temp.getLendDate()); System.out.println("借出次數: " + temp.getCounter()); } else { System.out.println("沒有此書!!!"); } break; case 6: System.out.print("請輸入書的編號: "); String isbn4 = sc1.nextLine(); System.out.println(manager.lendedToUser(isbn4)?ide
"借出成功!" : "借出失敗!"); break; case 7: System.out.print("請輸入書的編號: "); String isbn5 = sc1.nextLine(); System.out.println("請交納租金: ¥" + manager.getBackFromUser(isbn5)); break; case 8: Book[] list = manager.findTop10(); System.out.println("名稱\t\t日租金\t狀態\t借出日期\t借出次數"); for(Book b : list) { System.out.println(b.getName() + "\t\t" + b.getPrice() + "\t" + (b.isLended()? "已借出" : "未借出") + "\t" + b.getLendDate() + "\t" + b.getCounter()); } break; case 9: System.exit(0); break; } } while(true); } }post