標籤:沒有 long out clip remove com ceil main 匿名內部類
首先繪製思維導圖。右下的user臨時無論先……
先做Book。抽象化屬性,核心功能。
然後是繪製BookManager的主要功能
然後直接匯出到Eclipse進行改動調整,完畢功能的內部結構例如以下:
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;}/** * 重寫比較的方法 */@Overridepublic int compareTo(Book other) {return (other.counter - this.counter);}@Overridepublic String toString() {return " name=" + name + ", isbn=" + isbn+ ", price=" + price + ", lended=" + lended + ", counter="+ counter + ", lendDate=" + lendDate + "]";}}
然後是 Manager
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); //匿名內部類借口 ABook[] 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;}}
3.最後是控制台的功能驗證
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)?
"借出成功!" : "借出失敗!");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);}}
除了改動,都能正常執行
JAVA程式設計(14.1)----- 圖書館管理系統 初步設計 內部功能篇