jsp家庭理財系統(tǒng)ssh論文_第1頁
jsp家庭理財系統(tǒng)ssh論文_第2頁
jsp家庭理財系統(tǒng)ssh論文_第3頁
jsp家庭理財系統(tǒng)ssh論文_第4頁
jsp家庭理財系統(tǒng)ssh論文_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

華北科技學(xué)院畢業(yè)設(shè)計(論文)

華北科技學(xué)院畢業(yè)設(shè)計(論文)

PAGE

VI

PAGE

IV

摘要

近年來,家庭理財日益受到家庭的關(guān)注。一個理性的家庭,不應(yīng)僅僅滿足于一般意義上的“食飽衣暖”。當手頭現(xiàn)有的資金還算充裕的時候,就應(yīng)該根據(jù)家庭自身的特點,尋找一些最適合自己的投資領(lǐng)域與投資工具,獲取盡可能高的收益率。家庭理財需要理財者對家庭的現(xiàn)狀與未來有一個系統(tǒng)的把握和長期的打算,除合理分配家庭的財務(wù)支出外,同時還要學(xué)會錢生錢,最起碼能抵消通貨膨脹的影響。本系統(tǒng)設(shè)計的是一套功能比較完善的家庭理財系統(tǒng)。該系統(tǒng)的開發(fā)是以ECLIPSE3.1作為開發(fā)平臺,應(yīng)用JSP技術(shù)作為前臺開發(fā)語言,應(yīng)用SQLServer2000數(shù)據(jù)庫來作為后臺的數(shù)據(jù)庫對本系統(tǒng)用到的數(shù)據(jù)進行存儲和提取。家庭理財系統(tǒng)基于B/S模式,功能主要包括日常消費和收入記錄和統(tǒng)計管理部分。本家庭理財系統(tǒng)是使用計算機進行信息管理,不僅提高了工作效率,而且操作簡便、界面友好、靈活、實用,能夠很好的滿足家庭從事財務(wù)管理方面的需要。

關(guān)鍵詞:家庭理財,Jsp,JavaBean

Abstract

Inrecentyears,Familyfinanceisdrawingmoreandmorefamily'satteniondaybyday.Arationalfamily,shouldnotmerelysatisfyinthegengeralsignificance"thefoodfullclothesiswarm".Whenthereareabundantfundsonhand,youshoulefindsomeofthemostsuitablefortheirinvestmentdomainandinvestmenttoolsbasedonthefamily'scharacteristicstoobtainthemostreturnaspossible.Financialmanagershoulehasasystemassuranceandlong-termplansofthefamilypresentsituationandthefuture.Besidestherationalofdistributionfamilyfinancialdisbursement,meanwhilehemuststudythetohowgetmoremoneybythemoneyhehas,atleastheisabletooffsettheimpactofinflation.Thissyetemisdesignedforfamily'sfinancialmanagemnet.SystemusesECLIPSE3.1asthedevelopmentplatform,andJSPtechnologyasforegroundProgrammingLanguageandSQLServer2000databaseasthebackgrounddatabasetostorgeandretrievalthedata.SystemBasedonB/Smode,andthefunctionofthesystemmainlyincludesthedailyconsumptionandincomerecordsaswellasthestatisticsmanagement.Thisfamilymanagesfinancesthesystemisusesthecomputertocarryontheinformationmanagement,notonlyenhancedtheworkingefficiency,moreoveroperates,thecontactsurfacesimplyfriendly,nimble,practical,cantheverygoodsatisfiedfamilybeengagedinthefinancialcontrolaspecttheneed.

Keywords:familyfinance,Jsp,JavaBean.

目錄

TOC\o"1-3"\h\z

摘要

I

Abstract

II

緒論

1

第1章需求分析

3

1.1系統(tǒng)設(shè)計目標

3

1.2系統(tǒng)數(shù)據(jù)分析

3

1.3系統(tǒng)問題分析

4

1.4系統(tǒng)功能需求

4

1.5系統(tǒng)性能分析

5

1.6可行性分析

5

第2章系統(tǒng)設(shè)計

8

2.1總體設(shè)計

8

2.1.1總體設(shè)計的主要任務(wù)

8

2.1.2系統(tǒng)功能模塊

8

2.2詳細設(shè)計

9

2.2.1詳細設(shè)計的任務(wù)

9

2.2.2程序流程圖

10

2.3數(shù)據(jù)庫設(shè)計

11

2.3.1數(shù)據(jù)庫表分析

11

2.3.2E-R圖:

11

2.3.3表的詳細結(jié)構(gòu)說明

12

第3章編碼設(shè)計

15

3.1系統(tǒng)登錄模塊的設(shè)計與實現(xiàn)

15

3.2主界面的設(shè)計與實現(xiàn)

15

3.3消費模塊的設(shè)計與實現(xiàn)

16

3.4統(tǒng)計模塊的設(shè)計與實現(xiàn)

17

3.5退出系統(tǒng)模塊的設(shè)計與實現(xiàn)

18

第4章系統(tǒng)測試

19

結(jié)論

21

參考文獻

22

附錄A 主要代碼

23

致謝

34

華北科技學(xué)院畢業(yè)設(shè)計(論文)

PAGE

44

頁共

NUMPAGES

38

PAGE

3

頁共38頁

緒論

改革開放以來,中國經(jīng)濟得到了迅速的發(fā)展,家庭收入也與日俱增,隨著房產(chǎn)熱、私家車、出國游等走入尋常百姓家,如何規(guī)劃財富,如何讓財富增值,如何享受財富也日漸成為每個家庭關(guān)注的話題?!吨袊y(tǒng)計年鑒》的資料表明,近13年來,中國物價上漲率平均達到了6.5%,這一數(shù)字意味著,如果不用于投資理財,我們手頭的現(xiàn)金每年就會減少6.5%。從20世紀90年代國內(nèi)第一家銀行推出個人理財產(chǎn)品,到目前幾乎所有的銀行都擁有了個人理財部,有些甚至引進了更高層次的貴賓理財。這就要求有更好的家庭理財軟件。

