版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
.z..--可修編-理工大學(xué)琴島學(xué)院畢業(yè)設(shè)計(論文)專業(yè)計算機科學(xué)與技術(shù)專業(yè) 班級專升本〔11-21〕學(xué)生際斌學(xué)號課題客戶信息管理系統(tǒng)指導(dǎo)教師王世廣2013年5月30日-.z.-可修編-摘要 當(dāng)今社會,隨著計算機的的領(lǐng)域不斷擴(kuò),人們越來越離不開計算機的同時,對計算機軟件的需求也不斷提高。以往生活中軟件都是在大的企業(yè)中得到應(yīng)用,現(xiàn)在卻大不一樣了,因為互聯(lián)網(wǎng)在現(xiàn)實生活中的不斷擴(kuò)展,人們的知識領(lǐng)域的增加,同樣伴有的就是中小型企業(yè)的成長,例如現(xiàn)在電子商務(wù)的普遍,中小賣家就會應(yīng)用到大小不一的ERP系統(tǒng)。ERP是針對物資資源管理〔物流〕、人力資源管理〔人流〕、財務(wù)資源管理〔財流〕、信息資源管理〔信息流〕集成一體化的企業(yè)管理軟件。它將包含客戶/效勞架構(gòu),使用圖形用戶接口,應(yīng)用開放系統(tǒng)制作。除了已有的標(biāo)準(zhǔn)功能,它還包括其它特性,如品質(zhì)、過程運作管理、以及調(diào)整報告等。既然如此,則這些方面的提高必定對我們現(xiàn)有生活發(fā)揮大的作用。同樣現(xiàn)在面臨的ERP系統(tǒng)價錢都是相當(dāng)高昂的,對于小型企業(yè)來講這樣的負(fù)擔(dān)還是相當(dāng)重的,緊迫中開發(fā)一款簡單而又實際結(jié)合中小企業(yè)需求的這樣一款軟件也是迫在眉睫,而對于Java簡易的開發(fā)模式勢在必行。關(guān)鍵詞:JavaERP人力資源管理客戶管理電子商務(wù)AbstractNowadays,withthecontinuouse*pansionofthefieldofputer,moreandmorepeoplecannotdowithouttheputeratthesametime,theputersoftwarerequirementsisalsorising.Pastlifeofsoftwareisappliedinlargeenterprises,nowisnotthesame,becausetheInternetinreallife,toincreasepeople'sknowledge,alsowithisthegrowthofsmallandmedium-sizedenterprises,suchase-merceisnowgenerally,smallsellerswillbeappliedtothedifferentsizesoftheERPsystem.
ERPisforthematerialresourcemanagement(logistics),humanresourcemanagement(people),themanagementoffinancialresources(financialflows),informationresourcesmanagement(informationflow)integrationofenterprisemanagementsoftware.Itwillincludetheclient/serverarchitecture,usingagraphicaluserinterface,makinguseofopensystem.Inadditiontothee*istingstandardfeatures,italsoincludesothercharacteristics,suchasquality,processoperationsmanagement,andregulatoryreporting.Ifso,thentheseaspectstoimproveoure*istinglifeisboundtoplayabigrole.ThepriceofERPsystemalsofacesarequitehigh,forsmallbusinessesthatburdenisheavy,theactualbinationisimminentneedsofSMEsinthedevelopmentofsuchasoftwarepressingasimpleyet,butforsimpleJavadevelopmentmodelbeimperative.
Keywords:JavaERPhumanresourcemanagementcustomermanagemente-merce目錄第1章緒論11.1系統(tǒng)開發(fā)背景11.2系統(tǒng)現(xiàn)實價值1第2章需求分析32.1用例圖32.2相關(guān)用例4第3章概要設(shè)計73.1流程圖73.2數(shù)據(jù)構(gòu)造7第4章數(shù)據(jù)庫設(shè)計104.1信息表104.2ER圖11第5章界面設(shè)計135.1軟件界面135.2界面跳轉(zhuǎn)關(guān)系14第6章詳細(xì)設(shè)計與實現(xiàn)166.1系統(tǒng)執(zhí)行流程166.2編碼規(guī)24總結(jié):30致:31參考文獻(xiàn):32-.z.-可修編-第1章緒論1.1系統(tǒng)開發(fā)背景ERP是EnterpriseResourcePlanning〔企業(yè)資源方案〕的簡稱,是上個世紀(jì)90年代美國一家IT公司根據(jù)當(dāng)時計算機信息、IT技術(shù)開展及企業(yè)對供給鏈管理的需求,預(yù)測在今后信息時代企業(yè)管理信息系統(tǒng)的開展趨勢和即將發(fā)生變革,而提出了這個概念?,F(xiàn)如今,ERP是針對物資資源管理〔物流〕、人力資源管理〔人流〕、財務(wù)資源管理〔財流〕、信息資源管理〔信息流〕集成一體化的企業(yè)管理軟件。而現(xiàn)如今的ERP系統(tǒng)已經(jīng)在企業(yè)中占據(jù)了相當(dāng)重要地位,其中我們今天開發(fā)的客戶信息管理系統(tǒng)也是ERP系統(tǒng)中的一局部。在我們企業(yè)中,現(xiàn)在由于人際交往的復(fù)雜已經(jīng)面臨的多重問題,客戶的地位在一家企業(yè)中是尤為重要的,而更多的人為了效勞好顧客,甚至?xí)轭櫩秃芏喙ぷ饕酝獾氖虑?,比方在顧客的生日上送上祝福和禮物,在這樣的根底上,客戶可能會跟這家企業(yè)走的更近,這就是效勞型企業(yè)的到位之處。同樣面臨的問題就是,僅憑一個人的腦子去記憶如此龐大的信息系統(tǒng)那是不夠的,所以我們就緊迫需要一款這樣的記憶系統(tǒng)來幫助我們整理客戶的信息,更重要的是在必要的時間彈出窗口來提醒我們,是顧客的生意了,則我們就要提前做好準(zhǔn)備給我們的顧客一個意外的驚喜。在這樣的鼓勵下,就有了我們客戶新管理系統(tǒng)這一款軟件的誕生。1.2系統(tǒng)現(xiàn)實價值客戶信息管理系統(tǒng)實際應(yīng)用中更重要的是應(yīng)該表達(dá)其“管理工具〞的本質(zhì)。系統(tǒng)主要宗旨是對企業(yè)所有客戶、信息、時間和空間等綜合資源進(jìn)展綜合平衡和優(yōu)化管理,所以,該系統(tǒng)首先是一個軟件,同時是一個管理工具。該軟件是IT技術(shù)與管理思想的融合體,系統(tǒng)也就是先進(jìn)的管理思想借助電腦,來達(dá)成企業(yè)的管理目標(biāo)。它具有整合性,把所有可能的潛在客戶備份到系統(tǒng)當(dāng)中來,所以在量上實現(xiàn)了整合,同樣具備便利性,因為凡屬有客戶在本月或者在近幾日生日,則系統(tǒng)就會自動彈出提醒框來加以提示,所以遠(yuǎn)比我們?nèi)蝹€查找要來的方便,所以在這一點上也表達(dá)出了它的實時性。對個人來講,客戶是使我們有工作的人,客戶不必依賴我們,我們卻必須依賴客戶;對企業(yè)來講,客戶購置企業(yè)提供的產(chǎn)品和專業(yè)效勞,是企業(yè)是最重要的資源,是企業(yè)賴以生存的根本??蛻魧λM(jìn)展的交易總有所期望,比方花的錢最值得,得到的效勞最滿意,如果期望得不到滿足,客戶就會尋找其他渠道以滿足需要。因為客戶有選擇的權(quán)利。據(jù)國外一位知名心理醫(yī)生統(tǒng)計,對一段不愉快的經(jīng)歷,平均每個人會告訴他身邊的20個人,假設(shè)是一段愉快的經(jīng)歷,則平均會告訴5個人。由此看來,只要趕走了一個客戶,就等于趕走了潛在的20個客戶。如果你一天遇到了50個客戶,其中有兩個客戶對你的效勞產(chǎn)生了不愉快的感受〔這也許是我們企業(yè)常見的事情〕,則一年后,由于連鎖反響,可能有5000個人再也不愿意與我們打交道。而失去的客戶,則成為競爭對手得到的客戶。試想這樣的企業(yè),將何以在市場中立足?!聯(lián)系到我們公司,該怎樣來為客戶提供物有所值甚至物超所值的產(chǎn)品和效勞呢?接待人員是企業(yè)的第一個窗口,據(jù)調(diào)查客戶不滿意的原因有36%是由受到的接待引起的。我們要把自己置身于客戶的角度,準(zhǔn)確了解客戶的需要,真正做到將“無微不至的關(guān)心〞送給客戶。要和客戶保持良好的關(guān)系,還要做好跟蹤效勞。由于這樣那樣的原因,我們的工作中難免會出現(xiàn)失誤而引起客戶的不滿。有關(guān)資料顯示,當(dāng)我們主動與客戶聯(lián)系并解決問題時,客戶的滿意程度就會提高30%。定期對客戶進(jìn)展回訪,根據(jù)反響的信息迅速做出回應(yīng),讓客戶時刻感受到體貼和關(guān)心,一定會有良好的收效。所以一款好的客戶管理系統(tǒng),跟客戶之間拉近距離是我們首選的。第2章需求分析2.1用例圖圖2-1系統(tǒng)用例圖根據(jù)我們系統(tǒng)的需求分析,Admin需要通過見客戶建立關(guān)系,則我們系統(tǒng)的運行最初端口MainLoad.java開場,通過我們的輸入的用戶名和密碼直接跳轉(zhuǎn)我們的系統(tǒng)主界面,即InSystem.java。當(dāng)然進(jìn)入系統(tǒng)之前系統(tǒng)是需要判斷的,比方我們的用戶名和密碼錯誤或者是其它異常等等,這里我們采用的方式就是Label提醒,就是改變Label的文字容和其顏色來提示我們的信息錯誤,一旦填寫錯誤并且提交之后,系統(tǒng)就會做出相應(yīng)的提示,并且重新輸入用戶名和密碼。用戶名和密碼正確我們的系統(tǒng)Progress進(jìn)程塊運行完畢正常跳轉(zhuǎn)InSystemn.java.進(jìn)入我們的系統(tǒng)之后,從菜單欄文件開場,則點擊“注冊〞將會直接跳轉(zhuǎn)到RegWindow.java,即我們的注冊用戶窗口。因為注冊窗口我們關(guān)閉之后我們的接下來的程序就是重新登錄,則我們就重新回到了MainLoad(),如此循環(huán)到主系統(tǒng)界面,我們進(jìn)入切換窗口。切換窗口的功能就是登錄不同賬號,點擊切換按鈕后,我們又關(guān)閉了當(dāng)前的系統(tǒng),即dispose(),然后重new一個MainLoad(),則同樣的還是回到MainLoad,這里我們可以更改不同的賬號進(jìn)展登錄。添加賬戶信息:直接跳轉(zhuǎn)AddInform.java,這里將會填入相關(guān)的客戶信息,添加之后關(guān)閉添加的界面,回到主主界面。搜索:跳入的是NameSearchInform.java,這里確定后是檢索的過程,然后通過主界面的表格來顯示,所以關(guān)閉當(dāng)前的搜索窗口。最近生日:跳入BirthInform.java,統(tǒng)計最近生日列表。最近生日:跳入的是BirthInform.java,這里只需要在工具欄上點擊“最近生日〞即可生成最近生日的窗口。并且該窗口是定時出現(xiàn)的,即使我們現(xiàn)時間關(guān)閉了。我們的用戶具有的管理模塊如下:權(quán)限管理:實現(xiàn)我們一些低級管理員的權(quán)限修正,比方我們的高級管理員具有一切管理權(quán)限,我們的普通管理員具有添加但不具備刪除和修改功能,而信息閱覽的管理員是只能閱覽的。添加客戶:添加客戶相關(guān)信息這個也是最直觀的的了,當(dāng)然該模塊只能在高級管理和普通管理下操作??蛻魝渥ⅲ嚎蛻魝渥⒕褪翘砑有畔⒅械囊粋€信息塊,主要為備注客戶生日時所要做的事情,以提醒的用途。查詢信息:完成對客戶信息的檢索功能,直接輸入客戶的,我們可以通過該功能直接搜索客戶所有信息。注冊管理員:該管理功能只有在高級管理員下方可執(zhí)行的,可以為高級管理員、普通管理員和信息閱覽實現(xiàn)與用戶注冊。2.2相關(guān)用例表2-2系統(tǒng)登錄用例名稱系統(tǒng)登陸功能簡述管理員提供正確的用戶名和密碼登陸前置條件用戶名存在后置條件登陸成功 根本流1用戶在登錄頁面中輸入用戶名和密碼,并提交;2系統(tǒng)判斷用戶名和密碼是否合法;3根據(jù)用戶的類型顯示不同的主頁面 備注如果用戶名或密碼錯誤,Label將會更改為紅色字體系統(tǒng)登陸模塊是在我們系統(tǒng)首次運行所要輸入的密鑰界面,即我們需要提供已經(jīng)在數(shù)據(jù)庫中存在的用戶名和密碼,數(shù)據(jù)庫中核對存在并且正確后,將會登陸成功;如果不成功,界面中Label將會顯示為紅色字體以提示密碼錯誤。如表2-2系統(tǒng)登錄所示。表2-3添加客戶信息用例名稱添加客戶信息 功能簡述用戶添加客戶的生日信息以及備注信息前置條件無 后置條件添加成功根本流1用戶在添加窗口中輸入客戶信息,并提交2系統(tǒng)將相關(guān)信息存入到客戶數(shù)據(jù)庫備注如果無法存入將會彈出相關(guān)異常信息添加客戶信息模塊,我們會需要在我們系統(tǒng)數(shù)據(jù)庫中的所有信息,比方客戶、生日、產(chǎn)品、成交信息和備注信息等等。我們需要填寫用戶的相關(guān)信息提交就可以了,前提是該客戶信息不存在,否則將會有相關(guān)的異常信息,同樣地、如果提交成功,我們的數(shù)據(jù)庫將會新增一條客戶信息,同樣地,我們也會通過showMessageDialog來做出成功添加信息提示。如表2-3所示。表2-4搜索客戶信息用例名稱搜索客戶信息功能簡述輸入客戶或月份信息查詢客戶相關(guān)信息前置條件客戶信息已經(jīng)存在后置條件系統(tǒng)列表顯示相關(guān)客戶信息根本流1輸入客戶,并提交2列表單獨顯示查詢的客戶信息備注不存在的情況下,列表即為空搜索客戶信息,我們需要提供兩種途徑,分別是通過和月份,通過直接輸入查詢出客戶信息即可通過系統(tǒng)列表顯示出相應(yīng)搜索名的信息列表?;蛘咻斎朐?幾個月份之的所有客戶信息,我們可以輸入多個月份,例如輸入“1-12〞,意思就是顯示當(dāng)前客戶列表中生日在1-12個月的信息,意思就是顯示所有客戶信息了。也可以輸入一個月份的信息,同樣提交就會顯示相應(yīng)的客戶提示信息列表。如果相關(guān)信息不存在,列表顯示為空,如表2-4搜索客戶信息所示。表2-5注冊用戶用例名稱注冊用戶功能簡述添加用戶和密碼,提交前置條件該用戶名不存在后置條件注冊成功根本流1輸入用戶名和密碼提交2用戶名和密碼注冊到數(shù)據(jù)庫備注如果用戶存在將會彈出異常對話框 注冊用戶,在注冊用戶之前我們要確定用戶不存在,否則我們無法提交用戶信息到數(shù)據(jù)庫。成功提交用戶信息,將會在數(shù)據(jù)庫中存儲,并提示“注冊成功〞 這樣的提示信息。如表2-5注冊用戶所示。表2-6刪除客戶信息用例名稱刪除客戶信息 功能簡述用戶刪除客戶的生日信息以及備注信息前置條件數(shù)據(jù)庫已經(jīng)存在該客戶的信息后置條件刪除成功根本流1用戶在客戶信息列表中選擇要刪除的行2列表息被刪除,數(shù)據(jù)庫中該條信息被刪除備注如果無法刪除將會彈出相關(guān)異常信息 刪除客戶信息只需要選中我們列表中的*一條信息,點擊“刪除〞按鈕即可刪除的,如果無法刪除將會有系統(tǒng)提示信息。如表2-6刪除客戶信息所示。-.z.-可修編-第3章概要設(shè)計3.1流程圖圖3-1系統(tǒng)流程圖 圖3-1系統(tǒng)的全程流程圖描述了系統(tǒng)的各個模塊,以及操作的執(zhí)行順序,我們后面將根據(jù)我們的需求和描述安排,對系統(tǒng)設(shè)計和開發(fā)。3.2數(shù)據(jù)構(gòu)造數(shù)據(jù)構(gòu)造是指數(shù)據(jù)相互之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合和該集合中數(shù)據(jù)元素之間的關(guān)系組成。 系統(tǒng)模塊包括多個信息元素,其中包括系統(tǒng)的登陸、用戶注冊、修改密碼、切換用戶、添加客戶信息、刪除客戶信息、搜索客戶信息、最近生日和切換用戶等等,如圖3-2所示:圖3-2系統(tǒng)構(gòu)造圖表3-3描述了系統(tǒng)的數(shù)據(jù)構(gòu)造表組成關(guān)系和屬性信息,其中包括用戶、添加、刪除、注冊和搜索信息。如表3-3所示:表3-3數(shù)據(jù)構(gòu)造表數(shù)據(jù)構(gòu)造名 關(guān)系 屬性用戶用戶是軟件登陸控制中心的主體數(shù)據(jù)構(gòu)造,定義了系統(tǒng)的登陸用戶的相關(guān)信息用戶名、密碼、權(quán)限ID添加以inf的主體構(gòu)造,添加客戶的相關(guān)信息添加客戶、成交商品、年月日、來源和備注新刪除以inf的主體構(gòu)造,刪除客戶的相關(guān)信息刪除客戶、成交商品、年月日、來源和備注新注冊以用戶信息為主體構(gòu)造,添加用戶信息添加用戶名、密碼和權(quán)限搜索以inf客戶信息為主體將構(gòu)造,檢索客戶信息選擇客戶、成交商品、年月日、來源和備注新第4章數(shù)據(jù)庫設(shè)計4.1信息表表4-1reguser字段名稱字段名數(shù)據(jù)類型長度用戶名userChar20密碼passwordChar20權(quán)限idChar5 reguser表是我們注冊用戶的數(shù)據(jù)庫表格,存儲信息即為我們所有注冊用戶信息。其中包括user、password和id。其中這里id是char類型的,但是這里我們的選項只有1、2和3,其中1將會代表高級權(quán)限、2代表普通權(quán)限和3代表我們的信息閱覽用戶。如表4-1reguser所示;表4-2inf字段名稱字段名數(shù)據(jù)類型長度nameChar20年yearint8月monthint6日dayint4產(chǎn)品proChar20客戶來源sourceChar20達(dá)成交易saleChar20 表inf的存儲容是我們客戶的信息存儲一欄,其中字段包括name、year、month、day、pro、source、sale;分別對應(yīng)的字段名稱是、年、月、日、產(chǎn)品、客戶來源和達(dá)成交易。其中年月日的類型是使用的int類型,其中在此因為涉及到判斷月份信息,所以int是必不可少的。如表4-2inf所示;4.2ER圖管理員管理員賬號密碼擁有客戶**年-月—日產(chǎn)品客戶來源達(dá)成交易權(quán)限n m圖4-3ER圖系統(tǒng)設(shè)定了兩個表格,數(shù)據(jù)庫db,包括reguser和inf兩個表格。其中reguser為我們的注冊用戶表,而inf就是我們的客戶信息管理表格。兩個表格對應(yīng)的關(guān)系就是用戶可以查看inf的信息,并可以對用戶信息作出修改。Reguser包括的字段分別為:賬號、密碼和ID。ID實現(xiàn)了用戶的權(quán)限管理,我們這里使用的1代表我們的最高權(quán)限即我們的“高級管理〞、2代表我們的普通管理權(quán)限即我們的“普通管理〞,最后是我們的“信息閱讀〞也就是3了,它只能夠?qū)崿F(xiàn)我們的普通閱讀的功能。如圖4-3ER圖所示。 每個用戶都可以訪問我們的客戶信息??蛻粜畔⒆侄伟ǎ?、年月日、達(dá)成交易、客戶來源和產(chǎn)品、數(shù)據(jù)庫分別對應(yīng)的是:name、year、month、day、sale、source和pro。第5章界面設(shè)計5.1軟件界面登陸界面:為了表達(dá)界面的美觀度,對于登陸窗口的設(shè)計采用了分層面板,普通的contentPane是無法實現(xiàn)背景圖片的展現(xiàn),而在這里我們就采用了分從面板,這樣子我們很容易的將我們登陸面板參加了美觀的背景圖片;布局方式則采用的是FlowLayout,即我們默認(rèn)的布局方式,這里的好處是可以按照SetBounds來隨意調(diào)整其想要安排的位置,相對而言也是表達(dá)一種美觀和數(shù)據(jù)的準(zhǔn)確度上。對于我們標(biāo)題“客戶信息管理系統(tǒng)〞我們采用的是"Dialog"字體類型,并且設(shè)置大小為26,因為標(biāo)題都是比擬大的,所以我們設(shè)置的相對較大,而其它的選填框則采用的是默認(rèn)的字體大小。在這里大家都知道,我們要輸入的是用戶名和密碼,則不可防止地,我們經(jīng)常會碰到用戶名或密碼錯誤的提示,則在這里也是一樣的,只是我們采用的風(fēng)格不太一樣,如果我們的密碼或者是用戶名錯誤,則我們的Label也就是我們的“用戶名:〞和“密碼:〞都會變成紅色,并且顯示的相關(guān)信息則是“用戶名!〞和“密碼!〞,并且是紅色的字體,這樣做的好處是變得醒目和加以提示。而當(dāng)通過時,其字體將會恢復(fù)到最初的狀態(tài),即“用戶名:〞和“密碼:〞。系統(tǒng)中心界面:系統(tǒng)界面的布局就相對要復(fù)雜一些了,上面的菜單欄、工具欄和下面的Frame都是默認(rèn)方式,也就是FlowLayout,則下面的Frame里面的容也就是一個表格和一個Te*t文本的排序newGridLayout(2,1),并且一分為二,則其中一局部是我們的表格信息,另一局部則是我們的系統(tǒng)顯示和本月生日框信息,我們的字體都是默認(rèn)字體大小。我們在系統(tǒng)上添加了很多的功能,其中就包括注冊賬戶、添加信息等等。我們的字體統(tǒng)一的都是系統(tǒng)默認(rèn)字體大小,如果在系統(tǒng)遇到異常信息或者是*些需要提醒時我們采用的顯示方式均為JOptionPane.showMessageDialog(null,"**")這樣的方式,**就是我們提示的信息容。添加客戶信息界面:添加界面相比照擬簡單,我們的布局模式就是默認(rèn)的FlowLayout,所以這樣添加的每一個控件都會被按照順序相應(yīng)地添加進(jìn)來,其中我們包括的模塊如下:JTe*tFieldnameField,JTe*tFieldyearField,JTe*tFieldmonthField,JTe*tFielddayField,JTe*tFieldproductField,JTe*tFieldsourceField和JTe*tFieldsaleField,分別對應(yīng)的關(guān)系為:"","年-月-日","產(chǎn)品","客戶來源","達(dá)成交易"。以及我們后面添加的兩個按鈕uttonaddButton=newutton("添加");uttoncancelButton=newutton("取消");兩個按鈕就已經(jīng)顯而易見了,實現(xiàn)的操作就是當(dāng)我們輸入相關(guān)的信息,添加按鈕將會觸發(fā)事件actionListener,然后通過或許相關(guān)信息添加到數(shù)據(jù)庫中。搜索界面:搜索只需要兩個控件,分別是選框和搜索按鈕,這里還是比擬容易實現(xiàn)的。系統(tǒng)搜索會檢索我們所輸入的,數(shù)據(jù)庫中的SQL語句如下:"select*frominfwherename='"+s+"'",這樣我們就獲得了我們需要的搜索信息,并且我們會將我們搜索的信息捕捉并新建一個InSystem的類,而這個類中table中所顯示的列表信息就是我們所搜索的信息了。最近生日界面:intw=(int)(scrSize.getWidth()-260);inth=(int)(scrSize.getHeight()-235);setBounds(w,h,260,190);這是我們的邊界設(shè)計,窗口的大小是根據(jù)我們不同計算機顯示器的分辨率不同來計算的,其中顯示的位置坐標(biāo)的起始位置是(scrSize.getWidth()-260)和(scrSize.getHeight()-235),即也就是長和高的位置了。另外我們固定的大小分別是260*190的尺寸。我們起始位置的設(shè)定也是有根據(jù)的,因為我們希望我們的系統(tǒng)提醒的窗口是在我們計算機的右下角顯示的,所以我們需要根據(jù)不同的計算機分辨率來設(shè)計其固有的位置,所以我們就要獲取系統(tǒng)的分辨率值,這也是我們所有界面中唯一考慮到計算機分辨率大小的一點。5.2界面跳轉(zhuǎn)關(guān)系MainLoadMainLoad.java登陸重新登錄InSystem.javaRegWindow.javaBirthInform.javaAddInform.javaNameSearchInfrom.java注冊提醒添加搜索返回新建圖5.2界面跳轉(zhuǎn)關(guān)系我們系統(tǒng)的運行最初端口MainLoad.java開場,通過我們的輸入的用戶名和密碼直接跳轉(zhuǎn)我們的系統(tǒng)主界面,即InSystem.java。當(dāng)然進(jìn)入系統(tǒng)之前系統(tǒng)是需要判斷的,比方我們的用戶名和密碼錯誤或者是其它異常等等,這里我們采用的方式就是Label提醒,就是改變Label的文字容和其顏色來提示我們的信息錯誤,一旦填寫錯誤并且提交之后,系統(tǒng)就會做出相應(yīng)的提示,并且重新輸入用戶名和密碼。用戶名和密碼正確我們的系統(tǒng)Progress進(jìn)程塊運行完畢正常跳轉(zhuǎn)InSystemn.java.進(jìn)入我們的系統(tǒng)之后,從菜單欄文件開場,則點擊“注冊〞將會直接跳轉(zhuǎn)到RegWindow.java,即我們的注冊用戶窗口。因為注冊窗口我們關(guān)閉之后我們的接下來的程序就是重新登錄,則我們就重新回到了MainLoad(),如此循環(huán)到主系統(tǒng)界面,我們進(jìn)入切換窗口。切換窗口的功能就是登錄不同賬號,點擊切換按鈕后,我們又關(guān)閉了當(dāng)前的系統(tǒng),即dispose(),然后重new一個MainLoad(),則同樣的還是回到MainLoad,這里我們可以更改不同的賬號進(jìn)展登錄。添加賬戶信息:直接跳轉(zhuǎn)AddInform.java,這里將會填入相關(guān)的客戶信息,添加之后關(guān)閉添加的界面,回到主主界面。搜索:跳入的是NameSearchInform.java,這里確定后是檢索的過程,然后通過主界面的表格來顯示,所以關(guān)閉當(dāng)前的搜索窗口。最近生日:跳入BirthInform.java,統(tǒng)計最近生日列表。最近生日:跳入的是BirthInform.java,這里只需要在工具欄上點擊“最近生日〞即可生成最近生日的窗口。并且該窗口是定時出現(xiàn)的,即使我們現(xiàn)時間關(guān)閉了。如圖5.2界面跳轉(zhuǎn)關(guān)系。第6章詳細(xì)設(shè)計與實現(xiàn)6.1系統(tǒng)執(zhí)行流程6.1.1登陸模塊 系統(tǒng)的運行是從MainLoad開場執(zhí)行的,執(zhí)行顯示的就是我們的初始登錄界面,我們需要在這里輸入我們數(shù)據(jù)庫中已經(jīng)存在的用戶名和密碼。如果用戶名和密碼的信息是正確的,則將會跳轉(zhuǎn)到系統(tǒng)管理界面,并且會彈出“最近生日提醒〞.同樣地,如果是用戶名和密碼錯誤,系統(tǒng)將會顯示相應(yīng)的提醒信息,我們這里的提醒信息比擬直觀,我們直接將“用戶名〞和“密碼〞的te*t文本顯示為紅色和“用戶名!〞,〞密碼!〞這樣的格式,在重新輸入后,我們的系統(tǒng)將會對其進(jìn)展檢測,如果正確,則之前的紅色文字“用戶名!〞,“密碼!〞將會恢復(fù)原有的“用戶名〞和“密碼〞。并且跳轉(zhuǎn)。 圖6-1登陸模塊if(userTe*t.getTe*t().trim().equals("")||passWord.equals("")){JOptionPane.showMessageDialog(this,"您尚未輸入用戶名或密碼");}else{try{while(rs.ne*t()){if(userTe*t.getTe*t().trim() .equals(rs.getString("user")) &&passWord.equals(rs.getString("password"))){userLabel.setTe*t("用戶名:");userLabel.setForeground(Color.black);passLabel.setTe*t("密碼:");passLabel.setForeground(Color.black);grant=rs.getString("id"); timer.start();break; }else{if(userTe*t.getTe*t().trim() .equals(rs.getString("user"))){passLabel.setTe*t("密碼錯誤");passLabel.setForeground(Color.red); }else{userLabel.setTe*t("用戶名!");userLabel.setForeground(Color.red);passLabel.setTe*t("密碼!");passLabel.setForeground(Color.red); }}} }catch(SQLE*ceptione1){ e1.printStackTrace();}} 該方法的獨特之處在于改變了Label的相關(guān)顯示方式,以往我們更多采用的是ShowMessageDialog這樣的顯示方式,而在這里,我們直接利用我們的顯示信息做出改變,這樣是不是會變得更加直觀呢,是的,下面介紹其工作的流程和方式。 首先if(userTe*t.getTe*t().trim().equals("")||passWord.equals(""))該條語句實現(xiàn)的是判斷我們的用戶名和密碼的輸入是否為“〞空,如果為空,后面就有了語句JOptionPane.showMessageDialog(this,"您尚未輸入用戶名或密碼"),當(dāng)然看到這里的語句提示,其實我們就大概知道了,這條語句就是為了提示我們輸入用戶名和密碼,因為我們之前的操作一定是有用戶名或密碼沒有填寫。則除了為空,還有其它的可能,比方說輸入的密碼錯誤或者用戶名錯誤或者是我們干脆登陸成功了,則else后面將一一解釋。 下一步自然就是通過我們的數(shù)據(jù)庫來檢索了,利用rs.getString("user")來獲得我們數(shù)據(jù)庫中的用戶名信息,userTe*t.getTe*t().trim()而這里是獲得我們輸入的用戶名信息,以及passWord.equals(rs.getString("password"))來判斷我們輸入的密碼和我們檢索到的用戶名密碼是否對應(yīng)。userLabel.setForeground(Color.black);passLabel.setForeground(Color.black);而這里之所以用到就是為了密碼錯誤后,Label被修改為不同字體和顏色了,此處為恢復(fù)正常,雖然我們還沒到密碼錯誤的狀態(tài),但是這里是必須的,否則一旦密碼錯誤后,這里就顏色就是紅色了,紅色的實現(xiàn)在這下面的操作的,下面介紹: if(userTe*t.getTe*t().trim().equals(rs.getString("user"))),這里我們將會判斷我們的用戶名信息,同樣和我們的數(shù)據(jù)庫來做比照,如果是正確的,則這里將會設(shè)置passLabel.setTe*t("密碼錯誤"),密碼Label顯示為密碼錯誤,顏色設(shè)置passLabel.setForeground(Color.red);這里為什么是用戶名和數(shù)據(jù)庫用戶名對應(yīng)正確后還顯示密碼錯誤呢?因為我們前面判斷了,如果系統(tǒng)無常登陸,并且我們的用戶名正確的話,很顯然就是我們的密碼錯誤了。同樣地,如果用戶名有問題則就是設(shè)置userLabel.setTe*t("用戶名!");這里的用戶名文字被修改為了“用戶名!〞,而userLabel.setForeground(Color.red);將會設(shè)置用戶名的顏色為紅色,passLabel.setTe*t("密碼!");passLabel.setForeground(Color.red);同樣的password也要被設(shè)置為紅色和“密碼!〞的形式,因為用戶名錯誤密碼就更不用說了。 則回過頭來前面流程中我們之所以設(shè)置器恢復(fù)默認(rèn)的顏色就是在這里了,因為我們這次可能出現(xiàn)了問題,則顏色設(shè)置了紅色并且不同的文字,則下次登錄的時候如果還是現(xiàn)實密碼錯誤等等之類的文字的話那就不太直觀和人性化了,所以我們讓這里默認(rèn)重新設(shè)置一次,即使上次沒有過這樣的密碼錯誤問題,則在初始化的同時也做了一次這樣的操作,其實這樣在程序優(yōu)化上就可以有的操作了,當(dāng)然,對于我們的小程序,這簡短的操作還是可以忽略的。6.1.2密碼修改模塊圖6-2密碼修改模塊密碼修改的模塊是在系統(tǒng)控制中心的文件菜單欄里進(jìn)入的,進(jìn)來之后,直接輸入用戶名和新的用戶密碼就可以修改的,這里為了減少繁瑣就省去了檢測原有密碼的成分。只要輸入的用戶名正確,這里我們就可以用過我們的新密碼直接修正成功。則修改之后,我們的系統(tǒng)會轉(zhuǎn)入“登陸界面〞,這里將會實現(xiàn)重新登錄,因為我們修改密碼后系統(tǒng)所在的狀態(tài)如果還是原有的密碼狀態(tài)下是不平安的,所以我們要重新登陸以確認(rèn)密碼的修改無誤。如圖6-2所示;6.1.3注冊用戶模塊圖6-3注冊用戶模塊注冊用戶模塊相對也是比擬直觀和簡單的。注冊模塊也是通過系統(tǒng)控制中心通過菜單欄的“注冊用戶〞進(jìn)來的。輸入用戶名和密碼,確認(rèn)。前提是用戶名不存在,如果用戶名已經(jīng)存在,則就會報錯的,系統(tǒng)的提示就是“用戶名已經(jīng)存在,請更換用戶名〞,所以就會再次清空用戶名和密碼,這時我們要做的就是更換用戶名,并輸入密碼,確認(rèn),則數(shù)據(jù)庫中就有了我們新的用戶名信息,下次登錄就可以直接使用了。如上圖如圖6-3注冊用戶模塊所示: 6.1.4切換用戶模塊切換用戶的原理就更簡單了,其實我們只需要將我們當(dāng)前的系統(tǒng)控制中心dispose()掉,然后重新new一個MainLoad那我們就實現(xiàn)了用戶的切換,這時候其實就是相當(dāng)于再輸入一個其它的用戶名和密碼,那我們就登陸進(jìn)了系統(tǒng)控制中心,那我們就已經(jīng)完成了系統(tǒng)的用戶切換。切換用戶點擊,直接登陸窗口,如圖6.2.4切換用戶模塊。圖6-4切換用戶模塊6.1.5添加客戶信息端模塊圖6-5添加客戶信息端模塊添加客戶信息端設(shè)計的文本框要多一些,但是這些還是統(tǒng)一的,所以相對而言也是比擬簡易的。其實在添加模塊的建立之前,系統(tǒng)就已經(jīng)自動為我們好了數(shù)據(jù)庫,這個是由類的構(gòu)造方法最初調(diào)用的connect()方法。我們的信息將會在輸入框過field方法nameField.getTe*t()獲取到,同樣地,我們還會利用insertintoinfvalues(",",",",",",")來插入數(shù)據(jù)到數(shù)據(jù)庫,這時候我們的數(shù)據(jù)庫將會檢索我們的信息是否已經(jīng)在數(shù)據(jù)庫中存在,以及信息的數(shù)據(jù)長度和類型等等進(jìn)展判斷,如果是錯誤的將會相應(yīng)的異常信息來提醒,如果正確的,就會直接添加到我們的數(shù)據(jù)庫,這時候系統(tǒng)就已經(jīng)添加成功了。不過在我們的系統(tǒng)界面中我們不能在第一時間就能看到新添加的數(shù)據(jù)信息,系統(tǒng)是不能夠再次自動刷新系統(tǒng)的,所以我們添加了一個按鈕“更新〞,其實這里更新不是更新軟件系統(tǒng),而是更新我們的數(shù)據(jù)信息,在我們添加信息后,我們可以通過“更新〞來實現(xiàn)信息的事實展現(xiàn)。如圖6-5添加客戶信息端模塊。6.1.6最近生日模塊圖6-6最近生日模塊 最近生日模塊是由BirthInform.java實現(xiàn)的,其實該模塊的調(diào)用是通過多種途徑的,其中之一就是系統(tǒng)開啟的第一時間就會有“最近生日〞模塊自動彈出的,這樣的設(shè)計就是方便我們的實時提醒。同時“最近生日〞模塊還有在工具欄上有所表達(dá),因為我們平常的開機后系統(tǒng)是自動運行的,不同的時間我們可能有興致想要查看則可以通過“最近生日〞按鈕直接點擊查看;而另外一種方式就是自動間隔提醒了,可以設(shè)置幾個小時提醒一次或者多久。系統(tǒng)進(jìn)入之后通過最近生日,系統(tǒng)就會在數(shù)據(jù)庫中檢索最近3日生日的客戶信息,最后返回到最近生日窗口中。6.1.7刪除模塊圖6-7刪除模塊 刪除模塊更多的技術(shù)重點就是我們在列表中需要選中*一行數(shù)據(jù),而選中的這行數(shù)據(jù),在我們點擊“刪除〞按鈕后就會被刪除掉,所以我們就從table的相關(guān)方法入手了。introw=jt.getSelectedRow(),我們是通過該條語句獲得的我們的系統(tǒng)行,獲得的系統(tǒng)行,我們會通過數(shù)據(jù)庫的檢索來查詢該行語句的相關(guān)容,然后再數(shù)據(jù)庫中繼續(xù)檢索該條信息,并利用語句“deletefrominfwherename="andsale="〞實現(xiàn)對相關(guān)選中項信息的刪除搜索,我們的判斷條件是加上了“name〞和“sale〞兩個字段屬性,我們之所以用兩個字段的目的就是為了防止同名的信息被誤刪除,所以該處我們用了兩個字段。6.1.8搜索模塊搜索模塊的路徑是有多條的,其中可以通過工具欄直接進(jìn)入,當(dāng)然也可以通過菜單欄。我們這里的搜索只需要輸入我們要查找的客戶,確認(rèn)之后會通過系統(tǒng)連接數(shù)據(jù)庫檢索數(shù)據(jù)庫中是否存在該,如果存在的話,則信息將會顯示在我們的系統(tǒng)可控制中的列表中,假設(shè)此時我們搜索的是客戶“際斌〞,則系統(tǒng)列表中將會展現(xiàn)有關(guān)客戶“際斌〞的信息。如果我們所搜索的客戶信息是不存在的,則同樣的列表中也會展現(xiàn),只是展現(xiàn)的容為空。如圖6.2.7搜索模塊:圖6-8搜索模塊6.1.9刷新模塊圖6-9刷新模塊 系統(tǒng)中的數(shù)顯模塊主要為刷新我們的數(shù)據(jù)顯示,因為我們有時候更新了數(shù)據(jù),系統(tǒng)不能實時更新顯示在我們的當(dāng)前列表中,所以我們就要通過我們的手動操作來實現(xiàn)我們的數(shù)據(jù)更新操作。我們這里采用的方法也是比擬傻瓜式的,那就是新建一個類,這個類就是InSystem(),則系統(tǒng)就重新檢索數(shù)據(jù)庫了,所以我們這里的數(shù)據(jù)就一定會被顯示出來的。操作很簡單,直接點擊工具欄上的“更新〞按鈕即可實現(xiàn)系統(tǒng)顯示數(shù)據(jù)的操作功能,此時我們可能會發(fā)現(xiàn)有兩個系統(tǒng)類的窗口同時出現(xiàn)。6.2編碼規(guī)6.2.1變量命名 變量名的命名我們都是采用首個單詞利用小寫,后面單詞利用大寫首字母的方式。這樣的有利于更加直觀地表現(xiàn)我們該個變量到底是用作在什么用的表現(xiàn)方式上。比方我們的logButton,其實我們可以通過Button知道我們的這個變量一定是一個按鈕,而log就是登錄的意思,則很顯然,這個變量要操作的就是登錄按鈕。而在以上的代碼中第一塊中我們實現(xiàn)的是我們系統(tǒng)的登陸頁面。登陸頁面的變量有l(wèi)oad,logButton,regButton,userTe*t,passTe*t,grant,userLabel,passLabel,sysLabel,authorLabel,timer,timer2,timer3,timer4;其中l(wèi)oad我們是進(jìn)度條的類別,我們用來檢測系統(tǒng)的進(jìn)度情況,進(jìn)度條完成到100%,系統(tǒng)加載成功,則將會實現(xiàn)new一個新的InSystem實現(xiàn)系統(tǒng)控制中心的登陸操作。這里的label也是比擬有特色的,按照以往的定義Label就是規(guī)定的定義,并且不會有怎樣特殊的變動,而這次在我們這里,我們的Label也會根據(jù)我們的相關(guān)條件和異常而變動,比方說當(dāng)我們在輸入用戶名和密碼的時候,我們可能會遇到密碼或者用戶名錯誤的情況,則為了更好地提示用戶具體發(fā)生了什么,則我們會因用戶名或密碼錯誤而改變我們這里的Label變量,讓它們在原有的文字或者顏色上發(fā)生了變動,比方“用戶名〞會直接變成“用戶名!〞,并且后者的顏色是紅色的,而原有的是黑色。則在我們登陸成功以后,則我們的變量名還會回到原有的字體和顏色,這是不是很奇妙的哦。nameField,yearField,monthField,dayField,productField,sourceField以上關(guān)鍵詞主要實現(xiàn)了我們的文本選框,同樣的命名方式也是一樣的,我們的添加客戶信息框的信息就主要應(yīng)用到了這里的相關(guān)變量信息。該段對應(yīng)的相關(guān)變量分別為:、年-月-日、產(chǎn)品、客戶來源和搭建成交易。系統(tǒng)中心構(gòu)造方法publicInSystem(Stringsql){if(!sql.equals("select*frominf"))this.dispose();timer1=newTimer();now_timerTask1=newE*Timer1();timer1.schedule(now_timerTask1,60*1000,360*1000);connect();con.setLayout(newBorderLayout(0,1)); menuBar(); toolBar();area(sql);con.add(panel[0]); setTitle("客戶信息管理系統(tǒng)——Albin.Sun"); setBounds(360,100,620,560); setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE); setVisible(true); } 另外InSystem是我們系統(tǒng)管理中心一個至關(guān)重要的構(gòu)造方法,該方法的加載是需要傳遞參數(shù)的,我們默認(rèn)的參數(shù)是"select*frominf",如果不是該參數(shù)的話,則我們的系統(tǒng)再次將不會被加載。另外我們設(shè)置了定時器timer,timer的使用是為了我們“最近生日〞窗口的定時跳出而設(shè)置的。因為我們的系統(tǒng)會定時提醒我們的用戶*一個客戶就要生日了,也有可能會在無視掉,所以在我們開機的階段中可以根據(jù)我們個人的習(xí)慣或配置來設(shè)計跳出的時間,1000為一秒,60*1000就是一分鐘了,在這里這個60的參數(shù)其實是在第一次系統(tǒng)執(zhí)行時該窗口在什么時間會跳出第一次,我們默認(rèn)的設(shè)置就是1分鐘了。而我們后面的360*1000其實為的就是我們系統(tǒng)的跳出時間間隔所設(shè)計的了,這里的360就是6分鐘了。也就是說,在我們的系統(tǒng)運行后,我們的系統(tǒng)會根據(jù)最近生日情況在6分鐘一個間隔不斷地提醒,當(dāng)然6分鐘就有點頻繁了,這里完全可以設(shè)置時間為幾個小時,這樣更利于我們的方便和操作。 connect()方法在這里就直接被應(yīng)用起來了,系統(tǒng)在調(diào)用該構(gòu)造方法的初始階段我們就調(diào)用了connect()方法,也就是我們上面最初介紹的方法,則這個時候不出意外,我們的系統(tǒng)就與我們的db數(shù)據(jù)庫建立了,后面如果需要,就可以隨時使用了。 con.setLayout(newBorderLayout(0,1))設(shè)置我們的系統(tǒng)空中中心界面的布局模式,我們使用的BoderLayout。 緊接著我們的menuBar()就上場了,我們系統(tǒng)設(shè)置之初除了最后后臺的工作外就是配置我們的前臺界面了。因為我們的菜單欄的設(shè)置是在我們系統(tǒng)的最上端的,所以我們讓我們的構(gòu)造方法先調(diào)用了我們的menuBar()方法,系統(tǒng)調(diào)用menuBar()方法會在該方法中實現(xiàn)相應(yīng)的菜單模式和屬性,在這里就已經(jīng)生成了我們的菜單欄,接下來呢,我們要操作的就是工具欄了。 工具欄就是我們的toolBar()方法了,該方法跟上面的menuBar()一樣,在調(diào)用后就自動生成了我們的工具欄,其中我們的工具欄包括:〞添加〞,〞刪除〞,〞保存〞,〞最近生日〞,〞搜索〞,〞退出〞和〞更新〞。其中我們可以介紹一下相應(yīng)的功能,添加、刪除和保存就不用介紹了。我們來簡單地說一下我們的“最近生日〞、“搜索〞和我們的“更新〞功能。 最近生日是響應(yīng)了一個事件,在我們該按鈕被點擊的時候,監(jiān)聽事件會相應(yīng)的new一個新的類,而這個類就是我們的BirthInform,我們這個類的初始化就會直接檢索我們最近3日生日的客戶,如果存在,我們的BirthInform窗口將會列出相應(yīng)的客戶生日信息。如果該信息是不存在的,則我們的系統(tǒng)默認(rèn)值是〞最近沒有客戶生日〞,我們這里的方法調(diào)用是這樣實現(xiàn)的:newBirthInform(birthPeople),birthPeople的最初值是“最近沒有客戶生日〞,但是在new類BirthPeople的之前,我們事先對birthPeople=bo*Name+bo*Year+"-"+bo*Month+"-"+bo*Day+"\n"做了工作,如果bo*Name不存在,也就是我們最近沒有過生日,則birthPeople=bo*Name+bo*Year+"-"+bo*Month+"-"+bo*Day+"\n"根本不會被執(zhí)行,則birthPeople的默認(rèn)值還是〞最近沒有客戶生日〞,所以在這里就實現(xiàn)了,如果存在則會顯示,如果不存在,則會顯示〞最近沒有客戶生日〞,這樣就相比照擬人性化了。 搜索也是new一個新的類NameSearchInform,則在這里我們直接輸入我們的,我們的系統(tǒng)將會在數(shù)據(jù)庫中開場檢索我們的是否存在,如果存在,我們的系統(tǒng)將會new一個新的InSystemn,而我們這個新的客戶信息列表將會顯示的是我們的剛剛搜索出的信息,如果搜索“際斌〞,則也就是會顯示“際斌〞的相關(guān)信息了。同樣地,如果我們的系統(tǒng)不存在所搜索的生日信息,則我們這個新的操作窗口列表也就是顯示為空了。 更新實質(zhì)上的宗旨就是刷新我們的數(shù)據(jù)顯示,因為我們有時候更新了數(shù)據(jù),系統(tǒng)不能實時更新顯示在我們的當(dāng)前列表中,所以我們就要通過我們的手動操作來實現(xiàn)我們的數(shù)據(jù)更新操作。我們這里采用的方法也是比擬傻瓜式的,那就是新建一個類,則系統(tǒng)就重新檢索數(shù)據(jù)庫了,所以我們這里的數(shù)據(jù)就一定會被顯示出來的。 setTitle("客戶信息管理系統(tǒng)——Albin.Sun")對我們的系統(tǒng)標(biāo)題設(shè)置為"客戶信息管理系統(tǒng)——Albin.Sun",這個設(shè)置是在系統(tǒng)初始化時,即在我們的構(gòu)造方法中時出現(xiàn)的,如果其它情況下將不會有效了。 setBounds(360,100,620,560)設(shè)置我們的布局大小,其中左邊開場的距離是360,上面的距離是100,另外我們的系統(tǒng)的界面大小是620*560,這里實現(xiàn)了我們的大小定義。 setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE)當(dāng)然也很明了了,在java窗口開發(fā)中如果缺乏了該條語句,我們的窗口通過右上角的關(guān)閉按鈕是無常關(guān)閉的,所以我們會借用系統(tǒng)已經(jīng)擁有的該方法來實現(xiàn)右上角關(guān)閉功能的生效,所以現(xiàn)在我們點擊關(guān)閉按鈕即可正常關(guān)閉窗口。 setVisible(true),系統(tǒng)可見的,如果是false的話,則理所當(dāng)然,這個窗口也就不會被正常顯示了。添加客戶信息模塊監(jiān)聽器publicvoidactionPerformed(ActionEvente){ if(e.getSource()==addButton){ if(nameField.getTe*t().equals("")){ nameField.setTe*t("尚未填寫呢~"); nameField.setCaretColor(Color.red); }else{ try{ StringsqlIn="insertintoinfvalues(",",",",",",")"; PreparedStatementstmt=conn.prepareStatement(sqlIn); stmt.setString(1,nameField.getTe*t()); stmt.setString(2,yearField.getTe*t()); stmt.setString(3,monthField.getTe*t()); stmt.setString(4,dayField.getTe*t()); stmt.setString(5,productField.getTe*t()); stmt.setString(6,sourceField.getTe*t()); stmt.setString(7,saleField.getTe*t()); stmt.e*ecuteUpdate(); JOptionPane.showMessageDialog(this,"添加成功"); //super.dispose(); this.dispose();// this.dispose(); newInSystem("select*frominf"); }catch(SQLE*ceptione*){ e*.printStackTrace(); }catch(NumberFormatE*ceptione*){// JOptionPane.showMessageDialog(null,"添加失敗"); } } }else this.dispose(); } actionPerformed方法使我們的監(jiān)聽器,監(jiān)聽器執(zhí)行的開端首先要判斷該事件的來源是哪里,所以我們if(e.getSource()==addButton)的目的就是為了判斷事件來源是否為“添加〞按鈕,如果判斷正確的話我們將會執(zhí)行下面的語句if(nameField.getTe*t().equals(""))這里是為了判斷我們的客戶名是否為空,如果沒有填寫的話,我們的nameField的文本信息將會顯示“尚未填寫呢~〞,其實這里的目的就是為了提示用戶沒有填寫客戶名,因為客戶名是所必需的,并且我們還有設(shè)置了nameField為紅色。其它情況下我們默認(rèn)都是正確的,我們執(zhí)行StringsqlIn="insertintoinfvalues(",",",",",",")"和PreparedStatementstmt=conn.prepareStatement(sqlIn),其實我們這里就是要插入信息,而問號的容就在后面通過stmt.setString(2,yearField.getTe*t())這樣的設(shè)置,有幾個問號就設(shè)置到了幾個,最后通過stmt.e*ecuteUpdate()開場執(zhí)行插入操作,這個時候會有添加成功的提示,添加成功后我們希望在一個新的列表中能夠顯示我們剛剛添加的客戶信息,所以這里我們new了一個新的InSystem("select*frominf");如果我們的添加過程中遇到了異常信息,很顯然就是添加失敗的,我們的通過JOptionPane.showMessageDialog(null,"添加失敗")提示錯誤信息。6.2.4KeyEvent.VK_ENTER的使用 系統(tǒng)的設(shè)計我們都依賴于鼠標(biāo)的操作和執(zhí)行命令的下達(dá),而我們的實際生活中可能會更多應(yīng)用鍵盤來操作,因為當(dāng)我們在進(jìn)展鍵盤操作的時候我們不習(xí)慣再去拿起鼠標(biāo)和放下鼠標(biāo)繼續(xù)鍵盤這樣的操作,所以在我們的軟件系統(tǒng)中,我們在很多模塊中就已經(jīng)參加了回車執(zhí)行以上命令的操作。 其實參加“Enter〞執(zhí)行的模塊包括如下:登陸按鈕、添加客戶按鈕和搜索客戶信息按鈕。我們的Enter操作是建立在該模塊最終選框的事件之上的,現(xiàn)在舉例說明如下: 在我們的登陸模塊中,我們輸入完用戶名就是密碼了,密碼之后就是確認(rèn)登陸的按鈕,則我們就在密碼這個文本框上做工作,添加了密碼.addKeyListener(newKeyAdapter(),添加這個監(jiān)聽器后,我們在這里面添加了一個新的方法叫做publicvoidkeyPressed(KeyEvente),這個方法就是用來堅硬回車鍵的操作,則監(jiān)聽到的按鍵將會被e.getKeyCode()獲取,然后與我們的系統(tǒng)回車鍵,也就是KeyEvent.VK_ENTER來做比擬,if(e.getKeyCode()==KeyEvent.VK_ENTER)也就是說明我們當(dāng)前的操作鍵是“Enter〞,好了,我們將會執(zhí)行這樣的操作,logButton.doClick()。logButton是我們的登陸按鈕,通過doClick()方法實現(xiàn)了我們的登陸按鈕的自動點擊,言外之意就是說明我們按下回車鍵的操作就相當(dāng)于用鼠標(biāo)點擊了我們的logButton,所以回車執(zhí)行我們的操作。 添加客戶按鈕的回車操作,我們是在saleField 文本框中添加了addKeyListener(newKeyAdapter(),同樣地操作,添加這個監(jiān)聽器后,我們在這里面添加了一個新的方法叫做publicvoidkeyPressed(KeyEvente),這個方法就是用來堅硬回車鍵的操作,則監(jiān)聽到的按鍵將會被e.getKeyCode()獲取,然后與我們的系統(tǒng)回車鍵,也就是KeyEvent.VK_ENTER來做比擬,if(e.getKeyCode()==KeyEvent.VK_ENTER)也就是說明我們當(dāng)前的操作鍵是“Enter〞,好了,我們將會執(zhí)行這樣的操作,addButton.doClick()。 搜索客戶信息的search,我們是在nameField文本框中添加了addKeyListener(newKeyAdapter(),同樣地操作,添加這個監(jiān)聽器后,我們在這里面添加了一個新的方法叫做publicvoidkeyPressed(KeyEvente),這個方法就是用來堅硬回車鍵的操作,則監(jiān)聽到的按鍵將會被e.getKeyCode()獲取,然后與我們的系統(tǒng)回車鍵,也就是KeyEvent.VK_ENTER來做比擬,if(e.getKeyCode()==KeyEvent.VK_ENTER)也就是說明我們當(dāng)前的操作鍵是“Enter〞,好了,我們將會執(zhí)行這樣的操作,searchButton.doClick()。6.2.5關(guān)于getLayeredPane()方法的使用 我們在大局部你學(xué)習(xí)和教程中更多地接觸到的或許是getContentPane()方法,ContentPane應(yīng)該是最簡易的一種獲取當(dāng)前面板的方式了,不過大多情況下如果我們需要在我們面板上參加背景再參加控件可能就無法實現(xiàn)了,那是因為我們是在同一個層次上添加的,一個層次上一個面板上如果背景已經(jīng)夠大了再添加其它的肯定是看不到的,所以我們就引入了多層次面板。即可以利用getLayeredPane()來獲取到了。具體實現(xiàn)方法如下: 這里我們通過getLayeredPane()添加(logButton),然后繼續(xù)通過getLayeredPane()添加(backlabel),其實這里是之前已經(jīng)定義好的ImageIc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文教用品電子商務(wù)-洞察分析
- 個人用款協(xié)議樣本(2024年修訂)
- 機電購銷合同
- 二零二五年度季度銷售獎杯采購與銷售團(tuán)隊激勵合同3篇
- 淺談電子商務(wù)支付安全大學(xué)論文
- 體檢機構(gòu)前臺服務(wù)心得
- 提升幼兒觀察力的課程設(shè)計計劃
- 玉米病蟲害生態(tài)防治策略-洞察分析
- 2025年度私人工廠勞務(wù)派遣及生產(chǎn)項目合同3篇
- 信托市場國際化研究-洞察分析
- 英語4級單詞匯總-excel
- 痛風(fēng)的診治指南解讀
- 2020小升初復(fù)習(xí)-小升初英語總復(fù)習(xí)題型專題訓(xùn)練-完形填空15篇
- 2023年浙江省公務(wù)員考試面試真題解析
- GB/T 5796.3-2022梯形螺紋第3部分:基本尺寸
- GB/T 16407-2006聲學(xué)醫(yī)用體外壓力脈沖碎石機的聲場特性和測量
- 簡潔藍(lán)色科技商業(yè)PPT模板
- 錢素云先進(jìn)事跡學(xué)習(xí)心得體會
- 道路客運車輛安全檢查表
- 宋曉峰辣目洋子小品《來啦老妹兒》劇本臺詞手稿
- 附錄C(資料性)消防安全評估記錄表示例
評論
0/150
提交評論