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