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

下載本文檔

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

文檔簡介

基于JAVA實(shí)現(xiàn)的個(gè)人理財(cái)系統(tǒng)目錄TOC\o"1-2"\h\z\u摘要 2Abstract 3引言 41緒論 51.1前期調(diào)研 51.2計(jì)算機(jī)技術(shù)綜述 51.3開發(fā)背景與主要內(nèi)容 72系統(tǒng)技術(shù)開發(fā) 82.1可行性分析 82.2面對對象的程序設(shè)計(jì)介紹 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è)計(jì) 163.1系統(tǒng)結(jié)構(gòu)設(shè)計(jì) 163.2數(shù)據(jù)庫設(shè)計(jì) 174系統(tǒng)實(shí)現(xiàn) 194.1界面設(shè)計(jì) 194.2主要代碼的編寫 205系統(tǒng)測試和優(yōu)化 245.1測試目的 245.2測試方法 245.3測試步驟 246討論 266.1源代碼的控制 266.2變量命名的約定 276.3JAVA對字符串操作總結(jié) 276.4對錯(cuò)誤的處理 30結(jié)論 32致謝 34參考文獻(xiàn) 34摘要理財(cái)系統(tǒng)是一個(gè)企業(yè)不可缺少的部分,企業(yè)很早就實(shí)施了理財(cái)?shù)募泄芾?,而家庭或大學(xué)生使用的小型理財(cái)系統(tǒng)卻只是鳳毛麟角。然而,理財(cái)系統(tǒng)不僅僅對企業(yè),而且對學(xué)生個(gè)人都有十分重要的意義。論文系統(tǒng)地分析了軟件開發(fā)的背景及過程,首先介紹了軟件的開發(fā)環(huán)境,其次介紹了本軟件的詳細(xì)設(shè)計(jì)過程:數(shù)據(jù)庫的設(shè)計(jì)以及具體界面的設(shè)計(jì)和功能,最后對在本軟件開發(fā)過程中的問題進(jìn)行了總結(jié)。利用面向?qū)ο蟮木幊谭椒?OOP)和ADO數(shù)據(jù)庫訪問技術(shù),其開發(fā)主要包括后臺(tái)數(shù)據(jù)庫的建立、維護(hù)以及前端應(yīng)用程序開發(fā),通過JAVA和數(shù)據(jù)庫相結(jié)合,實(shí)現(xiàn)了大學(xué)生理財(cái)?shù)淖詣?dòng)化和信息化。系統(tǒng)主要包括以下幾個(gè)模塊:用戶密碼登陸,原始數(shù)據(jù)的匯入、修改、刪除等,從而實(shí)現(xiàn)對大學(xué)生個(gè)人的收入與支出進(jìn)行有效、系統(tǒng)的管理,并使之更全面和靈活。通過論文,可以了解到“有‘理’真好——大學(xué)生理財(cái)軟件”的規(guī)劃、設(shè)計(jì)過程,掌握系統(tǒng)的功能。關(guān)鍵詞:大學(xué)生;理財(cái);數(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)濟(jì)學(xué)家詹姆斯菲爾德對于美國大學(xué)生理財(cái)規(guī)劃,提出了專門的“1+1+1”模式:學(xué)會(huì)貸款——用明天的錢圓今天的夢,學(xué)會(huì)兼職——讓“增值”為以后的超前消費(fèi)埋下伏筆,學(xué)會(huì)投資——為今后的個(gè)人理財(cái)“投石問路”?,F(xiàn)在很多大學(xué)生對自己的消費(fèi)不以為然,有錢的時(shí)候就大手大腳,等到?jīng)]有錢的時(shí)候就和家里伸手,所以使得很多大學(xué)生養(yǎng)成了不好的習(xí)慣,就此我們小組對于這一項(xiàng)目展開調(diào)查和研究了這個(gè)軟件,有助于我們在平時(shí)的消費(fèi)中養(yǎng)成良好的消費(fèi)習(xí)慣。在我們的調(diào)查中發(fā)現(xiàn)很多大學(xué)生的花銷主要集中在通訊,娛樂等方面。另外參考了李永華等對武漢高校大學(xué)生消費(fèi)情況的調(diào)查表明,大學(xué)生在經(jīng)濟(jì)消費(fèi)水平上存在著巨大差距,其中年消費(fèi)最高的達(dá)到18500元,而年消費(fèi)最低的只有2100元。武漢市大學(xué)生每年消費(fèi)均值略高于8300元,其中包括學(xué)費(fèi)均值3000元左右,住宿非均值500元左右。大學(xué)生的月食品支出在230元左右,它與生活費(fèi)月支出(480元)比率是47.9%,這可視為大學(xué)生的“恩格爾系數(shù)”,與1999年武漢市人均消費(fèi)支出和食物支出相比,呈現(xiàn)出整體上消費(fèi)水平比較高的趨勢。據(jù)百度網(wǎng)站查詢的資料表明,暫時(shí)沒有一個(gè)成熟、具指導(dǎo)性、針對大學(xué)生的理財(cái)軟件。大學(xué)生是擁有一定的消費(fèi)能力,除了家庭資金供給外,一部分大學(xué)生還有兼職收入、獎(jiǎng)學(xué)金收入和投資收入,而且重要的一點(diǎn)是大學(xué)生將是未來4-5年后社會(huì)的主體消費(fèi)及創(chuàng)造社會(huì)財(cái)富的群體,本軟件是根據(jù)大學(xué)生消費(fèi)理念設(shè)計(jì)的,據(jù)我們調(diào)查所做的調(diào)查,有將近70%的大學(xué)生會(huì)考慮使用理財(cái)軟件,因此,在理財(cái)軟件方面是具有一定的潛力市場。我們小組采用java來實(shí)現(xiàn)軟件的開發(fā),主要利用面向?qū)ο蟮木幊?OOP)的方法來完成程序的開發(fā)。1緒論近年來,計(jì)算機(jī)技術(shù)飛速發(fā)展幾乎超出了人們的想象,硬件的更新?lián)Q代速度更是以級(jí)數(shù)進(jìn)行。計(jì)算機(jī)在處理對象、處理方法上都發(fā)生了很大的變化。作為計(jì)算機(jī)科學(xué)的重要分支——數(shù)據(jù)庫技術(shù),也被越來越多的應(yīng)用領(lǐng)域采用來存儲(chǔ)和處理他們的信息資源。計(jì)算機(jī)已經(jīng)不再僅僅是科學(xué)研究的工具,它越來越多地影響到了我們生活的諸多方面,更多的應(yīng)用軟件出現(xiàn)在了我們的身邊,給人們生活的方方面面都帶來了極大的便利。近年來隨著國內(nèi)外社會(huì)經(jīng)濟(jì)和科學(xué)技術(shù)的不斷改革和發(fā)展,2004中國大學(xué)生消費(fèi)與生活形態(tài)研究報(bào)告指出:“當(dāng)代大學(xué)生不僅消費(fèi)能力在提高,而且在消費(fèi)結(jié)構(gòu)方面呈現(xiàn)多元化的趨勢。”各種各樣的開銷與收入也越來越多,很多大學(xué)生對于日常賬目的管理感到越來越力不從心,收支管理已刻不容緩。大學(xué)生們需要一款適合他們使用的理財(cái)軟件。1.1前期調(diào)研為了解大學(xué)生對于理財(cái)管理系統(tǒng)是否有需求,我們針對大學(xué)生理財(cái)方面提出了17條問題。我們采用的是通過QQ和E-mail進(jìn)行隨機(jī)電子問卷調(diào)查方式,發(fā)出問卷50份,收回的有效問卷是36份。調(diào)研范圍為:全國各大高校在校大學(xué)生,地區(qū)主要集中在沈陽、大連,也包括廣州、佛山、上海、鄭州、長沙、濟(jì)南、香港等城市。調(diào)查表明,有83.33%的大學(xué)生每月沒有盈余,甚至是超支。對于問卷第16題“若有一款大學(xué)生理財(cái)軟件,你是否會(huì)考慮使用呢?”,回答“會(huì)”的人共有25人。說明有69.44%的人會(huì)使用適合他們使用的理財(cái)軟件。通過前期調(diào)研,不難發(fā)現(xiàn)大學(xué)生們急需一個(gè)成熟、具指導(dǎo)性、針對大學(xué)生的理財(cái)軟件進(jìn)行合理的理財(cái)分析。1.2計(jì)算機(jī)技術(shù)綜述在計(jì)算機(jī)硬件和軟件技術(shù)不斷創(chuàng)新和進(jìn)步的背景下,計(jì)算機(jī)技術(shù)在20世紀(jì)有許多重大突破,它涉及到人們生活的方方面面,主要可以歸結(jié)為以下四個(gè)方面:第一,處理對象的變化。在計(jì)算機(jī)應(yīng)用初期,計(jì)算機(jī)的處理主要是數(shù)值和簡單的符號(hào)。隨著計(jì)算機(jī)速度和存儲(chǔ)容量的增大,今天的計(jì)算機(jī)已經(jīng)能夠處理聲、圖、文和語言等多種信息,除二維、靜止圖像外,還可以處理三維運(yùn)動(dòng)的圖像等等。也就是說,人類使用的任何信息形式現(xiàn)在計(jì)算機(jī)都可以處理了。這不僅使計(jì)算機(jī)的用途大大地?cái)U(kuò)展,而且使今天的用戶能夠從計(jì)算機(jī)的屏幕上看到圖文并茂,有聲有色的畫面。從而使計(jì)算機(jī)從專業(yè)人員圈子中走出來,走向普通用戶,走向平民百姓。第二,處理方法或建模方法的進(jìn)步。傳統(tǒng)計(jì)算機(jī)的應(yīng)用只限制在數(shù)學(xué)模型為基礎(chǔ)的數(shù)值計(jì)算上。不管是科學(xué)計(jì)算,數(shù)據(jù)處理還是計(jì)算機(jī)自動(dòng)化,這些都離不開數(shù)值計(jì)算,因此讓計(jì)算機(jī)做任何事情之前,首先需要建立數(shù)學(xué)模型:算數(shù)的、代數(shù)的、微積分的、等等,沒有數(shù)學(xué)模型計(jì)算機(jī)無從進(jìn)行計(jì)算,這些使所有傳統(tǒng)算法的基礎(chǔ),到了20世紀(jì)中葉,由于人工智能的出現(xiàn)以及它所取得的成就,計(jì)算機(jī)應(yīng)用開始突破這一限制——計(jì)算機(jī)能夠進(jìn)行符號(hào)計(jì)算,記憶邏輯和知識(shí)為基礎(chǔ)的符號(hào)推理。這些突破極大地?cái)U(kuò)展了計(jì)算機(jī)的應(yīng)用范圍,使那些無法用數(shù)學(xué)表達(dá)的問題,只要人們有足夠的經(jīng)驗(yàn)知識(shí),計(jì)算機(jī)就可能根據(jù)這些知識(shí)進(jìn)行模擬,達(dá)到問題求解的目的,實(shí)現(xiàn)所謂人工智能,人們希望那些目前大家了解還不深,或者還不清楚的問題,計(jì)算機(jī)也能幫助解決,軟計(jì)算就是這個(gè)背景下提出的。二十世紀(jì)的七八十年代,提出的模糊計(jì)算,神經(jīng)網(wǎng)絡(luò)計(jì)算以及進(jìn)化計(jì)算等,都是希望計(jì)算機(jī)能夠進(jìn)一步處理模糊概念、模糊推理等類問題,是計(jì)算機(jī)在先前經(jīng)驗(yàn)只是較弱的情況下,也能幫助人們處理疑難問題、軟計(jì)算或計(jì)算智能給人們帶來希望,因此成為近來研究的熱點(diǎn)。第三,處理方式的變化。在處理方式上人們也經(jīng)歷了三個(gè)階段。在早期的主機(jī)時(shí)代,人們采用的是集中交互處理的模式。這兩種方式都是以各人單獨(dú)工作為中心的,現(xiàn)在我們進(jìn)入了計(jì)算機(jī)網(wǎng)絡(luò)時(shí)代,人們的工作方式發(fā)生了很大轉(zhuǎn)變,走向分布協(xié)同工作的時(shí)代??傊?,以上這些變化會(huì)影響到21世紀(jì)計(jì)算機(jī)應(yīng)用技術(shù)的發(fā)展和變化。第四,硬件技術(shù)的提高。伴隨著時(shí)代的發(fā)展,由最初的電子管計(jì)算機(jī)發(fā)展到即將到來的量子計(jì)算機(jī),計(jì)算速度也發(fā)展到了最初計(jì)算機(jī)的數(shù)萬倍以上。在外型上,從桌上型、筆記型(Notebook)到掌上型計(jì)算機(jī)(Palm),不管是功能上的提升或可攜帶性的特色,都顯示出未來計(jì)算機(jī)將以輕薄短小,容易攜帶為主。隨著計(jì)算機(jī)進(jìn)一步的小型化,人工智能將越來越強(qiáng)地集成到我們的環(huán)境中。便攜設(shè)備將像裝飾品一樣穿在衣服里。個(gè)人計(jì)算機(jī)也不斷向著普及的方向發(fā)展,各種計(jì)算機(jī)外設(shè)的品質(zhì)不斷提高、豐富,極大地方便了人們的工作和生活。數(shù)據(jù)庫技術(shù)的發(fā)展已經(jīng)經(jīng)歷了很長的一段時(shí)間,從層次型數(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ù)提出了新的要求。人們希望能訪問存儲(chǔ)在不同網(wǎng)格,不同節(jié)點(diǎn)上的數(shù)據(jù)而不需要了解數(shù)據(jù)存儲(chǔ)的細(xì)節(jié),并且能夠在系統(tǒng)局部故障的情況下保證數(shù)據(jù)無損。這就形成了人們對分布式數(shù)據(jù)庫管理系統(tǒng)的部分要求——數(shù)據(jù)的位置透明性和安全性。本理財(cái)系統(tǒng)采用的開發(fā)平臺(tái)是Microsoft?WindowsXP。與其它操作系統(tǒng)相比,WindowsXP更穩(wěn)定,有較好的網(wǎng)絡(luò)功能。數(shù)據(jù)庫設(shè)計(jì)與維護(hù)采用的是Mysql,軟件的數(shù)據(jù)庫訪問及軟件開發(fā)工具采用的是Eclipse,它面向?qū)ο蟮木幊谭绞?OOP)使程序設(shè)計(jì)過程大大簡化,對數(shù)據(jù)庫的訪問更靈活。相對于其他開發(fā)環(huán)境,Eclipse使開發(fā)人員的工作更快、成本更低、周期更短、質(zhì)量更高、功能更強(qiáng)。Eclipse為應(yīng)用開發(fā)環(huán)境提供了全面綜合性的支持:事件驅(qū)動(dòng)的應(yīng)用程序;功能強(qiáng)大的編程語言和函數(shù);面向?qū)ο蟮木幊蹋婚_放的數(shù)據(jù)庫連接系統(tǒng)。1.3開發(fā)背景與主要內(nèi)容結(jié)合大學(xué)生理財(cái)現(xiàn)狀,大學(xué)生缺乏理財(cái)觀念開發(fā)這個(gè)應(yīng)用系統(tǒng)的目標(biāo)是為了代替人工進(jìn)行許多繁雜的勞動(dòng),節(jié)省許多資源,提高大學(xué)生理財(cái)?shù)墓ぷ餍?。它主要?shí)現(xiàn)的功能如下:功能一:驗(yàn)證用戶和密碼的正確性再登入,以及修改密碼和退出系統(tǒng);功能二:保存每次輸入的收支記錄,并提供查詢;功能三:對大學(xué)生收入/支出進(jìn)行管理,實(shí)現(xiàn)費(fèi)用的增加,修改,刪除;功能四:整個(gè)收支記錄按需求進(jìn)行分類查詢。2系統(tǒng)技術(shù)開發(fā)2.1可行性分析可行性研究的目的是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問題是否能夠解決。2.1.1經(jīng)濟(jì)可行性計(jì)算機(jī)的價(jià)格已經(jīng)十分低廉,性能也有了長足的進(jìn)步。而本系統(tǒng)的開發(fā),為大學(xué)生理財(cái)?shù)墓ぷ餍蕩砹艘粋€(gè)質(zhì)的飛躍,為此主要表現(xiàn)有以下幾個(gè)方面:第一,本系統(tǒng)的運(yùn)行可以代替人工進(jìn)行許多繁雜的勞動(dòng);第二,本系統(tǒng)的運(yùn)行可以節(jié)省許多資源;第三,本系統(tǒng)的運(yùn)行可以大大的提高大學(xué)生理財(cái)?shù)墓ぷ餍?;等等。所以,本系統(tǒng)在經(jīng)濟(jì)上是可行的。2.1.2技術(shù)可行性和運(yùn)行可行性本理財(cái)系統(tǒng)采用的開發(fā)平臺(tái)是Microsoft?WindowsXP。與其它操作系統(tǒng)相比,WindowsXP更穩(wěn)定,有較好的網(wǎng)絡(luò)功能。使用Eclipse作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它面向?qū)ο蟮木幊谭绞?OOP)使程序設(shè)計(jì)過程大大簡化,對數(shù)據(jù)庫的訪問更靈活。提供完善的指令控制語句、類與對象的支持及豐富的數(shù)據(jù)類型,全面綜合性的支持:事件驅(qū)動(dòng)的應(yīng)用程序;功能強(qiáng)大的編程語言和函數(shù);面向?qū)ο蟮木幊?;開放的數(shù)據(jù)庫連接系統(tǒng)。給開發(fā)高性能系統(tǒng)提供了保障,為開發(fā)滿足客戶要求的系統(tǒng)保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對新系統(tǒng)的擴(kuò)展與修改。相對于其他開發(fā)環(huán)境,Java使開發(fā)人員的工作更快、成本更低、周期更短、質(zhì)量更高、功能更強(qiáng)。綜上所述,本系統(tǒng)的設(shè)計(jì)與開發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。本系統(tǒng)為一個(gè)小型的理財(cái)系統(tǒng),所耗費(fèi)的資源非常的小,學(xué)校的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運(yùn)行上是可行的。2.2面對對象的程序設(shè)計(jì)介紹傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)(StructuredProgramming)是一種強(qiáng)調(diào)功能抽象化和模塊化的編程方法,它把解決問題的過程看作是一個(gè)處理單位。這就是說結(jié)構(gòu)化程序設(shè)計(jì)中,模塊是對功能的抽象,而每一個(gè)模塊都是一個(gè)處理單位,并有輸入和輸出。而面向?qū)ο蟮某绦蛟O(shè)計(jì)(ObjectOrientedProgramming,OOP)是一種以對象為基礎(chǔ),以事件來驅(qū)動(dòng)對象執(zhí)行的程序設(shè)計(jì)技術(shù)。OOP把計(jì)算過程看作為對象的分類過程加上其狀態(tài)變化的過程,也就是將一個(gè)應(yīng)用程序逐步劃分成相互關(guān)聯(lián)的多個(gè)對象,并且建立起與這些對象相互關(guān)聯(lián)的事件過程,通過對象對所發(fā)生的事件產(chǎn)生響應(yīng),并執(zhí)行相應(yīng)的事件過程以引發(fā)對象狀態(tài)的改變,從而最終達(dá)到完成計(jì)算的目的。與結(jié)構(gòu)化程序設(shè)計(jì)不同,面向?qū)ο蟮某绦蛟O(shè)計(jì)綜合了功能的抽象和數(shù)據(jù)的抽象,它把解決問題的過程看作是一個(gè)對象分類演繹的過程。在OOP中,對象(Object)是一個(gè)包括數(shù)據(jù)和方法(操作)的并被封裝起來的整體,它是對數(shù)據(jù)和功能的抽象和統(tǒng)一,而對象就包含了模塊的概念。面向?qū)ο笤O(shè)計(jì)是一種全新的程序設(shè)計(jì)方法,它從根本上改變了傳統(tǒng)的程序設(shè)計(jì)模式。其基本思想是:通過建立與具體實(shí)際應(yīng)用相對應(yīng)的對象,并通過這些對象的組合來創(chuàng)建具體的應(yīng)用程序。這種設(shè)計(jì)方法給程序設(shè)計(jì)帶來了許多良好特性,一般說來有以下幾點(diǎn):(1)模塊性:對象是一個(gè)功能和數(shù)據(jù)獨(dú)立的單元,它們之間只能通過對象認(rèn)可的方式來進(jìn)行通信,并可以較為自由地為其他對象所調(diào)用。(2)封裝性:這一特性為信息的隱藏提供了具體的實(shí)現(xiàn)手段,用戶不必清楚對象內(nèi)部的細(xì)節(jié),只需了解其功能即可。(3)繼承性:這一特性為代碼的共享提供了一種非常有效的方法,從而可以避免重復(fù)的代碼設(shè)計(jì),實(shí)現(xiàn)對象的可重用性。這一特性也是面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)最本質(zhì)的特征。(4)可靠性:對象實(shí)現(xiàn)了抽象和封裝,從而使得其中出現(xiàn)的錯(cuò)誤限制在對象的內(nèi)部,因而不會(huì)向外部傳播,同時(shí)也易于檢查和維護(hù)。(5)可擴(kuò)充性:面向?qū)ο笙到y(tǒng)可以通過繼承機(jī)制不斷擴(kuò)充其對象的功能,而不會(huì)影響原系統(tǒng)的運(yùn)行。(6)連續(xù)性:雖然面向?qū)ο蟮某绦蛟O(shè)計(jì)語言在編程模式上相差很大,但它并沒有摒棄傳統(tǒng)的做法,它不僅采用了傳統(tǒng)程序設(shè)計(jì)語言的語言元素,而且利用它們來模擬建立對象,從而使得一個(gè)熟悉傳統(tǒng)程序設(shè)計(jì)語言的編程者能夠很快掌握面向?qū)ο笤O(shè)計(jì)的規(guī)律。2.3SQL語言介紹SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)是由Boyce和Chamberlin在1974年提出的,由于它功能豐富,使用靈活、語言簡潔易學(xué)等特點(diǎn),在計(jì)算機(jī)工業(yè)界和計(jì)算機(jī)用戶中倍受歡迎,快得到應(yīng)用和推廣。許多關(guān)系數(shù)據(jù)庫系統(tǒng)DB2、Oracle、SQLServer2000、Sybase等都實(shí)現(xiàn)了SQL語言。1986年10月,美國國家標(biāo)準(zhǔn)局(ANSI)的數(shù)據(jù)庫委員會(huì)批準(zhǔn)了SQL作為關(guān)系數(shù)據(jù)庫語言的美國標(biāo)準(zhǔn)。1987年6月,國際標(biāo)準(zhǔn)化組織(ISO)將其采納為國際標(biāo)準(zhǔn),也稱為“SQL86”SQL數(shù)據(jù)庫的體系結(jié)構(gòu)基本上了三級(jí)模式結(jié)構(gòu)。如圖2.1。圖2.1SQL數(shù)據(jù)庫的體系結(jié)構(gòu)SQL數(shù)據(jù)庫的體系結(jié)構(gòu)具有如下特點(diǎn):(1)一個(gè)數(shù)據(jù)庫(Database)是表和約束的集合;(2)一個(gè)表(Table)由行(Row)構(gòu)成,每行是列(Column)的集合;(3)一張表既可以是基本表,也可以是一個(gè)視圖;(4)一個(gè)基本表可以跨一個(gè)或多個(gè)存儲(chǔ)文件,一個(gè)存儲(chǔ)文件也可存放一個(gè)或多個(gè)基本表,一個(gè)表可以帶若干索引,索引文件也存放在存儲(chǔ)文件中;(5)SQL用戶可以是應(yīng)用程序,也可以是終端用戶。SQL語句可嵌入在各種宿主語言中,宿主語言有VB、VC、VC#、VB.Net、Delphi、PowerBuildings等高級(jí)語言;SQL語言也能作為獨(dú)立用戶接口,供交互環(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ā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠用純JavaAPI編寫數(shù)據(jù)庫應(yīng)用程序,同時(shí),JDBC也是個(gè)商標(biāo)名。有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語句就是一件很容易的事。換言之,有了JDBCAPI,就不必為訪問Sybase數(shù)據(jù)庫專門寫一個(gè)程序,為訪問Oracle數(shù)據(jù)庫又專門寫一個(gè)程序,或?yàn)樵L問Informix數(shù)據(jù)庫又編寫另一個(gè)程序等等,程序員只需用JDBCAPI寫一個(gè)程序就夠了,它可向相應(yīng)數(shù)據(jù)庫發(fā)送SQL調(diào)用。同時(shí),將Java語言和JDBC結(jié)合起來使程序員不必為不同的平臺(tái)編寫不同的應(yīng)用程序,只須寫一遍程序就可以讓它在任何平臺(tái)上運(yùn)行,這也是Java語言“編寫一次,處處運(yùn)行”的優(yōu)勢。Java數(shù)據(jù)庫連接體系結(jié)構(gòu)是用于Java應(yīng)用程序連接數(shù)據(jù)庫的標(biāo)準(zhǔn)方法。JDBC對Java程序員而言是API,對實(shí)現(xiàn)與數(shù)據(jù)庫連接的服務(wù)提供商而言是接口模型。作為API,JDBC為程序開發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫廠商及第三方中間件廠商實(shí)現(xiàn)與數(shù)據(jù)庫的連接提供了標(biāo)準(zhǔn)方法。JDBC使用已有的SQL標(biāo)準(zhǔn)并支持與其它數(shù)據(jù)庫連接標(biāo)準(zhǔn),如ODBC之間的橋接。JDBC實(shí)現(xiàn)了所有這些面向標(biāo)準(zhǔn)的目標(biāo)并且具有簡單、嚴(yán)格類型定義且高性能實(shí)現(xiàn)的接口。Java具有堅(jiān)固、安全、易于使用、易于理解和可從網(wǎng)絡(luò)上自動(dòng)下載等特性,是編寫數(shù)據(jù)庫應(yīng)用程序的杰出語言。所需要的只是Java應(yīng)用程序與各種不同數(shù)據(jù)庫之間進(jìn)行對話的方法。而JDBC正是作為此種用途的機(jī)制。JDBC擴(kuò)展了Java的功能。例如,用Java和JDBCAPI可以發(fā)布含有applet的網(wǎng)頁,而該applet使用的信息可能來自遠(yuǎn)程數(shù)據(jù)庫企業(yè)也可以用JDBC通過Intranet將所有職員連到一個(gè)或多個(gè)內(nèi)部數(shù)據(jù)庫中(即使這些職員所用的計(jì)算機(jī)有Windows、Macintosh和UNIX等各種不同的操作系統(tǒng))。隨著越來越多的程序員開始使用Java編程語言,對從Java中便捷地訪問數(shù)據(jù)庫的要求也在日益增加。MIS管理員們都喜歡Java和JDBC的結(jié)合,因?yàn)樗剐畔鞑プ兊萌菀缀徒?jīng)濟(jì)。企業(yè)可繼續(xù)使用它們安裝好的數(shù)據(jù)庫,并能便捷地存取信息,即使這些信息是儲(chǔ)存在不同數(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ù)庫中存儲(chǔ)的對象。數(shù)據(jù)在大多數(shù)人頭腦中的第一反映就是數(shù)字。其實(shí)數(shù)字只是最簡單的一種數(shù)據(jù),是數(shù)據(jù)的一種傳統(tǒng)和狹義的理解。廣義的理解,數(shù)據(jù)的種類很多,文字,圖形,圖像,聲音等都是數(shù)據(jù),可以對數(shù)據(jù)做以下定義:描述事物的符號(hào)記錄稱為數(shù)據(jù)。(2)數(shù)據(jù)庫(Database)數(shù)據(jù)庫,顧名思義,是存放數(shù)據(jù)的倉庫。只不過這個(gè)倉庫是在計(jì)算機(jī)存儲(chǔ)設(shè)備上,而且數(shù)據(jù)是按一定的格式存放的。數(shù)據(jù)庫是指長期存在計(jì)算機(jī)內(nèi)的,有組織的,可共享的數(shù)據(jù)集合。數(shù)據(jù)庫中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織,描述和存儲(chǔ),具有較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,并可以為各種用戶共享。(3)數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,簡稱DBMS)數(shù)據(jù)庫管理系統(tǒng)是位于用戶和操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件。它主要有以下幾個(gè)方面的功能:①數(shù)據(jù)定義功能DBMS提供數(shù)據(jù)定義語言,用戶通過它可以方便的對數(shù)據(jù)庫中的數(shù)據(jù)對象進(jìn)行定義。②數(shù)據(jù)操縱功能DBMS還提供數(shù)據(jù)操縱語言,用戶可以使用這語言操縱數(shù)據(jù)實(shí)現(xiàn)對數(shù)據(jù)庫的基本操作。如查詢,插入,刪除和修改等。③數(shù)據(jù)庫的運(yùn)行管理數(shù)據(jù)庫在建立,運(yùn)行和維護(hù)時(shí)由數(shù)據(jù)庫管理系統(tǒng)統(tǒng)一管理,統(tǒng)一控制,以保證數(shù)據(jù)的安全性,完整性,多用戶對數(shù)據(jù)的并發(fā)使用乃發(fā)生故障后的系統(tǒng)恢復(fù)。④數(shù)據(jù)庫的建立和維護(hù)功能它包括數(shù)據(jù)庫初始的輸入,轉(zhuǎn)換功能,數(shù)據(jù)庫的轉(zhuǎn)存,恢復(fù)功能,數(shù)據(jù)庫的重組織功能和性能監(jiān)視。這些功能通常是由一些實(shí)用的程序完成的。2.6eclipse開發(fā)工具Eclipse是一個(gè)開放源代碼的、與NetBeans、SunONEStudio和BorlandJbuilder類似的一種基于Java的整合型可擴(kuò)展開發(fā)平臺(tái),也是目前最著名的開源項(xiàng)目之一,IBM在最近幾年里也一直在大力支持該項(xiàng)目的發(fā)展,目標(biāo)是將其做成用以替代IBMVisualAgeforJava(簡稱IVJ)的下一代IDE開發(fā)環(huán)境,并于2001年11月宣布投入4千萬美元資金到該項(xiàng)目的研發(fā)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JavaDevelopmentTools,JDT)。其未來的目標(biāo)不僅僅是成為專門開發(fā)Java程序的IDE環(huán)境,根據(jù)Eclipse的體系結(jié)構(gòu),通過開發(fā)插件,它能擴(kuò)展到任何語言的開發(fā),甚至能成為圖片繪制的工具。目前,Eclipse已經(jīng)開始提供C語言開發(fā)的功能插件。更難能可貴的是,Eclipse是一個(gè)開放源代碼的項(xiàng)目,任何人都可以下載Eclipse的源代碼,并且在此基礎(chǔ)上開發(fā)自己的功能插件。也就是說未來只要有人需要,就會(huì)有建立在Eclipse之上的COBOL,Perl,Python等語言的開發(fā)插件出現(xiàn)。同時(shí)可以通過開發(fā)新的插件擴(kuò)展現(xiàn)有插件的功能,比如本系列文章為了進(jìn)行手機(jī)應(yīng)用程序的開發(fā)就是通過J2ME插件的擴(kuò)展來加以實(shí)現(xiàn)的??梢詿o限擴(kuò)展,而且有著統(tǒng)一的外觀,操作和系統(tǒng)資源管理,這也正是Eclipse的潛力所在。Eclipse的主要組成Eclipse是一個(gè)開放源代碼的軟件開發(fā)項(xiàng)目,專注于為高度集成的工具開發(fā)提供一個(gè)全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺(tái)。它主要由Eclipse項(xiàng)目、Eclipse工具項(xiàng)目和Eclipse技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,具體包括四個(gè)部分組成——EclipsePlatform、JDT、CDT和PDE.JDT支持Java開發(fā)、CDT支持C開發(fā)、PDE用來支持插件開發(fā),EclipsePlatform則是一個(gè)開放的可擴(kuò)展IDE,提供了一個(gè)通用的開發(fā)平臺(tái)。它提供建造塊和構(gòu)造并運(yùn)行集成軟件開發(fā)工具的基礎(chǔ)。EclipsePlatform允許工具建造者獨(dú)立開發(fā)與他人工具無縫集成的工具從而無須分辨一個(gè)工具功能在哪里結(jié)束,而另一個(gè)工具功能在哪里開始。EclipseSDK(軟件開發(fā)者包)是EclipsePlatform、JDT和PDE所生產(chǎn)的組件合并,它們可以一次下載。這些部分在一起提供了一個(gè)具有豐富特性的開發(fā)環(huán)境,允許開發(fā)者有效地建造可以無縫集成到EclipsePlatform中的工具。EclipseSDK由Eclipse項(xiàng)目生產(chǎn)的工具和來自其它開放源代碼的第三方軟件組合而成。Eclipse項(xiàng)目生產(chǎn)的軟件以CPL發(fā)布,第三方組件有各自自身的許可協(xié)議。2.7系統(tǒng)開發(fā)理論介紹2.7.1系統(tǒng)規(guī)劃階段系統(tǒng)規(guī)劃階段的任務(wù)是對各大學(xué)生理財(cái)?shù)沫h(huán)境、目標(biāo)及現(xiàn)行系統(tǒng)的狀況進(jìn)行初步調(diào)查,根據(jù)大學(xué)生理財(cái)目標(biāo)和發(fā)展戰(zhàn)略,確定信息系統(tǒng)的發(fā)展戰(zhàn)略,對建設(shè)新系統(tǒng)的需求做出分析和預(yù)測,同時(shí)考慮建設(shè)新系統(tǒng)所受的各種約束,研究建設(shè)新系統(tǒng)的必要性和可能性。根據(jù)需要與可能,給出擬建系統(tǒng)的備選方案。對這些方案進(jìn)行可行性分析,寫出可行性分析報(bào)告??尚行苑治鰣?bào)告審議通過后,將新系統(tǒng)建設(shè)方案及實(shí)施計(jì)劃編寫成系統(tǒng)設(shè)計(jì)任務(wù)書。2.7.2系統(tǒng)分析階段系統(tǒng)分析階段的任務(wù)是根據(jù)系統(tǒng)設(shè)計(jì)任務(wù)書所確定的范圍,對現(xiàn)行系統(tǒng)進(jìn)行詳細(xì)調(diào)查,描述現(xiàn)行系統(tǒng)的業(yè)務(wù)流程,指出現(xiàn)行系統(tǒng)的局限性和不足之處,確定新系統(tǒng)的基本目標(biāo)和邏輯功能要求,即提出新系統(tǒng)的邏輯模型。這個(gè)階段又稱為邏輯設(shè)計(jì)階段,他是整個(gè)系統(tǒng)建設(shè)的關(guān)鍵階段,也是信息系統(tǒng)建設(shè)與一般工程項(xiàng)目的重要區(qū)別所在。該階段的工作成果體現(xiàn)在系統(tǒng)說明書中,這是系統(tǒng)建設(shè)的必備文件。它既是給用戶看的,也是下一階段的工作依據(jù)。因此,系統(tǒng)說明書既要通俗,又要準(zhǔn)確。用戶通過說明書可以了解未來系統(tǒng)的功能,判斷是不是其所要求的系統(tǒng)。系統(tǒng)說明書一旦討論通過,就是系統(tǒng)設(shè)計(jì)的依據(jù),也是將來驗(yàn)收系統(tǒng)的依據(jù)。2.7.3系統(tǒng)設(shè)計(jì)階段簡單地講,系統(tǒng)分析階段的任務(wù)是回答系統(tǒng)“做什么”的問題,而系統(tǒng)設(shè)計(jì)階段要回答的問題是“怎么做”。該階段的任務(wù)是根據(jù)系統(tǒng)說明書中規(guī)定的功能要求,考慮實(shí)際條件,具體設(shè)計(jì)實(shí)現(xiàn)邏輯模型的技術(shù)方案,也即設(shè)計(jì)新系統(tǒng)的物理模型。這個(gè)階段又稱為物理設(shè)計(jì)階段,可分為總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段。這個(gè)階段的技術(shù)文檔是“系統(tǒng)設(shè)計(jì)說明書”。2.7.4系統(tǒng)實(shí)施階段系統(tǒng)實(shí)施階段是將設(shè)計(jì)的系統(tǒng)付諸實(shí)施的階段。這一階段的任務(wù)包括計(jì)算機(jī)等設(shè)備的購置、安裝和調(diào)試,程序的編寫和調(diào)試,人員培訓(xùn),數(shù)據(jù)文件轉(zhuǎn)換,系統(tǒng)調(diào)試與轉(zhuǎn)換等。這個(gè)階段的特點(diǎn)是幾個(gè)互相聯(lián)系、互相制約的任務(wù)同時(shí)展開,必須精心安排、合理組織。系統(tǒng)實(shí)施是按實(shí)施計(jì)劃分階段完成的,每個(gè)階段應(yīng)寫出實(shí)施進(jìn)度報(bào)告。系統(tǒng)測試之后寫出系統(tǒng)測試分析報(bào)告。2.7.5系統(tǒng)運(yùn)行和維護(hù)階段系統(tǒng)投入運(yùn)行后,需要經(jīng)常進(jìn)行維護(hù)和評價(jià),記錄系統(tǒng)運(yùn)行的情況,根據(jù)一定的規(guī)格對系統(tǒng)進(jìn)行必要的修改,評價(jià)系統(tǒng)的工作質(zhì)量和經(jīng)濟(jì)效益。2.8開發(fā)環(huán)境①硬件環(huán)境CPU:賽揚(yáng)2.4GHz,內(nèi)存:1GB,硬盤:120GB②操作系統(tǒng)Microsoft?WindowsXPProfessionalServicePack2③軟件環(huán)境開發(fā)工具:Eclipse3系統(tǒng)設(shè)計(jì)3.1系統(tǒng)需求分析1、性能需求為了保證系統(tǒng)能夠長期、安全、穩(wěn)定、可靠、高效的運(yùn)行,系統(tǒng)應(yīng)該滿足以下的性能需求:(1)系統(tǒng)處理的準(zhǔn)確性和及時(shí)性系統(tǒng)處理的準(zhǔn)確性和及時(shí)性是系統(tǒng)的必要性能。在系統(tǒng)設(shè)計(jì)和開發(fā)過程中,要充分考慮系統(tǒng)當(dāng)前和將來可能承受的工作量,使系統(tǒng)的處理能力和響應(yīng)時(shí)間能夠滿足用戶對信息的處理。由于系統(tǒng)的查詢功能對于整個(gè)系統(tǒng)的功能和性能完成很重要。從系統(tǒng)的多個(gè)數(shù)據(jù)來源來看,學(xué)生信息查詢、實(shí)驗(yàn)信息查詢、預(yù)約結(jié)果查詢、實(shí)驗(yàn)成績查詢及預(yù)約實(shí)驗(yàn)、撤消預(yù)約,其準(zhǔn)確性很大程度上決定了系統(tǒng)的成敗。因此,在系統(tǒng)開發(fā)過程中,系統(tǒng)采用優(yōu)化的SQL語句及安全擴(kuò)展存儲(chǔ)過程來保證系統(tǒng)的準(zhǔn)確性和及時(shí)性。(2)系統(tǒng)的開放性和系統(tǒng)的可擴(kuò)充性系統(tǒng)在開發(fā)過程中,應(yīng)該充分考慮以后的可擴(kuò)充性。例如實(shí)驗(yàn)信息屬性添加、修改,用戶查詢的需求及管理工作的分級(jí)管理,信息輸出打印報(bào)表等模塊也會(huì)不斷的更新和完善。所有這些,都要求系統(tǒng)提供足夠的手段進(jìn)行功能的調(diào)整和擴(kuò)充。而要實(shí)現(xiàn)這一點(diǎn),應(yīng)通過系統(tǒng)的開放性來完成,既系統(tǒng)應(yīng)是一個(gè)開放系統(tǒng),只要符合一定的規(guī)范,可以簡單的加入和減少系統(tǒng)的模塊,配置系統(tǒng)的硬件。通過軟件的修補(bǔ)、替換完成系統(tǒng)的升級(jí)和更新?lián)Q代。(3)系統(tǒng)的易用性和易維護(hù)性系統(tǒng)是直接面對使用人員的,而有些使用人員往往對計(jì)算機(jī)并不是非常熟悉。這就要求系統(tǒng)能夠提供良好的用戶接口,易用的人機(jī)交互界面。要實(shí)現(xiàn)這一點(diǎn),就要求系統(tǒng)應(yīng)該盡量使用用戶熟悉的術(shù)語和中文信息的界面;針對用戶可能出現(xiàn)的使用問題,要提供足夠的在線幫助,縮短用戶對系統(tǒng)熟悉的過程。系統(tǒng)中涉及到的數(shù)據(jù)是高校實(shí)驗(yàn)室相當(dāng)重要的信息,因此系統(tǒng)為不同角色的用戶提供了方便的管理后臺(tái)進(jìn)行數(shù)據(jù)管理,特別為系統(tǒng)管理員提供了數(shù)據(jù)備份,日常安全管理,防止系統(tǒng)意外崩潰等功能。(4)系統(tǒng)的響應(yīng)速度系統(tǒng)設(shè)計(jì)中摒棄大量數(shù)據(jù)冗余,提出了優(yōu)化數(shù)據(jù)庫的解決方案,大量使用存儲(chǔ)過程,大大提高系統(tǒng)響應(yīng)時(shí)間和速度。系統(tǒng)在日常處理中的響應(yīng)速度為秒級(jí),達(dá)到實(shí)時(shí)要求,以及時(shí)反饋信息。嚴(yán)格保證操作人員不會(huì)因?yàn)樗俣葐栴}而影響工作效率。系統(tǒng)的數(shù)據(jù)需求包括如下幾點(diǎn):(1)數(shù)據(jù)錄入和處理的準(zhǔn)確性和實(shí)時(shí)性數(shù)據(jù)的輸入是否準(zhǔn)確是數(shù)據(jù)處理的前提,錯(cuò)誤的輸入會(huì)導(dǎo)致系統(tǒng)輸出的不正確和不可用,從而使系統(tǒng)的工作失去意義。因此,本系統(tǒng)設(shè)計(jì)時(shí)對數(shù)據(jù)輸入進(jìn)行了合法性較驗(yàn),確保數(shù)據(jù)的準(zhǔn)確性。在系統(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ā)器、完整性約束,嚴(yán)格約束數(shù)據(jù)的更新與刪除,減少數(shù)據(jù)冗余,增強(qiáng)數(shù)據(jù)一致性及完整性。(3)數(shù)據(jù)的共享與獨(dú)立性整個(gè)系統(tǒng)的數(shù)據(jù)是共享的。然而,從系統(tǒng)開發(fā)的角度上看,共享會(huì)給設(shè)計(jì)和調(diào)試帶來困難。因此,應(yīng)該提供靈活的配置,使各個(gè)分系統(tǒng)能夠獨(dú)立運(yùn)行,而通過人工干預(yù)的手段進(jìn)行系統(tǒng)數(shù)據(jù)的交換。這樣,也能提供系統(tǒng)的健壯性3.2系統(tǒng)結(jié)構(gòu)設(shè)計(jì)為了真正達(dá)到我們方便顧客,做到簡潔方便易于使用,我們把我們的軟件界面設(shè)計(jì)為三大功能區(qū):主功能區(qū)、副功能區(qū)和操作區(qū)。圖3.1理財(cái)系統(tǒng)結(jié)構(gòu)功能設(shè)計(jì)圖3.2用戶驗(yàn)證與操作流向設(shè)計(jì)圖3.3理財(cái)系統(tǒng)工作原理設(shè)計(jì)3.3數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫是系統(tǒng)信息的有效中心,一個(gè)優(yōu)秀的數(shù)據(jù)庫設(shè)計(jì)應(yīng)考慮到系統(tǒng)工程的功能,系統(tǒng)的執(zhí)行速度,以及是否可能引起系統(tǒng)工作的異常等。數(shù)據(jù)庫的設(shè)計(jì)合理與否不僅直接影響到程序設(shè)計(jì)的質(zhì)量,而且影響到系統(tǒng)的實(shí)現(xiàn)。3.3.1數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)(1)用戶表:說明本系統(tǒng)的用戶和密碼的存儲(chǔ)情況,有主鍵,自動(dòng)增加,用戶不能為空;表3.1用戶名表字段名稱數(shù)據(jù)類型主鍵是否為空UName文本否否PWord文本否是ID自動(dòng)增加是否Active整型否是(2)收入表:說明本系統(tǒng)收入信息存儲(chǔ)數(shù)據(jù)的格式,其中把收入編號(hào)設(shè)為本記錄的主鍵,日期要為日期數(shù)據(jù)類型,這些基本的信息都不能為空,除了備注以外;表3.2收入信息表字段名稱數(shù)據(jù)類型主鍵是否為空收入編號(hào)文本是否用戶名稱文本否否收入類型文本否否日期日期/時(shí)間否否金額數(shù)字否否備注備注否是(3)支出表:說明本系統(tǒng)支出信息存儲(chǔ)數(shù)據(jù)的格式,其中把支出編號(hào)設(shè)為本記錄的主鍵,日期要為日期數(shù)據(jù)類型,這些基本的信息都不能為空,除了備注以外;表3.3收入信息表字段名稱數(shù)據(jù)類型主鍵是否為空支出編號(hào)文本是否用戶名稱文本否否支出類型1文本否否支出類型2文本否否日期日期/時(shí)間否否金額數(shù)字否否備注備注否是(4)收入類型表:說明本系統(tǒng)收入類型,作為收入表的“收入類型”字段的外碼參照。表3.4收入類型表字段名稱數(shù)據(jù)類型主鍵是否為空收入類型文本否否(5)支出類型表:說明本系統(tǒng)支出類型,作為支出表的“支出類型”字段的外碼參照。表3.5支出類型表字段名稱數(shù)據(jù)類型主鍵是否為空說明支出類型1文本否否支出大類支出類型2文本否否支出分類4系統(tǒng)實(shí)現(xiàn)4.1界面設(shè)計(jì)(1)在進(jìn)入系統(tǒng)之后,必須要有符合本系統(tǒng)的用戶以及每個(gè)用戶對應(yīng)的密碼。如果沒輸入用戶名,點(diǎn)擊確定將會(huì)提示請輸入用戶名。如果用戶名錯(cuò)誤和用戶的密碼不符合也將會(huì)有錯(cuò)誤提示。具體界面如圖4.1所示。4.1系統(tǒng)登陸界面(2)用戶和密碼正確后,統(tǒng)的主界面將會(huì)顯示當(dāng)前用戶的賬戶信息。在這個(gè)界面里將實(shí)現(xiàn)本系統(tǒng)所有的功能,用戶一看便會(huì)使用,如圖4.2所示。4.2主要代碼的編寫4.2.1數(shù)據(jù)庫模塊代碼實(shí)現(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論