版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
.z..--可修編-理工大學(xué)琴島學(xué)院畢業(yè)設(shè)計(jì)(論文)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè) 班級(jí)專升本〔11-21〕學(xué)生際斌學(xué)號(hào)課題客戶信息管理系統(tǒng)指導(dǎo)教師王世廣2013年5月30日-.z.-可修編-摘要 當(dāng)今社會(huì),隨著計(jì)算機(jī)的的領(lǐng)域不斷擴(kuò),人們?cè)絹碓诫x不開計(jì)算機(jī)的同時(shí),對(duì)計(jì)算機(jī)軟件的需求也不斷提高。以往生活中軟件都是在大的企業(yè)中得到應(yīng)用,現(xiàn)在卻大不一樣了,因?yàn)榛ヂ?lián)網(wǎng)在現(xiàn)實(shí)生活中的不斷擴(kuò)展,人們的知識(shí)領(lǐng)域的增加,同樣伴有的就是中小型企業(yè)的成長(zhǎng),例如現(xiàn)在電子商務(wù)的普遍,中小賣家就會(huì)應(yīng)用到大小不一的ERP系統(tǒng)。ERP是針對(duì)物資資源管理〔物流〕、人力資源管理〔人流〕、財(cái)務(wù)資源管理〔財(cái)流〕、信息資源管理〔信息流〕集成一體化的企業(yè)管理軟件。它將包含客戶/效勞架構(gòu),使用圖形用戶接口,應(yīng)用開放系統(tǒng)制作。除了已有的標(biāo)準(zhǔn)功能,它還包括其它特性,如品質(zhì)、過程運(yùn)作管理、以及調(diào)整報(bào)告等。既然如此,則這些方面的提高必定對(duì)我們現(xiàn)有生活發(fā)揮大的作用。同樣現(xiàn)在面臨的ERP系統(tǒng)價(jià)錢都是相當(dāng)高昂的,對(duì)于小型企業(yè)來講這樣的負(fù)擔(dān)還是相當(dāng)重的,緊迫中開發(fā)一款簡(jiǎn)單而又實(shí)際結(jié)合中小企業(yè)需求的這樣一款軟件也是迫在眉睫,而對(duì)于Java簡(jiǎn)易的開發(fā)模式勢(shì)在必行。關(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)實(shí)價(jià)值1第2章需求分析32.1用例圖32.2相關(guān)用例4第3章概要設(shè)計(jì)73.1流程圖73.2數(shù)據(jù)構(gòu)造7第4章數(shù)據(jù)庫(kù)設(shè)計(jì)104.1信息表104.2ER圖11第5章界面設(shè)計(jì)135.1軟件界面135.2界面跳轉(zhuǎn)關(guān)系14第6章詳細(xì)設(shè)計(jì)與實(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è)資源方案〕的簡(jiǎn)稱,是上個(gè)世紀(jì)90年代美國(guó)一家IT公司根據(jù)當(dāng)時(shí)計(jì)算機(jī)信息、IT技術(shù)開展及企業(yè)對(duì)供給鏈管理的需求,預(yù)測(cè)在今后信息時(shí)代企業(yè)管理信息系統(tǒng)的開展趨勢(shì)和即將發(fā)生變革,而提出了這個(gè)概念?,F(xiàn)如今,ERP是針對(duì)物資資源管理〔物流〕、人力資源管理〔人流〕、財(cái)務(wù)資源管理〔財(cái)流〕、信息資源管理〔信息流〕集成一體化的企業(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í)轭櫩秃芏喙ぷ饕酝獾氖虑椋确皆陬櫩偷纳丈纤蜕献8:投Y物,在這樣的根底上,客戶可能會(huì)跟這家企業(yè)走的更近,這就是效勞型企業(yè)的到位之處。同樣面臨的問題就是,僅憑一個(gè)人的腦子去記憶如此龐大的信息系統(tǒng)那是不夠的,所以我們就緊迫需要一款這樣的記憶系統(tǒng)來幫助我們整理客戶的信息,更重要的是在必要的時(shí)間彈出窗口來提醒我們,是顧客的生意了,則我們就要提前做好準(zhǔn)備給我們的顧客一個(gè)意外的驚喜。在這樣的鼓勵(lì)下,就有了我們客戶新管理系統(tǒng)這一款軟件的誕生。1.2系統(tǒng)現(xiàn)實(shí)價(jià)值客戶信息管理系統(tǒng)實(shí)際應(yīng)用中更重要的是應(yīng)該表達(dá)其“管理工具〞的本質(zhì)。系統(tǒng)主要宗旨是對(duì)企業(yè)所有客戶、信息、時(shí)間和空間等綜合資源進(jìn)展綜合平衡和優(yōu)化管理,所以,該系統(tǒng)首先是一個(gè)軟件,同時(shí)是一個(gè)管理工具。該軟件是IT技術(shù)與管理思想的融合體,系統(tǒng)也就是先進(jìn)的管理思想借助電腦,來達(dá)成企業(yè)的管理目標(biāo)。它具有整合性,把所有可能的潛在客戶備份到系統(tǒng)當(dāng)中來,所以在量上實(shí)現(xiàn)了整合,同樣具備便利性,因?yàn)榉矊儆锌蛻粼诒驹禄蛘咴诮鼛兹丈?,則系統(tǒng)就會(huì)自動(dòng)彈出提醒框來加以提示,所以遠(yuǎn)比我們?nèi)蝹€(gè)查找要來的方便,所以在這一點(diǎn)上也表達(dá)出了它的實(shí)時(shí)性。對(duì)個(gè)人來講,客戶是使我們有工作的人,客戶不必依賴我們,我們卻必須依賴客戶;對(duì)企業(yè)來講,客戶購(gòu)置企業(yè)提供的產(chǎn)品和專業(yè)效勞,是企業(yè)是最重要的資源,是企業(yè)賴以生存的根本。客戶對(duì)所進(jìn)展的交易總有所期望,比方花的錢最值得,得到的效勞最滿意,如果期望得不到滿足,客戶就會(huì)尋找其他渠道以滿足需要。因?yàn)榭蛻粲羞x擇的權(quán)利。據(jù)國(guó)外一位知名心理醫(yī)生統(tǒng)計(jì),對(duì)一段不愉快的經(jīng)歷,平均每個(gè)人會(huì)告訴他身邊的20個(gè)人,假設(shè)是一段愉快的經(jīng)歷,則平均會(huì)告訴5個(gè)人。由此看來,只要趕走了一個(gè)客戶,就等于趕走了潛在的20個(gè)客戶。如果你一天遇到了50個(gè)客戶,其中有兩個(gè)客戶對(duì)你的效勞產(chǎn)生了不愉快的感受〔這也許是我們企業(yè)常見的事情〕,則一年后,由于連鎖反響,可能有5000個(gè)人再也不愿意與我們打交道。而失去的客戶,則成為競(jìng)爭(zhēng)對(duì)手得到的客戶。試想這樣的企業(yè),將何以在市場(chǎng)中立足?!聯(lián)系到我們公司,該怎樣來為客戶提供物有所值甚至物超所值的產(chǎn)品和效勞呢?接待人員是企業(yè)的第一個(gè)窗口,據(jù)調(diào)查客戶不滿意的原因有36%是由受到的接待引起的。我們要把自己置身于客戶的角度,準(zhǔn)確了解客戶的需要,真正做到將“無微不至的關(guān)心〞送給客戶。要和客戶保持良好的關(guān)系,還要做好跟蹤效勞。由于這樣那樣的原因,我們的工作中難免會(huì)出現(xiàn)失誤而引起客戶的不滿。有關(guān)資料顯示,當(dāng)我們主動(dòng)與客戶聯(lián)系并解決問題時(shí),客戶的滿意程度就會(huì)提高30%。定期對(duì)客戶進(jìn)展回訪,根據(jù)反響的信息迅速做出回應(yīng),讓客戶時(shí)刻感受到體貼和關(guān)心,一定會(huì)有良好的收效。所以一款好的客戶管理系統(tǒng),跟客戶之間拉近距離是我們首選的。第2章需求分析2.1用例圖圖2-1系統(tǒng)用例圖根據(jù)我們系統(tǒng)的需求分析,Admin需要通過見客戶建立關(guān)系,則我們系統(tǒng)的運(yùn)行最初端口MainLoad.java開場(chǎng),通過我們的輸入的用戶名和密碼直接跳轉(zhuǎn)我們的系統(tǒng)主界面,即InSystem.java。當(dāng)然進(jìn)入系統(tǒng)之前系統(tǒng)是需要判斷的,比方我們的用戶名和密碼錯(cuò)誤或者是其它異常等等,這里我們采用的方式就是Label提醒,就是改變Label的文字容和其顏色來提示我們的信息錯(cuò)誤,一旦填寫錯(cuò)誤并且提交之后,系統(tǒng)就會(huì)做出相應(yīng)的提示,并且重新輸入用戶名和密碼。用戶名和密碼正確我們的系統(tǒng)Progress進(jìn)程塊運(yùn)行完畢正常跳轉(zhuǎn)InSystemn.java.進(jìn)入我們的系統(tǒng)之后,從菜單欄文件開場(chǎng),則點(diǎn)擊“注冊(cè)〞將會(huì)直接跳轉(zhuǎn)到RegWindow.java,即我們的注冊(cè)用戶窗口。因?yàn)樽?cè)窗口我們關(guān)閉之后我們的接下來的程序就是重新登錄,則我們就重新回到了MainLoad(),如此循環(huán)到主系統(tǒng)界面,我們進(jìn)入切換窗口。切換窗口的功能就是登錄不同賬號(hào),點(diǎn)擊切換按鈕后,我們又關(guān)閉了當(dāng)前的系統(tǒng),即dispose(),然后重new一個(gè)MainLoad(),則同樣的還是回到MainLoad,這里我們可以更改不同的賬號(hào)進(jìn)展登錄。添加賬戶信息:直接跳轉(zhuǎn)AddInform.java,這里將會(huì)填入相關(guān)的客戶信息,添加之后關(guān)閉添加的界面,回到主主界面。搜索:跳入的是NameSearchInform.java,這里確定后是檢索的過程,然后通過主界面的表格來顯示,所以關(guān)閉當(dāng)前的搜索窗口。最近生日:跳入BirthInform.java,統(tǒng)計(jì)最近生日列表。最近生日:跳入的是BirthInform.java,這里只需要在工具欄上點(diǎn)擊“最近生日〞即可生成最近生日的窗口。并且該窗口是定時(shí)出現(xiàn)的,即使我們現(xiàn)時(shí)間關(guān)閉了。我們的用戶具有的管理模塊如下:權(quán)限管理:實(shí)現(xiàn)我們一些低級(jí)管理員的權(quán)限修正,比方我們的高級(jí)管理員具有一切管理權(quán)限,我們的普通管理員具有添加但不具備刪除和修改功能,而信息閱覽的管理員是只能閱覽的。添加客戶:添加客戶相關(guān)信息這個(gè)也是最直觀的的了,當(dāng)然該模塊只能在高級(jí)管理和普通管理下操作??蛻魝渥ⅲ嚎蛻魝渥⒕褪翘砑有畔⒅械囊粋€(gè)信息塊,主要為備注客戶生日時(shí)所要做的事情,以提醒的用途。查詢信息:完成對(duì)客戶信息的檢索功能,直接輸入客戶的,我們可以通過該功能直接搜索客戶所有信息。注冊(cè)管理員:該管理功能只有在高級(jí)管理員下方可執(zhí)行的,可以為高級(jí)管理員、普通管理員和信息閱覽實(shí)現(xiàn)與用戶注冊(cè)。2.2相關(guān)用例表2-2系統(tǒng)登錄用例名稱系統(tǒng)登陸功能簡(jiǎn)述管理員提供正確的用戶名和密碼登陸前置條件用戶名存在后置條件登陸成功 根本流1用戶在登錄頁(yè)面中輸入用戶名和密碼,并提交;2系統(tǒng)判斷用戶名和密碼是否合法;3根據(jù)用戶的類型顯示不同的主頁(yè)面 備注如果用戶名或密碼錯(cuò)誤,Label將會(huì)更改為紅色字體系統(tǒng)登陸模塊是在我們系統(tǒng)首次運(yùn)行所要輸入的密鑰界面,即我們需要提供已經(jīng)在數(shù)據(jù)庫(kù)中存在的用戶名和密碼,數(shù)據(jù)庫(kù)中核對(duì)存在并且正確后,將會(huì)登陸成功;如果不成功,界面中Label將會(huì)顯示為紅色字體以提示密碼錯(cuò)誤。如表2-2系統(tǒng)登錄所示。表2-3添加客戶信息用例名稱添加客戶信息 功能簡(jiǎn)述用戶添加客戶的生日信息以及備注信息前置條件無 后置條件添加成功根本流1用戶在添加窗口中輸入客戶信息,并提交2系統(tǒng)將相關(guān)信息存入到客戶數(shù)據(jù)庫(kù)備注如果無法存入將會(huì)彈出相關(guān)異常信息添加客戶信息模塊,我們會(huì)需要在我們系統(tǒng)數(shù)據(jù)庫(kù)中的所有信息,比方客戶、生日、產(chǎn)品、成交信息和備注信息等等。我們需要填寫用戶的相關(guān)信息提交就可以了,前提是該客戶信息不存在,否則將會(huì)有相關(guān)的異常信息,同樣地、如果提交成功,我們的數(shù)據(jù)庫(kù)將會(huì)新增一條客戶信息,同樣地,我們也會(huì)通過showMessageDialog來做出成功添加信息提示。如表2-3所示。表2-4搜索客戶信息用例名稱搜索客戶信息功能簡(jiǎn)述輸入客戶或月份信息查詢客戶相關(guān)信息前置條件客戶信息已經(jīng)存在后置條件系統(tǒng)列表顯示相關(guān)客戶信息根本流1輸入客戶,并提交2列表單獨(dú)顯示查詢的客戶信息備注不存在的情況下,列表即為空搜索客戶信息,我們需要提供兩種途徑,分別是通過和月份,通過直接輸入查詢出客戶信息即可通過系統(tǒng)列表顯示出相應(yīng)搜索名的信息列表。或者輸入在*幾個(gè)月份之的所有客戶信息,我們可以輸入多個(gè)月份,例如輸入“1-12〞,意思就是顯示當(dāng)前客戶列表中生日在1-12個(gè)月的信息,意思就是顯示所有客戶信息了。也可以輸入一個(gè)月份的信息,同樣提交就會(huì)顯示相應(yīng)的客戶提示信息列表。如果相關(guān)信息不存在,列表顯示為空,如表2-4搜索客戶信息所示。表2-5注冊(cè)用戶用例名稱注冊(cè)用戶功能簡(jiǎn)述添加用戶和密碼,提交前置條件該用戶名不存在后置條件注冊(cè)成功根本流1輸入用戶名和密碼提交2用戶名和密碼注冊(cè)到數(shù)據(jù)庫(kù)備注如果用戶存在將會(huì)彈出異常對(duì)話框 注冊(cè)用戶,在注冊(cè)用戶之前我們要確定用戶不存在,否則我們無法提交用戶信息到數(shù)據(jù)庫(kù)。成功提交用戶信息,將會(huì)在數(shù)據(jù)庫(kù)中存儲(chǔ),并提示“注冊(cè)成功〞 這樣的提示信息。如表2-5注冊(cè)用戶所示。表2-6刪除客戶信息用例名稱刪除客戶信息 功能簡(jiǎn)述用戶刪除客戶的生日信息以及備注信息前置條件數(shù)據(jù)庫(kù)已經(jīng)存在該客戶的信息后置條件刪除成功根本流1用戶在客戶信息列表中選擇要?jiǎng)h除的行2列表息被刪除,數(shù)據(jù)庫(kù)中該條信息被刪除備注如果無法刪除將會(huì)彈出相關(guān)異常信息 刪除客戶信息只需要選中我們列表中的*一條信息,點(diǎn)擊“刪除〞按鈕即可刪除的,如果無法刪除將會(huì)有系統(tǒng)提示信息。如表2-6刪除客戶信息所示。-.z.-可修編-第3章概要設(shè)計(jì)3.1流程圖圖3-1系統(tǒng)流程圖 圖3-1系統(tǒng)的全程流程圖描述了系統(tǒng)的各個(gè)模塊,以及操作的執(zhí)行順序,我們后面將根據(jù)我們的需求和描述安排,對(duì)系統(tǒng)設(shè)計(jì)和開發(fā)。3.2數(shù)據(jù)構(gòu)造數(shù)據(jù)構(gòu)造是指數(shù)據(jù)相互之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合和該集合中數(shù)據(jù)元素之間的關(guān)系組成。 系統(tǒng)模塊包括多個(gè)信息元素,其中包括系統(tǒng)的登陸、用戶注冊(cè)、修改密碼、切換用戶、添加客戶信息、刪除客戶信息、搜索客戶信息、最近生日和切換用戶等等,如圖3-2所示:圖3-2系統(tǒng)構(gòu)造圖表3-3描述了系統(tǒng)的數(shù)據(jù)構(gòu)造表組成關(guān)系和屬性信息,其中包括用戶、添加、刪除、注冊(cè)和搜索信息。如表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)信息刪除客戶、成交商品、年月日、來源和備注新注冊(cè)以用戶信息為主體構(gòu)造,添加用戶信息添加用戶名、密碼和權(quán)限搜索以inf客戶信息為主體將構(gòu)造,檢索客戶信息選擇客戶、成交商品、年月日、來源和備注新第4章數(shù)據(jù)庫(kù)設(shè)計(jì)4.1信息表表4-1reguser字段名稱字段名數(shù)據(jù)類型長(zhǎng)度用戶名userChar20密碼passwordChar20權(quán)限idChar5 reguser表是我們注冊(cè)用戶的數(shù)據(jù)庫(kù)表格,存儲(chǔ)信息即為我們所有注冊(cè)用戶信息。其中包括user、password和id。其中這里id是char類型的,但是這里我們的選項(xiàng)只有1、2和3,其中1將會(huì)代表高級(jí)權(quán)限、2代表普通權(quán)限和3代表我們的信息閱覽用戶。如表4-1reguser所示;表4-2inf字段名稱字段名數(shù)據(jù)類型長(zhǎng)度nameChar20年yearint8月monthint6日dayint4產(chǎn)品proChar20客戶來源sourceChar20達(dá)成交易saleChar20 表inf的存儲(chǔ)容是我們客戶的信息存儲(chǔ)一欄,其中字段包括name、year、month、day、pro、source、sale;分別對(duì)應(yīng)的字段名稱是、年、月、日、產(chǎn)品、客戶來源和達(dá)成交易。其中年月日的類型是使用的int類型,其中在此因?yàn)樯婕暗脚袛嘣路菪畔ⅲ詉nt是必不可少的。如表4-2inf所示;4.2ER圖管理員管理員賬號(hào)密碼擁有客戶**年-月—日產(chǎn)品客戶來源達(dá)成交易權(quán)限n m圖4-3ER圖系統(tǒng)設(shè)定了兩個(gè)表格,數(shù)據(jù)庫(kù)db,包括reguser和inf兩個(gè)表格。其中reguser為我們的注冊(cè)用戶表,而inf就是我們的客戶信息管理表格。兩個(gè)表格對(duì)應(yīng)的關(guān)系就是用戶可以查看inf的信息,并可以對(duì)用戶信息作出修改。Reguser包括的字段分別為:賬號(hào)、密碼和ID。ID實(shí)現(xiàn)了用戶的權(quán)限管理,我們這里使用的1代表我們的最高權(quán)限即我們的“高級(jí)管理〞、2代表我們的普通管理權(quán)限即我們的“普通管理〞,最后是我們的“信息閱讀〞也就是3了,它只能夠?qū)崿F(xiàn)我們的普通閱讀的功能。如圖4-3ER圖所示。 每個(gè)用戶都可以訪問我們的客戶信息??蛻粜畔⒆侄伟ǎ?、年月日、達(dá)成交易、客戶來源和產(chǎn)品、數(shù)據(jù)庫(kù)分別對(duì)應(yīng)的是:name、year、month、day、sale、source和pro。第5章界面設(shè)計(jì)5.1軟件界面登陸界面:為了表達(dá)界面的美觀度,對(duì)于登陸窗口的設(shè)計(jì)采用了分層面板,普通的contentPane是無法實(shí)現(xiàn)背景圖片的展現(xiàn),而在這里我們就采用了分從面板,這樣子我們很容易的將我們登陸面板參加了美觀的背景圖片;布局方式則采用的是FlowLayout,即我們默認(rèn)的布局方式,這里的好處是可以按照SetBounds來隨意調(diào)整其想要安排的位置,相對(duì)而言也是表達(dá)一種美觀和數(shù)據(jù)的準(zhǔn)確度上。對(duì)于我們標(biāo)題“客戶信息管理系統(tǒng)〞我們采用的是"Dialog"字體類型,并且設(shè)置大小為26,因?yàn)闃?biāo)題都是比擬大的,所以我們?cè)O(shè)置的相對(duì)較大,而其它的選填框則采用的是默認(rèn)的字體大小。在這里大家都知道,我們要輸入的是用戶名和密碼,則不可防止地,我們經(jīng)常會(huì)碰到用戶名或密碼錯(cuò)誤的提示,則在這里也是一樣的,只是我們采用的風(fēng)格不太一樣,如果我們的密碼或者是用戶名錯(cuò)誤,則我們的Label也就是我們的“用戶名:〞和“密碼:〞都會(huì)變成紅色,并且顯示的相關(guān)信息則是“用戶名!〞和“密碼!〞,并且是紅色的字體,這樣做的好處是變得醒目和加以提示。而當(dāng)通過時(shí),其字體將會(huì)恢復(fù)到最初的狀態(tài),即“用戶名:〞和“密碼:〞。系統(tǒng)中心界面:系統(tǒng)界面的布局就相對(duì)要復(fù)雜一些了,上面的菜單欄、工具欄和下面的Frame都是默認(rèn)方式,也就是FlowLayout,則下面的Frame里面的容也就是一個(gè)表格和一個(gè)Te*t文本的排序newGridLayout(2,1),并且一分為二,則其中一局部是我們的表格信息,另一局部則是我們的系統(tǒng)顯示和本月生日框信息,我們的字體都是默認(rèn)字體大小。我們?cè)谙到y(tǒng)上添加了很多的功能,其中就包括注冊(cè)賬戶、添加信息等等。我們的字體統(tǒng)一的都是系統(tǒng)默認(rèn)字體大小,如果在系統(tǒng)遇到異常信息或者是*些需要提醒時(shí)我們采用的顯示方式均為JOptionPane.showMessageDialog(null,"**")這樣的方式,**就是我們提示的信息容。添加客戶信息界面:添加界面相比照擬簡(jiǎn)單,我們的布局模式就是默認(rèn)的FlowLayout,所以這樣添加的每一個(gè)控件都會(huì)被按照順序相應(yīng)地添加進(jìn)來,其中我們包括的模塊如下:JTe*tFieldnameField,JTe*tFieldyearField,JTe*tFieldmonthField,JTe*tFielddayField,JTe*tFieldproductField,JTe*tFieldsourceField和JTe*tFieldsaleField,分別對(duì)應(yīng)的關(guān)系為:"","年-月-日","產(chǎn)品","客戶來源","達(dá)成交易"。以及我們后面添加的兩個(gè)按鈕uttonaddButton=newutton("添加");uttoncancelButton=newutton("取消");兩個(gè)按鈕就已經(jīng)顯而易見了,實(shí)現(xiàn)的操作就是當(dāng)我們輸入相關(guān)的信息,添加按鈕將會(huì)觸發(fā)事件actionListener,然后通過或許相關(guān)信息添加到數(shù)據(jù)庫(kù)中。搜索界面:搜索只需要兩個(gè)控件,分別是選框和搜索按鈕,這里還是比擬容易實(shí)現(xiàn)的。系統(tǒng)搜索會(huì)檢索我們所輸入的,數(shù)據(jù)庫(kù)中的SQL語(yǔ)句如下:"select*frominfwherename='"+s+"'",這樣我們就獲得了我們需要的搜索信息,并且我們會(huì)將我們搜索的信息捕捉并新建一個(gè)InSystem的類,而這個(gè)類中table中所顯示的列表信息就是我們所搜索的信息了。最近生日界面:intw=(int)(scrSize.getWidth()-260);inth=(int)(scrSize.getHeight()-235);setBounds(w,h,260,190);這是我們的邊界設(shè)計(jì),窗口的大小是根據(jù)我們不同計(jì)算機(jī)顯示器的分辨率不同來計(jì)算的,其中顯示的位置坐標(biāo)的起始位置是(scrSize.getWidth()-260)和(scrSize.getHeight()-235),即也就是長(zhǎng)和高的位置了。另外我們固定的大小分別是260*190的尺寸。我們起始位置的設(shè)定也是有根據(jù)的,因?yàn)槲覀兿M覀兊南到y(tǒng)提醒的窗口是在我們計(jì)算機(jī)的右下角顯示的,所以我們需要根據(jù)不同的計(jì)算機(jī)分辨率來設(shè)計(jì)其固有的位置,所以我們就要獲取系統(tǒng)的分辨率值,這也是我們所有界面中唯一考慮到計(jì)算機(jī)分辨率大小的一點(diǎn)。5.2界面跳轉(zhuǎn)關(guān)系MainLoadMainLoad.java登陸重新登錄InSystem.javaRegWindow.javaBirthInform.javaAddInform.javaNameSearchInfrom.java注冊(cè)提醒添加搜索返回新建圖5.2界面跳轉(zhuǎn)關(guān)系我們系統(tǒng)的運(yùn)行最初端口MainLoad.java開場(chǎng),通過我們的輸入的用戶名和密碼直接跳轉(zhuǎn)我們的系統(tǒng)主界面,即InSystem.java。當(dāng)然進(jìn)入系統(tǒng)之前系統(tǒng)是需要判斷的,比方我們的用戶名和密碼錯(cuò)誤或者是其它異常等等,這里我們采用的方式就是Label提醒,就是改變Label的文字容和其顏色來提示我們的信息錯(cuò)誤,一旦填寫錯(cuò)誤并且提交之后,系統(tǒng)就會(huì)做出相應(yīng)的提示,并且重新輸入用戶名和密碼。用戶名和密碼正確我們的系統(tǒng)Progress進(jìn)程塊運(yùn)行完畢正常跳轉(zhuǎn)InSystemn.java.進(jìn)入我們的系統(tǒng)之后,從菜單欄文件開場(chǎng),則點(diǎn)擊“注冊(cè)〞將會(huì)直接跳轉(zhuǎn)到RegWindow.java,即我們的注冊(cè)用戶窗口。因?yàn)樽?cè)窗口我們關(guān)閉之后我們的接下來的程序就是重新登錄,則我們就重新回到了MainLoad(),如此循環(huán)到主系統(tǒng)界面,我們進(jìn)入切換窗口。切換窗口的功能就是登錄不同賬號(hào),點(diǎn)擊切換按鈕后,我們又關(guān)閉了當(dāng)前的系統(tǒng),即dispose(),然后重new一個(gè)MainLoad(),則同樣的還是回到MainLoad,這里我們可以更改不同的賬號(hào)進(jìn)展登錄。添加賬戶信息:直接跳轉(zhuǎn)AddInform.java,這里將會(huì)填入相關(guān)的客戶信息,添加之后關(guān)閉添加的界面,回到主主界面。搜索:跳入的是NameSearchInform.java,這里確定后是檢索的過程,然后通過主界面的表格來顯示,所以關(guān)閉當(dāng)前的搜索窗口。最近生日:跳入BirthInform.java,統(tǒng)計(jì)最近生日列表。最近生日:跳入的是BirthInform.java,這里只需要在工具欄上點(diǎn)擊“最近生日〞即可生成最近生日的窗口。并且該窗口是定時(shí)出現(xiàn)的,即使我們現(xiàn)時(shí)間關(guān)閉了。如圖5.2界面跳轉(zhuǎn)關(guān)系。第6章詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)6.1系統(tǒng)執(zhí)行流程6.1.1登陸模塊 系統(tǒng)的運(yùn)行是從MainLoad開場(chǎng)執(zhí)行的,執(zhí)行顯示的就是我們的初始登錄界面,我們需要在這里輸入我們數(shù)據(jù)庫(kù)中已經(jīng)存在的用戶名和密碼。如果用戶名和密碼的信息是正確的,則將會(huì)跳轉(zhuǎn)到系統(tǒng)管理界面,并且會(huì)彈出“最近生日提醒〞.同樣地,如果是用戶名和密碼錯(cuò)誤,系統(tǒng)將會(huì)顯示相應(yīng)的提醒信息,我們這里的提醒信息比擬直觀,我們直接將“用戶名〞和“密碼〞的te*t文本顯示為紅色和“用戶名!〞,〞密碼!〞這樣的格式,在重新輸入后,我們的系統(tǒng)將會(huì)對(duì)其進(jìn)展檢測(cè),如果正確,則之前的紅色文字“用戶名!〞,“密碼!〞將會(huì)恢復(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("密碼錯(cuò)誤");passLabel.setForeground(Color.red); }else{userLabel.setTe*t("用戶名!");userLabel.setForeground(Color.red);passLabel.setTe*t("密碼!");passLabel.setForeground(Color.red); }}} }catch(SQLE*ceptione1){ e1.printStackTrace();}} 該方法的獨(dú)特之處在于改變了Label的相關(guān)顯示方式,以往我們更多采用的是ShowMessageDialog這樣的顯示方式,而在這里,我們直接利用我們的顯示信息做出改變,這樣是不是會(huì)變得更加直觀呢,是的,下面介紹其工作的流程和方式。 首先if(userTe*t.getTe*t().trim().equals("")||passWord.equals(""))該條語(yǔ)句實(shí)現(xiàn)的是判斷我們的用戶名和密碼的輸入是否為“〞空,如果為空,后面就有了語(yǔ)句JOptionPane.showMessageDialog(this,"您尚未輸入用戶名或密碼"),當(dāng)然看到這里的語(yǔ)句提示,其實(shí)我們就大概知道了,這條語(yǔ)句就是為了提示我們輸入用戶名和密碼,因?yàn)槲覀冎暗牟僮饕欢ㄊ怯杏脩裘蛎艽a沒有填寫。則除了為空,還有其它的可能,比方說輸入的密碼錯(cuò)誤或者用戶名錯(cuò)誤或者是我們干脆登陸成功了,則else后面將一一解釋。 下一步自然就是通過我們的數(shù)據(jù)庫(kù)來檢索了,利用rs.getString("user")來獲得我們數(shù)據(jù)庫(kù)中的用戶名信息,userTe*t.getTe*t().trim()而這里是獲得我們輸入的用戶名信息,以及passWord.equals(rs.getString("password"))來判斷我們輸入的密碼和我們檢索到的用戶名密碼是否對(duì)應(yīng)。userLabel.setForeground(Color.black);passLabel.setForeground(Color.black);而這里之所以用到就是為了密碼錯(cuò)誤后,Label被修改為不同字體和顏色了,此處為恢復(fù)正常,雖然我們還沒到密碼錯(cuò)誤的狀態(tài),但是這里是必須的,否則一旦密碼錯(cuò)誤后,這里就顏色就是紅色了,紅色的實(shí)現(xiàn)在這下面的操作的,下面介紹: if(userTe*t.getTe*t().trim().equals(rs.getString("user"))),這里我們將會(huì)判斷我們的用戶名信息,同樣和我們的數(shù)據(jù)庫(kù)來做比照,如果是正確的,則這里將會(huì)設(shè)置passLabel.setTe*t("密碼錯(cuò)誤"),密碼Label顯示為密碼錯(cuò)誤,顏色設(shè)置passLabel.setForeground(Color.red);這里為什么是用戶名和數(shù)據(jù)庫(kù)用戶名對(duì)應(yīng)正確后還顯示密碼錯(cuò)誤呢?因?yàn)槲覀兦懊媾袛嗔耍绻到y(tǒng)無常登陸,并且我們的用戶名正確的話,很顯然就是我們的密碼錯(cuò)誤了。同樣地,如果用戶名有問題則就是設(shè)置userLabel.setTe*t("用戶名!");這里的用戶名文字被修改為了“用戶名!〞,而userLabel.setForeground(Color.red);將會(huì)設(shè)置用戶名的顏色為紅色,passLabel.setTe*t("密碼!");passLabel.setForeground(Color.red);同樣的password也要被設(shè)置為紅色和“密碼!〞的形式,因?yàn)橛脩裘e(cuò)誤密碼就更不用說了。 則回過頭來前面流程中我們之所以設(shè)置器恢復(fù)默認(rèn)的顏色就是在這里了,因?yàn)槲覀冞@次可能出現(xiàn)了問題,則顏色設(shè)置了紅色并且不同的文字,則下次登錄的時(shí)候如果還是現(xiàn)實(shí)密碼錯(cuò)誤等等之類的文字的話那就不太直觀和人性化了,所以我們讓這里默認(rèn)重新設(shè)置一次,即使上次沒有過這樣的密碼錯(cuò)誤問題,則在初始化的同時(shí)也做了一次這樣的操作,其實(shí)這樣在程序優(yōu)化上就可以有的操作了,當(dāng)然,對(duì)于我們的小程序,這簡(jiǎn)短的操作還是可以忽略的。6.1.2密碼修改模塊圖6-2密碼修改模塊密碼修改的模塊是在系統(tǒng)控制中心的文件菜單欄里進(jìn)入的,進(jìn)來之后,直接輸入用戶名和新的用戶密碼就可以修改的,這里為了減少繁瑣就省去了檢測(cè)原有密碼的成分。只要輸入的用戶名正確,這里我們就可以用過我們的新密碼直接修正成功。則修改之后,我們的系統(tǒng)會(huì)轉(zhuǎn)入“登陸界面〞,這里將會(huì)實(shí)現(xiàn)重新登錄,因?yàn)槲覀冃薷拿艽a后系統(tǒng)所在的狀態(tài)如果還是原有的密碼狀態(tài)下是不平安的,所以我們要重新登陸以確認(rèn)密碼的修改無誤。如圖6-2所示;6.1.3注冊(cè)用戶模塊圖6-3注冊(cè)用戶模塊注冊(cè)用戶模塊相對(duì)也是比擬直觀和簡(jiǎn)單的。注冊(cè)模塊也是通過系統(tǒng)控制中心通過菜單欄的“注冊(cè)用戶〞進(jìn)來的。輸入用戶名和密碼,確認(rèn)。前提是用戶名不存在,如果用戶名已經(jīng)存在,則就會(huì)報(bào)錯(cuò)的,系統(tǒng)的提示就是“用戶名已經(jīng)存在,請(qǐng)更換用戶名〞,所以就會(huì)再次清空用戶名和密碼,這時(shí)我們要做的就是更換用戶名,并輸入密碼,確認(rèn),則數(shù)據(jù)庫(kù)中就有了我們新的用戶名信息,下次登錄就可以直接使用了。如上圖如圖6-3注冊(cè)用戶模塊所示: 6.1.4切換用戶模塊切換用戶的原理就更簡(jiǎn)單了,其實(shí)我們只需要將我們當(dāng)前的系統(tǒng)控制中心dispose()掉,然后重新new一個(gè)MainLoad那我們就實(shí)現(xiàn)了用戶的切換,這時(shí)候其實(shí)就是相當(dāng)于再輸入一個(gè)其它的用戶名和密碼,那我們就登陸進(jìn)了系統(tǒng)控制中心,那我們就已經(jīng)完成了系統(tǒng)的用戶切換。切換用戶點(diǎn)擊,直接登陸窗口,如圖6.2.4切換用戶模塊。圖6-4切換用戶模塊6.1.5添加客戶信息端模塊圖6-5添加客戶信息端模塊添加客戶信息端設(shè)計(jì)的文本框要多一些,但是這些還是統(tǒng)一的,所以相對(duì)而言也是比擬簡(jiǎn)易的。其實(shí)在添加模塊的建立之前,系統(tǒng)就已經(jīng)自動(dòng)為我們好了數(shù)據(jù)庫(kù),這個(gè)是由類的構(gòu)造方法最初調(diào)用的connect()方法。我們的信息將會(huì)在輸入框過field方法nameField.getTe*t()獲取到,同樣地,我們還會(huì)利用insertintoinfvalues(",",",",",",")來插入數(shù)據(jù)到數(shù)據(jù)庫(kù),這時(shí)候我們的數(shù)據(jù)庫(kù)將會(huì)檢索我們的信息是否已經(jīng)在數(shù)據(jù)庫(kù)中存在,以及信息的數(shù)據(jù)長(zhǎng)度和類型等等進(jìn)展判斷,如果是錯(cuò)誤的將會(huì)相應(yīng)的異常信息來提醒,如果正確的,就會(huì)直接添加到我們的數(shù)據(jù)庫(kù),這時(shí)候系統(tǒng)就已經(jīng)添加成功了。不過在我們的系統(tǒng)界面中我們不能在第一時(shí)間就能看到新添加的數(shù)據(jù)信息,系統(tǒng)是不能夠再次自動(dòng)刷新系統(tǒng)的,所以我們添加了一個(gè)按鈕“更新〞,其實(shí)這里更新不是更新軟件系統(tǒng),而是更新我們的數(shù)據(jù)信息,在我們添加信息后,我們可以通過“更新〞來實(shí)現(xiàn)信息的事實(shí)展現(xiàn)。如圖6-5添加客戶信息端模塊。6.1.6最近生日模塊圖6-6最近生日模塊 最近生日模塊是由BirthInform.java實(shí)現(xiàn)的,其實(shí)該模塊的調(diào)用是通過多種途徑的,其中之一就是系統(tǒng)開啟的第一時(shí)間就會(huì)有“最近生日〞模塊自動(dòng)彈出的,這樣的設(shè)計(jì)就是方便我們的實(shí)時(shí)提醒。同時(shí)“最近生日〞模塊還有在工具欄上有所表達(dá),因?yàn)槲覀兤匠5拈_機(jī)后系統(tǒng)是自動(dòng)運(yùn)行的,不同的時(shí)間我們可能有興致想要查看則可以通過“最近生日〞按鈕直接點(diǎn)擊查看;而另外一種方式就是自動(dòng)間隔提醒了,可以設(shè)置幾個(gè)小時(shí)提醒一次或者多久。系統(tǒng)進(jìn)入之后通過最近生日,系統(tǒng)就會(huì)在數(shù)據(jù)庫(kù)中檢索最近3日生日的客戶信息,最后返回到最近生日窗口中。6.1.7刪除模塊圖6-7刪除模塊 刪除模塊更多的技術(shù)重點(diǎn)就是我們?cè)诹斜碇行枰x中*一行數(shù)據(jù),而選中的這行數(shù)據(jù),在我們點(diǎn)擊“刪除〞按鈕后就會(huì)被刪除掉,所以我們就從table的相關(guān)方法入手了。introw=jt.getSelectedRow(),我們是通過該條語(yǔ)句獲得的我們的系統(tǒng)行,獲得的系統(tǒng)行,我們會(huì)通過數(shù)據(jù)庫(kù)的檢索來查詢?cè)撔姓Z(yǔ)句的相關(guān)容,然后再數(shù)據(jù)庫(kù)中繼續(xù)檢索該條信息,并利用語(yǔ)句“deletefrominfwherename="andsale="〞實(shí)現(xiàn)對(duì)相關(guān)選中項(xiàng)信息的刪除搜索,我們的判斷條件是加上了“name〞和“sale〞兩個(gè)字段屬性,我們之所以用兩個(gè)字段的目的就是為了防止同名的信息被誤刪除,所以該處我們用了兩個(gè)字段。6.1.8搜索模塊搜索模塊的路徑是有多條的,其中可以通過工具欄直接進(jìn)入,當(dāng)然也可以通過菜單欄。我們這里的搜索只需要輸入我們要查找的客戶,確認(rèn)之后會(huì)通過系統(tǒng)連接數(shù)據(jù)庫(kù)檢索數(shù)據(jù)庫(kù)中是否存在該,如果存在的話,則信息將會(huì)顯示在我們的系統(tǒng)可控制中的列表中,假設(shè)此時(shí)我們搜索的是客戶“際斌〞,則系統(tǒng)列表中將會(huì)展現(xiàn)有關(guān)客戶“際斌〞的信息。如果我們所搜索的客戶信息是不存在的,則同樣的列表中也會(huì)展現(xiàn),只是展現(xiàn)的容為空。如圖6.2.7搜索模塊:圖6-8搜索模塊6.1.9刷新模塊圖6-9刷新模塊 系統(tǒng)中的數(shù)顯模塊主要為刷新我們的數(shù)據(jù)顯示,因?yàn)槲覀冇袝r(shí)候更新了數(shù)據(jù),系統(tǒng)不能實(shí)時(shí)更新顯示在我們的當(dāng)前列表中,所以我們就要通過我們的手動(dòng)操作來實(shí)現(xiàn)我們的數(shù)據(jù)更新操作。我們這里采用的方法也是比擬傻瓜式的,那就是新建一個(gè)類,這個(gè)類就是InSystem(),則系統(tǒng)就重新檢索數(shù)據(jù)庫(kù)了,所以我們這里的數(shù)據(jù)就一定會(huì)被顯示出來的。操作很簡(jiǎn)單,直接點(diǎn)擊工具欄上的“更新〞按鈕即可實(shí)現(xiàn)系統(tǒng)顯示數(shù)據(jù)的操作功能,此時(shí)我們可能會(huì)發(fā)現(xiàn)有兩個(gè)系統(tǒng)類的窗口同時(shí)出現(xiàn)。6.2編碼規(guī)6.2.1變量命名 變量名的命名我們都是采用首個(gè)單詞利用小寫,后面單詞利用大寫首字母的方式。這樣的有利于更加直觀地表現(xiàn)我們?cè)搨€(gè)變量到底是用作在什么用的表現(xiàn)方式上。比方我們的logButton,其實(shí)我們可以通過Button知道我們的這個(gè)變量一定是一個(gè)按鈕,而log就是登錄的意思,則很顯然,這個(gè)變量要操作的就是登錄按鈕。而在以上的代碼中第一塊中我們實(shí)現(xiàn)的是我們系統(tǒng)的登陸頁(yè)面。登陸頁(yè)面的變量有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)度條的類別,我們用來檢測(cè)系統(tǒng)的進(jìn)度情況,進(jìn)度條完成到100%,系統(tǒng)加載成功,則將會(huì)實(shí)現(xiàn)new一個(gè)新的InSystem實(shí)現(xiàn)系統(tǒng)控制中心的登陸操作。這里的label也是比擬有特色的,按照以往的定義Label就是規(guī)定的定義,并且不會(huì)有怎樣特殊的變動(dòng),而這次在我們這里,我們的Label也會(huì)根據(jù)我們的相關(guān)條件和異常而變動(dòng),比方說當(dāng)我們?cè)谳斎胗脩裘兔艽a的時(shí)候,我們可能會(huì)遇到密碼或者用戶名錯(cuò)誤的情況,則為了更好地提示用戶具體發(fā)生了什么,則我們會(huì)因用戶名或密碼錯(cuò)誤而改變我們這里的Label變量,讓它們?cè)谠械奈淖只蛘哳伾习l(fā)生了變動(dòng),比方“用戶名〞會(huì)直接變成“用戶名!〞,并且后者的顏色是紅色的,而原有的是黑色。則在我們登陸成功以后,則我們的變量名還會(huì)回到原有的字體和顏色,這是不是很奇妙的哦。nameField,yearField,monthField,dayField,productField,sourceField以上關(guān)鍵詞主要實(shí)現(xiàn)了我們的文本選框,同樣的命名方式也是一樣的,我們的添加客戶信息框的信息就主要應(yīng)用到了這里的相關(guān)變量信息。該段對(duì)應(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)管理中心一個(gè)至關(guān)重要的構(gòu)造方法,該方法的加載是需要傳遞參數(shù)的,我們默認(rèn)的參數(shù)是"select*frominf",如果不是該參數(shù)的話,則我們的系統(tǒng)再次將不會(huì)被加載。另外我們?cè)O(shè)置了定時(shí)器timer,timer的使用是為了我們“最近生日〞窗口的定時(shí)跳出而設(shè)置的。因?yàn)槲覀兊南到y(tǒng)會(huì)定時(shí)提醒我們的用戶*一個(gè)客戶就要生日了,也有可能會(huì)在無視掉,所以在我們開機(jī)的階段中可以根據(jù)我們個(gè)人的習(xí)慣或配置來設(shè)計(jì)跳出的時(shí)間,1000為一秒,60*1000就是一分鐘了,在這里這個(gè)60的參數(shù)其實(shí)是在第一次系統(tǒng)執(zhí)行時(shí)該窗口在什么時(shí)間會(huì)跳出第一次,我們默認(rèn)的設(shè)置就是1分鐘了。而我們后面的360*1000其實(shí)為的就是我們系統(tǒng)的跳出時(shí)間間隔所設(shè)計(jì)的了,這里的360就是6分鐘了。也就是說,在我們的系統(tǒng)運(yùn)行后,我們的系統(tǒng)會(huì)根據(jù)最近生日情況在6分鐘一個(gè)間隔不斷地提醒,當(dāng)然6分鐘就有點(diǎn)頻繁了,這里完全可以設(shè)置時(shí)間為幾個(gè)小時(shí),這樣更利于我們的方便和操作。 connect()方法在這里就直接被應(yīng)用起來了,系統(tǒng)在調(diào)用該構(gòu)造方法的初始階段我們就調(diào)用了connect()方法,也就是我們上面最初介紹的方法,則這個(gè)時(shí)候不出意外,我們的系統(tǒng)就與我們的db數(shù)據(jù)庫(kù)建立了,后面如果需要,就可以隨時(shí)使用了。 con.setLayout(newBorderLayout(0,1))設(shè)置我們的系統(tǒng)空中中心界面的布局模式,我們使用的BoderLayout。 緊接著我們的menuBar()就上場(chǎng)了,我們系統(tǒng)設(shè)置之初除了最后后臺(tái)的工作外就是配置我們的前臺(tái)界面了。因?yàn)槲覀兊牟藛螜诘脑O(shè)置是在我們系統(tǒng)的最上端的,所以我們讓我們的構(gòu)造方法先調(diào)用了我們的menuBar()方法,系統(tǒng)調(diào)用menuBar()方法會(huì)在該方法中實(shí)現(xiàn)相應(yīng)的菜單模式和屬性,在這里就已經(jīng)生成了我們的菜單欄,接下來呢,我們要操作的就是工具欄了。 工具欄就是我們的toolBar()方法了,該方法跟上面的menuBar()一樣,在調(diào)用后就自動(dòng)生成了我們的工具欄,其中我們的工具欄包括:〞添加〞,〞刪除〞,〞保存〞,〞最近生日〞,〞搜索〞,〞退出〞和〞更新〞。其中我們可以介紹一下相應(yīng)的功能,添加、刪除和保存就不用介紹了。我們來簡(jiǎn)單地說一下我們的“最近生日〞、“搜索〞和我們的“更新〞功能。 最近生日是響應(yīng)了一個(gè)事件,在我們?cè)摪粹o被點(diǎn)擊的時(shí)候,監(jiān)聽事件會(huì)相應(yīng)的new一個(gè)新的類,而這個(gè)類就是我們的BirthInform,我們這個(gè)類的初始化就會(huì)直接檢索我們最近3日生日的客戶,如果存在,我們的BirthInform窗口將會(huì)列出相應(yīng)的客戶生日信息。如果該信息是不存在的,則我們的系統(tǒng)默認(rèn)值是〞最近沒有客戶生日〞,我們這里的方法調(diào)用是這樣實(shí)現(xiàn)的:newBirthInform(birthPeople),birthPeople的最初值是“最近沒有客戶生日〞,但是在new類BirthPeople的之前,我們事先對(duì)birthPeople=bo*Name+bo*Year+"-"+bo*Month+"-"+bo*Day+"\n"做了工作,如果bo*Name不存在,也就是我們最近沒有過生日,則birthPeople=bo*Name+bo*Year+"-"+bo*Month+"-"+bo*Day+"\n"根本不會(huì)被執(zhí)行,則birthPeople的默認(rèn)值還是〞最近沒有客戶生日〞,所以在這里就實(shí)現(xiàn)了,如果存在則會(huì)顯示,如果不存在,則會(huì)顯示〞最近沒有客戶生日〞,這樣就相比照擬人性化了。 搜索也是new一個(gè)新的類NameSearchInform,則在這里我們直接輸入我們的,我們的系統(tǒng)將會(huì)在數(shù)據(jù)庫(kù)中開場(chǎng)檢索我們的是否存在,如果存在,我們的系統(tǒng)將會(huì)new一個(gè)新的InSystemn,而我們這個(gè)新的客戶信息列表將會(huì)顯示的是我們的剛剛搜索出的信息,如果搜索“際斌〞,則也就是會(huì)顯示“際斌〞的相關(guān)信息了。同樣地,如果我們的系統(tǒng)不存在所搜索的生日信息,則我們這個(gè)新的操作窗口列表也就是顯示為空了。 更新實(shí)質(zhì)上的宗旨就是刷新我們的數(shù)據(jù)顯示,因?yàn)槲覀冇袝r(shí)候更新了數(shù)據(jù),系統(tǒng)不能實(shí)時(shí)更新顯示在我們的當(dāng)前列表中,所以我們就要通過我們的手動(dòng)操作來實(shí)現(xiàn)我們的數(shù)據(jù)更新操作。我們這里采用的方法也是比擬傻瓜式的,那就是新建一個(gè)類,則系統(tǒng)就重新檢索數(shù)據(jù)庫(kù)了,所以我們這里的數(shù)據(jù)就一定會(huì)被顯示出來的。 setTitle("客戶信息管理系統(tǒng)——Albin.Sun")對(duì)我們的系統(tǒng)標(biāo)題設(shè)置為"客戶信息管理系統(tǒng)——Albin.Sun",這個(gè)設(shè)置是在系統(tǒng)初始化時(shí),即在我們的構(gòu)造方法中時(shí)出現(xiàn)的,如果其它情況下將不會(huì)有效了。 setBounds(360,100,620,560)設(shè)置我們的布局大小,其中左邊開場(chǎng)的距離是360,上面的距離是100,另外我們的系統(tǒng)的界面大小是620*560,這里實(shí)現(xiàn)了我們的大小定義。 setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE)當(dāng)然也很明了了,在java窗口開發(fā)中如果缺乏了該條語(yǔ)句,我們的窗口通過右上角的關(guān)閉按鈕是無常關(guān)閉的,所以我們會(huì)借用系統(tǒng)已經(jīng)擁有的該方法來實(shí)現(xiàn)右上角關(guān)閉功能的生效,所以現(xiàn)在我們點(diǎn)擊關(guān)閉按鈕即可正常關(guān)閉窗口。 setVisible(true),系統(tǒng)可見的,如果是false的話,則理所當(dāng)然,這個(gè)窗口也就不會(huì)被正常顯示了。添加客戶信息模塊監(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)的目的就是為了判斷事件來源是否為“添加〞按鈕,如果判斷正確的話我們將會(huì)執(zhí)行下面的語(yǔ)句if(nameField.getTe*t().equals(""))這里是為了判斷我們的客戶名是否為空,如果沒有填寫的話,我們的nameField的文本信息將會(huì)顯示“尚未填寫呢~〞,其實(shí)這里的目的就是為了提示用戶沒有填寫客戶名,因?yàn)榭蛻裘撬匦璧?,并且我們還有設(shè)置了nameField為紅色。其它情況下我們默認(rèn)都是正確的,我們執(zhí)行StringsqlIn="insertintoinfvalues(",",",",",",")"和PreparedStatementstmt=conn.prepareStatement(sqlIn),其實(shí)我們這里就是要插入信息,而問號(hào)的容就在后面通過stmt.setString(2,yearField.getTe*t())這樣的設(shè)置,有幾個(gè)問號(hào)就設(shè)置到了幾個(gè),最后通過stmt.e*ecuteUpdate()開場(chǎng)執(zhí)行插入操作,這個(gè)時(shí)候會(huì)有添加成功的提示,添加成功后我們希望在一個(gè)新的列表中能夠顯示我們剛剛添加的客戶信息,所以這里我們new了一個(gè)新的InSystem("select*frominf");如果我們的添加過程中遇到了異常信息,很顯然就是添加失敗的,我們的通過JOptionPane.showMessageDialog(null,"添加失敗")提示錯(cuò)誤信息。6.2.4KeyEvent.VK_ENTER的使用 系統(tǒng)的設(shè)計(jì)我們都依賴于鼠標(biāo)的操作和執(zhí)行命令的下達(dá),而我們的實(shí)際生活中可能會(huì)更多應(yīng)用鍵盤來操作,因?yàn)楫?dāng)我們?cè)谶M(jìn)展鍵盤操作的時(shí)候我們不習(xí)慣再去拿起鼠標(biāo)和放下鼠標(biāo)繼續(xù)鍵盤這樣的操作,所以在我們的軟件系統(tǒng)中,我們?cè)诤芏嗄K中就已經(jīng)參加了回車執(zhí)行以上命令的操作。 其實(shí)參加“Enter〞執(zhí)行的模塊包括如下:登陸按鈕、添加客戶按鈕和搜索客戶信息按鈕。我們的Enter操作是建立在該模塊最終選框的事件之上的,現(xiàn)在舉例說明如下: 在我們的登陸模塊中,我們輸入完用戶名就是密碼了,密碼之后就是確認(rèn)登陸的按鈕,則我們就在密碼這個(gè)文本框上做工作,添加了密碼.addKeyListener(newKeyAdapter(),添加這個(gè)監(jiān)聽器后,我們?cè)谶@里面添加了一個(gè)新的方法叫做publicvoidkeyPressed(KeyEvente),這個(gè)方法就是用來堅(jiān)硬回車鍵的操作,則監(jiān)聽到的按鍵將會(huì)被e.getKeyCode()獲取,然后與我們的系統(tǒng)回車鍵,也就是KeyEvent.VK_ENTER來做比擬,if(e.getKeyCode()==KeyEvent.VK_ENTER)也就是說明我們當(dāng)前的操作鍵是“Enter〞,好了,我們將會(huì)執(zhí)行這樣的操作,logButton.doClick()。logButton是我們的登陸按鈕,通過doClick()方法實(shí)現(xiàn)了我們的登陸按鈕的自動(dòng)點(diǎn)擊,言外之意就是說明我們按下回車鍵的操作就相當(dāng)于用鼠標(biāo)點(diǎn)擊了我們的logButton,所以回車執(zhí)行我們的操作。 添加客戶按鈕的回車操作,我們是在saleField 文本框中添加了addKeyListener(newKeyAdapter(),同樣地操作,添加這個(gè)監(jiān)聽器后,我們?cè)谶@里面添加了一個(gè)新的方法叫做publicvoidkeyPressed(KeyEvente),這個(gè)方法就是用來堅(jiān)硬回車鍵的操作,則監(jiān)聽到的按鍵將會(huì)被e.getKeyCode()獲取,然后與我們的系統(tǒng)回車鍵,也就是KeyEvent.VK_ENTER來做比擬,if(e.getKeyCode()==KeyEvent.VK_ENTER)也就是說明我們當(dāng)前的操作鍵是“Enter〞,好了,我們將會(huì)執(zhí)行這樣的操作,addButton.doClick()。 搜索客戶信息的search,我們是在nameField文本框中添加了addKeyListener(newKeyAdapter(),同樣地操作,添加這個(gè)監(jiān)聽器后,我們?cè)谶@里面添加了一個(gè)新的方法叫做publicvoidkeyPressed(KeyEvente),這個(gè)方法就是用來堅(jiān)硬回車鍵的操作,則監(jiān)聽到的按鍵將會(huì)被e.getKeyCode()獲取,然后與我們的系統(tǒng)回車鍵,也就是KeyEvent.VK_ENTER來做比擬,if(e.getKeyCode()==KeyEvent.VK_ENTER)也就是說明我們當(dāng)前的操作鍵是“Enter〞,好了,我們將會(huì)執(zhí)行這樣的操作,searchButton.doClick()。6.2.5關(guān)于getLayeredPane()方法的使用 我們?cè)诖缶植磕銓W(xué)習(xí)和教程中更多地接觸到的或許是getContentPane()方法,ContentPane應(yīng)該是最簡(jiǎn)易的一種獲取當(dāng)前面板的方式了,不過大多情況下如果我們需要在我們面板上參加背景再參加控件可能就無法實(shí)現(xiàn)了,那是因?yàn)槲覀兪窃谕粋€(gè)層次上添加的,一個(gè)層次上一個(gè)面板上如果背景已經(jīng)夠大了再添加其它的肯定是看不到的,所以我們就引入了多層次面板。即可以利用getLayeredPane()來獲取到了。具體實(shí)現(xiàn)方法如下: 這里我們通過getLayeredPane()添加(logButton),然后繼續(xù)通過getLayeredPane()添加(backlabel),其實(shí)這里是之前已經(jīng)定義好的ImageIc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025交通事故致人死亡賠償協(xié)議書14篇
- 借款借貸合同協(xié)議書七篇
- 補(bǔ)水美容病因介紹
- 內(nèi)蒙古通遼市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)統(tǒng)編版能力評(píng)測(cè)(下學(xué)期)試卷及答案
- 全國(guó)賽課一等獎(jiǎng)初中統(tǒng)編版七年級(jí)道德與法治上冊(cè)單元思考與行動(dòng)《追求美好人生》精美課件
- (2024年)藝術(shù)學(xué)校建設(shè)項(xiàng)目可行性研究報(bào)告
- 【中職專用】中職對(duì)口高考-機(jī)電與機(jī)制類專業(yè)-核心課-模擬試卷1(河南適用)(答案版)
- 2023年天津市和平區(qū)高考語(yǔ)文三模試卷
- 2023年復(fù)合管道項(xiàng)目融資計(jì)劃書
- 蔬菜園藝工中級(jí)考試題
- 裝飾裝修工程售后服務(wù)具體措施
- 糖皮質(zhì)激素類藥物臨床應(yīng)用指導(dǎo)原則(2023年)
- 世界的海陸分布、世界的地形復(fù)習(xí)提綱
- 門診掛號(hào)系統(tǒng)實(shí)驗(yàn)報(bào)告
- 53工廠質(zhì)量保證能力要求00C-005
- 百家宴活動(dòng)方案
- 高一英語(yǔ)期末考試試卷分析
- 基于STM32單片機(jī)的智能澆花系統(tǒng)設(shè)計(jì)
- 汽車訂購(gòu)合同范本經(jīng)典版
- 雙梁抓斗橋式起重機(jī)大修施工方案【完整版】
- T-CAAMTB 97.9-2022 電動(dòng)中重卡共享?yè)Q電車輛及換電站建設(shè)技術(shù)規(guī)范 第9部分:換電電池包通信協(xié)議要求
評(píng)論
0/150
提交評(píng)論