現(xiàn)代家庭與傳統(tǒng)家庭在理財方面也出現(xiàn)了許多不同,兩相比較,現(xiàn)代家庭理財難度更大,其中還潛藏了多種理財危機。其一是收入雖增,支出更大。而現(xiàn)代職業(yè)婦女相當普遍,雙薪家庭收入增加,可以支配的家庭收入相對較多。但是由于現(xiàn)代人物質(zhì)欲望高,消費誘惑也大,收入雖較豐厚,花費也比以往高出許多。其二是投資雖廣,風(fēng)險也高。傳統(tǒng)家庭理財方式多半以儲蓄為主,財富累積速度雖慢,但風(fēng)險也低,至少不會把本金賠掉。而現(xiàn)在投資理財工具多樣化,但若未具備專業(yè)知識而盲目理財,其結(jié)果不僅白忙一場,還可能因此賠掉老本。其三是子女雖少,花費更多。現(xiàn)代家庭普遍響應(yīng)計劃生育,只有一個孩子,但由于父母十分重視孩子的養(yǎng)育,花在生活上、學(xué)習(xí)教育上的費用比以前多得多。其四是借錢雖易,利息巨增。

我國居民的儲蓄存款超過十萬億人民幣。特別是像上海、深圳等發(fā)達城市,居民的可支配收入正在逐步達到中等發(fā)達國家水平,許多居民除了購房、購車外有大量的金融資產(chǎn),如何分配、管理金融資產(chǎn)是居民最大的需求。大多數(shù)個人對金融方面的需求從儲蓄、保管金融資產(chǎn)向金融資產(chǎn)的保值、增值轉(zhuǎn)變。家庭如何管理金融資產(chǎn)呢?如何安排自己的富余的現(xiàn)金流,如何籌集自己所需的資金,成為了一個現(xiàn)實的問題。

家庭理財系統(tǒng)以家庭理財?shù)母拍睢⒗碚?、本質(zhì)為基礎(chǔ),剖析了家庭的經(jīng)濟結(jié)構(gòu),并對理財市場和理財產(chǎn)品進行了分析,在此基礎(chǔ)上提出了家庭理財?shù)哪J郊叭绾芜M行家庭理財規(guī)劃。家庭理財系統(tǒng)是每一個家庭管理家庭財務(wù)收入和支出的不可缺少的一個管理信息系統(tǒng),它的內(nèi)容對于家庭的管理者來說是至關(guān)重要的,所以家庭理財系統(tǒng)應(yīng)該能夠為一個家庭的管理者提供充足的信息和快捷的查詢手段,方便家庭的管理者的合理理財。

隨著科學(xué)技術(shù)的不斷提高,計算機科學(xué)日漸成熟,網(wǎng)上銀行的迅速發(fā)展,其強大的功能已為人們深刻認識,它已進入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。

作為計算機應(yīng)用的一部分,使用計算機對家庭財務(wù)進行管理,具有著手工管理所無法比擬的優(yōu)點,如:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點能夠極大地提高家庭財務(wù)管理的效率,也是家庭理財?shù)目茖W(xué)化、正規(guī)化管理,與先進科學(xué)技術(shù)接軌的重要條件。

第1章需求分析

1.1系統(tǒng)設(shè)計目標

現(xiàn)代社會家庭的理財觀念進一步提高,理財手段變得更加豐富。隨著生活水平和文化水平的提高,家庭購買電腦的能力和應(yīng)用電腦的能力開始提高。電腦及其應(yīng)用的普及化,人們應(yīng)用電腦進行家庭財務(wù)管理的觀念增強,因此,開發(fā)一個通用性家庭理財軟件已經(jīng)成為社會需求。本系統(tǒng)是一個家庭通用型理財軟件,系統(tǒng)目標是把適合家庭化管理的各種理財手段及家庭日常收支管理實現(xiàn)計算機化管理,使對家庭及家庭成員的收支活動更好地進行記錄并加以統(tǒng)計分析成為可能,也使家庭理財變得方便,快捷,全面。

1.2系統(tǒng)數(shù)據(jù)分析

家庭理財?shù)闹行膬?nèi)容賬務(wù)管理。人們幾乎每一天都會經(jīng)過許多次貨幣活動。其中包括了買入賣出實物,娛樂消費,起居飲食消費,還有發(fā)放工資等。如果能把各類不同的活動進行分類,分別對活動進行管理,那么無論現(xiàn)在還是將來,你的賬務(wù)就會清楚明白了?,F(xiàn)在我們把這些工作放到程序里去實現(xiàn),就是這樣的操作。日常生活中,當我們要對一周來收支的情況進行了解,就非常困難,而觀察一個月里的利率走勢就更加是問題。做到程序里,把它存放到一個數(shù)據(jù)表里就可以了。歸結(jié)后,用戶的操作一般如下:增加,減少,查找,統(tǒng)計。因而有了相應(yīng)的操作來管理的賬務(wù),依據(jù)需要一個統(tǒng)計分析的過程。我定義這樣一個過程,分析數(shù)據(jù),生成表。比如日常收支統(tǒng)計。建立日常收支表,以收支類型,時間段分類統(tǒng)計也可綜合統(tǒng)計。時間上可按年收支,月收支,日收支進行統(tǒng)計。在理財?shù)拇蟮郎?,我們也需要隨時了解自己所處的位置,在終極目標的指引下,實現(xiàn)一個個短期的目標。而這一切也正是軟件中統(tǒng)計表要告訴用戶的。

圖1-1數(shù)據(jù)流圖

家庭理財系統(tǒng)首先要求用戶進行系統(tǒng)登錄驗證。用戶要輸入用戶名和密碼。輸入正確則進入,否則給出反饋信息要求用戶重新輸入。合法性驗證通過后,進行系統(tǒng)的各項收支信息的錄入和統(tǒng)計,正確的數(shù)據(jù)會寫入后臺數(shù)據(jù)庫中進行存儲,同時會在頁面中以表格的形式顯示給用戶查看。收支統(tǒng)計會根據(jù)一些特定的條件給出統(tǒng)計信息和理財信息提示。

