java 鹿鼎記_JAVA程序設計(14.1)----- 圖書館管理系統 初步設計 內部功能篇

首先繪制思維導圖,右下的user暫時不管先……

先做Book,抽象化屬性,核心功能。然后是繪制BookManager的主要功能

8dfef0fd18bbbfa8fd3c91b30ed2d041.jpe

然后直接導出到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{

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 + "]";

}

}

然后是 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 list = new ArrayList();

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 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;

}

}

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 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);

}

}

除了修改,都能正常運行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值