您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用Java實現簡易版的圖書管理系統”,在日常操作中,相信很多人在怎么使用Java實現簡易版的圖書管理系統問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Java實現簡易版的圖書管理系統”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
我們先分析一下,一個圖書管理系統應該具備的功能,進行一個簡單的框架搭建。
(1)登錄
正常情況下圖書管理系統只有兩種人會使用,一種是學生,一種是圖書管理員
這個就是我學校的網上圖書館的登錄界面,學生查找書籍通過網絡就可以查閱
而管理員的登錄界面,我這里看不到,但肯定會有后臺的管理人員登錄的窗口,進行系統維護
所以根據使用人員不同,就要在登錄時進行選擇,是普通用戶還是管理員。
(2)分析功能
簡單的圖書管理系統應該具備的功能,
(1)創建一個Book的類,來顯示書的屬性
對一個圖書進行查找,應該一本書應該具有這些屬性
private String name;//書名 private String author;//作者 private int price;//價格 private String type;//類型 private boolean isBorrowed;//借閱情況
注意這里給書提供的控制符都是私有的,在類外是不能訪問的
所以要再提供get()和set()對屬性進行設置和獲取
public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getType() { return type; } public void setType(String type) { this.type = type; } public boolean isBorrowed() { return isBorrowed; } public void setBorrowed(boolean borrowed) { isBorrowed = borrowed; }
再給書的屬性提供一個構造方法,
這里注意,在構造方法中不給書加isBorrowed,isBorrowed是boolean類型的,默認 false,也就是未被借出去。如果條件一本書,它默認就是沒有被借出去
public Book(String name, String author, int price, String type) { this.name = name; this.author = author; this.price = price; this.type = type; }
最后,再提供一個toString方法來顯示書的信息
@Override public String toString() { return "BookList{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' + ", isBorrowed=" + isBorrowed + '}'; }
(2) 創建一個BookList的類,這個就是書庫
因為是書庫,要存放書,所以設置一個數組來存放書籍
//最多存放20本書 private Book[] books = new Book[20];
再提供一個成員變量,來實時記錄當前books數組中書的個數
private int usedSize;//實時記錄 當前Books這個數組中有多少本書
下面就可以提供一個構造方法,給里面先存上幾本書
public BookList() { books[0] = new Book("西游記","吳承恩",25,"小說"); books[1] = new Book("紅樓夢","曹雪芹",26,"小說"); books[2] = new Book("三國演義","羅貫中",27,"小說"); books[3] = new Book("水滸傳","施耐庵",28,"小說"); usedSize = 4;//當前有4本書 }
提供一個方法,如果給一個合法的數組下標,就能找到這本書
public Book getBook(int pos) { return books[pos]; }
提供一個方法,給一個合法的數組下標,和一本書,就能存放這本書到書庫中
public void setBooks(int pos,Book book) { books[pos] = book; }
提供一個方法,給一個參數,來實時修改當前書架上的書的個數
public void setUsedSize(int size) { usedSize = size; }
(1)創建一個IOperation的接口,實現對數組的操作引用
因為不論是管理員或是普通用戶,對書的操作都是在BookList類的數組books中進行操作,
所以可以提供一個IOperation的接口,實現對數組的操作,
public interface IOperation { /* * 對書的所有操作都是通過BookList類里面的books數組進行操作 * 可以將這個寫成一個接口 **/ void work(BookList bookList); }
(2)創建各種類,來實現對書的所有操作
比如說,普通用戶和管理員都要對書進行顯示操作,這個顯示是一個效果,
所以只需寫一個類,普通用戶和管理員就都可以調用。
合起來,創建這些類就可以了,
然后就可以對這些類引用接口了,再重寫一下
比如新增圖書
public class AddOperation implements IOperation { @Override public void work(BookList bookList) { System.out.println("新增圖書!"); } }
也就是對普通用戶和管理員進行處理
(1)創建一個user的包,在包中創建一個類
這里只創建一個類,是因為對于普通用戶和管理員來說,他們兩個都是用戶
所以創建一個成員變量,來表示用戶
//寫protected是后面要繼承 protected String name;//用戶名
下面提供一個構造方法對其初始化
//提供一個構造方法,用來初始化當前對象name屬性 public User(String name) { this.name = name; }
(2)在user包中再創建兩個類
子類NormalUser繼承父類User,提供一個構造方法來顯示幫助父類進行構造
public class NormalUser extends User{ public NormalUser(String name) { super(name); } }
子類AdminUser繼承父類User和前面一樣
下來就是打印菜單了,根據兩個用戶所需功能進行打印菜單
先看AdminUser管理員的
public int menu() { System.out.println("hello " + this.name + "歡迎進入圖書管理系統!"); System.out.println("1.查找圖書!"); System.out.println("2.新增圖書!"); System.out.println("3.刪除圖書!"); System.out.println("4.顯示圖書!"); System.out.println("0.退出系統!"); System.out.println("請輸入你的操作:"); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); return choice; //因為這個是個菜單,所以要把這個輸入的值傳出去,才能使用 }
再看NormalUser普通用戶的
System.out.println("hello " + this.name + "歡迎進入圖書管理系統!"); System.out.println("1.查找圖書!"); System.out.println("2.借閱圖書!"); System.out.println("3.歸還圖書!"); System.out.println("0.退出系統!"); System.out.println("請輸入你的操作:"); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); return choice; //因為這個是個菜單,所以要把這個輸入的值傳出去,才能使用
(3)單獨創建一個Main的類,將前面所有整合起來
菜單用戶都有了,下面就是要把這些都整合起來,
先準備圖書
BookList bookList = new BookList();//準備圖書
結下來就是登錄了,
先寫一個判斷你是普通用戶還是管理員的方法
public static User login() { System.out.println("請輸入你的姓名:"); Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); System.out.println("請輸入你的身份:1:-》管理員.0:-》普通用戶"); int choice = scanner.nextInt(); if (choice == 1) { return new AdminUser(name); }else { return new NormalUser(name); } }
注意觀察這段代碼,返回類型是User,這是因為不論if中返回是AdminUser還是NormalUser,User作為父類都可以接收,這個過程就發生了向上轉型
然后再在main方法中引用這個login()方法,就可以實現選擇登錄了
//登錄-》user這個引用 引用哪個對象看前面if User user = login();
選擇完你是哪種用戶后,就打印對應功能菜單
但是注意,剛剛把菜單寫在了對應子類中去了
如果現在要在父類中訪問,是訪問不了的,所以就要在父類中也引用出菜單
public abstract class User { //寫protected是后面要繼承 protected String name;//用戶名 //提供一個構造方法,用來初始化當前對象name屬性 public User(String name) { this.name = name; } public abstract int menu(); }
看代碼中,只需將父類寫成抽象類,然后在抽象類中,引出抽象方法的菜單,
就可以在Main類中通過父類訪問到菜單,這就實現了動態綁定
public static void main(String[] args) { //開始整合 BookList bookList = new BookList();//準備圖書 //登錄-》user這個引用 引用哪個對象看前面if User user = login(); user.menu();//動態綁定 //要想訪問子類中的菜單,那就要將父類寫成抽象類, //然后子類重寫父類的方法,才可以訪問菜單 } }
然后此時代碼就可以運行了
先在User中寫一個方法,這個方法的作用是
通過某個用戶,訪問這個用戶對應方法功能的數組下標,然后通過調用work方法,來實現功能
public void doOperation(int choice, BookList bookList) { this.iOperations[choice].work(bookList); }
然后在mian中,通過選擇用戶引用這個方法
public static void main(String[] args) { //開始整合 BookList bookList = new BookList();//準備圖書 //登錄-》user這個引用 引用哪個對象看前面if User user = login(); int choice = user.menu();//動態綁定 user.doOperation(choice,bookList); }
細節可以看這個圖片
下面來看一下具體細節分析
(1)mian函數先調用
(2)現在user引用,有可能是兩個對象
(3)
當引用doOperation時,根據菜單選擇來訪問數組元素
(4)具體選擇哪個用戶根據,前面login()中輸入的選擇對象
(5)根據前面選擇需要的功能,調用work方法
比如這個
現在已經整合完成了,就差具體操作功能實現了,先運行代碼試試
代碼成功運行起來了,但是就用了一個功能就結束了,
所以我們可以加一個循環,來使用多個功能
public static void main(String[] args) { //開始整合 BookList bookList = new BookList();//準備圖書 //登錄-》user這個引用 引用哪個對象看前面if User user = login(); while(true){ int choice = user.menu();//動態綁定 user.doOperation(choice,bookList); } }
(1)新增圖書 AppOperation類
新增一本圖書我們需要考慮輸入這些
不用考慮isBorrowed 因為默認狀態是未被借出的
將這些屬性進行輸入
Scanner scanner = new Scanner(System.in); System.out.println("請輸入圖書的名字:"); String name = scanner.nextLine(); System.out.println("請輸入圖書的作者:"); String author = scanner.nextLine(); System.out.println("請輸入圖書的價格:"); int price = scanner.nextInt(); System.out.println("請輸入圖書的類型:"); String type = scanner.nextLine();
然后將這些屬性存放到new Book中
Book book = new Book(name,author,price,type);
獲取當前下標,然后賦給currentSize,將前面輸入的那本書放到數組下標為currentSize中,
然后給 currentSize加1
int currentSize = bookList.getUsedSize(); bookList.setBooks(currentSize,book); bookList.getUsedSize(currentSize+1);
運行一下,試試看
新增圖書 AppOperation類的所有代碼
public class AddOperation implements IOperation { @Override public void work(BookList bookList) { System.out.println("新增圖書!"); Scanner scanner = new Scanner(System.in); System.out.println("請輸入圖書的名字:"); String name = scanner.nextLine(); System.out.println("請輸入圖書的作者:"); String author = scanner.nextLine(); System.out.println("請輸入圖書的類型:"); String type = scanner.nextLine(); System.out.println("請輸入圖書的價格:"); int price = scanner.nextInt(); Book book = new Book(name,author,price,type); int currentSize = bookList.getUsedSize(); bookList.setBooks(currentSize,book); bookList.getUsedSize(currentSize+1); System.out.println("新增書籍成功!"); } }
(2)借閱圖書 orrowOperation類
先輸入要借閱圖書的名字
Scanner scanner = new Scanner(System.in); System.out.println("請輸入借閱圖書的名字:"); String name = scanner.nextLine();
通過for循環遍歷一遍,然后將遍歷的每一本書賦給變量 book ,
再通過equals,來判斷book和輸入的書的名字是否相同,
如果相同就通過setBorrowed修改此時借閱狀態,顯示借閱成功
如果不同就顯示沒有這本書
int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ book.setBorrowed(true); System.out.println("借閱成功!"); return; } } System.out.println("沒有這本書!");
運行一下,試試看
借閱圖書 orrowOperation類的所有代碼
public class BorrowOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("借閱圖書!"); Scanner scanner = new Scanner(System.in); System.out.println("請輸入借閱圖書的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ book.setBorrowed(true); System.out.println("借閱成功!"); return; } } System.out.println("沒有這本書!"); } }
(3)刪除圖書 DelOperation類
輸入刪除圖書的名字
Scanner scanner = new Scanner(System.in); System.out.println("請輸入刪除圖書的名字:"); String name = scanner.nextLine();
找到圖書,然后刪除
int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ for (int j = i; j < currentSize; j++) { bookList.getBook(j); } bookList.getUsedSize(currentSize-1);//不要忘記更新圖書種類 bookList.getUsedSize(currentSize-1); System.out.println("刪除成功!"); return; } } System.out.println("沒有找到要刪除的圖書!");
運行程序,試試看
刪除圖書 DelOperation類的全部代碼
public class DelOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("刪除圖書!"); Scanner scanner = new Scanner(System.in); System.out.println("請輸入刪除圖書的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ for (int j = i; j < currentSize; j++) { bookList.getBook(j); } bookList.getUsedSize(currentSize-1);//不要忘記更新圖書種類 bookList.getUsedSize(currentSize-1); System.out.println("刪除成功!"); return; } } System.out.println("沒有找到要刪除的圖書!"); } }
(4)顯示圖書 DisplayOperation類
將當前有幾本書記錄下來
int currentSize = bookList.getUsedSize();
然后for循環全部遍歷一遍就可以了 ,直接看代碼吧
public class DisplayOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("顯示圖書!"); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { System.out.println(bookList.getBook(i)); } } }
運行結果就是這樣
(5)退出系統 ExitOperation類
直接調用狀態碼exit來退出系統
public class ExitOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("退出系統!"); System.exit(0); } }
(6)查找圖書 FindOperation類
要查找圖書,肯定是先要輸入你需要查找書的名字
Scanner scanner = new Scanner(System.in); System.out.println("請輸入圖書的名字:"); String name = scanner.nextLine();
通過for循環遍歷一遍,然后將遍歷的每一本書賦給變量 book ,
再通過equals,來判斷book和輸入的書的名字是否相同,
如果相同就打印,并顯示找到了,如果不相同,就直接顯示沒有找到,
但這里有一個問題在前面給每一本書默認都是false,現在打印還是這樣,所以要修改一下
在Book類中,修改toString,給借閱狀態一個三目運算符,來判斷是否借出了
@Override public String toString() { return "Book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' + ((isBorrowed == true)?" 已經借出":" 未借出")+ '}'; }
運行一下,試試
查找圖書 FindOperation類的全部代碼就是
public class FindOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("查找圖書!"); Scanner scanner = new Scanner(System.in); System.out.println("請輸入圖書的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ System.out.println("這本書找到了!"); System.out.println(book); return; } } System.out.println("這本書沒有找到!"); } }
(7)歸還圖書 ReturnOperation類
先輸入要歸還圖書的名字
Scanner scanner = new Scanner(System.in); System.out.println("請輸入歸還圖書的名字:"); String name = scanner.nextLine();
和前面借閱基本一樣,修改一下setBorrowed的狀態就可以了
int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ book.setBorrowed(false); System.out.println("歸還成功!"); return; } }
運行代碼,試試看
歸還圖書 ReturnOperation類的全部代碼
public class ReturnOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("歸還圖書!"); Scanner scanner = new Scanner(System.in); System.out.println("請輸入歸還圖書的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ book.setBorrowed(false); System.out.println("歸還成功!"); return; } } } }
到此,關于“怎么使用Java實現簡易版的圖書管理系統”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。