Java實(shí)現(xiàn)簡易版的【圖書管理系統(tǒng)】
??1.分析圖書管理系統(tǒng)的功能
我們先分析一下,一個(gè)圖書管理系統(tǒng)應(yīng)該具備的功能,進(jìn)行一個(gè)簡單的框架搭建。
??(1)登錄
正常情況下圖書管理系統(tǒng)只有兩種人會(huì)使用,一種是學(xué)生,一種是圖書管理員
這個(gè)就是我學(xué)校的網(wǎng)上圖書館的登錄界面,學(xué)生查找書籍通過網(wǎng)絡(luò)就可以查閱

而管理員的登錄界面,我這里看不到,但肯定會(huì)有后臺(tái)的管理人員登錄的窗口,進(jìn)行系統(tǒng)維護(hù)
所以根據(jù)使用人員不同,就要在登錄時(shí)進(jìn)行選擇,是普通用戶還是管理員。
??(2)分析功能
簡單的圖書管理系統(tǒng)應(yīng)該具備的功能,

?? 2.在IDEA中進(jìn)行功能類的創(chuàng)建

??2.1??創(chuàng)建一個(gè)名為book的包,里面存放書相關(guān)的
??(1)創(chuàng)建一個(gè)Book的類,來顯示書的屬性
對一個(gè)圖書進(jìn)行查找,應(yīng)該一本書應(yīng)該具有這些屬性


??注意這里給書提供的控制符都是私有的,在類外是不能訪問的?
??所以要再提供get()和set()對屬性進(jìn)行設(shè)置和獲取


??再給書的屬性提供一個(gè)構(gòu)造方法,
??這里注意,在構(gòu)造方法中不給書加isBorrowed,isBorrowed是boolean類型的,默認(rèn)? false,也就是未被借出去。如果條件一本書,它默認(rèn)就是沒有被借出去

???最后,再提供一個(gè)toString方法來顯示書的信息

??(2) 創(chuàng)建一個(gè)BookList的類,這個(gè)就是書庫
因?yàn)槭菚鴰?,要存放書,所以設(shè)置一個(gè)數(shù)組來存放書籍

再提供一個(gè)成員變量,來實(shí)時(shí)記錄當(dāng)前books數(shù)組中書的個(gè)數(shù)?

下面就可以提供一個(gè)構(gòu)造方法,給里面先存上幾本書

提供一個(gè)方法,如果給一個(gè)合法的數(shù)組下標(biāo),就能找到這本書?

提供一個(gè)方法,給一個(gè)合法的數(shù)組下標(biāo),和一本書,就能存放這本書到書庫中

提供一個(gè)方法,給一個(gè)參數(shù),來實(shí)時(shí)修改當(dāng)前書架上的書的個(gè)數(shù)

?? 2.2 創(chuàng)建一個(gè)名為Operation的包,里面存放對書的所有操作
??(1)創(chuàng)建一個(gè)IOperation的接口,實(shí)現(xiàn)對數(shù)組的操作引用
因?yàn)椴徽撌枪芾韱T或是普通用戶,對書的操作都是在BookList類的數(shù)組books中進(jìn)行操作,

?所以可以提供一個(gè)IOperation的接口,實(shí)現(xiàn)對數(shù)組的操作,

??(2)創(chuàng)建各種類,來實(shí)現(xiàn)對書的所有操作
比如說,普通用戶和管理員都要對書進(jìn)行顯示操作,這個(gè)顯示是一個(gè)效果,
所以只需寫一個(gè)類,普通用戶和管理員就都可以調(diào)用。
合起來,創(chuàng)建這些類就可以了,
?

然后就可以對這些類引用接口了,再重寫一下
比如新增圖書? ? ?

?? 3.進(jìn)行用戶相關(guān)的處理
也就是對普通用戶和管理員進(jìn)行處理
??(1)創(chuàng)建一個(gè)user的包,在包中創(chuàng)建一個(gè)類

這里只創(chuàng)建一個(gè)類,是因?yàn)閷τ谄胀ㄓ脩艉凸芾韱T來說,他們兩個(gè)都是用戶
所以創(chuàng)建一個(gè)成員變量,來表示用戶

下面提供一個(gè)構(gòu)造方法對其初始化

??(2)在user包中再創(chuàng)建兩個(gè)類

子類NormalUser繼承父類User,提供一個(gè)構(gòu)造方法來顯示幫助父類進(jìn)行構(gòu)造

子類AdminUser繼承父類User和前面一樣
下來就是打印菜單了,根據(jù)兩個(gè)用戶所需功能進(jìn)行打印菜單
先看AdminUser管理員的

再看NormalUser普通用戶的

???(3)單獨(dú)創(chuàng)建一個(gè)Main的類,將前面所有整合起來
菜單用戶都有了,下面就是要把這些都整合起來,
先準(zhǔn)備圖書
?BookList bookList = new BookList();//準(zhǔn)備圖書
結(jié)下來就是登錄了,
先寫一個(gè)判斷你是普通用戶還是管理員的方法

注意觀察這段代碼,返回類型是User,這是因?yàn)椴徽搃f中返回是AdminUser還是NormalUser,User作為父類都可以接收,這個(gè)過程就發(fā)生了向上轉(zhuǎn)型
然后再在main方法中引用這個(gè)login()方法,就可以實(shí)現(xiàn)選擇登錄了

選擇完你是哪種用戶后,就打印對應(yīng)功能菜單
但是注意,剛剛把菜單寫在了對應(yīng)子類中去了
如果現(xiàn)在要在父類中訪問,是訪問不了的,所以就要在父類中也引用出菜單

看代碼中,只需將父類寫成抽象類,然后在抽象類中,引出抽象方法的菜單,
就可以在Main類中通過父類訪問到菜單,這就實(shí)現(xiàn)了動(dòng)態(tài)綁定

然后此時(shí)代碼就可以運(yùn)行了

??4.開始實(shí)現(xiàn)對書所有具體的操作功能
??4.1先實(shí)現(xiàn)可以調(diào)用具體操作的功能方法
先在User中寫一個(gè)方法,這個(gè)方法的作用是
通過某個(gè)用戶,訪問這個(gè)用戶對應(yīng)方法功能的數(shù)組下標(biāo),然后通過調(diào)用work方法,來實(shí)現(xiàn)功能

然后在mian中,通過選擇用戶引用這個(gè)方法

?細(xì)節(jié)可以看這個(gè)圖片

下面來看一下具體細(xì)節(jié)分析



??4.2 測試一下
現(xiàn)在已經(jīng)整合完成了,就差具體操作功能實(shí)現(xiàn)了,先運(yùn)行代碼試試

?代碼成功運(yùn)行起來了,但是就用了一個(gè)功能就結(jié)束了,
? ?所以我們可以加一個(gè)循環(huán),來使用多個(gè)功能

??4.3 實(shí)現(xiàn)單獨(dú)具體的操作的功能
??(1)新增圖書 AppOperation類
新增一本圖書我們需要考慮輸入這些

不用考慮isBorrowed 因?yàn)槟J(rèn)狀態(tài)是未被借出的
將這些屬性進(jìn)行輸入

然后將這些屬性存放到new Book中?
? ? ? ?Book book = new Book(name,author,price,type);
獲取當(dāng)前下標(biāo),然后賦給currentSize,將前面輸入的那本書放到數(shù)組下標(biāo)為currentSize中,
然后給 currentSize加1

?運(yùn)行一下,試試看