1.3系統(tǒng)問題分析

家庭理財系統(tǒng)主要由日常記賬管理和應(yīng)用各種理財手段進行理財實現(xiàn)家庭資金的最大增值。按用途有效的進行消費計劃和統(tǒng)計。主要為各家庭成員對家庭財產(chǎn)的增加和減少活動進行跟蹤和記錄,這樣隨時可以對家庭的財產(chǎn)擁有狀況進行瀏覽,查詢,方便家庭財產(chǎn)的添置和管理。

1.4系統(tǒng)功能需求

瀏覽選擇功能:對系統(tǒng)進行瀏覽,查看賬戶余額,消費類型。

安全性功能:用戶可為系統(tǒng)設(shè)置密碼,防止非法用戶進入系統(tǒng),破壞數(shù)據(jù)或查看信息。

系統(tǒng)退出功能:關(guān)閉整個系統(tǒng),保存數(shù)據(jù),安全退出。

收支記賬:日常收支活動進行記錄。對每天的消費及時入賬。便于以后對家庭收支或個人收支的查詢和統(tǒng)計。它記錄了收支活動的日期,收支類型,活動說明,收入金額,支出金額,余額,及消費者。

收支分類:收支分類主要為各種收支活動按一種統(tǒng)一的標準進行分類,便于對各類收支進行分類統(tǒng)計整理。用戶可以用收支分類表自行添加新的收支類型,刪除不需要的或模糊的類目,并可查詢和瀏覽系統(tǒng)中所有類目信息。收支類型信息作為系統(tǒng)信息為各種記賬活動提供選擇。

1.5系統(tǒng)性能分析

易用性要求

系統(tǒng)采用目前普遍使用的窗體顯示模式,整個系統(tǒng)為彩色界面,力求界面的美觀,簡潔明了,富于人性化目標。系統(tǒng)界面盡量符合用戶實際操作的要求,它是能否吸引用戶的重要方面。數(shù)據(jù)輸入可直接在數(shù)據(jù)輸入框輸入。系統(tǒng)把一些比較固定的常用信息供用戶在輸入時選擇,方便輸入和加快了速度。

系統(tǒng)安全性

系統(tǒng)涉及到一個家庭的財務(wù)和賬務(wù)信息,安全性比較重要,系統(tǒng)應(yīng)有密碼設(shè)置,防止家庭財務(wù)信息外泄或不想被人知道的信息外露??稍诿看芜M入系統(tǒng)前要求輸入用戶名和密碼。

1.6可行性分析

經(jīng)濟和市場可行性分析

現(xiàn)在,人們的生活水平和文化素質(zhì)普遍提高,并且開始注重生活質(zhì)量。隨著市場經(jīng)濟的快速發(fā)展,觀念的不斷更新,個人理財意識普遍增強,特別是家庭理財意識得到很大發(fā)展,在意識上,一方面,人們對家庭和個人的各方面消費有想進行統(tǒng)計和分析的愿望,以便更好地做好家庭收支計劃,和家庭財務(wù)管理。另一方面,各種理財手段不斷豐富,如何把各種理財手段統(tǒng)一起來,并且能更加方便的操作成為要求。在物質(zhì)基礎(chǔ)上,計算機的應(yīng)用開始普及,人們購置計算機和使用計算機的能力增強,人均計算機擁有量將快速提高。這些條件說明,人們有購買一個家庭理財軟件的要求。在一個可接受的價格范圍內(nèi),將購買這種軟件,因此具有市場潛力。開發(fā)一個小型財務(wù)軟件,用快速開發(fā)工具可在幾個月內(nèi)由幾個人的開發(fā)小組完成。經(jīng)過以上分析,開發(fā)一個通用型家庭理財軟件具有在經(jīng)濟和市場可行性。

技術(shù)可行性分析

①開發(fā)一個通用型家庭理財軟件,項目規(guī)??梢栽谶m合大多數(shù)家庭的基礎(chǔ)上進行開發(fā)。技術(shù)上主要涉及界面設(shè)計和數(shù)據(jù)庫設(shè)計。在開發(fā)工具方面,可采用應(yīng)用軟件快速開發(fā)工具ECLIPSE3.1,它是一個高度集成化開發(fā)環(huán)境,具有豐富的組件,尤其在數(shù)據(jù)庫開發(fā)方面具有很大優(yōu)勢。ECLIPSE3.1能夠支持大多數(shù)數(shù)據(jù)庫的連接,通過數(shù)據(jù)庫連接組件可方便快捷的實現(xiàn)數(shù)據(jù)庫連接,并進行高效訪問。

②開發(fā)環(huán)境

本系統(tǒng)為B/S結(jié)構(gòu)。也就是系統(tǒng)的的客戶端采用的是瀏覽器,不用再另外編寫客戶端軟件。系統(tǒng)部署在TOMCAT下運行,開發(fā)時的調(diào)試環(huán)境為TOMCAT5,開發(fā)工具為ECLIPSE3.1,數(shù)據(jù)庫采用了SQLSERVER2000。

系統(tǒng)采用MVC模式。該模式是現(xiàn)在最流行的一種設(shè)計模式。MVC包括3類對象,簡單地說,MODEL是應(yīng)用對象,VIEW是它在屏幕上的表示。CONTROLLER定義用戶界面輸入的相應(yīng)方式。

圖1-2MVC模式圖

③開發(fā)工具

