基于JAVA實現(xiàn)的個人理財系統(tǒng)_第1頁
基于JAVA實現(xiàn)的個人理財系統(tǒng)_第2頁
基于JAVA實現(xiàn)的個人理財系統(tǒng)_第3頁
基于JAVA實現(xiàn)的個人理財系統(tǒng)_第4頁
基于JAVA實現(xiàn)的個人理財系統(tǒng)_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于JAVA實現(xiàn)的個人理財系統(tǒng)目錄TOC\o"1-2"\h\z\u摘要 2Abstract 3引言 41緒論 51.1前期調(diào)研 51.2計算機技術(shù)綜述 51.3開發(fā)背景與主要內(nèi)容 72系統(tǒng)技術(shù)開發(fā) 82.1可行性分析 82.2面對對象的程序設(shè)計介紹 92.3SQL語言介紹 102.4JDBC數(shù)據(jù)訪問技術(shù) 112.5數(shù)據(jù)庫系統(tǒng)概述 122.6系統(tǒng)開發(fā)理論介紹 132.7開發(fā)環(huán)境 143系統(tǒng)設(shè)計 163.1系統(tǒng)結(jié)構(gòu)設(shè)計 163.2數(shù)據(jù)庫設(shè)計 174系統(tǒng)實現(xiàn) 194.1界面設(shè)計 194.2主要代碼的編寫 205系統(tǒng)測試和優(yōu)化 245.1測試目的 245.2測試方法 245.3測試步驟 246討論 266.1源代碼的控制 266.2變量命名的約定 276.3JAVA對字符串操作總結(jié) 276.4對錯誤的處理 30結(jié)論 32致謝 34參考文獻 34摘要理財系統(tǒng)是一個企業(yè)不可缺少的部分,企業(yè)很早就實施了理財?shù)募泄芾?,而家庭或大學(xué)生使用的小型理財系統(tǒng)卻只是鳳毛麟角。然而,理財系統(tǒng)不僅僅對企業(yè),而且對學(xué)生個人都有十分重要的意義。論文系統(tǒng)地分析了軟件開發(fā)的背景及過程,首先介紹了軟件的開發(fā)環(huán)境,其次介紹了本軟件的詳細設(shè)計過程:數(shù)據(jù)庫的設(shè)計以及具體界面的設(shè)計和功能,最后對在本軟件開發(fā)過程中的問題進行了總結(jié)。利用面向?qū)ο蟮木幊谭椒?OOP)和ADO數(shù)據(jù)庫訪問技術(shù),其開發(fā)主要包括后臺數(shù)據(jù)庫的建立、維護以及前端應(yīng)用程序開發(fā),通過JAVA和數(shù)據(jù)庫相結(jié)合,實現(xiàn)了大學(xué)生理財?shù)淖詣踊托畔⒒O到y(tǒng)主要包括以下幾個模塊:用戶密碼登陸,原始數(shù)據(jù)的匯入、修改、刪除等,從而實現(xiàn)對大學(xué)生個人的收入與支出進行有效、系統(tǒng)的管理,并使之更全面和靈活。通過論文,可以了解到“有‘理’真好——大學(xué)生理財軟件”的規(guī)劃、設(shè)計過程,掌握系統(tǒng)的功能。關(guān)鍵詞:大學(xué)生;理財;數(shù)據(jù)庫;面向?qū)ο蟮木幊谭椒ˋbstractThesystemoffinancingisveryimportanttobusinessenterprise,anditisanindispensabilitypart.Thebusinessenterpriseispreviouslyandalreadyfocalizationintheexecutionfinancialmanagement.However,thefinancingsystemisnotonlytobusinessenterprise,andtostudentsorfamiliesallcontainveryimportantmeaning.Thisthesissystematicallyanalyzesthebackgroundandprocessofsoftware’sexploitation.Firstlyittellsustheexploitativeenvironmentofsoftware.Secondlyitshowstheprocessofdesigningthesoftwareindetail,suchasthedesignofdatabaseandtheachievement,aswellasthedesignandfunctionsoftheconcreteinterface.Finallyitconcludestheproblemsthatoccurintheexploitativeprocessofthissoftware.Adoptingthewayofobjectorientedprogram(OOP)andADOdatabaseinterviewtechnique,whoseexploitationmainlyincludestheestablishmentandmaintenanceofbackgrounddatabaseandtheprocessofforepartapplication,usingthewayJAVAthatachieveautomatizationandinformationtechnologyofthesystemoffinancinginstudents.Thesystemmainlyconsistsofthefollowingmodules:Customerpassworddebarkation,Investigatingdatabaseandtheconfluenceofinitialdataandsoon,whichmaketheavailabilityofthecashinstudentsintoearningandpayout,Investigationandmanagementofthesystemmoreperfectandflexible.Accordingtoreadthethesis,youcanrealizetheprogram“TheStudents’FinancingSystem“theapproachofdesignandcontrolthefunctionofsystem.KeyWords:UniversityStudents;Financing;DATABASE;ObjectOrientedProgram引言美國著名經(jīng)濟學(xué)家詹姆斯菲爾德對于美國大學(xué)生理財規(guī)劃,提出了專門的“1+1+1”模式:學(xué)會貸款——用明天的錢圓今天的夢,學(xué)會兼職——讓“增值”為以后的超前消費埋下伏筆,學(xué)會投資——為今后的個人理財“投石問路”?,F(xiàn)在很多大學(xué)生對自己的消費不以為然,有錢的時候就大手大腳,等到?jīng)]有錢的時候就和家里伸手,所以使得很多大學(xué)生養(yǎng)成了不好的習(xí)慣,就此我們小組對于這一項目展開調(diào)查和研究了這個軟件,有助于我們在平時的消費中養(yǎng)成良好的消費習(xí)慣。在我們的調(diào)查中發(fā)現(xiàn)很多大學(xué)生的花銷主要集中在通訊,娛樂等方面。另外參考了李永華等對武漢高校大學(xué)生消費情況的調(diào)查表明,大學(xué)生在經(jīng)濟消費水平上存在著巨大差距,其中年消費最高的達到18500元,而年消費最低的只有2100元。武漢市大學(xué)生每年消費均值略高于8300元,其中包括學(xué)費均值3000元左右,住宿非均值500元左右。大學(xué)生的月食品支出在230元左右,它與生活費月支出(480元)比率是47.9%,這可視為大學(xué)生的“恩格爾系數(shù)”,與1999年武漢市人均消費支出和食物支出相比,呈現(xiàn)出整體上消費水平比較高的趨勢。據(jù)百度網(wǎng)站查詢的資料表明,暫時沒有一個成熟、具指導(dǎo)性、針對大學(xué)生的理財軟件。大學(xué)生是擁有一定的消費能力,除了家庭資金供給外,一部分大學(xué)生還有兼職收入、獎學(xué)金收入和投資收入,而且重要的一點是大學(xué)生將是未來4-5年后社會的主體消費及創(chuàng)造社會財富的群體,本軟件是根據(jù)大學(xué)生消費理念設(shè)計的,據(jù)我們調(diào)查所做的調(diào)查,有將近70%的大學(xué)生會考慮使用理財軟件,因此,在理財軟件方面是具有一定的潛力市場。我們小組采用java來實現(xiàn)軟件的開發(fā),主要利用面向?qū)ο蟮木幊?OOP)的方法來完成程序的開發(fā)。1緒論近年來,計算機技術(shù)飛速發(fā)展幾乎超出了人們的想象,硬件的更新?lián)Q代速度更是以級數(shù)進行。計算機在處理對象、處理方法上都發(fā)生了很大的變化。作為計算機科學(xué)的重要分支——數(shù)據(jù)庫技術(shù),也被越來越多的應(yīng)用領(lǐng)域采用來存儲和處理他們的信息資源。計算機已經(jīng)不再僅僅是科學(xué)研究的工具,它越來越多地影響到了我們生活的諸多方面,更多的應(yīng)用軟件出現(xiàn)在了我們的身邊,給人們生活的方方面面都帶來了極大的便利。近年來隨著國內(nèi)外社會經(jīng)濟和科學(xué)技術(shù)的不斷改革和發(fā)展,2004中國大學(xué)生消費與生活形態(tài)研究報告指出:“當代大學(xué)生不僅消費能力在提高,而且在消費結(jié)構(gòu)方面呈現(xiàn)多元化的趨勢?!备鞣N各樣的開銷與收入也越來越多,很多大學(xué)生對于日常賬目的管理感到越來越力不從心,收支管理已刻不容緩。大學(xué)生們需要一款適合他們使用的理財軟件。1.1前期調(diào)研為了解大學(xué)生對于理財管理系統(tǒng)是否有需求,我們針對大學(xué)生理財方面提出了17條問題。我們采用的是通過QQ和E-mail進行隨機電子問卷調(diào)查方式,發(fā)出問卷50份,收回的有效問卷是36份。調(diào)研范圍為:全國各大高校在校大學(xué)生,地區(qū)主要集中在沈陽、大連,也包括廣州、佛山、上海、鄭州、長沙、濟南、香港等城市。調(diào)查表明,有83.33%的大學(xué)生每月沒有盈余,甚至是超支。對于問卷第16題“若有一款大學(xué)生理財軟件,你是否會考慮使用呢?”,回答“會”的人共有25人。說明有69.44%的人會使用適合他們使用的理財軟件。通過前期調(diào)研,不難發(fā)現(xiàn)大學(xué)生們急需一個成熟、具指導(dǎo)性、針對大學(xué)生的理財軟件進行合理的理財分析。1.2計算機技術(shù)綜述在計算機硬件和軟件技術(shù)不斷創(chuàng)新和進步的背景下,計算機技術(shù)在20世紀有許多重大突破,它涉及到人們生活的方方面面,主要可以歸結(jié)為以下四個方面:第一,處理對象的變化。在計算機應(yīng)用初期,計算機的處理主要是數(shù)值和簡單的符號。隨著計算機速度和存儲容量的增大,今天的計算機已經(jīng)能夠處理聲、圖、文和語言等多種信息,除二維、靜止圖像外,還可以處理三維運動的圖像等等。也就是說,人類使用的任何信息形式現(xiàn)在計算機都可以處理了。這不僅使計算機的用途大大地擴展,而且使今天的用戶能夠從計算機的屏幕上看到圖文并茂,有聲有色的畫面。從而使計算機從專業(yè)人員圈子中走出來,走向普通用戶,走向平民百姓。第二,處理方法或建模方法的進步。傳統(tǒng)計算機的應(yīng)用只限制在數(shù)學(xué)模型為基礎(chǔ)的數(shù)值計算上。不管是科學(xué)計算,數(shù)據(jù)處理還是計算機自動化,這些都離不開數(shù)值計算,因此讓計算機做任何事情之前,首先需要建立數(shù)學(xué)模型:算數(shù)的、代數(shù)的、微積分的、等等,沒有數(shù)學(xué)模型計算機無從進行計算,這些使所有傳統(tǒng)算法的基礎(chǔ),到了20世紀中葉,由于人工智能的出現(xiàn)以及它所取得的成就,計算機應(yīng)用開始突破這一限制——計算機能夠進行符號計算,記憶邏輯和知識為基礎(chǔ)的符號推理。這些突破極大地擴展了計算機的應(yīng)用范圍,使那些無法用數(shù)學(xué)表達的問題,只要人們有足夠的經(jīng)驗知識,計算機就可能根據(jù)這些知識進行模擬,達到問題求解的目的,實現(xiàn)所謂人工智能,人們希望那些目前大家了解還不深,或者還不清楚的問題,計算機也能幫助解決,軟計算就是這個背景下提出的。二十世紀的七八十年代,提出的模糊計算,神經(jīng)網(wǎng)絡(luò)計算以及進化計算等,都是希望計算機能夠進一步處理模糊概念、模糊推理等類問題,是計算機在先前經(jīng)驗只是較弱的情況下,也能幫助人們處理疑難問題、軟計算或計算智能給人們帶來希望,因此成為近來研究的熱點。第三,處理方式的變化。在處理方式上人們也經(jīng)歷了三個階段。在早期的主機時代,人們采用的是集中交互處理的模式。這兩種方式都是以各人單獨工作為中心的,現(xiàn)在我們進入了計算機網(wǎng)絡(luò)時代,人們的工作方式發(fā)生了很大轉(zhuǎn)變,走向分布協(xié)同工作的時代。總之,以上這些變化會影響到21世紀計算機應(yīng)用技術(shù)的發(fā)展和變化。第四,硬件技術(shù)的提高。伴隨著時代的發(fā)展,由最初的電子管計算機發(fā)展到即將到來的量子計算機,計算速度也發(fā)展到了最初計算機的數(shù)萬倍以上。在外型上,從桌上型、筆記型(Notebook)到掌上型計算機(Palm),不管是功能上的提升或可攜帶性的特色,都顯示出未來計算機將以輕薄短小,容易攜帶為主。隨著計算機進一步的小型化,人工智能將越來越強地集成到我們的環(huán)境中。便攜設(shè)備將像裝飾品一樣穿在衣服里。個人計算機也不斷向著普及的方向發(fā)展,各種計算機外設(shè)的品質(zhì)不斷提高、豐富,極大地方便了人們的工作和生活。數(shù)據(jù)庫技術(shù)的發(fā)展已經(jīng)經(jīng)歷了很長的一段時間,從層次型數(shù)據(jù)庫,網(wǎng)狀數(shù)據(jù)庫直到今天的關(guān)系型數(shù)據(jù)庫以及面向?qū)ο蟮臄?shù)據(jù)庫。目前流行的數(shù)據(jù)庫管理系統(tǒng)(DBMS)有多種,其中大型數(shù)據(jù)庫管理系統(tǒng)有Oracle,SQLServer等,小型數(shù)據(jù)庫管理系統(tǒng)有FoxPro,Access等,它們已能滿足人們對數(shù)據(jù)庫應(yīng)用的基本要求。今天,網(wǎng)絡(luò)技術(shù)的發(fā)展對數(shù)據(jù)庫技術(shù)提出了新的要求。人們希望能訪問存儲在不同網(wǎng)格,不同節(jié)點上的數(shù)據(jù)而不需要了解數(shù)據(jù)存儲的細節(jié),并且能夠在系統(tǒng)局部故障的情況下保證數(shù)據(jù)無損。這就形成了人們對分布式數(shù)據(jù)庫管理系統(tǒng)的部分要求——數(shù)據(jù)的位置透明性和安全性。本理財系統(tǒng)采用的開發(fā)平臺是Microsoft?WindowsXP。與其它操作系統(tǒng)相比,WindowsXP更穩(wěn)定,有較好的網(wǎng)絡(luò)功能。數(shù)據(jù)庫設(shè)計與維護采用的是Mysql,軟件的數(shù)據(jù)庫訪問及軟件開發(fā)工具采用的是Eclipse,它面向?qū)ο蟮木幊谭绞?OOP)使程序設(shè)計過程大大簡化,對數(shù)據(jù)庫的訪問更靈活。相對于其他開發(fā)環(huán)境,Eclipse使開發(fā)人員的工作更快、成本更低、周期更短、質(zhì)量更高、功能更強。Eclipse為應(yīng)用開發(fā)環(huán)境提供了全面綜合性的支持:事件驅(qū)動的應(yīng)用程序;功能強大的編程語言和函數(shù);面向?qū)ο蟮木幊?;開放的數(shù)據(jù)庫連接系統(tǒng)。1.3開發(fā)背景與主要內(nèi)容結(jié)合大學(xué)生理財現(xiàn)狀,大學(xué)生缺乏理財觀念開發(fā)這個應(yīng)用系統(tǒng)的目標是為了代替人工進行許多繁雜的勞動,節(jié)省許多資源,提高大學(xué)生理財?shù)墓ぷ餍?。它主要實現(xiàn)的功能如下:功能一:驗證用戶和密碼的正確性再登入,以及修改密碼和退出系統(tǒng);功能二:保存每次輸入的收支記錄,并提供查詢;功能三:對大學(xué)生收入/支出進行管理,實現(xiàn)費用的增加,修改,刪除;功能四:整個收支記錄按需求進行分類查詢。2系統(tǒng)技術(shù)開發(fā)2.1可行性分析可行性研究的目的是用最小的代價在盡可能短的時間內(nèi)確定問題是否能夠解決。2.1.1經(jīng)濟可行性計算機的價格已經(jīng)十分低廉,性能也有了長足的進步。而本系統(tǒng)的開發(fā),為大學(xué)生理財?shù)墓ぷ餍蕩砹艘粋€質(zhì)的飛躍,為此主要表現(xiàn)有以下幾個方面:第一,本系統(tǒng)的運行可以代替人工進行許多繁雜的勞動;第二,本系統(tǒng)的運行可以節(jié)省許多資源;第三,本系統(tǒng)的運行可以大大的提高大學(xué)生理財?shù)墓ぷ餍剩坏鹊?。所以,本系統(tǒng)在經(jīng)濟上是可行的。2.1.2技術(shù)可行性和運行可行性本理財系統(tǒng)采用的開發(fā)平臺是Microsoft?WindowsXP。與其它操作系統(tǒng)相比,WindowsXP更穩(wěn)定,有較好的網(wǎng)絡(luò)功能。使用Eclipse作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它面向?qū)ο蟮木幊谭绞?OOP)使程序設(shè)計過程大大簡化,對數(shù)據(jù)庫的訪問更靈活。提供完善的指令控制語句、類與對象的支持及豐富的數(shù)據(jù)類型,全面綜合性的支持:事件驅(qū)動的應(yīng)用程序;功能強大的編程語言和函數(shù);面向?qū)ο蟮木幊?;開放的數(shù)據(jù)庫連接系統(tǒng)。給開發(fā)高性能系統(tǒng)提供了保障,為開發(fā)滿足客戶要求的系統(tǒng)保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對新系統(tǒng)的擴展與修改。相對于其他開發(fā)環(huán)境,Java使開發(fā)人員的工作更快、成本更低、周期更短、質(zhì)量更高、功能更強。綜上所述,本系統(tǒng)的設(shè)計與開發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。本系統(tǒng)為一個小型的理財系統(tǒng),所耗費的資源非常的小,學(xué)校的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運行上是可行的。2.2面對對象的程序設(shè)計介紹傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(StructuredProgramming)是一種強調(diào)功能抽象化和模塊化的編程方法,它把解決問題的過程看作是一個處理單位。這就是說結(jié)構(gòu)化程序設(shè)計中,模塊是對功能的抽象,而每一個模塊都是一個處理單位,并有輸入和輸出。而面向?qū)ο蟮某绦蛟O(shè)計(ObjectOrientedProgramming,OOP)是一種以對象為基礎(chǔ),以事件來驅(qū)動對象執(zhí)行的程序設(shè)計技術(shù)。OOP把計算過程看作為對象的分類過程加上其狀態(tài)變化的過程,也就是將一個應(yīng)用程序逐步劃分成相互關(guān)聯(lián)的多個對象,并且建立起與這些對象相互關(guān)聯(lián)的事件過程,通過對象對所發(fā)生的事件產(chǎn)生響應(yīng),并執(zhí)行相應(yīng)的事件過程以引發(fā)對象狀態(tài)的改變,從而最終達到完成計算的目的。與結(jié)構(gòu)化程序設(shè)計不同,面向?qū)ο蟮某绦蛟O(shè)計綜合了功能的抽象和數(shù)據(jù)的抽象,它把解決問題的過程看作是一個對象分類演繹的過程。在OOP中,對象(Object)是一個包括數(shù)據(jù)和方法(操作)的并被封裝起來的整體,它是對數(shù)據(jù)和功能的抽象和統(tǒng)一,而對象就包含了模塊的概念。面向?qū)ο笤O(shè)計是一種全新的程序設(shè)計方法,它從根本上改變了傳統(tǒng)的程序設(shè)計模式。其基本思想是:通過建立與具體實際應(yīng)用相對應(yīng)的對象,并通過這些對象的組合來創(chuàng)建具體的應(yīng)用程序。這種設(shè)計方法給程序設(shè)計帶來了許多良好特性,一般說來有以下幾點:(1)模塊性:對象是一個功能和數(shù)據(jù)獨立的單元,它們之間只能通過對象認可的方式來進行通信,并可以較為自由地為其他對象所調(diào)用。(2)封裝性:這一特性為信息的隱藏提供了具體的實現(xiàn)手段,用戶不必清楚對象內(nèi)部的細節(jié),只需了解其功能即可。(3)繼承性:這一特性為代碼的共享提供了一種非常有效的方法,從而可以避免重復(fù)的代碼設(shè)計,實現(xiàn)對象的可重用性。這一特性也是面向?qū)ο蟪绦蛟O(shè)計技術(shù)最本質(zhì)的特征。(4)可靠性:對象實現(xiàn)了抽象和封裝,從而使得其中出現(xiàn)的錯誤限制在對象的內(nèi)部,因而不會向外部傳播,同時也易于檢查和維護。(5)可擴充性:面向?qū)ο笙到y(tǒng)可以通過繼承機制不斷擴充其對象的功能,而不會影響原系統(tǒng)的運行。(6)連續(xù)性:雖然面向?qū)ο蟮某绦蛟O(shè)計語言在編程模式上相差很大,但它并沒有摒棄傳統(tǒng)的做法,它不僅采用了傳統(tǒng)程序設(shè)計語言的語言元素,而且利用它們來模擬建立對象,從而使得一個熟悉傳統(tǒng)程序設(shè)計語言的編程者能夠很快掌握面向?qū)ο笤O(shè)計的規(guī)律。2.3SQL語言介紹SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)是由Boyce和Chamberlin在1974年提出的,由于它功能豐富,使用靈活、語言簡潔易學(xué)等特點,在計算機工業(yè)界和計算機用戶中倍受歡迎,快得到應(yīng)用和推廣。許多關(guān)系數(shù)據(jù)庫系統(tǒng)DB2、Oracle、SQLServer2000、Sybase等都實現(xiàn)了SQL語言。1986年10月,美國國家標準局(ANSI)的數(shù)據(jù)庫委員會批準了SQL作為關(guān)系數(shù)據(jù)庫語言的美國標準。1987年6月,國際標準化組織(ISO)將其采納為國際標準,也稱為“SQL86”SQL數(shù)據(jù)庫的體系結(jié)構(gòu)基本上了三級模式結(jié)構(gòu)。如圖2.1。圖2.1SQL數(shù)據(jù)庫的體系結(jié)構(gòu)SQL數(shù)據(jù)庫的體系結(jié)構(gòu)具有如下特點:(1)一個數(shù)據(jù)庫(Database)是表和約束的集合;(2)一個表(Table)由行(Row)構(gòu)成,每行是列(Column)的集合;(3)一張表既可以是基本表,也可以是一個視圖;(4)一個基本表可以跨一個或多個存儲文件,一個存儲文件也可存放一個或多個基本表,一個表可以帶若干索引,索引文件也存放在存儲文件中;(5)SQL用戶可以是應(yīng)用程序,也可以是終端用戶。SQL語句可嵌入在各種宿主語言中,宿主語言有VB、VC、VC#、VB.Net、Delphi、PowerBuildings等高級語言;SQL語言也能作為獨立用戶接口,供交互環(huán)境下的終端用戶使用。2.4JDBC數(shù)據(jù)訪問技術(shù)JDBC(JavaDataBaseConnectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為工具/數(shù)據(jù)庫開發(fā)人員提供了一個標準的API,據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠用純JavaAPI編寫數(shù)據(jù)庫應(yīng)用程序,同時,JDBC也是個商標名。有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語句就是一件很容易的事。換言之,有了JDBCAPI,就不必為訪問Sybase數(shù)據(jù)庫專門寫一個程序,為訪問Oracle數(shù)據(jù)庫又專門寫一個程序,或為訪問Informix數(shù)據(jù)庫又編寫另一個程序等等,程序員只需用JDBCAPI寫一個程序就夠了,它可向相應(yīng)數(shù)據(jù)庫發(fā)送SQL調(diào)用。同時,將Java語言和JDBC結(jié)合起來使程序員不必為不同的平臺編寫不同的應(yīng)用程序,只須寫一遍程序就可以讓它在任何平臺上運行,這也是Java語言“編寫一次,處處運行”的優(yōu)勢。Java數(shù)據(jù)庫連接體系結(jié)構(gòu)是用于Java應(yīng)用程序連接數(shù)據(jù)庫的標準方法。JDBC對Java程序員而言是API,對實現(xiàn)與數(shù)據(jù)庫連接的服務(wù)提供商而言是接口模型。作為API,JDBC為程序開發(fā)提供標準的接口,并為數(shù)據(jù)庫廠商及第三方中間件廠商實現(xiàn)與數(shù)據(jù)庫的連接提供了標準方法。JDBC使用已有的SQL標準并支持與其它數(shù)據(jù)庫連接標準,如ODBC之間的橋接。JDBC實現(xiàn)了所有這些面向標準的目標并且具有簡單、嚴格類型定義且高性能實現(xiàn)的接口。Java具有堅固、安全、易于使用、易于理解和可從網(wǎng)絡(luò)上自動下載等特性,是編寫數(shù)據(jù)庫應(yīng)用程序的杰出語言。所需要的只是Java應(yīng)用程序與各種不同數(shù)據(jù)庫之間進行對話的方法。而JDBC正是作為此種用途的機制。JDBC擴展了Java的功能。例如,用Java和JDBCAPI可以發(fā)布含有applet的網(wǎng)頁,而該applet使用的信息可能來自遠程數(shù)據(jù)庫企業(yè)也可以用JDBC通過Intranet將所有職員連到一個或多個內(nèi)部數(shù)據(jù)庫中(即使這些職員所用的計算機有Windows、Macintosh和UNIX等各種不同的操作系統(tǒng))。隨著越來越多的程序員開始使用Java編程語言,對從Java中便捷地訪問數(shù)據(jù)庫的要求也在日益增加。MIS管理員們都喜歡Java和JDBC的結(jié)合,因為它使信息傳播變得容易和經(jīng)濟。企業(yè)可繼續(xù)使用它們安裝好的數(shù)據(jù)庫,并能便捷地存取信息,即使這些信息是儲存在不同數(shù)據(jù)庫管理系統(tǒng)上。新程序的開發(fā)期很短。安裝和版本控制將大為簡化。程序員可只編寫一遍應(yīng)用程序或只更新一次,然后將它放到服務(wù)器上,隨后任何人就都可得到最新版本的應(yīng)用程序。對于商務(wù)上的銷售信息服務(wù),Java和JDBC可為外部客戶提供獲取信息更新的更好方法。2.5數(shù)據(jù)庫系統(tǒng)概述(1)數(shù)據(jù)(Data)數(shù)據(jù)是數(shù)據(jù)庫中存儲的對象。數(shù)據(jù)在大多數(shù)人頭腦中的第一反映就是數(shù)字。其實數(shù)字只是最簡單的一種數(shù)據(jù),是數(shù)據(jù)的一種傳統(tǒng)和狹義的理解。廣義的理解,數(shù)據(jù)的種類很多,文字,圖形,圖像,聲音等都是數(shù)據(jù),可以對數(shù)據(jù)做以下定義:描述事物的符號記錄稱為數(shù)據(jù)。(2)數(shù)據(jù)庫(Database)數(shù)據(jù)庫,顧名思義,是存放數(shù)據(jù)的倉庫。只不過這個倉庫是在計算機存儲設(shè)備上,而且數(shù)據(jù)是按一定的格式存放的。數(shù)據(jù)庫是指長期存在計算機內(nèi)的,有組織的,可共享的數(shù)據(jù)集合。數(shù)據(jù)庫中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織,描述和存儲,具有較高的數(shù)據(jù)獨立性和易擴展性,并可以為各種用戶共享。(3)數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,簡稱DBMS)數(shù)據(jù)庫管理系統(tǒng)是位于用戶和操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件。它主要有以下幾個方面的功能:①數(shù)據(jù)定義功能DBMS提供數(shù)據(jù)定義語言,用戶通過它可以方便的對數(shù)據(jù)庫中的數(shù)據(jù)對象進行定義。②數(shù)據(jù)操縱功能DBMS還提供數(shù)據(jù)操縱語言,用戶可以使用這語言操縱數(shù)據(jù)實現(xiàn)對數(shù)據(jù)庫的基本操作。如查詢,插入,刪除和修改等。③數(shù)據(jù)庫的運行管理數(shù)據(jù)庫在建立,運行和維護時由數(shù)據(jù)庫管理系統(tǒng)統(tǒng)一管理,統(tǒng)一控制,以保證數(shù)據(jù)的安全性,完整性,多用戶對數(shù)據(jù)的并發(fā)使用乃發(fā)生故障后的系統(tǒng)恢復(fù)。④數(shù)據(jù)庫的建立和維護功能它包括數(shù)據(jù)庫初始的輸入,轉(zhuǎn)換功能,數(shù)據(jù)庫的轉(zhuǎn)存,恢復(fù)功能,數(shù)據(jù)庫的重組織功能和性能監(jiān)視。這些功能通常是由一些實用的程序完成的。2.6eclipse開發(fā)工具Eclipse是一個開放源代碼的、與NetBeans、SunONEStudio和BorlandJbuilder類似的一種基于Java的整合型可擴展開發(fā)平臺,也是目前最著名的開源項目之一,IBM在最近幾年里也一直在大力支持該項目的發(fā)展,目標是將其做成用以替代IBMVisualAgeforJava(簡稱IVJ)的下一代IDE開發(fā)環(huán)境,并于2001年11月宣布投入4千萬美元資金到該項目的研發(fā)。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse附帶了一個標準的插件集,包括Java開發(fā)工具(JavaDevelopmentTools,JDT)。其未來的目標不僅僅是成為專門開發(fā)Java程序的IDE環(huán)境,根據(jù)Eclipse的體系結(jié)構(gòu),通過開發(fā)插件,它能擴展到任何語言的開發(fā),甚至能成為圖片繪制的工具。目前,Eclipse已經(jīng)開始提供C語言開發(fā)的功能插件。更難能可貴的是,Eclipse是一個開放源代碼的項目,任何人都可以下載Eclipse的源代碼,并且在此基礎(chǔ)上開發(fā)自己的功能插件。也就是說未來只要有人需要,就會有建立在Eclipse之上的COBOL,Perl,Python等語言的開發(fā)插件出現(xiàn)。同時可以通過開發(fā)新的插件擴展現(xiàn)有插件的功能,比如本系列文章為了進行手機應(yīng)用程序的開發(fā)就是通過J2ME插件的擴展來加以實現(xiàn)的??梢詿o限擴展,而且有著統(tǒng)一的外觀,操作和系統(tǒng)資源管理,這也正是Eclipse的潛力所在。Eclipse的主要組成Eclipse是一個開放源代碼的軟件開發(fā)項目,專注于為高度集成的工具開發(fā)提供一個全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺。它主要由Eclipse項目、Eclipse工具項目和Eclipse技術(shù)項目三個項目組成,具體包括四個部分組成——EclipsePlatform、JDT、CDT和PDE.JDT支持Java開發(fā)、CDT支持C開發(fā)、PDE用來支持插件開發(fā),EclipsePlatform則是一個開放的可擴展IDE,提供了一個通用的開發(fā)平臺。它提供建造塊和構(gòu)造并運行集成軟件開發(fā)工具的基礎(chǔ)。EclipsePlatform允許工具建造者獨立開發(fā)與他人工具無縫集成的工具從而無須分辨一個工具功能在哪里結(jié)束,而另一個工具功能在哪里開始。EclipseSDK(軟件開發(fā)者包)是EclipsePlatform、JDT和PDE所生產(chǎn)的組件合并,它們可以一次下載。這些部分在一起提供了一個具有豐富特性的開發(fā)環(huán)境,允許開發(fā)者有效地建造可以無縫集成到EclipsePlatform中的工具。EclipseSDK由Eclipse項目生產(chǎn)的工具和來自其它開放源代碼的第三方軟件組合而成。Eclipse項目生產(chǎn)的軟件以CPL發(fā)布,第三方組件有各自自身的許可協(xié)議。2.7系統(tǒng)開發(fā)理論介紹2.7.1系統(tǒng)規(guī)劃階段系統(tǒng)規(guī)劃階段的任務(wù)是對各大學(xué)生理財?shù)沫h(huán)境、目標及現(xiàn)行系統(tǒng)的狀況進行初步調(diào)查,根據(jù)大學(xué)生理財目標和發(fā)展戰(zhàn)略,確定信息系統(tǒng)的發(fā)展戰(zhàn)略,對建設(shè)新系統(tǒng)的需求做出分析和預(yù)測,同時考慮建設(shè)新系統(tǒng)所受的各種約束,研究建設(shè)新系統(tǒng)的必要性和可能性。根據(jù)需要與可能,給出擬建系統(tǒng)的備選方案。對這些方案進行可行性分析,寫出可行性分析報告。可行性分析報告審議通過后,將新系統(tǒng)建設(shè)方案及實施計劃編寫成系統(tǒng)設(shè)計任務(wù)書。2.7.2系統(tǒng)分析階段系統(tǒng)分析階段的任務(wù)是根據(jù)系統(tǒng)設(shè)計任務(wù)書所確定的范圍,對現(xiàn)行系統(tǒng)進行詳細調(diào)查,描述現(xiàn)行系統(tǒng)的業(yè)務(wù)流程,指出現(xiàn)行系統(tǒng)的局限性和不足之處,確定新系統(tǒng)的基本目標和邏輯功能要求,即提出新系統(tǒng)的邏輯模型。這個階段又稱為邏輯設(shè)計階段,他是整個系統(tǒng)建設(shè)的關(guān)鍵階段,也是信息系統(tǒng)建設(shè)與一般工程項目的重要區(qū)別所在。該階段的工作成果體現(xiàn)在系統(tǒng)說明書中,這是系統(tǒng)建設(shè)的必備文件。它既是給用戶看的,也是下一階段的工作依據(jù)。因此,系統(tǒng)說明書既要通俗,又要準確。用戶通過說明書可以了解未來系統(tǒng)的功能,判斷是不是其所要求的系統(tǒng)。系統(tǒng)說明書一旦討論通過,就是系統(tǒng)設(shè)計的依據(jù),也是將來驗收系統(tǒng)的依據(jù)。2.7.3系統(tǒng)設(shè)計階段簡單地講,系統(tǒng)分析階段的任務(wù)是回答系統(tǒng)“做什么”的問題,而系統(tǒng)設(shè)計階段要回答的問題是“怎么做”。該階段的任務(wù)是根據(jù)系統(tǒng)說明書中規(guī)定的功能要求,考慮實際條件,具體設(shè)計實現(xiàn)邏輯模型的技術(shù)方案,也即設(shè)計新系統(tǒng)的物理模型。這個階段又稱為物理設(shè)計階段,可分為總體設(shè)計和詳細設(shè)計兩個階段。這個階段的技術(shù)文檔是“系統(tǒng)設(shè)計說明書”。2.7.4系統(tǒng)實施階段系統(tǒng)實施階段是將設(shè)計的系統(tǒng)付諸實施的階段。這一階段的任務(wù)包括計算機等設(shè)備的購置、安裝和調(diào)試,程序的編寫和調(diào)試,人員培訓(xùn),數(shù)據(jù)文件轉(zhuǎn)換,系統(tǒng)調(diào)試與轉(zhuǎn)換等。這個階段的特點是幾個互相聯(lián)系、互相制約的任務(wù)同時展開,必須精心安排、合理組織。系統(tǒng)實施是按實施計劃分階段完成的,每個階段應(yīng)寫出實施進度報告。系統(tǒng)測試之后寫出系統(tǒng)測試分析報告。2.7.5系統(tǒng)運行和維護階段系統(tǒng)投入運行后,需要經(jīng)常進行維護和評價,記錄系統(tǒng)運行的情況,根據(jù)一定的規(guī)格對系統(tǒng)進行必要的修改,評價系統(tǒng)的工作質(zhì)量和經(jīng)濟效益。2.8開發(fā)環(huán)境①硬件環(huán)境CPU:賽揚2.4GHz,內(nèi)存:1GB,硬盤:120GB②操作系統(tǒng)Microsoft?WindowsXPProfessionalServicePack2③軟件環(huán)境開發(fā)工具:Eclipse3系統(tǒng)設(shè)計3.1系統(tǒng)需求分析1、性能需求為了保證系統(tǒng)能夠長期、安全、穩(wěn)定、可靠、高效的運行,系統(tǒng)應(yīng)該滿足以下的性能需求:(1)系統(tǒng)處理的準確性和及時性系統(tǒng)處理的準確性和及時性是系統(tǒng)的必要性能。在系統(tǒng)設(shè)計和開發(fā)過程中,要充分考慮系統(tǒng)當前和將來可能承受的工作量,使系統(tǒng)的處理能力和響應(yīng)時間能夠滿足用戶對信息的處理。由于系統(tǒng)的查詢功能對于整個系統(tǒng)的功能和性能完成很重要。從系統(tǒng)的多個數(shù)據(jù)來源來看,學(xué)生信息查詢、實驗信息查詢、預(yù)約結(jié)果查詢、實驗成績查詢及預(yù)約實驗、撤消預(yù)約,其準確性很大程度上決定了系統(tǒng)的成敗。因此,在系統(tǒng)開發(fā)過程中,系統(tǒng)采用優(yōu)化的SQL語句及安全擴展存儲過程來保證系統(tǒng)的準確性和及時性。(2)系統(tǒng)的開放性和系統(tǒng)的可擴充性系統(tǒng)在開發(fā)過程中,應(yīng)該充分考慮以后的可擴充性。例如實驗信息屬性添加、修改,用戶查詢的需求及管理工作的分級管理,信息輸出打印報表等模塊也會不斷的更新和完善。所有這些,都要求系統(tǒng)提供足夠的手段進行功能的調(diào)整和擴充。而要實現(xiàn)這一點,應(yīng)通過系統(tǒng)的開放性來完成,既系統(tǒng)應(yīng)是一個開放系統(tǒng),只要符合一定的規(guī)范,可以簡單的加入和減少系統(tǒng)的模塊,配置系統(tǒng)的硬件。通過軟件的修補、替換完成系統(tǒng)的升級和更新?lián)Q代。(3)系統(tǒng)的易用性和易維護性系統(tǒng)是直接面對使用人員的,而有些使用人員往往對計算機并不是非常熟悉。這就要求系統(tǒng)能夠提供良好的用戶接口,易用的人機交互界面。要實現(xiàn)這一點,就要求系統(tǒng)應(yīng)該盡量使用用戶熟悉的術(shù)語和中文信息的界面;針對用戶可能出現(xiàn)的使用問題,要提供足夠的在線幫助,縮短用戶對系統(tǒng)熟悉的過程。系統(tǒng)中涉及到的數(shù)據(jù)是高校實驗室相當重要的信息,因此系統(tǒng)為不同角色的用戶提供了方便的管理后臺進行數(shù)據(jù)管理,特別為系統(tǒng)管理員提供了數(shù)據(jù)備份,日常安全管理,防止系統(tǒng)意外崩潰等功能。(4)系統(tǒng)的響應(yīng)速度系統(tǒng)設(shè)計中摒棄大量數(shù)據(jù)冗余,提出了優(yōu)化數(shù)據(jù)庫的解決方案,大量使用存儲過程,大大提高系統(tǒng)響應(yīng)時間和速度。系統(tǒng)在日常處理中的響應(yīng)速度為秒級,達到實時要求,以及時反饋信息。嚴格保證操作人員不會因為速度問題而影響工作效率。系統(tǒng)的數(shù)據(jù)需求包括如下幾點:(1)數(shù)據(jù)錄入和處理的準確性和實時性數(shù)據(jù)的輸入是否準確是數(shù)據(jù)處理的前提,錯誤的輸入會導(dǎo)致系統(tǒng)輸出的不正確和不可用,從而使系統(tǒng)的工作失去意義。因此,本系統(tǒng)設(shè)計時對數(shù)據(jù)輸入進行了合法性較驗,確保數(shù)據(jù)的準確性。在系統(tǒng)中,數(shù)據(jù)的輸入及處理往往是大量的,因此系統(tǒng)擁有批處理能力,以保證迅速的處理數(shù)據(jù)。(2)數(shù)據(jù)的一致性與完整性由于系統(tǒng)的數(shù)據(jù)是共享和關(guān)聯(lián)的,所以如何保證這些數(shù)據(jù)的一致性,是系統(tǒng)必須解決的問題。為解決這一問題,系統(tǒng)創(chuàng)建了表間關(guān)系,并定義了觸發(fā)器、完整性約束,嚴格約束數(shù)據(jù)的更新與刪除,減少數(shù)據(jù)冗余,增強數(shù)據(jù)一致性及完整性。(3)數(shù)據(jù)的共享與獨立性整個系統(tǒng)的數(shù)據(jù)是共享的。然而,從系統(tǒng)開發(fā)的角度上看,共享會給設(shè)計和調(diào)試帶來困難。因此,應(yīng)該提供靈活的配置,使各個分系統(tǒng)能夠獨立運行,而通過人工干預(yù)的手段進行系統(tǒng)數(shù)據(jù)的交換。這樣,也能提供系統(tǒng)的健壯性3.2系統(tǒng)結(jié)構(gòu)設(shè)計為了真正達到我們方便顧客,做到簡潔方便易于使用,我們把我們的軟件界面設(shè)計為三大功能區(qū):主功能區(qū)、副功能區(qū)和操作區(qū)。圖3.1理財系統(tǒng)結(jié)構(gòu)功能設(shè)計圖3.2用戶驗證與操作流向設(shè)計圖3.3理財系統(tǒng)工作原理設(shè)計3.3數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫是系統(tǒng)信息的有效中心,一個優(yōu)秀的數(shù)據(jù)庫設(shè)計應(yīng)考慮到系統(tǒng)工程的功能,系統(tǒng)的執(zhí)行速度,以及是否可能引起系統(tǒng)工作的異常等。數(shù)據(jù)庫的設(shè)計合理與否不僅直接影響到程序設(shè)計的質(zhì)量,而且影響到系統(tǒng)的實現(xiàn)。3.3.1數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(1)用戶表:說明本系統(tǒng)的用戶和密碼的存儲情況,有主鍵,自動增加,用戶不能為空;表3.1用戶名表字段名稱數(shù)據(jù)類型主鍵是否為空UName文本否否PWord文本否是ID自動增加是否Active整型否是(2)收入表:說明本系統(tǒng)收入信息存儲數(shù)據(jù)的格式,其中把收入編號設(shè)為本記錄的主鍵,日期要為日期數(shù)據(jù)類型,這些基本的信息都不能為空,除了備注以外;表3.2收入信息表字段名稱數(shù)據(jù)類型主鍵是否為空收入編號文本是否用戶名稱文本否否收入類型文本否否日期日期/時間否否金額數(shù)字否否備注備注否是(3)支出表:說明本系統(tǒng)支出信息存儲數(shù)據(jù)的格式,其中把支出編號設(shè)為本記錄的主鍵,日期要為日期數(shù)據(jù)類型,這些基本的信息都不能為空,除了備注以外;表3.3收入信息表字段名稱數(shù)據(jù)類型主鍵是否為空支出編號文本是否用戶名稱文本否否支出類型1文本否否支出類型2文本否否日期日期/時間否否金額數(shù)字否否備注備注否是(4)收入類型表:說明本系統(tǒng)收入類型,作為收入表的“收入類型”字段的外碼參照。表3.4收入類型表字段名稱數(shù)據(jù)類型主鍵是否為空收入類型文本否否(5)支出類型表:說明本系統(tǒng)支出類型,作為支出表的“支出類型”字段的外碼參照。表3.5支出類型表字段名稱數(shù)據(jù)類型主鍵是否為空說明支出類型1文本否否支出大類支出類型2文本否否支出分類4系統(tǒng)實現(xiàn)4.1界面設(shè)計(1)在進入系統(tǒng)之后,必須要有符合本系統(tǒng)的用戶以及每個用戶對應(yīng)的密碼。如果沒輸入用戶名,點擊確定將會提示請輸入用戶名。如果用戶名錯誤和用戶的密碼不符合也將會有錯誤提示。具體界面如圖4.1所示。4.1系統(tǒng)登陸界面(2)用戶和密碼正確后,統(tǒng)的主界面將會顯示當前用戶的賬戶信息。在這個界面里將實現(xiàn)本系統(tǒng)所有的功能,用戶一看便會使用,如圖4.2所示。4.2主要代碼的編寫4.2.1數(shù)據(jù)庫模塊代碼實現(xiàn)publicclassMyDBConnection{privateConnectionmyConnection;publicMyDBConnection(){}publicerrorTypeinit(){try{Class.forName("com.mysql.jdbc.Driver");myConnection=DriverManager.getConnection("jdbc:mysql://localhost:3306/iwallet?characterEncoding=utf8","root","123456");returnerrorType.SUCCESS;}catch(Exceptione){System.out.println("Failedtogetconnection");e.printStackTrace();returnerrorType.DATABASE_ERROR;}}publicConnectiongetMyConnection(){returnmyConnection;}publicvoidclose(ResultSetrs){if(rs!=null){try{rs.close();}catch(Exceptione){}}}publicvoidclose(java.sql.Statementstmt){if(stmt!=null){try{stmt.close();}catch(Exceptione){}}}publicvoiddestroy(){if(myConnection!=null){try{myConnection.close();}catch(Exceptione){}}}}4.2.2packagecontroller;importjava.sql.*;importgui.*;importcontroller.IConstant.errorType;importdatabase.DataQuery;publicclassLoginController{publicLoginController(){}publicerrorTypelogin(Stringname,Stringpassword){ResultSetrs;DataQuerydq=newDataQuery();rs=dq.getUserByName(name);errorTyper=verify(rs,password);if(r==errorType.SUCCESS){Stringoldname=IWalletApp.getApplication().getUser().getName();if(oldname!=null){r=dq.setUserActive(oldname,false);if(r!=errorType.SUCCESS)returnr;}r=dq.setUserActive(name,true);if(r!=errorType.SUCCESS)returnr;IWalletApp.getApplication().getUser().alterUser(name);returnerrorType.SUCCESS;}elsereturnr;}privateerrorTypeverify(ResultSetrs,Stringpassword){try{if(!rs.next())returnerrorType.NAME_NOT_EXIST_ERROR;//nameerrorif(rs.getInt("Password")==password.hashCode()){if(!rs.getBoolean("Active"))returnerrorType.SUCCESS;elsereturnerrorType.ALREADY_LOGIN_ERROR;//yonghuyidenglu}else{returnerrorType.PASSWORD_WRONG_ERROR;//passwordwroong}}catch(SQLExceptionex){//sqlerrorreturnerrorType.SQL_ERROR;}}}4.2.3/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packagecontroller;importjava.sql.*;importgui.*;importcontroller.IConstant.errorType;importdatabase.DataQuery;importmodel.User;/****@authors*/classRegisterController{publicRegisterController(){}publicerrorTyperegister(Stringname,Stringpassword){ResultSetrs;errorTyper;try{DataQuerydq=newDataQuery();rs=dq.getUserByName(name);if(rs.next()==false){Stringoldname=IWalletApp.getApplication().getUser().getName();if(oldname!=null){r=dq.setUserActive(oldname,false);if(r!=errorType.SUCCESS)returnr;}r=dq.insertUser(name,password);if(r!=errorType.SUCCESS)returnr;IWalletApp.getApplication().getUser().alterUser(name);returnerrorType.SUCCESS;}else{returnerrorType.DUPLICATED_NAME_ERROR;}}catch(SQLExceptione){System.out.println(e);e.printStackTrace();}returnerrorType.SQL_ERROR;}}4.2.4/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packagecontroller;importcontroller.IConstant.errorType;importdatabase.DataQuery;importgui.IWalletApp;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Calendar;importjava.util.Date;importjava.util.Vector;importjava.util.logging.Level;importjava.util.logging.Logger;/****@authors*/classGetChartItemController{publicGetChartItemController(){}errorTypegetChartItem(DatesDate,DateeDate,intaccountID,intchartType){if(sDate.after(eDate)){returnerrorType.WRONG_DATE_SECTION_ERROR;}CalendarsCal=Calendar.getInstance();sCal.setTime(sDate);CalendareCal=Calendar.getInstance();eCal.setTime(eDate);ResultSetrs;DataQuerydq=newDataQuery();if(chartType==0){intyear=sCal.get(Calendar.YEAR);intmonth=sCal.get(Calendar.MONTH)+1;Vector<Double>MonthIncome=newVector<Double>();Vector<Double>MonthOutgo=newVector<Double>();do{try{rs=dq.getSumByIDMonth(year,month,accountID);doubleincome=0,outgo=0;if(rs.next())income=rs.getDouble("total");if(rs.next())outgo=-rs.getDouble("total");if(income>0){MonthIncome.add(income);MonthOutgo.add(outgo);}else{MonthIncome.add(0.0);MonthOutgo.add(-income);}}catch(SQLExceptionex){Logger.getLogger(GetChartItemController.class.getName()).log(Level.SEVERE,null,ex);returnerrorType.SQL_ERROR;}month++;if(month==13){year++;month=1;}}while(year<eCal.get(Calendar.YEAR)||(year==eCal.get(Calendar.YEAR)&&month<=eCal.get(Calendar.MONTH)+1));IWalletApp.getApplication().getIChart().setMonthIncome(MonthIncome);IWalletApp.getApplication().getIChart().setMonthOutgo(MonthOutgo);IWalletApp.getApplication().getIChart().setSCal(sCal);IWalletApp.getApplication().getIChart().setECal(eCal);returnerrorType.SUCCESS;}else{try{StringssDate=Integer.toString(sCal.get(Calendar.YEAR))+"-"+Integer.toString(sCal.get(Calendar.MONTH)+1)+"-"+Integer.toString(sCal.get(Calendar.DATE));StringseDate=Integer.toString(eCal.get(Calendar.YEAR))+"-"+Integer.toString(eCal.get(Calendar.MONTH)+1)+"-"+Integer.toString(eCal.get(Calendar.DATE));rs=dq.getItemByIDTime(ssDate,seDate,accountID);Vector<Double>typeIncome=newVector<Double>();Vector<String>typeIncomeName=newVector<String>();Vector<Double>typeOutgo=newVector<Double>();Vector<String>typeOutgoName=newVector<String>();while(rs.next()){if(rs.getDouble("total")>=0){typeIncome.add(rs.getDouble("total"));typeIncomeName.add(rs.getString("type"));}else{typeOutgo.add(-rs.getDouble("total"));typeOutgoName.add(rs.getString("type"));}}IWalletApp.getApplication().getIChart().setTypeIncome(typeIncome);IWalletApp.getApplication().getIChart().setTypeIncomeName(typeIncomeName);IWalletApp.getApplication().getIChart().setTypeOutgo(typeOutgo);IWalletApp.getApplication().getIChart().setTypeOutgoName(typeOutgoName);returnerrorType.SUCCESS;}catch(SQLExceptionex){Logger.getLogger(GetChartItemController.class.getName()).log(Level.SEVERE,null,ex);}}returnerrorType.SQL_ERROR;}}4.2.5/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packagecontroller;importcontroller.IConstant.errorType;importdatabase.DataQuery;importgui.IWalletApp;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Calendar;importjava.util.Date;importjava.util.Vector;importjava.util.logging.Level;importjava.util.logging.Logger;importmodel.Item;importmodel.ItemType;/****@authors*/publicclassAddItemController{publicAddItemController(){}publicerrorTypeaddItem(Vector<Item>items){errorTyper;for(Itemi:items){IntegeritemType=(i.getMoney()>0)?newItemType().getInTypeIndex(i.getType()):newItemType().getOutTypeIndex(i.getType());if(itemType==-1)returnerrorType.FILE_RESOLVE_ERROR;i.setType(itemType.toString());}for(Itemi:items){if((r=addItem(i.getAccountID(),i.getMoney(),i.getDate(),Integer.parseInt(i.getType()),i.getDescrip()))!=errorType.SUCCESS)returnr;}returnerrorType.SUCCESS;}publicerrorTypeaddItem(intaccountID,doublemoney,Datedate,intitemType,Stringdescription){try{DataQuerydq=newDataQuery();CalendarCal1=Calendar.getInstance();Cal1.setTime(date);Stringtime=Integer.toString(Cal1.get(Calendar.YEAR))+"-"+Integer.toString(Cal1.get(Calendar.MONTH)+1)+"-"+Integer.toString(Cal1.get(Calendar.DATE));ResultSetrs=dq.getItemByAccountID(accountID);errorTyper;booleanend=false;doubleaccountBalance=0;if(rs.next()){doublelastaccount=rs.getDouble("AccountBalance")-rs.getDouble("Money");while(!(rs.getDate("Date").after(date))){lastaccount=rs.getDouble("AccountBalance");

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論