JAVA+SQL圖書館管理系統(tǒng)課程設計



畢業(yè)設計(論文)題目: 圖書館管理系統(tǒng)姓 名 學 號 專 業(yè) 計算機科學與技術 指導教師 2目錄摘要 IV前言 V第一章 圖書館管理系統(tǒng)分析 11.1 需求分析 11.2 功能分析 21.3 系統(tǒng)用例圖設計 21.4 繪制系統(tǒng)流程圖 31.5 系統(tǒng)的開發(fā)環(huán)境 4第二章數(shù)據(jù)庫分析與設計 52.1 數(shù)據(jù)庫分析 52.2 數(shù)據(jù)庫概念設計 52.3 數(shù)據(jù)邏輯結(jié)構(gòu)設計 72.4 各表之間的聯(lián)系圖 9第三章系統(tǒng)設計與功能實現(xiàn) 103.1 數(shù)據(jù)庫Dao類的構(gòu)建 103.2 系統(tǒng)登錄模塊 113.3 主窗體模塊 133.4 圖書類別管理模塊 153.5 圖書信息管理模塊 173.6 讀者信息管理模塊 213.7 圖書訂購管理模塊 243.8 圖書借閱管理模塊 273.9 系統(tǒng)維護模塊 30第四章系統(tǒng)測試 354.1 測試項目 354.2 測試用例 35結(jié)束語 37參考文獻 38iii圖書館管理系統(tǒng)摘要圖書館管理系統(tǒng)是采用Java做前臺,后臺數(shù)據(jù)庫則采用的是 SQL Server 2005,本系 統(tǒng)提供6個功能模塊,分別是圖書類別管理模塊、圖書信息管理模塊、讀者信息管理模塊、 新書訂購管理模塊、圖書借閱模塊,以及系統(tǒng)維護模塊。
這 6個模塊里又有許多子模塊,通過這些模塊之間的相互連接與配合,完成操作員發(fā)出的各種指令圖書館管理系統(tǒng)是一個供內(nèi)部人員使用的系統(tǒng)而圖書館的工作人員也分為兩類,一 類是操作人員,主要負責圖書的借閱和歸還的工作;一類是管理員,除了操作人員的所有 功能外,還能夠?qū)斜怼畔?、讀者信息等進行管理論文將全面介紹所設計的圖書館管理系統(tǒng)的系統(tǒng)功能和業(yè)務流程,并對系統(tǒng)進行詳細 的數(shù)據(jù)分析和設計,最終使用Java完成系統(tǒng)開發(fā)關鍵詞:圖書館管理系統(tǒng),SQL Server 2005, Java5刖百隨著社會的發(fā)展,人們對于知識的需求也在不斷地增長書籍作為人們獲取并增長知 識的主要途徑,使得圖書館在人們生活中占有了一定位置但是近幾年來,隨著書量的不 斷增長,造成了書庫空間極度不足,圖書擠壓,管理不善這些都直接影響了讀者對圖書 館藏書的充分利用這時圖書館就特別需要開發(fā)一套圖書館管理系統(tǒng),通過該系統(tǒng)來提高 圖書館的管理效率,從而減少管理方面的工作流和成本一個現(xiàn)代化的圖書館在正常運營中總是面對大量的讀者信息,書籍信息以及兩者相互 作用產(chǎn)生的借書信息,還書信息面對圖書館數(shù)以萬計的圖書,紛繁復雜的讀者信息,頻 繁更替的借還書信息,傳統(tǒng)的直接方法不但管理出現(xiàn)漏洞, 造成損失。
因此有一個智能化、 系統(tǒng)化、信息化的圖書管理系統(tǒng)十分重要的充分利用計算機的功能實現(xiàn)對讀者管理、書 籍管理,借閱管理等自動化控制,將會使圖書館的工作大大減弱方便友好的圖形界面、 簡便的操作、完善的數(shù)據(jù)庫管理將會使得圖書館系統(tǒng)極大限度的應用于現(xiàn)代化圖書管理 中第一章圖書館管理系統(tǒng)分析1.1 需求分析圖書館管理系統(tǒng)是一個高度集成的圖書信息處理系統(tǒng),通過將圖書館的各種功能進行 整合,從而達到顯示檢索信息,提高工作效率,降低管理成本等目的一個典型的圖書館 管理系統(tǒng)應該能夠管理所有的圖書種類,圖書信息以及讀者信息,還需要提供各種圖書信 息的檢索查詢功能該系統(tǒng)還需要能夠?qū)D書的借閱,歸還進行管理,并對讀者的罰款進 行自動計算通過該系統(tǒng)的自動化管理,能夠大大減少圖書館管理人員,還能減少管理人 員的工作任務,從而降低管理開銷和成本一個完整的圖書館管理系統(tǒng)包括前臺和后臺,前臺主要是顯示在計算機屏幕上的顯示 界面,有各種指令按鈕,操作框以及文本框,后臺主要是為前臺的一些操作提供一些必要 的數(shù)據(jù),也就是一個相對于系統(tǒng)比較完整的數(shù)據(jù)庫,操作員以及各類圖書的信息,借書者 的信息等等一個最基本的圖書館管理系統(tǒng)要有如下幾個重要功能:(1)用戶在借書超期的情況下得到來自管理員的提醒。
2)管理員可以方便進行圖書管理,用戶管理,管理員管理圖書管理包括圖書信 息以及圖書分類的添加,修改,刪除用戶管理包括用戶信息的添加,刪除,修改管理 員管理包括管理員信息的添加,刪除,修改等3)用戶和管理員可以修改自己的密碼,修改前需先核實自己的原始密碼4)未注冊用戶(游客)也可以瀏覽所有的圖書信息和分類信息,但是無法借閱5)實現(xiàn)模糊查詢,使用戶得到更多的相關記錄并且考慮使用的方便性,一些經(jīng) 常使用的輸入無須用戶輸入,比如進行圖書查詢時圖書分類只須用戶做選擇就可以6)考慮程序執(zhí)行操作時可能出現(xiàn)的情況,比如刪除圖書分類時該分類下存在圖書, 程序自動跳轉(zhuǎn)該分類圖書查看刪除某個用戶,如果存在借書記錄則不允許刪除,跳轉(zhuǎn)到 該用戶的借書記錄等待管理員確認該用戶所借圖書已經(jīng)全部歸還之后才允許刪除該用戶 信息一個圖書館管理系統(tǒng)要是能實現(xiàn)以上的各種功能,那么這個圖書館管理系統(tǒng)也就算是 比較成功的一個系統(tǒng)了1.2 功能分析根據(jù)以上需求分析,我所設計的圖書館管理系統(tǒng)有 6個功能模塊,分別是圖書類別管 理模塊,圖書信息管理模塊,讀者信息管理模塊,新書訂購管理模塊,圖書借閱模塊以及 系統(tǒng)維護模塊其中各功能模塊的具體說明如下:圖書類別管理模塊:該模塊主要負責管理圖書館的圖書種類信息, 如圖書種類的名稱、 可借天數(shù)、罰款數(shù)目等信息。
圖書信息管理模塊:該模塊主要負責管理圖書館的圖書信息,如圖書編號、圖書名稱、 作者、出版社等信息讀者信息管理模塊:該模塊主要負責管理圖書館的讀者信息,如讀者編號、讀者信息、 證件號碼、最大借書量等信息圖書訂購管理模塊:該模塊主要負責管理圖書館的新書訂購信息、包括新書訂購和驗 收新書兩個子模塊圖書借閱管理模塊:該模塊主要負責圖書館的書籍借閱和歸還信息,包括圖書借閱、 圖書歸還、圖書搜索3個子模塊系統(tǒng)維護模塊:該模塊主要負責圖書館的工作人員信息,包括用戶管理和更改系統(tǒng)口 令兩個子模塊1.3 系統(tǒng)用例圖設計圖書館管理系統(tǒng)是一個內(nèi)部人員使用的系統(tǒng),也就是說不是所有的人都能夠使用它, 只有圖書館的工作人員才能使用而圖書館的工作人員也分為兩類,一類是操作人員,主 要負責圖書的借閱和歸還的工作;一類是管理員,除了操作人員的所有功能外,還能夠?qū)?書籍列表,書籍信息,讀者信息等進行管理下面以管理員為例繪制其所對應的用例圖如 圖1.1所示1.4 繪制系統(tǒng)流程圖本系統(tǒng)首先需要對用戶的身份進行識別,只有合法的用戶才能進入系統(tǒng),否則將無法 進入系統(tǒng)進入系統(tǒng)后,首先打開系統(tǒng)主窗體,在系統(tǒng)首頁的菜單欄或者功能區(qū)可以選擇 各種導航鏈接來進行各種操作。
由于不同權(quán)限的用戶對于系統(tǒng)有不同的功能,下面以功能 最多的管理員為例,其系統(tǒng)流程圖如圖 1.2所示圖1.2系統(tǒng)流程圖圖書類別管理系統(tǒng)維護用戶 管理者息加 讀信添書息改 圖信修書息加 圖信添書別改 圖類修書別加 圖類添1.5 系統(tǒng)的開發(fā)環(huán)境圖書館管理系統(tǒng)的具體開發(fā)環(huán)境要求如下:(1)系統(tǒng)開發(fā)平臺:Eclipse 34(2)數(shù)據(jù)庫管理系統(tǒng)軟件:SQL Server 200s(3)運行平臺:Windows 74) Java開發(fā)包:JDK 5.0以上5)分辨率:800>600以上6) GUI 開發(fā)包:Swing16第二章數(shù)據(jù)庫分析與設計6.1 數(shù)據(jù)庫分析在開發(fā)圖書館管理系統(tǒng)時,考慮到圖書量大,數(shù)據(jù)庫維護大的特點,選用 SQL Server 2005作為數(shù)據(jù)庫管理系統(tǒng)在 SQL Server 2005中新增一個數(shù)據(jù)庫,其數(shù)據(jù)庫名為 db_library數(shù)據(jù)庫中可以包含圖書信息、圖書類別信息、圖書借閱信息、操作員信息、圖 書訂購信息及讀者信息等實體,用來存儲不同的信息6.2 數(shù)據(jù)庫概念設計本系統(tǒng)一共設計規(guī)劃出6個實體,分別是圖書類別信息實體、圖書信息實體、讀者信 息實體、操作員實體、圖書借閱信息實體以及圖書訂購信息實體。
圖書的類別有很多,因此可以建立一個圖書館類別信息表,專門用來保存圖書的類別 信息同時因為每種類別的書籍閱讀時間有所不同,所以需要在類別表中保存該類別可借 天數(shù)信息圖書類別信息實體 E-R圖如圖2.1所示圖2.1圖書類別信息實體 E-R圖對于圖書館來說最重要的就是要管理其下的書籍,所以需要建立一個圖書信息表,用來保存圖書的所有信息圖書信息實體 E-R圖如圖2.2所示圖2.2圖書信息實體 E-R圖要想在圖書館借書首先需要進行登記并交付押金領取讀書卡才能借書所以需要建立一個讀者信息表來保存圖書館的所有讀者的登記信息讀者信息實體 E-R圖如圖2.3所示圖書館里一般有一個以上的系統(tǒng)操作員,需要建立一個操作員信息表,用來保存操作員的身份信息操作員信息實體 E-R圖如圖2.4所示圖書館最大的功能就是能夠借書,這時需要建立一個圖書借閱信息表,用來保存讀者 的借書信息圖書的借閱信息實體 E-R圖如圖2.5所示圖書館除了借書,還需要到出版社或其他代理商訂購新書,這是需要建立一個圖書訂購信息表,用來保存所有的訂購信息圖書訂購信息實體 E-R圖如圖2.6所示圖2.6圖書訂購信息實體 E-R圖6.3 數(shù)據(jù)邏輯結(jié)構(gòu)設計根據(jù)設計好的各實體E-R圖創(chuàng)建數(shù)據(jù)庫的邏輯結(jié)構(gòu),數(shù)據(jù)庫各表的結(jié)構(gòu)如下:(1)圖書類別信息采表用來儲存所有的圖書類別信息,包括圖書類別編號、圖書類別名 稱、可借天數(shù)以及遲還一天的罰款數(shù)目 4個字段。
該表的邏輯結(jié)構(gòu)如表 2.1所示表2.1圖書類別信息表id整數(shù)(int)是圖書類別編號typeName( varchar)否圖書類別名稱days整數(shù)(int)否可借天數(shù)fk遲還一天的罰款數(shù)目(2)圖書信息表用來儲存所有的圖書信息,包括圖書編號、類別編號、圖書名稱、作者、 譯者、出版社、出版日期以及書籍價格 8個字段該表的邏輯結(jié)構(gòu)如表 2.2所示表2.2圖書信息表ISBN文本(varchar)是圖書編號typeId整數(shù)(int)否(外鍵)類別編號bookname( varchar)否圖書名稱writer( varchar)否作者translator( varchar)否譯者publisher( varchar)否出版社date日期時間(datetime)否出版日期pricemoney書籍價格(3)讀者信息表用來儲存所有的讀者信息,包括讀者姓名、性別、年齡、證件號碼、會 員證有效日期、最大借書量、電話號碼、押金、證件類型、職業(yè)、讀者編號以及辦證日期12個字段該表的邏輯結(jié)構(gòu)如表 2.3所示表2.3讀者信息表鍵name文本(varchar)是讀者姓名sex( varchar)否(外鍵)讀者性別age整數(shù)(int)否讀者年齡identityCard( varchar)否證件號碼date日期時間(datetime)否會員證有效日期maxNum整數(shù)(int)否取大怎書里tel( varchar)否電話號碼keepMoney金錢貨幣(money)否押金zj整數(shù)(int)否證件類型zy( varchar)否職業(yè)ISBN( varchar)是讀名編pbztimedatetime否辦證日期(4)操作員信息表用來保存操作員信息,包括操作員編號、用戶名、性別、年齡、證件號碼、工作時間、電話號碼、是否為管理員、密碼 9個字段。
該表的邏輯結(jié)構(gòu)如表 2.4示表2.4操作員信息表字段名鍵描述id整數(shù)(int)是(自動遞增)操作員編號name( varchar)否用戶名sex( varchar)否性別age整數(shù)(int)否年齡identityCard( varchar)否證件號碼workdate日期時間(datetime)否工作時間tel( varchar)否電話號碼admin整數(shù)(int)否是否為管理員passwordvarchar)否密碼(5)圖書借閱信息表用來保存所有圖書的借閱信息,包括借閱編號、書籍編號、操作員編號、讀后編》、.是夠歸還、借書日期以及應還日期 7字段該表的邏輯結(jié)構(gòu)如表 2.5示表2.5圖書借閱信息表字段名數(shù)據(jù)類型是否主鍵描述id整數(shù)(int)是(自動遞增)借閱編號bookISBN( varchar)否(外鍵)書籍編號operatorId整數(shù)(int)否(外鍵)操作員編號readerISBNvarchar讀后編R isbackintborrowDate日期時間(datetime)否借書日期backdatedatetime應還日期(6)圖書訂購信息表用來保存圖書館的所有訂購信息,包括書籍編號、訂購日期、訂購數(shù)量、操作員、是否驗收以及書籍折扣 6個字段。
該表的邏輯結(jié)構(gòu)如表2.6所示表2.6圖書訂購信息表ISBn( varchar)是書籍編號date日期時間(datetime)否訂購日期number整數(shù)(int)否訂購數(shù)量operator( varchar)否操作員checkAndAccep t整數(shù)(int)否是否驗收zk浮點否書籍折扣6.4 各表之間的聯(lián)系圖各表間的聯(lián)系圖如圖2.7所示固 tb_borrow 卜頌有現(xiàn)idbooklSCNoperaiorld neaderTSBN國 tb_operator士廝有列Dname4age國tb_booklnfo園 thqnd.r,ddate rxirriber operator dieckAndAcceptjJ啕f育列) ISBN typeld bookname witer圖2.7各表間聯(lián)系圖國 tb bookType .唯族5現(xiàn) typeName days ft第三章系統(tǒng)設計與功能實現(xiàn)3.1數(shù)據(jù)庫Dao類的構(gòu)建首先定義了一個類Dao,并為該類添加了 4中方法,分別是構(gòu)造方法 Dao、查詢方法executeQuery更新方法executeUpdate以及關閉連接方法 closepublic class Dao {protected static String dbClassName ="com.microsoft.sqlserver.jdbc.SQLServerDriver";//數(shù)據(jù)庫連接驅(qū)動類protected static String dbUrl = "jdbc:sqlserver://localhost:1433;+ "DatabaseName=db_library;";//數(shù)據(jù)庫連接 URLprotected static String dbUser = "sa";protected static String dbPwd = "123";private static Connection conn = null;//數(shù)據(jù)庫用戶名//數(shù)據(jù)庫密碼//數(shù)據(jù)庫連接對象private static String ISBN;private Dao() {//構(gòu)造方法try {if (conn == null) {//如果連接對象為空Class.forName(dbClassName);//加載驅(qū)動類conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);〃獲得連接對}} catch (Exception ee) { ee.printStackTrace();}}private static ResultSet executeQuery(String sql) { 〃查詢方法try {if(conn==null) new Dao(); //如果連接對象為空,則重新調(diào)用構(gòu)造方法return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE).executeQuery(sql);/腴行查詢} catch (SQLException e) {e.printStackTrace();return null; //返回 null 值} finally {}}private static int executeUpdate(String sql) { //更新方法try {if(conn==null) new Dao(); //如果連接對象為空,則重新調(diào)用構(gòu)造方法 return conn.createStatement().executeUpdate(sql)蜿行更新} catch (SQLException e) {e.printStackTrace();return -1;} finally {}}public static void close() {//關閉方法try {conn.close();//關閉連接對象} catch (SQLException e) {e.printStackTrace();}finally{conn = null; //設置連接對象為null值}}3.2系統(tǒng)登錄模塊3.1對于圖書館管理系統(tǒng)而言,不是所有的用戶都是可以使用的,所有需要添加一個登陸 模塊。
通過該模塊來對用戶的合法性進行判斷,只有合法的用戶才能進入到系統(tǒng)整個登 陸模塊的實現(xiàn)非常簡單,相信讀者能夠快速掌握其開發(fā)過程登錄模塊的運行結(jié)果如圖 所示圖3.1系統(tǒng)登錄界面3.2.1 登陸窗體界面設計與實現(xiàn)登陸窗體的界面設計我依然采用的是比較傳統(tǒng)的方法,新建一個類 BookLoginFrame類,用來顯示登錄窗體在該窗體中需要使用到四類控件,分別是 JLabel、JTextFieid、JPasswordField以及JButton其中控件JLabel是用來顯示頂部的圖片以及標簽文本;控件 JTextFieid用來接收用戶名輸入信息;控件 JPasswordField用來接收密碼輸入信息;控件 JButton用來創(chuàng)建登陸和重置按鈕3.2.2 操作員登陸在Dao類中新增一個方法check,通過該方法來檢測用戶信息是否合法該方法接收 兩個參數(shù),分別是操作員用戶名 name,操作員密碼passsward主要方法如下:public static Operater check(String name, String password) {Operater operater=new Operater();操作員信息對象String sql = "select * from tb_operator where name='" + name+ "' and password='" + password + "'and admin=1";ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { operater.setId(rs.getString("id"));operater.setName(rs.getString("name"));operater.setGrade(rs.getString("admin"));operater.setPassword(rs.getString("password"));3.3 主窗體模塊圖書館管理系統(tǒng)的主窗體模式是由三個部分組成的。
第一部分是位于主窗體上組上端 的系統(tǒng)菜單欄,用來實現(xiàn)鏈接系統(tǒng)功能菜單第二部分位于菜單欄下面的工具欄,用來提 供各種常用功能鏈接第三部分位于工具下的系統(tǒng)功能窗口區(qū)域,主要用來顯示各種功能 窗口3.3.1 主窗體界面設計在主窗體中可以顯示其他功能窗體,所以需要在該窗體中加入一個桌面窗體通過將 其他功能窗體加入到該窗體中從而實現(xiàn)多窗體顯同時在主窗口體中,還需要添加一個 main方法,該方法為系統(tǒng)入口的方法,通過執(zhí)行該方法來執(zhí)行系統(tǒng)其主要代碼如下:public class Library extends JFrame {private static final JDesktopPaneDESKTOP_PANE = new JDesktopPane()以面窗體public static void main(String口 args) {try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());/設置系統(tǒng)界面外觀 new BookLoginIFrame();//登錄窗口} catch (Exception ex) {ex.printStackTrace();}}public static void addIFame(JInternalFrame iframe) { // 添力口子窗體的方法 DESKTOP_PANE.add(iframe); //新增子窗體}}下面再來配置主窗體的其他屬性,首先需要設置其大小和位置,然后還要設置其菜單 欄和工具欄,最后需要在桌面窗體中添加一個背景圖片。
其代碼實現(xiàn)如下public Library{ super();setDefaultCloseOperation(//獲得默認的工具箱//獲得屏幕的大小//設置窗體大小WindowConstants.EXIT_ON_CLOSE);////設置關閉按鈕處理事件Toolkit tool = Toolkit.getDefaultToolkit();Dimension screenSize = tool.getScreenSize();setSize(800, 600);setLocation((screenSize.width - getWidth()) / 2,(screenSize.height - getHeight()) / 2); //設置窗體位置setTitle("圖書館管理系統(tǒng)"); //設置窗體標題JMenuBar menuBar = createMenu(); 〃調(diào)用創(chuàng)建菜單欄的方法setJMenuBar(menuBar); 〃設置菜單欄JToolBar toolBar = createToolBar(); // 調(diào)用創(chuàng)建工具欄的方法 getContentPane().add(toolBar, BorderLayout.NORTH);/S 置工具欄 final JLabel label = new JLabel(); //創(chuàng)建一個標簽,用來顯示圖片 label.setBounds(0, 0, 0, 0); //設置窗體的大小和位置label.setIcon(null); // 窗體背景DESKTOP_PANE.addComponentListener(new ComponentAdapter() {public void componentResized(final ComponentEvent e) {Dimension size = e.getComponent().getSize();康得組件大/」、label.setSize(e.getComponent().getSize());改置標簽大小 label.setText("");//設置標簽文本}};DESKTOP_PANE.add(label,new Integer(Integer.MIN_\ALUE));// 將標簽添加到桌面窗體getContentPane().add(DESKTOP_PANE);//1桌面窗體添力口至 U 主窗體中}3.3.2 主窗體菜單欄設計在Library類中定義一個createMenu方法,在該方法中實現(xiàn)菜單欄的設計。
具運行界 面如圖3.2所示圖書措I身一互毛TZ空屋花匐節(jié)布管理圖3.2主窗體界面3.4 圖書類別管理模塊圖書類別管理模塊包含兩個子模塊,分別是圖書類別添加和圖書類別修改其中圖書 類別添加模塊用來錄入新的圖書類別信息,圖書列別修改模塊用來修改已有的圖書列別信 息系統(tǒng)界面如圖3.3所示17圖3.3圖書類別修改界面3.4.1圖書類別添加模塊要添加圖書類別信息,首先要在 Dao中添加一個InsertbookType方法,通過該方法來接受用戶輸入的所有書籍類別信息,然后執(zhí)行插入操作其主要方法如下:public static int InsertBookType(String bookTypeName,String days,double fk){int i=0;try{String sql="insert intotb_bookType(typeName,days,fk)values('"+bookTypeName+"','"+days+"',"+fk+")";i=Dao.executeUpdate(sql);/枚行插入操作}}3.4.2圖書類別修改模塊修改圖書類別信息同保存圖書類別信息非常類似,首先在 Dao中添加一個方法UpdatebookTypa通過該方法來接收圖書修改表單中提交的書籍類別信息。
其代碼如下:public static int UpdatebookType(String id,String typeName,String days,String fk){int i=0;try{String sql="updatetb_bookType set typeName='"+typeName+"',days='"+days+"',fk='"+fk+”' where id='"+id+"'";〃System.out.println(sql);i=Dao.executeUpdate(sql);例行更新操作 }}修改圖書類別信息,是通過單擊修改按鈕執(zhí)行的,上面我們已經(jīng)為修改按鈕注冊了一 個監(jiān)聽器,其對應的監(jiān)聽器類為 ButtonActionLinter下面來實現(xiàn)該監(jiān)聽器類,其實現(xiàn)代碼 如下:class ButtonAddListener implements ActionListener{public void actionPerformed(ActionEvent e){Object selectedItem = bookTypeModel.getSelectedItem();int i=Dao.UpdatebookType(BookTypeId.getText().trim(),selectedItem.toString(), days.getText().trim(),fk.getText().trim());System.out.println(i);if(i==1){//如果返回值為1,則表示修改成功JOptionPane.showMessageDialog(null,修改成功");Object口□ results=getFileStates(Dao.selectBookCategory());model.setDataVector(results,columnNames);table.setModel(model);}} }3.5 圖書信息管理模塊圖書信息管理模塊包含兩個子模塊,分別是圖書信息添加和圖書信息修改。
其中圖書 信息添加模塊用來錄入新的圖書信息,圖書信息修改模塊用來修改已有的圖書信息3.5.1 圖書信息添加界面設計圖書信息添加窗體一共包含三個部分,第一部分是位于窗體最上端的圖片第二部分 是位于中間的主面板,用來提供各種標簽和表單元素第三部分是位于主面板下的按鈕面板,用來提供添加和關閉兩個按鈕具運行界面如圖 3.4所示圖3.4圖書信息添加界面主面板是整個窗體最重要也是最核心的部分,其部分實現(xiàn)代碼如下:public BookAddIFrame() {super();final BorderLayout borderLayout = new BorderLayout();〃倉建邊框布局管理器 getContentPane().setLayout(borderLayout); 〃設置布局setIconifiable(true);//設置窗體可最小化setClosable(true);//設置窗體可關閉setTitle("圖書信息添加)//設置窗體標題setBounds(100, 100, 396, 260);//設置窗體位置和大小final JPanel mainPanel = new JPanel(//創(chuàng)建中心面板 mainPanel.setBorder(new EmptyBorder(5, 10, 5, 10));般置邊框 final GridLayout gridLayout = new GridLayout(0, 4);// 創(chuàng)建表格布局管理器 gridLayout.setVgap(5);//設置組件之間垂直距離gridLayout.setHgap(5);//設置組件之間平行距離mainPanel.setLayout(gridLayout);/股置布局getContentPane().add(mainPanel);將中心面板力口入至 U 窗體final JLabel ISBNLabel = new JLabel(); //創(chuàng)建圖書編號標簽ISBNLabel.setText("圖書編號:");//設置標簽文本mainPanel.add(ISBNLabel);/傣力口至 ij 中心面板ISBN = new JTextField(”請輸入13位書號”,13);//創(chuàng)建書號文本框ISBN.setDocument(new MyDocument(13)); //設置書號文本框最大輸入值為 13ISBN.setColumns(13);//設置文本框長度ISBN.addKeyListener(new ISBNkeyListener());// 注冊監(jiān)聽器ISBN.addFocusListener(new ISBNFocusListener());/姓冊監(jiān)聽器mainPanel.add(ISBN);}3.5.2 檢測書籍編號是否已存在因為不可能存在重復的書籍編號。
為了防止操作員的操作錯誤,所以需要提供一個書 籍編號監(jiān)測系統(tǒng)如果該書籍號已存在,則不能進行添加,否則可以進行添加要檢測書籍編號是否存在,需要在 Dao類中添加一個方法,該方法用來接收輸入的書籍編號,然后查詢該書籍編號對應的書籍記錄,其主要方法如下:public static List selectBookInfo(String ISBN) {// 根據(jù)圖書編號查詢圖書List list=new ArrayList();//保存所有查詢到的書籍信息String sql = "select * from tb_bookInfo where ISBN='"+ISBN+"”';ResultSet rs = Dao.executeQuery(sql);執(zhí)行查詢……/師入數(shù)據(jù),關閉連接}對書籍編號進行檢測,一般是在操作員輸入完書籍編號,并準備輸入其他信息時來完 成這是需要新建一個ISBNFFocusListener監(jiān)聽類,該類繼承了 FocusAdoper類,并實現(xiàn) 其中的focusLost,其實現(xiàn)代碼如下:class ISBNFocusListener extends FocusAdapter {public void focusLost(FocusEvent e){if(!Dao.selectBookInfo(ISBN.getText().trim()).isEmpty()){JOptionPane.showMessageDialog(null,添加書號重復!"); return;}}}3.5.3 圖書信息添加要添加書籍信息,首先要在 Dao中添加一個Insertbook方法,通過該方法來接受用戶 輸入的所有書籍信息,然后執(zhí)行插入操作。
其主要方法如下:public static int Insertbook(String ISBN,String typeId,String bookname,String writer,String translator,String publisher,Date date,Double price){int i=0;try{String sql="insert into tb_bookInfo(ISBN,typeId,bookname,writer,translator,"+ "publisher,date,price)values('"+ISBN+"','"+typeId+"','"+bookname+"',"+"”'+writer+"','"+translator+"','"+publisher+"','"+date+"',"+price+")";i=Dao.executeUpdate(sql);/楨行插入操作 }}3.5.4 圖書修改信息修改圖書信息同保存圖書信息非常類似, 首先在Dao中添加一個方法Updatebook通過該方法來接收圖書修改表單中提交的書籍信息其代碼如下:public static int Updatebook(String ISBN,String typeId,String bookname,String writer,String translator,String publisher,Date date,Double price){int i=0;〃更新記錄數(shù)try{ String sql="update tb_bookInfo set ISBN='"+ISBN+"',typeId='"+typeId+"',bookname='"+bookname+"',writer='"+writer+"',translator='"+translator+”',publisher="'+publisher+”',date='"+date+"',price="+price+" where ISBN='"+ISBN+"”';i=Dao.executeUpdate(sql);例行更新 }}修改圖書信息,是通過單擊修改按鈕執(zhí)行的,上面我們已經(jīng)為修改按鈕注冊了一個監(jiān)聽器,其對應的監(jiān)聽器類為 UpdateBookActionLinter。
下面來實現(xiàn)該監(jiān)聽器類,其實現(xiàn)代碼如下:class UpdateBookActionListener implements ActionListener {public void actionPerformed(final ActionEvent e) {int i=Dao.Updatebook(ISBNs, bookTypes, bookNames, writer translators,publishers,Date.valueOf(pubDates),Double.parseDouble(prices));if(i==1){//如果返回更新記錄數(shù)為1,表示修改成功JOptionPane.showMessageDialog(null,修改成功");Object[][]results=getFileStates(Dao.selectBookInfo());//M 新獲得書籍信息DefaultTableModel model=new DefaultTableModel();〃獲得表格模型 table.setModel(model);//設置表格模型 model.setDataVector(results, columnNames);改置模型數(shù)據(jù)和列名 }}}3.6 讀者信息管理模塊讀者信息管理模塊包含兩個子模塊,分別是讀者信息添加和讀者信息修改與刪除。
其 中讀者信息添加模塊用來錄入新的讀者信息,讀者信息修改與刪除模塊用來修改和刪除已 有的讀者信息其系統(tǒng)運行界面如圖 3.5所示圖3.5讀者信息管理模塊運行界面3.6.1讀者信息添加要添加讀者信息,首先要在 Dao中添加一個InsertReader方法,通過該方法來接受用 戶輸入的所有讀者信息,然后執(zhí)行插入操作其主要方法如下:public static int InsertReader(String name,String sex,String age,String identityCard,Date date,String maxNum,String tel,Double keepMoney,String zj,String zy,Date bztime,String ISBN){int i=0;try{String sql="insert into tb_reader(name,sex,age,identityCard,date,maxNum, tel,keepMoney,zj,zy,bztime,ISBN)values('"+name+"','"+sex+"','"+age+"','"+ identityCard+"','"+date+"','"+maxNum+"','"+tel+"',"+keepMoney+",'"+zj+"' ,'"+zy+"','"+bztime+"','"+ISBN+"')";System.out.println(sql);i=Dao.executeUpdate(sql);例行插入操作}3.6.2讀者信息修改與刪除修改與刪除讀者信息同保存讀者信息非常類似,首先在Dao中添加兩個方法UpdateReader及DelReader。
通過這兩個方法來接收圖讀者修改表單中提交的讀者信息 其主要代碼如下:public static int UpdateReader(String id,String name,String sex,String age,StringidentityCard,Date date,String maxNum,String tel,Double keepMoney,String zj,String zy,Date bztime,String ISBN){ int i=0;try{String sql="update tb_reader setname='"+name+"',sex='"+sex+"', age='"+age+"',identityCard='"+identityCard+"', date='"+date+"',maxNum='"+maxNum+"', tel='"+tel+"',keepMoney="+keepMoney+", zj='"+zj+"',zy='"+zy+"', bztime='"+bztime+"'where ISBN='"+ISBN+"”';i=Dao.executeUpdate(sql);// 執(zhí)行更新}catch(Exception e){e.printStackTrace();}Dao.close();//關閉連接public static int DelReader(String ISBN){int i=0;try{ String sql="delete from tb_reader where ISBN='"+ISBN+"”';//System.out.println(sql);i=Dao.executeUpdate(sql);}catch(Exception e){e.printStackTrace();}Dao.close();//關閉連接}3.7 圖書訂購管理模塊圖書訂購管理模塊包含兩個子模塊,分別是新書訂購和驗收新書。
其中新書訂購模塊用來錄入新的圖書信息,驗收新書模塊用來驗收新書信息其系統(tǒng)運行界面如圖 3.6和圖 3.7所示圖3.6新書訂購管理界面圖3.7圖書驗收界面3.7.1 新書訂購管理要添加新書訂購信息,首先要在Dao中添加一個InsertBookOrder方法,通過該方法來 接受用戶輸入的所有新書訂購信息,然后執(zhí)行插入操作其主要方法如下:public static int InsertBookOrder(String ISBN,Date date,String number,Stringoperator,String checkAndAccept,Double zk){int i=0;try{String sql="insert intotb_order(ISBN,date,number,operator,checkAndAccept,zk)values('"+ISBN+"','"+date+"','"+number+"','"+operator+"',"+checkAndAccept+",'"+zk+"')";i=Dao.executeUpdate(sql);/枚行插入}}3.7.2 圖書驗收添加完圖書訂購信息后,我們還要對圖書進行驗收,首先要在 Dao中添加一個SelectBookOrder方法,通過該方法來查找出所有錄入的新書訂購信息,再添加一個UpdateCheckBookOrder方法,通過該方法來對圖書進行驗收。
其主要方法如下:public static List selectBookOrder(boolean b) {List list=new ArrayList();String sql = "SELECT * FROM tb_order where ISBN='"+ISBN+皿;ResultSet rs = Dao.executeQuery(sql);執(zhí)行查詢try {while (rs.next()) {Order order=new Order();order.setISBN(rs.getString("ISBN"));order.setDate(rs.getDate("date"));order.setNumber(rs.getString("number"));order.setOperator(rs.getString("operator"));order.setZk("zk");order.setCheckAndAccept("checkAndAccept");list.add(order);} catch (Exception e) {e.printStackTrace();Dao.close();//關閉連接 return list;public static int UpdateCheckBookOrder(String ISBN){ int i=0;try{String sql="update tb_order setcheckAndAccept=0 where ISBN='"+ISBN+"”'; i=Dao.executeUpdate(sql);例行更新 }catch(Exception e){e.printStackTrace();Dao.close();//關閉連接 return i;}3.8 圖書借閱管理模塊圖書借閱管理模塊包含三個子模塊,分別是新書借閱、圖書歸還和圖書搜索。
其中圖 書借閱模塊用來錄入讀者信息及所借閱的圖書的信息,圖書歸還模塊用來顯示歸還讀者信 息及所借閱的圖書信息,圖書搜索模塊用來為讀者提供圖書搜索功能其系統(tǒng)運行界面如 圖3.8、3.9和3.10所示圖3.8圖書借閱管理界面圖3.9圖書會還管理界面圖3.10圖書查詢界面3.8.1 圖書借閱當讀者想要對某圖書進行借閱操作時,圖書館管理員必須將讀者信息及所借閱的 圖書信息輸入到數(shù)據(jù)庫,此時,需要在 Dao中添加一個InsertBookBorrow方法,通過該方法錄入讀者信息及所借閱的圖書信息其主要方法如下:public static int InsertBookBorrow(String bookISBN,String readerISBN,String operatorId,Timestamp borrowDate,Timestamp backDate){int i=0;try{String sql="insert into tb_borrow(bookISBN,readerISBN,operatorId, borrowDate,backDate)values C"+bo。