JavaServlet是JSP技術(shù)的基礎(chǔ),JSP本身就是預(yù)先被編譯成Servlet,然后再運行的,而且大型的Web應(yīng)用程序的開發(fā)需要JavaServlet和JSP配合才能完成。Servlet其實和傳統(tǒng)的CGI程序和ISAPI、NSAPI等Web程序開發(fā)工具的作用是相同的,在使用JavaServlet以后,用戶不必再使用效率低下的CGI方式,也不必使用只能在某個固定Web服務(wù)器平臺運行的API方式來動態(tài)生成Web頁面。許多Web服務(wù)器都支持Servlet,即使不直接支持Servlet的Web服務(wù)器也可以通過附加的應(yīng)用服務(wù)器和模塊來支持Servlet。得益于Java的跨平臺的特性,Servlet也是平臺無關(guān)的,實際上,只要符合JavaServlet規(guī)范,Servlet是完全平臺無關(guān)且是Web服務(wù)器無關(guān)的。由于JavaServlet內(nèi)部是以線程方式提供服務(wù),不必對于每個請求都啟動一個進程,并且利用多線程機制可以同時為多個請求服務(wù),因此JavaServlet效率非常高[1]。

JavaBeans就是Java的可重用組件技術(shù)。ASP通過COM來擴充復(fù)雜的功能,如文件上載、發(fā)送email以及將業(yè)務(wù)處理或復(fù)雜計算分離出來成為獨立可重復(fù)利用的模塊。JSP通過JavaBeans實現(xiàn)了同樣的功能擴充。JSP對于在Web應(yīng)用中集成JavaBeans組件提供了完善的支持。這種支持不僅能縮短開發(fā)時間(可以直接利用經(jīng)測試和可信任的已有組件,避免了重復(fù)開發(fā)),也為JSP應(yīng)用帶來了更多的可伸縮性[4]。JavaBeans組件可以用來執(zhí)行復(fù)雜的計算任務(wù),或負責與數(shù)據(jù)庫的交互以及數(shù)據(jù)提取等。由于JavaBeans開發(fā)起來簡單,又可以利用Java語言的強大功能,許多動態(tài)頁面處理過程實際上被封裝到了JavaBeans中[2]。

JSP技術(shù)是目前網(wǎng)上最流行的在服務(wù)器端運行的腳本技術(shù)。JSP具有跨平臺、安全、強大的可伸縮性的特點,而果硬要挑一些毛病,JSP相對別的腳本更加難掌握,因為精通JSP必須精通Java語言,對于中小型項目,我們要考慮開發(fā)人員、開發(fā)速度、開發(fā)成本等問題[3]。

本系統(tǒng)采用了SQLServer。SQLServer是新一代大型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可為數(shù)據(jù)管理者提供強大的支持,對數(shù)據(jù)庫中的數(shù)據(jù)提供有效的管理,并采用有效的措施實現(xiàn)數(shù)據(jù)的完整性及數(shù)據(jù)的安全性[11]。

家庭理財系統(tǒng)在上述的應(yīng)用環(huán)境中,系統(tǒng)的實現(xiàn)在技術(shù)上具有可行性。

第2章系統(tǒng)設(shè)計

2.1總體設(shè)計

2.1.1總體設(shè)計的主要任務(wù)

(1)通過在軟件需求分析時撐握的文檔,制定最佳方案,用系統(tǒng)流程圖,組成系統(tǒng)物理元素清單,系統(tǒng)的進度計劃,供日后詳細設(shè)計時使用。

(2)確定模塊結(jié)構(gòu),劃分功能模塊,將軟件功能需求分配給所劃分的最小單元模塊(如食品消費模塊、著裝消費模塊、行車消費模塊,家居消費模塊等)。確定模塊間的聯(lián)系,確定數(shù)據(jù)結(jié)構(gòu)、文件結(jié)構(gòu)、數(shù)據(jù)庫模式[5]。

2.1.2系統(tǒng)功能模塊

系統(tǒng)的功能模塊分為:登錄模塊,消費模塊,統(tǒng)計模塊,收入模塊。

登錄模塊的功能:主要是對用戶的管理權(quán)限進行驗證。決定用戶是否有權(quán)限進行本系統(tǒng)。

消費模塊的功能如下:

食品消費:完成日常生活中食品類商品消費項目的統(tǒng)計。

著裝消費:完成日常生活中服裝衣物類商品消費項目的統(tǒng)計。

家具消費:完成日常生活中家居用品類商品消費項目的統(tǒng)計。

行車消費:完成日常生活中交通消費項目的統(tǒng)計。

統(tǒng)計模塊的功能如下:

當日匯總:對當日消費情況進行匯總。

月份匯總:對當月消費及收支情況進行匯總,并計算節(jié)余.根據(jù)收支情況給出一些簡單的理財建議。

年份匯總:記錄每年收支情況,并計算節(jié)余,根據(jù)收支情況給出一些簡單的理財建議。

收入模塊的功能:對家庭的收入進行統(tǒng)計。

根據(jù)以上分析,該系統(tǒng)考慮將整個系統(tǒng)分解成如下功能模塊圖:

圖2-1家庭理財系統(tǒng)結(jié)構(gòu)圖

2.2詳細設(shè)計

2.2.1詳細設(shè)計的任務(wù)

確定應(yīng)該怎樣具體地實現(xiàn)所要求的家庭理財系統(tǒng),經(jīng)過這個階段的設(shè)計工作,應(yīng)該得出對家庭理財系統(tǒng)的精確描述,從而在編碼階段可以把這個描述直接翻譯成用jsp程序設(shè)計語言書寫的程序。

詳細設(shè)計階段的任務(wù)還不是具體地編寫程序,而是要設(shè)計出家庭理財系統(tǒng)程序的“藍圖”,以后程序員將根據(jù)這個藍圖寫出實際的家庭理財系統(tǒng)程序代碼,因此,詳細設(shè)計的結(jié)果基本上決定了最終的程序代碼的質(zhì)量[6]。

2.2.2程序流程圖

圖2-2程序流程圖

