您好,登錄后才能下訂單哦!
利用Java編寫一個(gè)簡(jiǎn)單的圖書館管理系統(tǒng)?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
以下為小型圖書館管理系統(tǒng)模式圖:
模式總體概述:
其中IBorrower接口確定Borrower類標(biāo)準(zhǔn),Library類為單例設(shè)計(jì)模式,即圖書館只有一個(gè)。Book類為Borrower類的內(nèi)部類,libraryBook類為L(zhǎng)ibrary類的內(nèi)部類。最后利用PlatForm類進(jìn)一步的封裝。對(duì)于類方法中的核心,主要是數(shù)組的“增刪查改”操作,本項(xiàng)目中三次運(yùn)用了這些操作,分別在Borrower、Library、PlatForm類方法中。
IBorrower接口:
// package com.wu.demo; /** * @date 2020-10-30 10:08:48 * @author 一夜星塵 * @version 1.8.0 */ // 圖書借閱人標(biāo)準(zhǔn) public interface IBorrower { public abstract void borrowBook(String bookName,String bookAuthor,float bookPrice,Library libary); public abstract void returnBook(String bookName,String bookAuthor,float bookPrice,Library libary); }
Borrower類:
// package com.wu.demo; /** * @date 2020-10-30 10:11:00 * @author 一夜星塵 * @version 1.8.0 */ public class Borrower implements IBorrower{ protected String borrowerName; protected long borrowerNumber; private int booksNumber; private static final int MAX_NUMBER_OF_BOOKS = 4; //最大借書容量 private Book[] books = new Book[MAX_NUMBER_OF_BOOKS]; public Borrower(String borrowerName,long borrowerNumber) { this.borrowerName = borrowerName; this.borrowerNumber = borrowerNumber; this.booksNumber = 0; } private class Book{ private String bookName; private String bookAuthor; private float bookPrice; public Book(String bookName,String bookAuthor,float bookPrice){ Book.this.bookName = bookName; Book.this.bookAuthor = bookAuthor; Book.this.bookPrice = bookPrice; } public String getName() { return Book.this.bookName; } public String getAuthor() { return Book.this.bookAuthor; } public float getPrice() { return Book.this.bookPrice; } } @Override /** * 借書操作 */ public void borrowBook(String bookName,String bookAuthor,float bookPrice,Library library) { if(booksNumber>=MAX_NUMBER_OF_BOOKS) { System.out.println("超過最大借書容量"); return; } books[booksNumber++] = new Book(bookName,bookAuthor,bookPrice); // 移除圖書館書籍,更新圖書館信息 library.removeBook( bookName,bookAuthor, bookPrice); } @Override /** * 還書操作 */ public void returnBook(String bookName,String bookAuthor,float bookPrice,Library library) { // 前提是有書的情況下 if(booksNumber<=0) { return; } int index = -1; for(int i = 0 ; i < books.length ; i++) { if(books[i].bookName.equals(bookName) && books[i].bookAuthor.equals(bookAuthor) && books[i].bookPrice == bookPrice) { index = i; break; } } if(index < 0) { System.out.println("你并沒有該書籍"); return; } for(int i = 0; i < booksNumber-1 ; i++) { if(i>=index) { books[i] = books[i+1]; } } booksNumber --; // 還入圖書館,更新圖書館信息 library.addBook(bookName,bookAuthor,bookPrice); } /** * 借書人信息 */ public void borrowerInfo() { int i = 0; System.out.println("------------------------------借閱人信息------------------------------"); System.out.println("借閱人姓名:"+this.borrowerName); System.out.println("借閱人學(xué)號(hào):"+this.borrowerNumber); for(;i < booksNumber ; i++) { System.out.println("第"+(i+1)+"本書: "); System.out.println("書籍名稱:"+books[i].getName()); System.out.println("書籍作者:"+books[i].getAuthor()); System.out.println("書籍價(jià)格:"+books[i].getPrice()); } System.out.println("當(dāng)前借閱書本數(shù)為: "+booksNumber+" 剩余容量為: "+(MAX_NUMBER_OF_BOOKS-i)); System.out.println("------------------------------------------------------------------------"); } }
Library類:
// package com.wu.demo; /** * @date 2020-10-30 10:32:42 * @author 一夜星塵 * @version 1.8.0 */ public class Library { private static final Library library = new Library(); private static final int MAX_NUMBER_OF_BOOKS = 120; // 圖書館最大書容量 private libraryBook[] books = new libraryBook[MAX_NUMBER_OF_BOOKS]; protected static int booksNumber = 0; // 無參構(gòu)造函數(shù)私有化 private Library() {}; private class libraryBook{ private String bookName; private String bookAuthor; private float bookPrice; public libraryBook(String bookName,String bookAuthor,float bookPrice){ libraryBook.this.bookName = bookName; libraryBook.this.bookAuthor = bookAuthor; libraryBook.this.bookPrice = bookPrice; } public void setName(String bookName) { libraryBook.this.bookName = bookName; } public void setAuthor(String bookAuthor) { libraryBook.this.bookAuthor = bookAuthor; } public void setPrice(float bookPrice) { libraryBook.this.bookPrice = bookPrice; } } // 唯一返回的單例 static Library getLibrary() { return library; } /** * 增添書籍 * @param bookName * @param bookAuthor * @param bookPrice */ public void addBook(String bookName,String bookAuthor,float bookPrice) { if(booksNumber>=MAX_NUMBER_OF_BOOKS) { System.out.println("超過圖書館書籍最大容量"); return; } books[booksNumber++] = new libraryBook(bookName,bookAuthor,bookPrice); } /** * 刪除書籍 * @param bookName * @param bookAuthor * @param bookPrice */ public void removeBook(String bookName,String bookAuthor,float bookPrice) { int index = -1; for(int i = 0 ; i < booksNumber ; i++) { if(books[i].bookName.equals(bookName) && books[i].bookAuthor.equals(bookAuthor) && books[i].bookPrice == bookPrice) { index = i; break; } } if(index < 0) { System.out.println("該圖書未在庫"); return; } for(int i = 0;i < booksNumber - 1;i++) { if(index <= i) { books[i] = books[i+1]; } } booksNumber --; } /** * 查找書籍 * @param bookName * @param bookAuthor * @param bookPrice */ public void checkBook(String bookName,String bookAuthor,float bookPrice) { System.out.println(""); for(int i = 0 ; i<booksNumber ; i++) { if(books[i].bookName.equals(bookName) && books[i].bookAuthor.equals(bookAuthor) && books[i].bookPrice == bookPrice) { System.out.println("狀態(tài):書籍在庫"); return; } } System.out.println("狀態(tài):書籍未在庫"); System.out.println(""); } /** * 更改書籍信息 * @param bookName * @param bookAuthor * @param bookPrice */ public void changeBook(String bookName, String bookAuthor,float bookPrice,String newBookName, String newBookAuthor,float newBookPrice) { for(int i = 0 ;i<booksNumber;i++) { if(books[i].bookName.equals(bookName) && books[i].bookAuthor.equals(bookAuthor) && books[i].bookPrice == bookPrice) { books[i].setName(newBookName); books[i].setAuthor(newBookAuthor); books[i].setPrice(newBookPrice); break; } } System.out.println("更改書籍完成"); } /** * 查看當(dāng)前圖書館書籍信息 */ public void booksInfo() { System.out.println("-----------------------------圖書館書籍信息-----------------------------"); for(int i = 0 ; i<booksNumber;i++) { System.out.println("在庫書籍 "+(i+1)+" : "); System.out.println("書籍名稱:"+books[i].bookName); System.out.println("書籍作者:"+books[i].bookAuthor); System.out.println("書籍價(jià)格:"+books[i].bookPrice); } System.out.println("在庫書籍總數(shù):"+booksNumber+" 剩余可借閱書籍總數(shù):"+(MAX_NUMBER_OF_BOOKS-booksNumber)); System.out.println("--------------------------------------------------------------------------"); } }
PlatForm類:
// package com.wu.demo; import java.util.Scanner; /** * @date 2020-10-30 14:06:34 * @author 一夜星塵 * @version 1.8.0 */ // 進(jìn)一步封裝 public class PlatForm { private static final int MAX_NUMBER_OF_BORROWERS = 30; // 平臺(tái)最多可注冊(cè)30名借閱者 private Borrower[] borrowers = new Borrower[MAX_NUMBER_OF_BORROWERS]; private static int numberBorrowers = 0; private Library library = Library.getLibrary(); public PlatForm() { Scanner input = new Scanner(System.in); // 初始化Borrower成員 System.out.println("-----------------------------初始化借閱人-----------------------------"); System.out.println("按任意鍵繼續(xù)(按Q或q退出):"); String exit = input.nextLine(); System.out.println("以下輸入可借閱人員信息"); while(!exit.equalsIgnoreCase("q")) { System.out.print("姓名 學(xué)號(hào):"); String tempName = input.next(); long tempNumber = input.nextLong(); this.borrowers[numberBorrowers++] = new Borrower(tempName,tempNumber); // 回車輸入舍棄 input.nextLine(); System.out.println("按任意鍵繼續(xù)(按Q或q退出):"); exit = input.nextLine(); if(numberBorrowers >= MAX_NUMBER_OF_BORROWERS){ System.out.println("已達(dá)到最大注冊(cè)量"); break; } } // 初始化圖書館信息 System.out.println("---------------------------初始化圖書館圖書信息------------------------"); System.out.println("按任意鍵繼續(xù)(按Q或q退出):"); exit = input.nextLine(); System.out.println("請(qǐng)輸入原始書籍信息:"); while(!exit.equalsIgnoreCase("q")) { System.out.print("書籍名稱 作者 價(jià)格:"); String tempName = input.next(); String tempAuthor = input.next(); float tempPrice = input.nextFloat(); library.addBook(tempName,tempAuthor,tempPrice); // 回車輸入舍棄 input.nextLine(); System.out.println("按任意鍵繼續(xù)(按Q或q退出):"); exit = input.nextLine(); } System.out.println("-----------------------------------------------------------------------"); input.close(); } /** * 平臺(tái)管理:增添用戶 * @param borrowerName * @param borrowerNumber */ public void addClient(String borrowerName,long borrowerNumber) { if(numberBorrowers >= MAX_NUMBER_OF_BORROWERS) { System.out.println("用戶容量已達(dá)最大值"); return; } this.borrowers[numberBorrowers++] = new Borrower(borrowerName,borrowerNumber); System.out.println("增添用戶操作成功"); } /** * 平臺(tái)管理:移除用戶 * @param borrowerName * @param borrowerNumber */ public void removeClient(String borrowerName,long borrowerNumber) { int index = -1; for(int i = 0 ; i<numberBorrowers; i++) { if(borrowers[i].borrowerName.equals(borrowerName) && borrowers[i].borrowerNumber == borrowerNumber) { index = i; break; } } if(index<0) { System.out.println("未找到用戶"); return; } for(int i = 0 ; i < numberBorrowers-1;i++) { if(index <= i) { borrowers[i] = borrowers[i+1]; } } numberBorrowers--; System.out.println("移除用戶成功"); } /** * 相應(yīng)借閱人的信息 * @param borrowerName * @param borrowerNumber */ public void platformBorrowerInfo(String borrowerName,long borrowerNumber) { for(int i = 0 ; i<numberBorrowers;i++) { if(borrowers[i].borrowerName.equals(borrowerName) && borrowers[i].borrowerNumber == borrowerNumber) { borrowers[i].borrowerInfo(); return; } } System.out.println("該用戶不存在"); } /** * 相應(yīng)借閱人借閱書籍 * @param borrowerName * @param borrowerNumber * @param bookName * @param bookAuthor * @param bookPrice */ public void platformBorrowBook(String borrowerName,long borrowerNumber,String bookName,String bookAuthor, float bookPrice) { for(int i = 0 ; i<borrowers.length;i++) { if(borrowers[i].borrowerName.equals(borrowerName) && borrowers[i].borrowerNumber == borrowerNumber) { borrowers[i].borrowBook(bookName,bookAuthor, bookPrice, this.library); break; } } } /** * 相應(yīng)借閱人歸還書籍 * @param borrowerName * @param borrowerNumber * @param bookName * @param bookAuthor * @param bookPrice */ public void platformRrturnBook(String borrowerName,long borrowerNumber,String bookName,String bookAuthor, float bookPrice){ for(int i = 0 ; i<borrowers.length;i++) { if(borrowers[i].borrowerName.equals(borrowerName) && borrowers[i].borrowerNumber == borrowerNumber) { borrowers[i].returnBook(bookName,bookAuthor, bookPrice, library); break; } } } /** * 輸出圖書館信息 */ public void platformLibraryInfo() { library.booksInfo(); } /** * 對(duì)圖書館增添書籍 * @param bookName * @param bookAuthor * @param bookPrice */ public void platformLibraryAddBook(String bookName,String bookAuthor,float bookPrice) { library.addBook(bookName,bookAuthor,bookPrice); } /** * 對(duì)圖書館移除書籍 * @param bookName * @param bookAuthor * @param bookPrice */ public void platformLibraryRemoveBook(String bookName,String bookAuthor,float bookPrice) { library.removeBook(bookName,bookAuthor,bookPrice); } /** * 對(duì)圖書館檢索書籍 * @param bookName * @param bookAuthor * @param bookPrice */ public void platformLibraryCheckBook(String bookName,String bookAuthor,float bookPrice) { library.checkBook(bookName, bookAuthor, bookPrice); } /** * 對(duì)圖書館書籍更改 * @param bookName * @param bookAuthor * @param bookPrice * @param newBookName * @param newBookAuthor * @param newBookPrice */ public void platformLibraryChangeBook(String bookName,String bookAuthor,float bookPrice, String newBookName,String newBookAuthor,float newBookPrice) { library.changeBook(bookName, bookAuthor, bookPrice,newBookName,newBookAuthor,newBookPrice); } }
testDemo(測(cè)試):
// package com.wu.demo; /** * @date 2020-10-30 10:51:21 * @author 一夜星塵 * @version 1.8.0 */ public class testDemo { public static void main(String[] args) { PlatForm platform = new PlatForm(); // 以下為平臺(tái)管理權(quán)限的測(cè)試 platform.addClient("張三", 100000L); platform.addClient("李四", 100001L); platform.addClient("王五", 100002L); platform.addClient("趙六", 100003L); platform.platformBorrowerInfo("張三",100000L); platform.platformBorrowerInfo("李四",100000L); // 此時(shí)應(yīng)該為不存在 platform.platformBorrowerInfo("王五",100002L); platform.platformBorrowerInfo("趙六",100003L); platform.removeClient("王五", 100002L); platform.platformBorrowerInfo("王五",100002L); // 此時(shí)王五不是用戶 //以下為圖書館和借閱人的測(cè)試 platform.platformLibraryAddBook("數(shù)據(jù)結(jié)構(gòu)","匿名1",100.0F); platform.platformLibraryAddBook("網(wǎng)絡(luò)基礎(chǔ)","匿名2",90.0F); platform.platformLibraryAddBook("算法","匿名3",110.0F); platform.platformLibraryInfo(); // 當(dāng)前圖書館里只有3本書 platform.platformLibraryAddBook("java基礎(chǔ)","匿名4",105.0F); platform.platformLibraryAddBook("深度學(xué)習(xí)","匿名5",129.0F); platform.platformLibraryAddBook("Linux基礎(chǔ)","匿名6",104.0F); platform.platformLibraryAddBook("matlab基礎(chǔ)","匿名7",123.0F); platform.platformLibraryAddBook("visual C++基礎(chǔ)","匿名8",95.0F); platform.platformLibraryAddBook("HTML CSS JS","匿名9",99.0F); platform.platformLibraryAddBook("C++基礎(chǔ)","匿名10",119.0F); platform.platformLibraryAddBook("python基礎(chǔ)","匿名11",108.0F); platform.platformLibraryAddBook("數(shù)據(jù)庫基礎(chǔ)","匿名12",120.0F); platform.platformLibraryAddBook("操作系統(tǒng)基礎(chǔ)","匿名13",106.0F); platform.platformLibraryInfo(); // 當(dāng)前圖書館里有13本書 platform.platformLibraryRemoveBook("visual C++基礎(chǔ)","匿名8",95.0F); platform.platformLibraryInfo(); // 當(dāng)前圖書館里有12本書 platform.platformLibraryRemoveBook("Linux基礎(chǔ)" ,"匿名6", 104.0F); // 檢索圖書 Linux基礎(chǔ) 狀態(tài) platform.platformLibraryChangeBook("python基礎(chǔ)", "匿名11", 108.0F,"keras基礎(chǔ)","匿名11",110.0F); // 變更圖書館書籍名稱 python基礎(chǔ) 為 keras基礎(chǔ) platform.platformBorrowBook("張三", 100000L, "java基礎(chǔ)", "匿名4", 105.0F); // 用戶 張三 借了書籍 java基礎(chǔ) platform.platformBorrowBook("張三", 100000L, "算法", "匿名3", 110.0F); // 用戶 張三 又借了書籍 算法 platform.platformBorrowBook("張三", 100000L, "C++基礎(chǔ)", "匿名10", 119.0F); // 用戶 張三 又借了書籍 C++基礎(chǔ) platform.platformBorrowBook("張三", 100000L, "深度學(xué)習(xí)", "匿名5", 129.0F); // 用戶 張三 又借了書籍 深度學(xué)習(xí) platform.platformBorrowBook("趙六", 100003L, "網(wǎng)絡(luò)基礎(chǔ)", "匿名2", 84.0F); // 用戶 趙六 借了書籍 網(wǎng)絡(luò)基礎(chǔ) platform.platformBorrowBook("李四", 100001L, "HTML CSS JS", "匿名9", 119.0F); // 用戶 李四 借了書籍 HTML CSS JS platform.platformBorrowerInfo("張三", 100000L); // 查看用戶 張三 借閱情況 當(dāng)前用戶 張三 有四本書 platform.platformBorrowerInfo("趙六", 100003L); // 查看用戶 趙六 借閱情況 當(dāng)前用戶 趙六 有一本書 platform.platformBorrowerInfo("李四", 100001L); // 查看用戶 李四 借閱情況 當(dāng)前用戶 李四 有一本書 platform.platformRrturnBook("張三", 100000L, "算法", "匿名3", 110.0F); // 用戶 張三 還了書籍 算法 platform.platformRrturnBook("張三", 100000L, "深度學(xué)習(xí)", "匿名5", 129.0F); // 用戶 張三 又還了書籍 深度學(xué)習(xí) platform.platformBorrowerInfo("張三", 100000L); // 查看用戶 張三 借閱情況 當(dāng)前用戶 張三 只有兩本書 platform.platformLibraryRemoveBook("java基礎(chǔ)" ,"匿名4", 105.0F); // 檢索圖書 java基礎(chǔ) 狀態(tài) 當(dāng)前狀態(tài)應(yīng)該為 未在庫 } }
測(cè)試結(jié)果顯示:
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。