java图书馆管理系统_六天写出来的基于Swing的图书管理系统你不来吐槽一下?
前段時(shí)間學(xué)習(xí)完了MySQL和JDBC,想著自己做個(gè)東西實(shí)戰(zhàn)一下,于是寫(xiě)了一個(gè)爛大街的圖書(shū)管理系統(tǒng)。。。但好歹是自己一個(gè)人日夜兼程,硬著頭皮做出來(lái)的還像樣的東西,總結(jié)一手吧。看的人歡迎吐槽。我會(huì)從以下幾個(gè)方面進(jìn)行總結(jié)。(總結(jié)的是我目前認(rèn)為的以及怎么做的) + 這個(gè)項(xiàng)目設(shè)計(jì)步驟是什么 + 這個(gè)項(xiàng)目用到的知識(shí)有什么 + 這個(gè)項(xiàng)目遇到了什么問(wèn)題,怎么解決的。 + 這個(gè)過(guò)程中收獲的知識(shí)點(diǎn)有哪些
@[TOC]
一、這個(gè)項(xiàng)目設(shè)計(jì)步驟是什么
管理信息系統(tǒng)的建立與應(yīng)用可以劃分成總體規(guī)劃、系統(tǒng)開(kāi)發(fā)和系統(tǒng)運(yùn)行三個(gè)階段,其中系統(tǒng)開(kāi)發(fā)階段還可進(jìn)一步分為系統(tǒng)分析、系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)施等工作環(huán)節(jié)。上述各個(gè)階段排列成一個(gè)嚴(yán)格的線性開(kāi)發(fā)序列,在每個(gè)工作階段均產(chǎn)生完整的技術(shù)文檔作為下一階段工作的指導(dǎo)和依據(jù),每一階段都應(yīng)對(duì)文檔進(jìn)行評(píng)審,確信該階段工作已完成并達(dá)到要求后才能進(jìn)入下一階段,同時(shí)在以后的工作中不能輕易改變前面經(jīng)過(guò)評(píng)審的成果。 國(guó)外曾有人對(duì)一些軟件項(xiàng)目開(kāi)發(fā)各階段的工作量進(jìn)行了統(tǒng)計(jì),結(jié)果表明,在開(kāi)發(fā)過(guò)程中各工作階段所占全部工作量的比重分別達(dá)到系統(tǒng)分析:系統(tǒng)設(shè)計(jì):編程:模塊調(diào)試:系統(tǒng)調(diào)試=20%:15%:20%:25%:20%。由此可見(jiàn),程序編寫(xiě)在開(kāi)發(fā)工作中只占很小比例,而調(diào)試工作卻占整個(gè)開(kāi)發(fā)工作量的一半左右在做這個(gè)圖書(shū)管理系統(tǒng)之前,我大概看了幾篇相關(guān)的論文,我的大致的步驟如下:
1、明確開(kāi)發(fā)環(huán)境
MySQL8.0.21、IDEA開(kāi)發(fā)工具、JDK11.0、JDBC、SpringJDBC-Template、DBCP開(kāi)源數(shù)據(jù)連接池 圖形界面使用Swing組件 對(duì)每個(gè)工具有認(rèn)識(shí)、懂得如何使用。(swing不太懂就撲街了 )
2、系統(tǒng)分析步驟
需要考慮:①系統(tǒng)的處理對(duì)象;②系統(tǒng)的功能、具體的業(yè)務(wù);③對(duì)具體的業(yè)務(wù)有流程圖設(shè)計(jì);④將業(yè)務(wù)需求進(jìn)行模塊劃分 處理對(duì)象: + 圖書(shū)信息:書(shū)籍編號(hào),書(shū)名,類型,作者,譯者,出版商,出版時(shí)間,價(jià)格,存儲(chǔ)量。? + ?讀者信息:編號(hào),姓名,性別,最多可借數(shù)量,可借時(shí)間。?? + 借閱信息:讀者編號(hào),書(shū)籍編號(hào),借閱日期,還書(shū)日期,借閱時(shí)間,是否還書(shū)。? + ?管理員信息:編號(hào),姓名,密碼,是否為管理員。?
系統(tǒng)功能、業(yè)務(wù) 從處理對(duì)象的角度去分析 + 系統(tǒng)管理員能夠?qū)τ脩魧?shí)施管理:包括添加、刪除用戶信息,對(duì)用戶密碼進(jìn)行有效管理。 還能夠方便的進(jìn)行圖書(shū)管理:包括設(shè)置圖書(shū)種類和圖書(shū)信息,添加、刪除和修改圖書(shū)信息。? + 讀者用戶在該系統(tǒng)進(jìn)行借書(shū),系統(tǒng)自動(dòng)添加借書(shū)記錄和借書(shū)日期,讀者還書(shū)時(shí)管理員也能在平臺(tái)進(jìn)行還書(shū)操作,修改讀者借書(shū)信息。 + 管理員可以修改用戶信息和自己的信息,還可以對(duì)數(shù)據(jù)庫(kù)的信息進(jìn)行維護(hù)、日志管理等 + 游客和讀者都能方便的對(duì)圖書(shū)進(jìn)行查詢。但只有登陸了才能進(jìn)行借書(shū)操作
流程圖設(shè)計(jì) 我沒(méi)有設(shè)計(jì),按照自己的思路寫(xiě)的。
功能模塊劃分 + 應(yīng)用啟動(dòng)界面模塊 + 用戶注冊(cè)模塊 + 用戶信息登陸模塊 + 用戶借閱信息 + 圖書(shū)館藏資源模塊 + 管理員模塊
具體功能還需要細(xì)分、設(shè)計(jì)實(shí)現(xiàn)
3、數(shù)據(jù)庫(kù)設(shè)計(jì)
大寫(xiě)強(qiáng)調(diào) ; 設(shè)計(jì)數(shù)據(jù)庫(kù)字段用英文 !
我們要設(shè)計(jì)數(shù)據(jù)庫(kù)要考慮 + 表結(jié)構(gòu)的實(shí)現(xiàn)(主鍵、非空、自增、數(shù)據(jù)類型、外鍵約束等) + 每個(gè)表插入和刪除、修改、查詢的時(shí)候需要注意什么 + 觸發(fā)器和事務(wù)是否需要設(shè)計(jì)
附上我的表結(jié)構(gòu):
books表 書(shū)編號(hào)(主鍵)、書(shū)名、價(jià)格、剩余量、出版商、作者、出版日期、類型
user表 字段:id主鍵、用戶名、密碼、是否管理員(這里可以添加權(quán)限,我沒(méi)有設(shè)計(jì),0非管理員1管理員)
reader表 id關(guān)聯(lián)user表的id,名字、可借書(shū)的天數(shù)、可借書(shū)本數(shù)、性別、已借書(shū)數(shù)、人生格言(默認(rèn)值)
borrow表 借書(shū)者的id、所借書(shū)id、借書(shū)日期、是否歸還、截止還書(shū)日期
創(chuàng)建的觸發(fā)器 1、當(dāng)書(shū)的余量為0,讀者想要借書(shū)無(wú)法借 2、當(dāng)讀者成功借書(shū)、則余量-1且borrow表添加對(duì)應(yīng)的借書(shū)記錄 3、當(dāng)讀者還書(shū)時(shí)、則余量+1、且borrow表刪除對(duì)應(yīng)的記錄 4、當(dāng)添加圖書(shū)時(shí),檢查出版日期不能超過(guò)今天
創(chuàng)建的表結(jié)構(gòu)的MySQL語(yǔ)句匯合: 創(chuàng)建book表——>創(chuàng)建user表——>創(chuàng)建reader表——>創(chuàng)建borrow表
1這個(gè)過(guò)程中遇到的錯(cuò)誤: + 1、MySQL不支持在觸發(fā)器使用事務(wù),也就是不允許使用rollback等操作。可以使用拋出異常來(lái)替代 + 2、在MySQL WorkBeach里面添加觸發(fā)器時(shí)需要修改sql語(yǔ)句結(jié)束符,該語(yǔ)句要和創(chuàng)建觸發(fā)器的語(yǔ)句一起,不要單獨(dú)執(zhí)行。都寫(xiě)好了以后點(diǎn)擊執(zhí)行。 + 3、注意數(shù)據(jù)類型,TIMESTAMP和DATE,TIMESTAMP日期包含具體幾點(diǎn),格式比較長(zhǎng)。盡量使用DATE,方便與java里面的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)化。 + 4、注意new和old的使用場(chǎng)景以及針對(duì)的對(duì)象表,inset和update、delete三者的new區(qū)別。 + 5、判斷日期的前后使用對(duì)應(yīng)的函數(shù):mysql 日期加減天數(shù)
MySQL4、DAO三層架構(gòu)模型實(shí)現(xiàn)
我們需要將與數(shù)據(jù)庫(kù)的交互進(jìn)行封裝 在java里面創(chuàng)建表映射對(duì)象,我們對(duì)對(duì)象的操作就可以操作對(duì)應(yīng)的表數(shù)據(jù)了。
一、ORM表映射
如books表的映射
package我們把這些表映射放到統(tǒng)一的包ORM里面。
二、數(shù)據(jù)庫(kù)連接池CP
在Java中開(kāi)源的數(shù)據(jù)庫(kù)連接池有以下幾種 : 1、C3P0:是一個(gè)開(kāi)放源代碼的JDBC連接池,它在lib目錄中與Hibernate [2] 一起發(fā)布,包括了實(shí)現(xiàn)jdbc3和jdbc2擴(kuò)展規(guī)范說(shuō)明的Connection 和Statement 池的DataSources 對(duì)象。 2、Proxool:是一個(gè)Java SQL Driver驅(qū)動(dòng)程序,提供了對(duì)選擇的其它類型的驅(qū)動(dòng)程序的連接池封裝。可以非常簡(jiǎn)單的移植到現(xiàn)存的代碼中,完全可配置,快速、成熟、健壯。可以透明地為現(xiàn)存的JDBC驅(qū)動(dòng)程序增加連接池功能。 3、Jakarta DBCP:DBCP是一個(gè)依賴Jakartacommons-pool對(duì)象池機(jī)制的數(shù)據(jù)庫(kù)連接池。DBCP可以直接的在應(yīng)用程序中使用。 4、DDConnectionBroker:是一個(gè)簡(jiǎn)單、輕量級(jí)的數(shù)據(jù)庫(kù)連接池。 5、DBPool:是一個(gè)高效、易配置的數(shù)據(jù)庫(kù)連接池。它除了支持連接池應(yīng)有的功能之外,還包括了一個(gè)對(duì)象池,使用戶能夠開(kāi)發(fā)一個(gè)滿足自己需求的數(shù)據(jù)庫(kù)連接池。
我們使用是DBCP
利用該數(shù)據(jù)庫(kù)連接池我們創(chuàng)建封裝好的JDBC實(shí)例: 相關(guān)的配置我們寫(xiě)到一個(gè)文件里面:
然后我們創(chuàng)建工具類用于獲取數(shù)據(jù)庫(kù)連接池的datasource
package三、基于ORM表映射,利用數(shù)據(jù)庫(kù)連接池設(shè)計(jì)對(duì)應(yīng)的DAOImpl實(shí)現(xiàn)CRUD
先利用SpringJDBCTemplate返回被封裝的JDBC,類型是帶命名參數(shù)的JDBCTemplate
package創(chuàng)建對(duì)應(yīng)表的DAOImpl,如books的DAOImpl實(shí)現(xiàn)CRUD操作:
package我們把這些表的功能實(shí)現(xiàn)放在同一個(gè)包里面:
四、測(cè)試類,用于測(cè)試每個(gè)類的功能是否完成
package把它放到測(cè)試包里面,當(dāng)需要添加新功能時(shí),就在這里進(jìn)行測(cè)試
5、圖形界面開(kāi)發(fā)
一、啟動(dòng)界面StartUi
二、注冊(cè)界面UserRegister
三、登陸界面LogInGUi
管理員的登陸界面也是這個(gè),但是會(huì)添加額外功能
四、讀者信息界面ReaderInfo
以讀者身份登陸后顯示個(gè)人信息,頭像動(dòng)態(tài)生成,man則是男頭像,woman則是女頭像
五、讀者借書(shū)的信息界面(還書(shū)操作、ReturnBooksGui)
點(diǎn)擊借書(shū)按鈕,如果沒(méi)有借書(shū)記錄則不進(jìn)入還書(shū)界面
點(diǎn)擊借書(shū)按鈕,進(jìn)入館藏資源借書(shū),然后返回:已借書(shū)數(shù)動(dòng)態(tài)更新
點(diǎn)擊還書(shū)按鈕:
輸入id還書(shū)或者全部歸還
六、圖書(shū)館資源一覽界面LibrarySources
必須登陸才能進(jìn)行借書(shū):
七、管理員登陸界面AdminRegister
在登陸界面登陸提示管理員以后,點(diǎn)擊是,會(huì)進(jìn)入管理界面,彈出問(wèn)候語(yǔ)
這里會(huì)有很多操作,功能實(shí)現(xiàn)等。采用了菜單欄和菜單、菜單選項(xiàng)、監(jiān)聽(tīng)對(duì)應(yīng)的菜單,觸發(fā)不同的功能。
一些還沒(méi)寫(xiě)的功能就用:
2、如何創(chuàng)建一個(gè)Map數(shù)組以及其實(shí)例化
Map二、遇到的問(wèn)題
1、如何使用下拉選擇框
jComboBox_sex2、如何給JPanel添加背景圖片
千萬(wàn)不要信哪些人說(shuō)的添加Jlabel,治標(biāo)不治本的。設(shè)置透明毫無(wú)美感。可以自己手寫(xiě)一個(gè)類來(lái)實(shí)現(xiàn),利用了重新繪制的函數(shù)。
package3、如何動(dòng)態(tài)修改JTable的值,同時(shí)檢驗(yàn)數(shù)據(jù)的合格性,不合格不保存、如何動(dòng)態(tài)刪除選擇的行、以及如何刪除一行同時(shí)將對(duì)應(yīng)的操作施加到數(shù)據(jù)庫(kù)。
思路:將數(shù)據(jù)庫(kù)的數(shù)據(jù)讀取出來(lái),然后得到了二維數(shù)據(jù)數(shù)據(jù)bookDate,給表創(chuàng)建單元格編輯器,在編輯器里可以設(shè)置對(duì)值的檢驗(yàn)。然后在監(jiān)聽(tīng)對(duì)應(yīng)的表數(shù)據(jù),將對(duì)應(yīng)的修改值存起來(lái),選擇的行利用主鍵唯一性存起來(lái)。然后利用一個(gè)按鈕來(lái)確認(rèn)刪除.就將存的數(shù)據(jù)提取處理刪除。
表格編輯器
package給表格添加該編輯器
// 創(chuàng)建單元格編輯器,使用文本框作為編輯組件對(duì)表格更新操作進(jìn)行監(jiān)聽(tīng),然后將數(shù)據(jù)保存到bookData,但是未保存到數(shù)據(jù)庫(kù)。在確認(rèn)按鈕上添加監(jiān)控,點(diǎn)擊,則進(jìn)行對(duì)應(yīng)事件的處理。
///表格監(jiān)聽(tīng),編輯表格得到的數(shù)據(jù)將保存到實(shí)際的數(shù)據(jù)庫(kù),保存前會(huì)發(fā)出提示刪除多選的行操作,因?yàn)槟阋瞥艘淮涡?#xff0c;對(duì)應(yīng)的行的索引會(huì)變化,你要像我這么做:
jButton_delete全部刪除;
while表格的排序和過(guò)濾: TableModel沒(méi)有移除行model.removeRow(0);//一行一行的刪除 所以我們要將TableModel定義為DefaultTableModel
TableModel4、菜單欄和菜單、菜單選項(xiàng)的使用
先添加菜單欄,再添加菜單,必須設(shè)置名字才能看見(jiàn)。。。 然后在對(duì)應(yīng)的菜單添加多個(gè)菜單選項(xiàng)或者子菜單
JMenuBar5、父窗體、子窗體、A-B-C-A等的調(diào)用關(guān)系如何處理
利用了傳入?yún)?shù)的辦法,判斷是否null等、或者按照需要將對(duì)應(yīng)的窗體設(shè)置為:
mainJFrame6、將一些類和方法抽取公共類、公共方法、接口,代碼依然冗雜
7、IDEA里面配置MySQL數(shù)據(jù)庫(kù)
8、各種布局管理器
一個(gè)很實(shí)在的講解: 運(yùn)用 BoxLayout 進(jìn)行 Swing 控件布局
8、整體項(xiàng)目架構(gòu)使用maven項(xiàng)目管理工具
三、結(jié)語(yǔ)
項(xiàng)目做了6天,也是自己的第一個(gè)項(xiàng)目,完全獨(dú)立的做,遇到了很多的難題,但是解決了以后現(xiàn)在我想不起啦 。。。總的來(lái)說(shuō)還行。 貼上總代碼行數(shù):
最大的問(wèn)題:怎么樣讓代碼,不那么冗雜!!!DAO三層架構(gòu)設(shè)計(jì)不知道我的到底算不算是
四、源碼
github: https://github.com/linj21a/BooksMangementSystem
結(jié)后語(yǔ) 說(shuō)明文檔什么的就不會(huì)寫(xiě)了。。。。博客匆忙總結(jié)一把了。還有好多東西要學(xué),大家加油!不懂就要問(wèn),我也不懂 。大家開(kāi)始吐槽吧!!!
原文鏈接:
六天寫(xiě)出來(lái)的基于Swing的圖書(shū)管理系統(tǒng)你不來(lái)吐槽一下?_LH is programming hard-CSDN博客?blog.csdn.net總結(jié)
以上是生活随笔為你收集整理的java图书馆管理系统_六天写出来的基于Swing的图书管理系统你不来吐槽一下?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: bool类型返回值_Python语法基础
- 下一篇: 生产者和消费者代码———操作系统_kaf