用戶要進入系統(tǒng),首先要進行用戶權(quán)限的驗證,系統(tǒng)會判斷用戶名和密碼是否正確,如果正確則進行系統(tǒng)進行操作。否則給出錯誤提示信息要求用戶重新輸入正確的用戶名和密碼。進入系統(tǒng)后進行消費記錄,首先要求數(shù)據(jù)輸入的格式必須符合系統(tǒng)的規(guī)定,否則給出錯誤格式的信息提示,要求用戶重新輸入正確格式的數(shù)據(jù)。正確的輸入后,數(shù)據(jù)會寫入后臺數(shù)據(jù)庫進行存儲。收入記錄同樣要求用戶輸入的數(shù)據(jù)格式正確,否則會給出格式錯誤信息提示要求用戶輸入正確格式的數(shù)據(jù),輸入正確后,系統(tǒng)會將數(shù)據(jù)寫入后臺數(shù)據(jù)庫進行數(shù)據(jù)存儲。數(shù)據(jù)庫中的數(shù)據(jù)為用戶進行數(shù)據(jù)的收支統(tǒng)計查看和進行家庭理財?shù)耐顿Y提供了依據(jù)。

2.3數(shù)據(jù)庫設(shè)計

2.3.1數(shù)據(jù)庫表分析

數(shù)據(jù)庫設(shè)計中設(shè)計了表,一張是日期表FAMILY_RECTIME,記錄有消費記錄的日期,一張表是MYTABLE是具體的消費,收入數(shù)據(jù)記錄表,一張表TBUSER是用于登錄本系統(tǒng)的用戶名和密碼核對表,一張表是XIAOFEIG是用于記錄消費品屬性的表[8]。

2.3.2E-R圖:

圖2-3收支實體圖

圖2-4用戶實體圖

圖2-5消費品實體圖

圖2-6數(shù)據(jù)庫E-R圖

一個消費者可以購買多個物品,一個消費品也可以被多個消費者購買;一個收支明細可以記錄管理多個消費者,消費者也可以管理多個收支明細;一個消費品可以被多條收支明細記錄,一個收支明細也可以記錄多個消費品。

2.3.3表的詳細結(jié)構(gòu)說明

FAMILY_RECTIME表有2個字段:ID和RECTIME,ID是流水號,每條記錄的惟一性標識;RECTIME則是日期數(shù)據(jù),兩個字段在數(shù)據(jù)庫中都使用nvarchar類型。

表2-1FAMILY_RECTIME表

字段

描述

類型

長度

是否為空

id

流水號

nvarchar

20

rectime

日期數(shù)據(jù)

nvarchar

20

MYTABLE表有7個字段:ID是流水號;INDEXID是日期表的索引號;TYPE表示“衣食住行”分類下的子分類,如“食”類中分有“廚房消費”、“零食消費”等;MONEY是消費金額;NAME表示消費品名稱;PERSON記錄的是消費者;TABLES表示記錄屬于“衣食住行”哪一類。

表2-2MYTABLE表

字段

描述

類型

長度

是否為空

id

流水號

nvarchar

20

indexid

日期表的索引號

Int

4

person

消費者

int

4

可以為空

tables

衣食住行類別

int

4

type

衣食住行分類下的子分類

int

4

可以為空

money

消費金額

float

8

name

消費品名稱

nvarchar

50

TBUSER表有3個字段:USERNAME是用戶名,PASSWORD是密碼,SEX性別。

表2-3TBUSER表

字段

描述

類型

長度

是否為空

username

用戶名

nvarchar

20

password

密碼

nvarchar

20

sex

性別

Char

10

MYTABLE表和FAMILY_RECTIME表,兩表之間通過ID來作為連接的變量,通過ID列的值就能把兩個表給連接起來[7]。

XIAOFEI表有4個字段:

XID表示消費品號;TYPE表示“衣食住行”分類下的子分類,如“食”類中分有“廚房消費”、“零食消費”等;MONEY是消費金額;NAME表示消費品名稱。

表2-4XIAOFEI表

字段

描述

類型

長度

是否為空

type

衣食住行分類下的子分類

int

4

可以為空

money

消費金額

float

8

name

消費品名稱

nvarchar

50

xid

消費品號

nvarchar

20

第3章編碼設(shè)計

3.1系統(tǒng)登錄模塊的設(shè)計與實現(xiàn)

系統(tǒng)登陸時為防止非法用戶進入系統(tǒng)而設(shè)計,主要用于辨認用戶的身份,以確定其適用權(quán)限。系統(tǒng)登陸模塊運行界面如下圖所示。

圖3-1家庭理財系統(tǒng)登錄界面

系統(tǒng)登陸模塊的主要任務(wù)就是驗證用戶輸入的用戶名和密碼是否正確。如果驗證通過,就根據(jù)登陸用戶所擁有的訪問權(quán)限分配可用功能。反之,則不允許登陸。

3.2主界面的設(shè)計與實現(xiàn)

系統(tǒng)的主頁面用于數(shù)據(jù)的收集工作,它實現(xiàn)一個框架,這個框架分為三個界面布局。每部分是獨立的JSP頁面。

導(dǎo)航窗口頁面:

它主要是完成框架左側(cè)的展示工作,同時在單擊左邊不同的鏈接的時候,在框架的中部顯示不同的收集數(shù)據(jù)的頁面。這樣設(shè)計的目的是:以后需要修改框架左側(cè)頁面的展示情況時不要修改多個地方,只需要修改該頁面就可以達到目的。

頭頁面:

它的主要作用是實現(xiàn)框架頭的展示功能,顯示系統(tǒng)的時間和展示系統(tǒng)的標題。

顯示頁面:

該頁面是一個空頁面,就是該頁面里面沒有具體實現(xiàn)什么展示的工作,該頁面是承載其他頁面。利用其他頁面進行數(shù)據(jù)的收集工作。

圖3-2家庭理財系統(tǒng)主界面

3.3消費模塊的設(shè)計與實現(xiàn)

通過點擊左邊導(dǎo)航欄中“衣食住行”四大類別的消費類別,右邊空白部分就出現(xiàn)了相應(yīng)的消費界面,用戶就可以在里面輸入相應(yīng)的消費項目了,這就是關(guān)于頁面展示和數(shù)據(jù)收集的部分,在系統(tǒng)中實現(xiàn)了頁面邏輯和處理邏輯的分開,所有的頁面也就是負責數(shù)據(jù)的收集和數(shù)據(jù)的展示功能了,在收集到了數(shù)據(jù)以后都是發(fā)送到對應(yīng)的SERVLET中來進行數(shù)據(jù)處理的。

