版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
書店管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)——書籍銷售管理模塊學(xué)生姓名:指導(dǎo)老師:摘要本課程設(shè)計(jì)主要解決書店的管理問題,設(shè)計(jì)開發(fā)一個(gè)簡單的書店管理系統(tǒng),實(shí)現(xiàn)分類登陸,書籍管理,倉庫庫存管理,會(huì)員管理以及各種查詢等功能。在課程設(shè)計(jì)中,系統(tǒng)開發(fā)平臺(tái)為Windows7,程序設(shè)計(jì)語言采用Java,數(shù)據(jù)庫采用OracleDatabase11gExpressEdition,程序運(yùn)行平臺(tái)為Windows7。程序通過調(diào)試運(yùn)行,初步實(shí)現(xiàn)了設(shè)計(jì)目標(biāo),并且經(jīng)過適當(dāng)完善后,將可以應(yīng)用在普通書店的管理中,解決實(shí)際問題.關(guān)鍵詞書店管理系統(tǒng);數(shù)據(jù)庫;Java目錄TOC\o"1—2"\u1引言 11。1課題背景 11。2課程設(shè)計(jì)目的 11。3課程設(shè)計(jì)任務(wù) 22系統(tǒng)結(jié)構(gòu)分析 32.1需求分析 32。2功能模塊圖 43系統(tǒng)數(shù)據(jù)庫設(shè)計(jì) 63.1概念結(jié)構(gòu)設(shè)計(jì) 63.2邏輯結(jié)構(gòu)設(shè)計(jì) 73.3數(shù)據(jù)庫表的建立 84系統(tǒng)實(shí)現(xiàn) 94。1數(shù)據(jù)庫的連接 94.2系統(tǒng)功能模塊設(shè)置 105系統(tǒng)測試方案和測試報(bào)告 125.1測試方案 125。2測試過程 126結(jié)束語 17參考文獻(xiàn) 18附錄:部分程序代碼 191引言1。1課題背景隨著科學(xué)技術(shù)的不斷發(fā)展,電子技術(shù)悄無聲息地走進(jìn)了我們生活的各個(gè)角落,無時(shí)無刻的不在影響和改善著我們生活的各個(gè)方面。同時(shí),越來越多的人開始意識(shí)到計(jì)算機(jī)技術(shù)在日常生活中所起到的重大作用.如今,隨著書店規(guī)模的不斷擴(kuò)大,書籍種類和數(shù)量的不斷增加,使得人工管理模式的局限性越發(fā)突出.因此,利用計(jì)算機(jī)技術(shù)來優(yōu)化書店管理具有重大的實(shí)際意義。計(jì)算機(jī)信息管理技術(shù)的應(yīng)用,除了能在相當(dāng)大的程度上代替人工作業(yè),從而減少人員工作量,減輕工作負(fù)擔(dān),減少工作中因人為原因而產(chǎn)生的錯(cuò)誤從而避免不必要的損失外,更重要的是能建立準(zhǔn)確暢通、簡便的信息流通渠道,為工作提供所需要的準(zhǔn)確、及時(shí)的信息以幫助做出正確而及時(shí)的選擇與決定,從而給采用這門技術(shù)的單位帶來了巨大的可見或不可見的利益與效益。1。2課程設(shè)計(jì)目的一個(gè)業(yè)績好的書店每天都會(huì)銷售出大量書籍,使用書店信息管理系統(tǒng)可以大大提高工作效率,減少工作中不必要的失誤。與此同時(shí),通過書店管理系統(tǒng),我們可以知曉書籍的銷售情況,從而進(jìn)一步總結(jié)出哪些書籍最為暢銷,而哪些書籍鮮有人問津,通過對(duì)銷售狀況的總結(jié),我們就能夠知道需要大量購進(jìn)哪些書籍,以便獲得更大的經(jīng)濟(jì)效益。而且,通過書店管理系統(tǒng),我們可以對(duì)一些常來書店購書的客戶實(shí)行適當(dāng)?shù)臅?huì)員優(yōu)惠,以留住一部分客戶群體進(jìn)行長期的合作,這樣書店就能獲取相當(dāng)可觀的經(jīng)濟(jì)效益.本論文旨在論述書店管理系統(tǒng)的設(shè)計(jì)與開發(fā)。通過書店管理系統(tǒng)的設(shè)計(jì),熟練掌握J(rèn)ava、OracleDatabase10gExpressEdition等工具軟件,系統(tǒng)地掌握需求分析、數(shù)據(jù)庫設(shè)計(jì)、編碼實(shí)現(xiàn)、測試等軟件開發(fā)的流程,提高自身分析問題、解決問題的能力。1。3課程設(shè)計(jì)任務(wù)本課程設(shè)計(jì)任務(wù)是通過開發(fā)一個(gè)數(shù)據(jù)庫書店管理系統(tǒng),學(xué)習(xí)數(shù)據(jù)庫系統(tǒng)的設(shè)計(jì)與開發(fā),采用JAVA和OracleDatabase11gExpressEdition等軟件為開發(fā)工具.通過對(duì)計(jì)算機(jī)硬件和軟件解決方案的論證,對(duì)應(yīng)用領(lǐng)域進(jìn)行調(diào)查分析,參考各種資料和進(jìn)行數(shù)據(jù)庫系統(tǒng)開發(fā)實(shí)踐.在指導(dǎo)老師的幫助下,已經(jīng)基本上成功地實(shí)現(xiàn)了設(shè)計(jì)任務(wù)書的要求,使得設(shè)計(jì)的數(shù)據(jù)庫系統(tǒng)能夠?qū)崿F(xiàn)一般數(shù)據(jù)庫的管理.2系統(tǒng)結(jié)構(gòu)分析2。1需求分析書店管理系統(tǒng)是適應(yīng)時(shí)代發(fā)展的需要,提高管理的效率而開發(fā)設(shè)計(jì)的.通過對(duì)信息的收集、存儲(chǔ)、傳遞、統(tǒng)計(jì)、分析、綜合查詢、報(bào)表輸出和信息共享,及時(shí)為書店管理人員提供全面、準(zhǔn)確的各種數(shù)據(jù).實(shí)現(xiàn)了書店管理的簡單化和規(guī)劃化,提高了書店的工作效率,從而使書店能夠以少的投入獲得更好的社會(huì)效益與經(jīng)濟(jì)效益.經(jīng)過綜合分析,確定了書店管理系統(tǒng)的主要包括以下功能:(1).書籍信息管理功能系統(tǒng)設(shè)置包括書籍編號(hào)設(shè)置、書籍名稱設(shè)置、書籍作者設(shè)置、出版社設(shè)置、書籍進(jìn)價(jià)、書籍售價(jià)和書籍?dāng)?shù)量?;拘畔⒐芾砟K可以實(shí)現(xiàn)添加和重置書籍信息功能:。(2)。會(huì)員信息管理功能系統(tǒng)設(shè)置包括會(huì)員編號(hào)設(shè)置、會(huì)員姓名設(shè)置、會(huì)員等級(jí)設(shè)置、會(huì)員折扣設(shè)置和會(huì)員累計(jì)消費(fèi)?;拘畔⒐芾砟K可以實(shí)現(xiàn)查詢和刪除會(huì)員信息功能。(3)。賬單信息管理功能系統(tǒng)設(shè)置包括會(huì)員姓名設(shè)置和當(dāng)前消費(fèi)金額設(shè)置。通過此模塊能基本實(shí)現(xiàn)修改會(huì)員信息功能.2。2功能模塊圖根據(jù)上述的功能,可以設(shè)計(jì)出系統(tǒng)的總體功能模塊,如圖2。1所示。會(huì)員信息管理會(huì)員信息管理書店管理系統(tǒng)賬單信息管理書籍信息管理圖2。1書店管理系統(tǒng)功能模塊示意圖2.“書籍信息管理”功能模塊用于書籍編號(hào)設(shè)置、書籍名稱設(shè)置、書籍作者設(shè)置、出版社設(shè)置、書籍進(jìn)價(jià)、書籍售價(jià)和書籍?dāng)?shù)量,其功能模塊如圖2。2所示。書籍書籍信息管理書籍編號(hào)管理書籍?dāng)?shù)量管理出版社管理書籍進(jìn)價(jià)管理書籍名稱管理書籍作者管理書籍售價(jià)管理圖2。2書籍管理信息設(shè)置“會(huì)員信息管理”功能模塊用于會(huì)員編號(hào)設(shè)置、會(huì)員姓名設(shè)置、會(huì)員等級(jí)設(shè)置、會(huì)員折扣設(shè)置和累計(jì)消費(fèi)設(shè)置,其功能模塊如圖2.3所示。會(huì)員會(huì)員信息設(shè)置會(huì)員編號(hào)管理會(huì)員等級(jí)管理會(huì)員折扣管理會(huì)員姓名管理累計(jì)消費(fèi)管理圖2.3會(huì)員信息管理“賬單信息管理”功能模塊用于會(huì)員姓名設(shè)置和當(dāng)前消費(fèi)金額設(shè)置,其功能模塊如圖2。4所示。會(huì)員姓名管理會(huì)員姓名管理當(dāng)前消費(fèi)金額管理賬單信息管理圖2。4賬單信息管理3系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)3。1概念結(jié)構(gòu)設(shè)計(jì)根據(jù)需求分析抽象出信息結(jié)構(gòu),可得該系統(tǒng)的E—R圖.(1)書籍管理E-R圖,如圖3.1所示。售價(jià)售價(jià)進(jìn)價(jià)出版社作者名稱編號(hào)書籍?dāng)?shù)量圖3。1書籍管理E-R圖(2)會(huì)員管理E—R圖,如圖3。2所示。會(huì)員會(huì)員姓名等級(jí)折扣編號(hào)消費(fèi)圖3.2會(huì)員管理E-R圖(3)賬單管理E-R圖,如圖3.3所示。當(dāng)前消費(fèi)當(dāng)前消費(fèi)賬單會(huì)員姓名圖3.3賬單管理E-R圖3.2邏輯結(jié)構(gòu)設(shè)計(jì)根據(jù)上述的概念結(jié)構(gòu)設(shè)計(jì)出邏輯結(jié)構(gòu),將E-R圖轉(zhuǎn)換為關(guān)系模型。數(shù)據(jù)庫Book包含以下5個(gè)表:書籍信息表book、會(huì)員信息表member、賬單信息表bill。(1)書籍信息表book訂單信息表book用來保存書籍編號(hào)、書籍名稱、書籍作者、書籍出版社、書籍進(jìn)價(jià)、書籍售價(jià)和數(shù)量等信息。表book的結(jié)構(gòu)如表3-1所示。表3-1表book的結(jié)構(gòu)編號(hào)字段名稱數(shù)據(jù)結(jié)構(gòu)說明1Book_idVarchar2(10)記錄書籍編號(hào)2Book_nameVarchar2(20)記錄書籍名稱3Book_authorVarchar2(20)記錄書籍作者4Book_pressVarchar2(20)記錄出版社5Book_sale_priceNumber(10)記錄書籍售價(jià)6Book_purchase_priceNumber(10)記錄書籍進(jìn)價(jià)7Book_amountNumber(10)記錄書籍庫存數(shù)量通過對(duì)上面表的分析,查找等操作,所有模式都符合3NF.前面是通過前臺(tái)來實(shí)現(xiàn)系統(tǒng)安全性的,我們也可以對(duì)數(shù)據(jù)庫進(jìn)行身份驗(yàn)證,可以從服務(wù)器角度建一個(gè)登錄名,使得不同的服務(wù)器角色擁有不同的權(quán)限,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的不同權(quán)限的管理,以此來增強(qiáng)書店管理系統(tǒng)的安全性.3。3數(shù)據(jù)庫表的建立在設(shè)計(jì)數(shù)據(jù)庫表結(jié)構(gòu)之前,首先要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫。本系統(tǒng)使用的數(shù)據(jù)庫為Book??梢栽谄髽I(yè)管理器中創(chuàng)建數(shù)據(jù)庫,也可以在查詢分析器中執(zhí)行以下Transact—SQl語句:創(chuàng)建表BookCREATETABLEBOOK( BOOK_IDNUMBER(10), BOOK_NAMEVARCHAR2(20), BOOK_AUTHORVARCHAR2(20), BOOK_PRESSVARCHAR2(20), BOOK_SALE_PRICENUMBER(10), BOOK_AMOUNTNUMBER(10), BOOK_PURCHASE_PRICENUMBER(10))創(chuàng)建表BookidCREATETABLEBOOKID( BOOK_IDNUMBER(10))創(chuàng)建表memberCREATETABLEMEMBER( MEMBER_IDNUMBER(10)NOTNULLENABLE, MEMBER_NAMEVARCHAR2(20)NOTNULLENABLE, MEMBER_LEVELNUMBER(20)NOTNULLENABLE, MEMBER_REBATEFLOAT(2)DEFAULT0。9NOTNULLENABLE, MEMBER_CONSUMPTIONFLOAT(126)NOTNULLENABLE)創(chuàng)建表billCREATETABLEBILL( MEMBER_NAMEVARCHAR2(10), MONEYNUMBER(10))4系統(tǒng)實(shí)現(xiàn)4。1數(shù)據(jù)庫的連接在該系統(tǒng)中使用的數(shù)據(jù)庫是OracleDatabase11gExpressEdition。客戶端采用的是PL/SQLDeveloper。Java運(yùn)行環(huán)境為EclipseIndigo。在安裝好了軟件之后,數(shù)據(jù)庫的連接設(shè)置在Eclipse里的Properties功能鍵中。如圖4.1所示圖4。1數(shù)據(jù)庫連接在JavaBuildPath中的Libraries中,運(yùn)行AddExternalJARs…找到classes12.jar并添加,則此時(shí)已將數(shù)據(jù)庫和Java程序成功連接。4.2系統(tǒng)功能模塊設(shè)置(1)設(shè)計(jì)書籍銷售管理界面書籍銷售管理界面可以用來查詢書籍、將選定書籍加入購買目錄和賬單結(jié)算。創(chuàng)建一個(gè)選項(xiàng)卡面板,將其命名為OprationInfoPanel。選項(xiàng)卡面板的布局如圖4.2所示。圖4。2面板OprationInfoPanel的布局面板啟動(dòng),當(dāng)你點(diǎn)擊查找功能鍵時(shí),則會(huì)出現(xiàn)要查詢的書籍信息,此時(shí)你可以實(shí)現(xiàn)將選定書籍加入購買目錄。當(dāng)用戶單擊“查詢”按鈕時(shí),將執(zhí)行findDao(StringbookName)函數(shù),通過模糊查詢檢索出相關(guān)書籍信息;當(dāng)用戶單擊“加入購買目錄”按鈕時(shí),將執(zhí)行addShoppingCart(intbookId)函數(shù),系統(tǒng)將會(huì)自動(dòng)加選定書籍添加到購買目錄中并在顯示出來;當(dāng)用戶單擊“賬單結(jié)算"按鈕時(shí),將執(zhí)行newBillDialog(floatmoney),彈出賬單結(jié)算對(duì)話框.(2)設(shè)計(jì)賬單結(jié)算管理對(duì)話框賬單結(jié)算管理對(duì)話框可以用來結(jié)算賬單信息.添加一個(gè)對(duì)話框,將其命名為BillDialog.對(duì)話框的布局如圖4.3所示。圖4.3對(duì)話框BillDialog的布局對(duì)話框啟動(dòng),輸入相關(guān)信息,當(dāng)你點(diǎn)擊“確認(rèn)賬單”時(shí),將執(zhí)行confirmBillDao(StringmemberName)函數(shù),則會(huì)顯示根據(jù)數(shù)據(jù)庫所計(jì)算出客戶所需支付金額,當(dāng)點(diǎn)擊“提交賬單”時(shí),將執(zhí)行submitOrdersDao(OrderVovo)函數(shù),系統(tǒng)自動(dòng)將本次交易的金額存入會(huì)員信息中,以便會(huì)員升級(jí)和下次調(diào)用會(huì)員信息。5系統(tǒng)測試方案和測試報(bào)告5.1測試方案由于系統(tǒng)規(guī)模較小,所以沒有安排單獨(dú)的白盒測試,而是相應(yīng)地將這部分測試歸并到系統(tǒng)編碼過程中。整個(gè)測試過程基于自頂向下測試的組裝模塊的方法,先對(duì)主模塊進(jìn)行基本測試,然后在按深度優(yōu)先策略逐一將子模塊組裝到主模塊上進(jìn)行測試,最后再對(duì)系統(tǒng)進(jìn)行全面的整體測試。5.2測試過程(1)書籍銷售管理主界面測試運(yùn)行程序,登錄成功后進(jìn)入書籍銷售管理界面,如圖5。1所示:圖5。1書籍銷售管理界面(2)書籍查詢功能測試輸入書籍名稱可查詢到自己想要的書籍信息,本查詢?yōu)槟:樵?會(huì)顯示包含所輸入字符所有書籍,如圖5.2所示:圖5.2模糊查詢顯示出的書籍分五本為一頁,通過點(diǎn)擊“上頁”和“下頁”按鈕可以查詢其他頁碼的書籍,如圖5。3和5.4所示:圖5。3分頁顯示查詢結(jié)果(a)圖5。4分頁顯示查詢結(jié)果(b)(3)選擇書籍并加入購買目錄功能測試選擇查詢出的一條數(shù)據(jù),并單擊加入購物車按鈕,將自動(dòng)把選中書籍添加到購買目錄中,如圖5。5所示:圖5.5添加書籍至購買目錄(4)訂單管理功能測試移除書籍:選定購買目錄中的一本書,點(diǎn)擊“移除”按鈕,將自動(dòng)把所選書籍從購買目錄中移除,如圖5。6所示:圖5。6移除書籍賬單結(jié)算:點(diǎn)擊“賬單結(jié)算”,按鈕,將自動(dòng)彈出一個(gè)賬單結(jié)算窗口,“訂單查詢",如圖5。7所示:圖5。7賬單結(jié)算界面輸入會(huì)員名稱和實(shí)付金額,點(diǎn)擊確認(rèn)賬單,將自動(dòng)計(jì)算根據(jù)會(huì)員折扣后所需找零金額,如圖5.8所示:圖5。8賬單結(jié)算功能點(diǎn)擊“提交賬單”,將提示賬單提交成功,將會(huì)吧數(shù)據(jù)傳到數(shù)據(jù)庫,并對(duì)相應(yīng)的數(shù)據(jù)進(jìn)行處理,如圖5。9所示:圖5。9提交賬單6結(jié)束語本系統(tǒng)完成了一個(gè)書店管理系統(tǒng)的基本功能,包括書籍銷售管理、庫存管理、會(huì)員管理等。我們小組將該系統(tǒng)分為三大模塊,分別由三位小組成員負(fù)責(zé),最后再一起匯總,經(jīng)過不斷的調(diào)試,所有功能經(jīng)過測試均能夠正確運(yùn)行,操作簡便,界面友好.通過小組合作完成本次課程設(shè)計(jì),我對(duì)數(shù)據(jù)庫這門課程有了更加深刻的理解,同時(shí)也能熟練的運(yùn)用eclipse來編寫較為簡單的java程序,并且也使得自己在對(duì)系統(tǒng)數(shù)據(jù)庫的分析、設(shè)計(jì)有更深刻的了解。我們?cè)诟髯跃帉懗绦蛑杏龅搅撕芏鄦栴},通過查閱相關(guān)資料,問題得到了解決,同時(shí)也學(xué)到了一定的java編程知識(shí)。另外,通過運(yùn)用JDBC數(shù)據(jù)庫連接技術(shù),我對(duì)java數(shù)據(jù)庫編程技術(shù)也有了一定的了解和認(rèn)識(shí),希望通過以后的學(xué)習(xí)繼續(xù)加深這方面知識(shí)的掌握。參考文獻(xiàn)[1]王汝傳。計(jì)算機(jī)圖形學(xué)[M].北京:人民郵電出版社,1999:123-130。[2]劉榴娣,劉明奇,黨長民。實(shí)用數(shù)字圖像處理[M].北京:北京理工大學(xué)出版,2000:12-25。。[3]李彥,韓光林,李玉波.SQLSERVE完全自學(xué)手冊(cè)[M].北京:電子工業(yè)出版社,2007[4]薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論.北京:高等教育出版社.2005附錄:部分程序代碼//程序名稱:MainFrame.java//程序功能:主界面//程序作者:漆盛//最后修改日期:2013—09—26package.view;importjava。awt。BorderLayout;importjavax。swing。JFrame;importjavax。swing.JTabbedPane;import。view。panel.MemberInfoPanel;import.view.panel。OprationInfoPanel;import.view.panel。WarehouseInfoPanel;publicclassMainFrameextendsJFrame{ privatestaticfinallongserialVersionUID=1L; privateJTabbedPanetab; privatebooleanflag; publicMainFrame(booleanflag){ this.flag=flag; init(); } privatevoidinit(){ this。add(createTab(),BorderLayout.CENTER); this。setTitle(”書店管理系統(tǒng)”); this。setSize(1000,700); this。setLocationRelativeTo(null); this。setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE); this.setVisible(true); this。setResizable(false); } privateJTabbedPanecreateTab(){ if(tab==null){ tab=newJTabbedPane(); } tab。add(”書籍銷售管理”,newOprationInfoPanel()); if(flag){ tab.add(”倉庫庫存管理",newWarehouseInfoPanel()); tab。add("會(huì)員信息管理”,newMemberInfoPanel()); } returntab; }}/*書籍銷售管理選項(xiàng)卡面板*/package。view.panel;importjava。util。Vector;importjavax。swing。JButton;importjavax。swing。JLabel;importjavax.swing.JPanel;importjavax。swing。JScrollPane;importjavax.swing。JTable;importjavax。swing.JTextField;importjavax。swing。table。DefaultTableModel;import。action。OprationInfoPanelAction;import。vo。BookVo;import。vo.PageVo;publicclassOprationInfoPanelextendsJPanel{ privatestaticfinallongserialVersionUID=1L; @SuppressWarnings(”rawtypes”) privateVectortitle=newVector(); @SuppressWarnings(”rawtypes”) privateVectortitle1=newVector(); privateJScrollPanescroll; privateDefaultTableModelmodel; privateDefaultTableModelmodel1; privateJTabletable; privateJTablecartTable; privateOprationInfoPanelActionaction=newOprationInfoPanelAction(this); privateJTextFieldbookName=newJTextField(10); privateintrow=-1; privateBookVovo; privateintrows=-1; privateJPanelcreateOprationPanel; privateJPanelcreateCartPanel; privateJTextFieldpageText=newJTextField(2); privatePageVopageVo; privateJPanelpagePanel; privateJLabelcartName=newJLabel("購買目錄”); privateJScrollPanecartScroll; privateintcartRow; publicOprationInfoPanel(){ init(); } privatevoidinit(){ this。setLayout(null); this。add(createOprationPanel()); createOprationPanel。setBounds(0,0,1000,40); this。add(createScroll()); scroll.setBounds(0,45,1000,125); this.add(createPagePanel()); pagePanel。setBounds(0,170,1000,40); this。add(cartName); cartName。setBounds(0,200,80,40); this。add(createCartScroll()); cartScroll.setBounds(0,240,1000,250); this。add(createCartPanel()); createCartPanel。setBounds(0,490,1000,50); } privateJPanelcreatePagePanel(){ if(pagePanel==null){ pagePanel=newJPanel(); } pagePanel。add(createBut(”首頁”)); pagePanel.add(createBut("上頁”)); pagePanel.add(newJLabel("第”)); pagePanel。add(pageText); pagePanel.add(newJLabel("頁”)); pageText。setEditable(false); pagePanel。add(createBut(”下頁")); pagePanel。add(createBut("末頁”)); returnpagePanel; } privateJPanelcreateOprationPanel(){ if(createOprationPanel==null){ createOprationPanel=newJPanel(); } createOprationPanel。add(newJLabel(”書籍名稱:")); createOprationPanel。add(bookName); createOprationPanel.add(createBut(”查詢”)); createOprationPanel.add(createBut("加入購買目錄”)); returncreateOprationPanel; } privateJPanelcreateCartPanel(){ if(createCartPanel==null){ createCartPanel=newJPanel(); createCartPanel。add(createBut(”刷新")); createCartPanel。add(createBut("移除")); createCartPanel。add(createBut(”賬單結(jié)算”)); } returncreateCartPanel; } privateJScrollPanecreateScroll(){ if(scroll==null){ scroll=newJScrollPane(createTable()); } returnscroll; } privateJScrollPanecreateCartScroll(){ if(cartScroll==null){ cartScroll=newJScrollPane(createCartTable()); } returncartScroll; } @SuppressWarnings("unchecked") privateJTablecreateTable(){ title.add(”書籍編號(hào)”); title。add(”書籍名稱"); title。add(”作者”); title.add(”出版社"); title.add("價(jià)格”); model=newDefaultTableModel(title,0); if(table==null){ table=newJTable(model); } returntable; } @SuppressWarnings(”unchecked”) privateJTablecreateCartTable(){ title1。add("書籍編號(hào)"); title1。add("書籍名稱”); title1。add(”作者”); title1.add(”出版社”); title1。add(”價(jià)格”); title1.add(”數(shù)量”); model1=newDefaultTableModel(title1,0); if(cartTable==null){ cartTable=newJTable(model1); } returncartTable; } privateJButtoncreateBut(StringbutName){ JButtonbut=newJButton(butName); but。addActionListener(action); returnbut; } publicStringgetBookName(){ returnbookName.getText(); } publicBookVosetBookVo(){ row=table.getSelectedRow(); if(row!=rows){ vo=null; } if(vo==null){ rows=row; vo=newBookVo(Integer。parseInt(table.getValueAt(row,0) 。toString()),table.getValueAt(row,1).toString(),table。getValueAt(row,2)。toString(),table.getValueAt(row,3).toString(),Integer.parseInt(table.getValueAt(row,4) 。toString())); } returnvo; } @SuppressWarnings("rawtypes”) publicvoidsetModel(VectorrowData){ model.setDataVector(rowData,title); } @SuppressWarnings("rawtypes”) publicvoidsetModel1(VectorrowData){ model1。setDataVector(rowData,title1); } publicintgetBookId(){ intbookId=0; row=table。getSelectedRow(); bookId=Integer.parseInt(table.getValueAt(row,0)。toString()); returnbookId; } publicintgetCartBookId(){ intbookId=0; cartRow=cartTable.getSelectedRow(); bookId=Integer。parseInt(cartTable。getValueAt(cartRow,0)。toString()); returnbookId; } publicPageVogetPageVo(){ if(pageVo==null){ pageVo=newPageVo(); } returnpageVo; } publicvoidsetPageText(Stringpage){ pageText。setText(page); } publicvoidremoveRow(){ cartRow=cartTable。getSelectedRow(); model1。removeRow(cartRow); }}/*按鈕事件監(jiān)聽*/package。action;importjava。awt.event.ActionEvent;importjava。awt。event。ActionListener;importjava。util。Vector;importjavax。swing。JOptionPane;import。dao。BookDao;import.dao。PageDao;import。view。dialog。BillDialog;import.view。panel。OprationInfoPanel;publicclassOprationInfoPanelActionimplementsActionListener{ privateOprationInfoPanelpanel; publicOprationInfoPanelAction(OprationInfoPanelpanel){ this.panel=panel; } @SuppressWarnings({”rawtypes”}) @Ocerride publicvoidactionPerformed(ActionEvente){ StringbutName=e。getActionCommand(); BookDaodao=newBookDao(); PageDaopageDao=newPageDao(); if(butName。equals("查詢")){ VectorrowData=newVector(); rowData=dao。findDao(panel。getBookName()); panel。getPageVo()。changePageVo(1,1,5); panel.setPageText(Integer.toString(1)); panel。setModel(rowData); }elseif(butName。equals(”加入購買目錄")){ VectorrowData; rowData=dao。addShoppingCart(panel.getBookId()); panel。setModel1(rowData); }elseif(butName.equals(”刷新”)){ VectorrowData1; rowData1=dao.refreshCart(); panel.setModel1(rowData1); }elseif(butName.equals(”移除”)){ booleanflag; flag=dao.delBookInfo(panel.getCartBookId()); if(flag){ panel.removeRow(); JOptionPane。showMessageDialog(null,”移除成功!!!",”移除成功”,JOptionPane。OK_CANCEL_OPTION); } }elseif(butName。equals(”賬單結(jié)算”)){ inti=JOptionPane.showConfirmDialog(null,”是否結(jié)算”,"賬單結(jié)算", JOptionPane。YES_NO_OPTION); if(i==0){ newBillDialog(dao。cartInfoDao()); } }else{ VectorrowData=pageDao.bookPageDao(butName,panel。getBookName(),panel。getPageVo());panel.setPageText(Integer 。toString(panel。getPageVo().getStartLine()/5+1)); panel.setModel(rowData); } }}/*數(shù)據(jù)庫操作代碼*/@SuppressWarnings({"rawtypes”,”unchecked”}) publicVectorfindDao(StringbookName){ VectorrowData=newVector(); try{ Class.forName(”oracle。jdbc.driver.OracleDriver”); Connectioncon=DriverManager.getConnection( ”jdbc:oracle:thin:@127。0.0。1:1521:orcl”,"scott”,”tiger”); Stringsql=”select*from(selecte。*,rownumnumfrombookewheree。book_namelike'%” +bookName+”%’)awherea。numbetween1and5”; Statementst=con。createStatement(); ResultSetrs=st。executeQuery(sql); while(rs。next()){ Vectorrow=newVector(); row。add(rs.getInt("book_id")); row.add(rs。getString(”book_name")); row.add(rs。getString(”book_author")); row。add(rs。getString(”book_press”)); row。add(rs。getInt("book_sale_price")); rowData.add(row); } }catch(ClassNotFoundExceptione){ e。printStackTrace(); }catch(SQLExceptione){ e。printStackTrace(); } returnrowData; }@SuppressWarnings({"unchecked",”rawtypes"}) publicVectorrefreshCart(){ VectorrowData=newVector(); try{ Class。forName(”oracle.jdbc.driver.OracleDriver”); Connectioncon=DriverManager。getConnection( ”jdbc:oracle:thin:@127。0.0.1:1521:orcl”,”scott”,”tiger"); Statementst=con.createStatement(); Stringsql="select*frombook,bookIdwherebook。book_id=bookId。book_id"; ResultSetrs=st。executeQuery(sql); while(rs.next()){ Vectorrow=newVector(); row。add(rs。getInt(”book_id”)); row.add(rs。getString(”book_name")); row.add(rs.getString(”book_author”)); row。add(rs。getString(”book_press”)); row.add(rs。getInt(”book_sale_price”)); row。add(1); rowData。add(row); } }catch(ClassNotFoundExceptione){ e。printStackTrace(); }catch(SQLExceptione){ e。printStackTrace(); } returnrowData; }@SuppressWarnings({"rawtypes”,"unchecked"}) publicVectoraddShoppingCart(intbookId){ VectorrowData=newVector(); try{ Class。forName("oracle.jdbc。driver。OracleDriver”); Connectioncon=DriverManager。getConnection( ”jdbc:oracle:thin:@127.0。0.1:1521:orcl”,”scott”,”tiger"); Statementst=con.createStatement(); Stringsql1=”insertintobookIdvalues(”+bookId+")"; st.executeUpdate(sql1); Stringsql="select*frombook,bookIdwherebook.book_id=bookId。book_id”; ResultSetrs=st。executeQuery(sql); while(rs.next()){ Vectorrow=newVector(); row。add(rs。getInt(”book_id")); row.add(rs.getString(”book_name”)); row.add(rs.getString("book_author”)); row.add(rs.getString("book_press”)); row.add(rs。getInt(”book_sale_price")); row.add(1); rowData.add(row); } }catch(ClassNotFoundExceptione){ e.printStackTrace(); }catch(SQLExceptione){ e。printStackTrace(); } returnrowData; }publicbooleandelBookInfo(intbookId){ booleanflag=false; try{ Class。forName(”oracle。jdbc。driver。OracleDriver”); Connectioncon=DriverManager。getConnection( ”jdbc:oracle:thin:@127。0.0.1:1521:orcl”,”scott”,”tiger"); Statementst=con。createStatement(); Stringsql=”deletebookIdwherebook_id=’”+bookId+"'”; intrs=st.executeUpdate(sql); if(rs>0){ flag=true; } }catch(ClassNotFoundExceptione1){ e1.printStackTrace(); }catch(SQLExceptione1){ e1。printStackTrace(); } returnflag; }publicfloatcartInfoDao(){ floatmoney=0; try{ Class.forName(”oracle.jdbc。driver。OracleDriver"); Connectioncon=DriverManager。getConnection( ”jdbc:oracle:thin:@127。0。0.1:1521:orcl”,”scott”,”tiger"); Statementst=con。createStatement(); Stringsql=”selectcount(*)asbookIdAmountfrombookId"; ResultSetrs=st。executeQuery(sql); while(rs.next()){ Stringsql1=”select*frombook,bookIdwherebook.book_id=bookId。book_id"; ResultSetrs1=st。executeQuery(sql1); while(rs1.next()){ money=money+rs1。getInt("book_sale_price"); } System。out。println(money); } }catch(ClassNotFoundExceptione){ e。printStackTrace(); }catch(SQLExceptione){ e.printStackTrace(); } returnmoney; }publicfloatconfirmBillDao(StringmemberName){ floatrebate=0; try{ Class。forName(”oracle。jdbc.driver.OracleDriver”); Connectioncon=DriverManager.getConnection( ”jdbc:oracle:thin:@127.0。0。1:1521:orcl”,”scott”,"tiger”); Statementst=con.createStatement(); Stringsql=”select*frommemberwheremember_name='”+memberName+”’”; ResultSetrs=st。executeQuery(sql); while(rs。next()){ rebate=rs。getFloat(”member_rebate"); } }catch(ClassNotFoundExceptione){ e.printStackTrace(); }catch(SQLExceptione){ e。printStackTrace(); } returnrebate; }publicbooleansubmitOrdersDao(OrderVovo){ booleanflag=false; try{ Class.forName(”oracle。jdbc.driver。OracleDriver”); Connectioncon=DriverManager。getConnection( ”jdbc:oracle:thin:@127.0。0。1:1521:orcl",”scott”,”tiger”); Statementst=con。createStatement(); Stringsql2=”select*frommemberwheremember_name=’” +vo。getMemberName()+”'”; ResultSetrs1=st。executeQuery(sql2); floatmember_consumption=vo.getDiscountAmount(); while(rs1。next()){ member_consumption=rs1。getFloat(”member_consumption”) +vo.getDiscountAmount(); } System。out。println(member_consumption); Stringsql1="updatemembersetmember_consumption=" +member_consumption+”wheremember_name='” +vo.getMemberName()+"'”; st。executeUpdate(sql1); Stringsql="insertintobillvalues(’"+vo.getMemberName() +"’,”+vo。getDiscountAmount()+")"; intrs=st.executeUpdate(sql); if(rs>0){ flag=true; } }catch(ClassNotFoundExceptione){ e。printStackTrace(); }catch(SQLExceptione){ e。printStackTrace(); } returnflag; } publicvoiddelCartDao(){ try{ Class。forName(”oracle。jdbc。driver。OracleDriver”); Connectioncon=DriverManager。getConnection( ”jdbc:oracle:thin:@127。0。0。1:1521:orcl”,"scott",”tiger"); Statementst=con。createStatement(); Stringsql="deletebookId”; st.executeQuery(sql); }catch(ClassNotFoundExceptione){ e。printStackTrace(); }catch(SQLExceptione){ e.printStackTrace(); } }/*分頁代碼*/package。dao;importjava。sql.Connection;importjava。sql。DriverManager;importjava。sql。ResultSet;importjava。sql.SQLException;importjava.sql。Statement;importjava。util。Vector;import.vo。PageVo;publicclassPageDao{ privateintline=0; privateintpage=0; @SuppressWarnings({”unchecked”,”rawtypes”}) publicVectorbookPageDao(StringbutName,StringbookName,PageVovo){ VectorrowData=newVector(); intstartLine=vo。getStartLine(); intendLine=vo。getEndLine(); try{ Class。forName(”oracle.jdbc.driver.OracleDriver"); Connectioncon=DriverManager 。getConnection(”jdbc:oracle:thin:@127。0.0。1:1521:orcl”, "scott”,"tiger”); Statementst=con.createStatement(); Stringsql1=”selectcount(*)frombookwherebook_namelike’%” +bookName+”%'”; ResultSetrs1=st。executeQuery(sql1); while(rs1。next()){ line=rs1。getInt("count(*)”); } if(line%5!=0){ page=line/5+1; }else{ page=line/5; } if(”首頁"。equals(butName)){ startLine=1; endLine=5; }elseif(”上頁"。equals(butName)){ startLine=startLine—5; endLine=endLine—5; }elseif(”下頁”。equals(butName)){ startLine=startLine+5; endLine=endLine+5; }elseif(”末頁”.equals(butName)){ startLine=(1)*5+1; endLine=startLine+4; } if(startLine〈1){ startLine=1; endLine=5; } if(endLine>=line){ startLine=(1)*5+1; endLine=startLine+4; } vo.changePageVo(page,startLine,endLine); Stringsql=”select*from(selecte。*,rownumnumfrombookewheree.book_namelike’%”+bookName+"%')awherea.numbetween" +startLine+”and"+endLine; ResultSetrs=st.executeQuery(sql); while(rs.next()){ Vectorrow=newVector(); row.add(rs。getInt("book_id")); row.add(rs.getString(”book_name")); row.add(rs。getString(”book_author”)); row。add(rs.getString(”book_press”)); row。add(rs.getInt("book_sale_price")); row。add(rs。getInt(”book_purchase_price”)); row.add(rs。getInt("book_amount")); rowData。add(row); } }catch(ClassNotFoundExceptione1){ e1。printStackTrace(); }catch(SQLExceptione1){ e1。printStackTrace(); } returnrowData; }/*賬單結(jié)算界面*/package。view.dialog;importjavax。swing。JButton;importjavax。swing。JDialog;importjavax.swing.JFrame;importjavax。swing。JLabel;importjavax。swing。JTextField;import.action.BillAciton;import。vo。OrderVo;publicclassBillDialogextendsJDialog{ privatestaticfinallongserialVersionUID=1L; privatefloatmoney; privateJLabelmemberNameLabel=newJLabel(”會(huì)員姓名:”); privateJTextFieldmemberNameText=newJTextField(); privateJLabelbookAmountLabel=newJLabel("書籍?dāng)?shù)量:"); privateJTextFieldbookAmountText=newJTextField(); privateJLabelamountPayableLabel=newJLabel(”應(yīng)付金額:”); privateJTextFieldamountPayText=newJTextField(); privateJLabeldiscountLabel=newJLabel(”會(huì)員折扣:”); privateJTextFielddiscountText=newJTextField(); privateJLabeldiscountAmountLabel=newJLabel(”折后金額:”); privateJTextFielddiscountAmountText=newJTextField(); privateJLabelactualPaymentsLabel=newJLabel(”實(shí)付金額:”); privateJTextFieldactualPaymentsText=newJTextField(); privateJLabelchangeLabel=newJLabel("找零金額:”); privateJTextFieldchangeText=newJTextField(); privateBillAcitonaction=newBillAciton(this); publicBillDialog(floatmoney){ this.money=money; init(); } privatevoidinit(){ this。setPanel(); this。setTitle(”賬單結(jié)算”); this。setSize(450,450); this。setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this。setVisible(true); this.setResizable(false); } privatevoidsetPanel(){ this。setLayout(null); this。add(memberNameLabel); memberNameLabel.setBounds(120,25,80,30); this.add(memberNameText); memberNameText.setBounds(180,25,80,30); this。add(bookAmountLabel); bookAmountLabel.setBounds(120,65,80,30); this.add(bookAmountText); bookAmountText。setBounds(180,65,80,30); this。add(amountPayableLabel); amountPayableLabel。setBounds(120,105,80,30); this。add(amountPayText); amountPayText。setBounds(180,105,80,30); amountPayText。setText(String。valueOf(money)); amountPayText。setEditable(false); this。add(discountLabel); discountLabel。setBounds(120,145,80,30); this.add(discountText); discountText.setBounds(180,145,80,30); discountText.setEditable(false); this.add(discountAmountLabel); discountAmountLabel.setBounds(120,185,80,30); this.add(discountAmountText); discountAmountText.setBounds(180,185,80,30); discountAmountText。setEditable(false); this.add(actualPaymentsLabel); actualPaymentsLabel。setBounds(120,225,80,30); this.add(actualPaymentsText); actualPaymentsText.setBounds(180,225,80,30); this.add(changeLabel); changeLabel。setBounds(120,265,80,30); this。add(changeText); changeText。setBounds(180,265,80,30); changeText。setEditable(false); JButtonbut=createBut(”確認(rèn)賬單"); this。add(but); but.setBounds(140,305,100,30); JButtonbut1=createBut("提交賬單”); this。add(but1); but1.setBounds(140,345,100,30); } privateJButtoncreateBut(StringbutName){ JButtonbut=newJButton(butName); but。addActionListener(action); returnbut; } publicStringgetMemberName(){ returnmemberNameText。getText(); } publicvoidsetPayment(floatrebate){ discountText.setText(String.valueOf(rebate)); discountAmountText。setText(String。valueOf(money*rebate)); changeText。setText(String。valueOf(Integer。parseInt(actualPaymentsText。getText())—money*rebate)); } publicStringgetActualPaymentsText(){ returnactualPaymentsText。getText(); } publicvoidsetActualPaymentsText(inti){ actualPaymentsText。setText(String.valueOf(i)); } publicOrderVosetOrderVo(){ OrderVovo=newOrderVo(memberNameText.getText(), Float。parseFloat(discountAmountText.getText())); returnvo; }}/*賬單事件監(jiān)聽*/package.action;importjava。awt。event。ActionEvent;importjava。awt.event。ActionListener;importjavax。swing。JOptionPane;importjavax.swing.JTextField;import。dao.BookDao;import.view。dialog。BillDialog;publicclassBillAcitonimplementsActionListener{ privateBillDialogpanel; publicBillAciton(BillDialogpanel){ this。panel=panel; } @OverridepublicvoidactionPerformed(ActionEvente){ StringbutName=e。getActionCommand(); BookDaodao=newBookDao(); JTextFieldtext=newJTextField(); floatrebate; if(butName。equals("確認(rèn)賬單”)){ if(panel。getActualPaymentsText().equals(text.getText())){ panel。setActualPaymentsText(0); } if(panel。getMemberName()。equals(text.getText())){ rebate=1; }else{ rebate=dao。confirmBillDao(panel。getMemberName()); if(rebate==0){ JOptionPane。showMessageDialog(null,”未找到對(duì)應(yīng)會(huì)員!!!”, "會(huì)員匹配失敗",JOptionPane。OK_CANCEL_OPTION); } } panel。setPayment(r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 私人定制房產(chǎn)轉(zhuǎn)讓協(xié)議樣本
- 福利院護(hù)工招聘合同細(xì)則
- 酒店管理教師勞動(dòng)合同模板
- 高端商務(wù)樓租賃合同模板
- 風(fēng)力發(fā)電場并網(wǎng)配網(wǎng)工程施工合同
- 土石方填筑設(shè)計(jì)合同
- 停車場地平施工合同
- 零售業(yè)專用送貨員聘用合同
- 醫(yī)療美容機(jī)構(gòu)美發(fā)師聘用合同
- 親子活動(dòng)表演助理招聘協(xié)議
- 2025年1月浙江省高中學(xué)業(yè)水平考試政治試卷試題(含答案解析)
- 學(xué)校網(wǎng)絡(luò)合同范例
- 2022-2023學(xué)年上海市浦東區(qū)高二(上)期末語文試卷
- 工程建設(shè)安全專項(xiàng)整治三年行動(dòng)實(shí)施方案
- 2025年中國帽子行業(yè)發(fā)展現(xiàn)狀、進(jìn)出口貿(mào)易及市場規(guī)模預(yù)測報(bào)告
- 2025春夏運(yùn)動(dòng)戶外行業(yè)趨勢白皮書
- 2024年商會(huì)工作計(jì)劃|商會(huì)年度工作計(jì)劃總結(jié)例文
- 中醫(yī)筋傷的治療
- 【MOOC】英文技術(shù)寫作-東南大學(xué) 中國大學(xué)慕課MOOC答案
- 第一單元第一節(jié)《兼收并蓄滴水成河-數(shù)據(jù)和數(shù)據(jù)的采集》說課稿 2023-2024學(xué)年西交大版(2014)初中信息技術(shù)八年級(jí)上冊(cè)
- 輻射與防護(hù)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評(píng)論
0/150
提交評(píng)論