所有的頁面數(shù)據(jù)在收集到了以后都是提交到頁面相對應(yīng)的SERVLET去處理的,頁面中控制根據(jù)頁面代碼中表單提交的地址提交到某個頁面后者SERVLET中。數(shù)據(jù)傳到SERVLET后,SERVLET執(zhí)行的操作流程是:獲取提交數(shù)據(jù)-判斷操作-數(shù)據(jù)封閉-執(zhí)行數(shù)據(jù)庫操作。

所有的消費記錄的處理流程都基本類似,不同是就是頁面收集到的數(shù)據(jù)發(fā)送到了SERVLET以后是調(diào)用不同的處理方法來對其進行處理,在這里就不作詳細的介紹了。

圖3-3家庭理財系統(tǒng)消費界面

3.4統(tǒng)計模塊的設(shè)計與實現(xiàn)

這個頁面的功能就是實現(xiàn)收支情況的頁面展示部分,如下圖

圖3-4家庭理財系統(tǒng)統(tǒng)計界面

在對頁面數(shù)據(jù)的流轉(zhuǎn)進行了配置以后,所有的頁面的數(shù)據(jù)都會按照配置好的發(fā)送到相應(yīng)的BanlanceServlet中去處理。

這樣就實現(xiàn)了查看收支情況的功能了,處理過程和另外兩個統(tǒng)計類似,不同的就是使用不同的Servlet和javaBance來對數(shù)據(jù)庫進行封裝,不同的模塊使用不同的Servlet和javaBance.

在收集到了數(shù)據(jù)以后,為了提高數(shù)據(jù)的安全性,把這些數(shù)據(jù)封裝到了ModelFour的數(shù)據(jù)類型中,也就是封裝成一個對象來發(fā)送到數(shù)據(jù)庫進行處理的。

3.5退出系統(tǒng)模塊的設(shè)計與實現(xiàn)

后臺對于整個系統(tǒng)的正常運行超著到關(guān)重要的作用。當用戶對系統(tǒng)維護工作完成后,必須退出系統(tǒng),否則萬一被不法分子乘機進入,后果將不勘設(shè)想。實現(xiàn)退出系統(tǒng)后臺的方法很簡單,只需要單擊“退出”超鏈接時,連接登錄頁面即可。登錄頁面主要是將保存有用戶信息的Session變量清空,并將頁面重定向到網(wǎng)站登錄頁面即可。

第4章系統(tǒng)測試

隨著軟件系統(tǒng)的規(guī)模日益龐大,結(jié)構(gòu)日趨復(fù)雜,對軟件系統(tǒng)的性能測試已經(jīng)成為必須和趨勢。尤其大型的分布式軟件系統(tǒng)更要在正式運行前進行性能測試,因為這樣的系統(tǒng)在投入生產(chǎn)之后,往往要接受大批量的業(yè)務(wù)量,這對應(yīng)用程序本身,操作系統(tǒng),中心數(shù)據(jù)庫服務(wù)器,中間件服務(wù)器,網(wǎng)絡(luò)設(shè)備的承受力都是一個嚴峻的考驗。在其中任意一個環(huán)節(jié)出現(xiàn)的問題都可能給用戶帶來巨大的商業(yè)損失。預(yù)見軟件系統(tǒng)的并發(fā)承受能力以避免商業(yè)風(fēng)險,這是在軟件測試階段就應(yīng)該解決的[10]。

(1)單元測試的過程

單元測試常常和代碼編寫同步進行,在完成了程序編寫、復(fù)查和語法正確性驗證后,就應(yīng)進行單元測試用例設(shè)計。在對每個模塊進行單元測試時,不能完全忽視它們和周圍模塊的相互聯(lián)系。為模擬這一聯(lián)系,在進行單元測試時,需設(shè)置若干輔助測試模塊。輔助模塊有兩種,一種是驅(qū)動模塊(driver),用以模擬被測模塊的上級模塊。驅(qū)動模塊在單元測試中接受測試數(shù)據(jù),把相關(guān)的數(shù)據(jù)傳送給被測模塊,啟動被測模塊,并打印出相應(yīng)的結(jié)果。另一種是樁模塊(stub),用以模擬被測模塊工作過程中所調(diào)用的模塊。樁模塊由被測模塊調(diào)用,它們一般只進行很少的數(shù)據(jù)處理,以便于檢驗被測模塊與其下級模塊的接口。

驅(qū)動器和樁都是額外的開銷,這兩種模塊雖然在單元測試中必須編寫,但卻不作為最終的軟件產(chǎn)品提供用戶。如果驅(qū)動器和樁很簡單的話,那么開銷相對較低,然后,使用“簡單”的模塊是不可能進行足夠的單元測試的,模塊間接口的全面檢驗要推遲到集成測試時進行[9]。

(2)功能測試

鏈接是使用戶從一個頁面瀏覽到另一個頁面的重要手段。對于每個鏈接,需要驗證兩件事情:一是該鏈接將用戶帶到它所說明的地方,另外就是被鏈接頁面是存在的。這句話聽起來有些問題,但是有很多多站點的內(nèi)部鏈接都是空的。這實在是無法忍受。如果根據(jù)業(yè)務(wù)規(guī)則需要對用戶輸入進行校驗,需要保證這些校驗功能正常工作。應(yīng)用程序特定的功能需求

消費模塊測試如下表所示:

表4-1消費模塊測試用例

項目

輸入

輸出

消費模塊

物品名稱空

物品名稱不能為空

價格空

物品價格不能為空

價格含有非法字符

物品價格格式不正確

物品名稱及價格正確

數(shù)據(jù)錄入到數(shù)據(jù)庫,并顯示至頁面下方

當用戶通過表單提交信息的時候,都希望表單能正常工作。如果使用表單收集配送信息,應(yīng)確保程序能夠正確處理這些數(shù)據(jù)。要測試這些程序,需要驗證服務(wù)器能正確保存這些數(shù)據(jù),而且后臺運行的程序能正確解釋和使用這些信息。

登錄測試如下表所示:

表4-2登錄模塊測試用例

項目

輸入

輸出

登錄測試

Wrong

未存在用戶

Wrong

兩者有一者錯誤

Wrong

兩者都有錯誤

Wrong

兩者正確

登錄成功

結(jié)論

家庭理財系統(tǒng)的設(shè)計實現(xiàn)了預(yù)期的功能,對家庭的日常消費進行分類別的記錄,家庭的收入進行統(tǒng)計,對家庭的收支進行匯總并給出相應(yīng)的理財提示信息。在這次的家庭理財系統(tǒng)設(shè)計中將理論知識應(yīng)用到實際中使得對理論知識的理解有了更進一步的理解,如果僅僅只是運用理論知識,是遠遠不夠的。必須理論聯(lián)系實際,才能很好的將各門課程學(xué)好,并用于實際案例中。同時,經(jīng)過這次畢業(yè)設(shè)計,我發(fā)覺自己的動手操作能力變強了,也為自己對以后的科研、工作充滿信息和希望打下了良好的基礎(chǔ)。

在這次課程設(shè)計調(diào)試階段,發(fā)現(xiàn)了許多不足之處,比如說,以前做實驗時經(jīng)常不注意實體的屬性的字段,在調(diào)試過程中才知道這個很重要。另外,在與數(shù)據(jù)庫進行連接時,剛開始總是在SQLServer2000里面看不到生成的表,因為沒有更改默認的數(shù)據(jù)庫為現(xiàn)在所用的數(shù)據(jù)庫,所以在數(shù)據(jù)庫里生成不了表。在調(diào)試過程中,還有些小小的問題都經(jīng)過仔細分析、檢測后一一改正,彌補了自己的不足,起到了很好的查漏補缺的作用。相信通過這次家庭理財系統(tǒng)設(shè)計,使得本人的經(jīng)驗提高了很多。對以后碰到類似的問題,就會變得游刃有余。也可推知其他方面的問題,只要有信心,認真相信都會成功的解決。

這次設(shè)計使我的編程水平提高了一大步,使我充分的認識到合作的可貴。由于這次設(shè)計涉及到數(shù)據(jù)庫,我的學(xué)到了不少編程工具與數(shù)據(jù)庫連接的知識,對數(shù)據(jù)庫的操作有了進一步的了解。這次設(shè)計對我的綜合能力是一次很好的鍛煉,但是我必須承認自己的能力和知識還很膚淺。所以今后我的學(xué)習(xí)道路還是很漫長的。在這里我要衷心的感謝我的指導(dǎo)老師,謝謝她的悉心指導(dǎo)和熱心幫助。由于我水平有限,加之時間短暫,故家庭理財系統(tǒng)中還有許多不足之處,請老師批評指正,我會在以后的制作中不斷改進,不斷完善。

參考文獻

[1]陳海山主編.深入JAVASERVLET網(wǎng)絡(luò)編程[M].北京:清華大學(xué)出版社.2002

[2]Haefel.EnterpriseJavaBeans[M].北京:中國電力出版社.2001

[3]陳旭東,劉迪仁.JSP2.0應(yīng)用教程[M].北京:清華大學(xué)出版社,北京交通大學(xué)出版社2006

[4]清宏計算機工作室編著.JSP編程技巧[M].北京:機械工業(yè)出版社.2002

[5]林國璋,張雪蘭.系統(tǒng)軟件與軟件工程技術(shù)基礎(chǔ)[M].北京:北京理工大學(xué)出版.1990.9

[6]史濟民.軟件工程原理.方法與應(yīng)用[M].北京:高等教育出版社.1990.5

[7]姚卿達.數(shù)據(jù)庫設(shè)計[M].北京:高等教育出版社.1987.4

[8]史濟民.數(shù)據(jù)庫原理與應(yīng)用[M].北京:高等教育出版社.1987.10

[9]鄭人杰.計算機軟件測試技術(shù)[M].北京:清華大學(xué)出版社.1992.12

[10]上海艾微軟件技術(shù)有限公司主編.軟件測試技術(shù)概論[M].北京:清華大學(xué)出版社.2004

[11]龍懷冰,李白樺等著.SQLServer2000實用開發(fā)教程[M].北京:人民郵電出版社.2006

主要代碼

MyDAO.java類是程序的核心代碼,在該類里面實現(xiàn)了所有和數(shù)據(jù)庫相關(guān)的操作。

packagefamily.yin.senqi.dao;

importjava.sql.*;

importfamily.yin.senqi.model.*;

publicclassMyDAO{

privateConnectioncon=null;

privateStatementst=null;

/**

*構(gòu)造函數(shù),初始化con(類中定義的私有變量)

*/

//實例化的時候完成和數(shù)據(jù)庫的連接

publicMyDAO(){

try{

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

}

catch(ClassNotFoundExceptionex){

ex.printStackTrace();

}

try{

con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=myFamaly","sa","758688");

}

catch(SQLExceptionex1){

ex1.printStackTrace();

}}

//判斷用戶名和密碼是否正確

publicbooleanisLogin(ModelUseruser)throwsSQLException

{

booleanflag=false;

System.out.println("user.username:"+user.getUsername());

System.out.println("user.password:"+user.getPassword());

Stringsql="select*fromtbuserwhereusername='"+user.getUsername()+"'andpassword='"+user.getPassword()+"'";

System.out.println(sql);

st=con.createStatement();

ResultSetrs=st.executeQuery(sql);

if(rs.next())

{

System.out.println("登錄成功");

flag=true;

}

returnflag;}

//查詢數(shù)據(jù)庫

publicModelOne[]getMyTableResults(inttables,Stringindexid)throwsException{

st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSetrs=st.executeQuery("select*frommytablewhereindexid='"+indexid+"'andtables="+tables);

rs.last();

introw=rs.getRow();

ModelOne[]ms=newModelOne[row];

rs.beforeFirst();

inti=0;

//循環(huán)把結(jié)果集的記錄存入數(shù)組中

while(rs.next()){

ms[i]=newModelOne();

ms[i].setId(rs.getString(1));

ms[i].setIndexid(rs.getString(2));

ms[i].setType(rs.getInt(3));

ms[i].setPerson(rs.getInt(4));

ms[i].setMoney(rs.getFloat(5));

ms[i].setName(rs.getString(6));

ms[i].setTables(rs.getInt(7));

++i;

}

rs.close();

st.close();

returnms;}

//得到收支總和

publicModelFour[]getBalance(intnYear,intnMonth)throwsException{

st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

Stringsql="selecta.rectime,SUM(b.money)asmoneyfromfamily_rectimea,mytableb"

+"wherea.id=b.indexidandYear(a.rectime)="+nYear+"andMonth(a.rectime)="+nMonth

+"andnotb.tables=5groupbya.rectimeorderbyDAY(a.rectime)";

ResultSetrs=st.executeQuery(sql);

rs.last();

introw=rs.getRow();

ModelFour[]mf=newModelFour[row];

rs.beforeFirst();

inti=0;

//循環(huán)取出結(jié)果集的內(nèi)容

while(rs.next()){

mf[i]=newModelFour();

mf[i].setRecTime(rs.getString(1));

mf[i].setTotalMoney(rs.getFloat(2));

++i;

}

rs.close();

st.close();

returnmf;

}

publicModelTwogetRecTimeResults(Stringsql)throwsException{

ModelTwomt=newModelTwo();

try

{

st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSetrs=st.executeQuery(sql);

rs.beforeFirst();

inti=0;

//循環(huán)取出結(jié)果集的內(nèi)容

while(rs.next()){

mt.setId(rs.getString(1));

mt.setRecTime(rs.getString(2));

System.out.println("http://///////////////"+mt.getId());

System.out.println("http://///////////////"+mt.getRecTime());

i++;

}

rs.close();

st.close();

returnmt;

}

catch(Exceptione)

{

System.out.println("****erroringetRecTimeResults******");

e.printStackTrace();

returnnull;

}

}

//插入數(shù)據(jù)庫

publicvoidinsertInto(Stringsql)throwsException{

st=con.createStatement();

st.executeUpdate(sql);

st.close();

}

publicModelTwoTestResult(Stringsql)throwsException{

st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSetrs=st.executeQuery(sql);

rs.last();

rs.beforeFirst();

inti=0;

ModelTwomt=newModelTwo();

while(rs.next()){

Stringr=rs.getString(1);

mt.setId(r);

r=rs.getString(2);

mt.setRecTime(r);

i++;

}

rs.close();

st.close();

returnmt;}

//插入記錄到時間表中

publicvoidinsertRecTime(StringrecTime){

try{

Stringid=this.getSid(1);

System.out.println("id:"+id);

System.out.println("*********************");

Stringsql_insert="insertintofamily_rectime(id,rectime)values"

+"('"+id+"','"+recTime+"')";

System.out.println("sql_insert"+sql_insert);

this.insertInto(sql_insert);

}

catch(Exceptionex){

System.out.println("****errorininsertRecTime******");

ex.printStackTrace();

}}

//得到表FAMILY_RECTIME中ID值最大的ID值

publicStringgetSid(inti)throwsException{

Stringid="";

Stringsql="selectMAX(CAST(IDASint))asid,''asrectimefromfamily_rectime";

if(i!=1)sql="selectMAX(CAST(IDASint))asid,''asrectimefrommytable";

ModelTwomt=this.getRecTimeResults(sql);

if(mt.getId()!=null)

{

System.out.println("*****mt!=null*********");

id=String.valueOf(newInteger(mt.getId()).intValue()+1);

}

else

{System.out.println("*****mt=null*********");

id=String.valueOf(1);

}

returnid;}

//得到時間ID

publicStringgetIndexid(StringrecTime)throwsException{

Stringsql="select*fromfamily_rectimewhererectime='"+recTime+"'";

System.out.println("sql:"+sql);

ModelTwomt=null;

mt=this.getRecTimeResults(sql);

if(mt.getId()!=null)

{

returnmt.getId();

}

else

{

returnnull;

}}

//插入記錄到MYTABLE表中

publicvoidinsertToMytable(ModelOnemodel)throwsException{

Stringsql="insertintomytable(id,indexid,type,person,money,name,tables)values"

+"('"+model.getId()+"','"+model.getIndexid()+"',"+model.getType()

+","+model.getPerson()+","+model.getMoney()+",'"+model.getName()+"',"+model.getTables()+")";

this.insertInto(sql);

}

//刪除MYTABLE表的記錄

publicvoiddeleteFromMytable(StringrecId)throwsException{

Stringsql="deletemytablewhereid='"+recId+"'";

this.insertInto(sql);}

//得到每天收入

publicModelFour[]getEverydayMoney(Stringindexid)throwsException{

st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

Stringsql="SELECTSUM(MONEY)AStotal,tablesFROMMYTABLEWHEREINDEXID="+indexid+"ANDNOTTABLES=5GROUPBYtables";

ResultSetrs=st.executeQuery(sql);

rs.last();

introw=rs.getRow();

ModelFour[]mf=newModelFour[row];

rs.beforeFirst();

inti=0;

while(rs.next()){

mf[i]=newModelFour();

mf[i].setTotalMoney(rs.getFloat(1));

mf[i].setType(rs.getInt(2));

++i;

}

rs.close();

st.close();

returnmf;}

//得到收入總和

publicModelFour[]getMoneyInTotal()throwsSQLException{

st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

Stringsql="SELECTa.MONEY,b.RECTIMEFROMMYTABLEa,FAMILY_RECTIMEbWHEREa.indexid=b.idanda.tables=5";

ResultSetrs=st.executeQuery(sql);

rs.last();

introw=rs.getRow();

ModelFour[]mf=newModelFour[row];

rs.beforeFirst();

inti=0;

while(rs.next()){

mf[i]=newModelFour();

mf[i].s

溫馨提示

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

評論

0/150

提交評論