java畢業(yè)設(shè)計(jì)--網(wǎng)吧收費(fèi)管理系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  第一章 網(wǎng)吧計(jì)費(fèi)管理系統(tǒng)</p><p>  學(xué)習(xí)目標(biāo):能使用Java集成開發(fā)環(huán)境,運(yùn)用Swing設(shè)計(jì)圖形界面,運(yùn)用JDBC訪問(wèn)數(shù)據(jù)庫(kù),掌握事件處理編程,了解簡(jiǎn)單兩層C/S項(xiàng)目的開發(fā)及簡(jiǎn)單面向?qū)ο蟪绦虻脑O(shè)計(jì)過(guò)程,發(fā)展基本的團(tuán)隊(duì)協(xié)作開發(fā)能力。</p><p>  學(xué)習(xí)寄語(yǔ):雖然本項(xiàng)目并不是一個(gè)商業(yè)項(xiàng)目,其產(chǎn)品也不能用來(lái)賺錢,但從中你可以學(xué)到實(shí)際開發(fā)中的許多經(jīng)驗(yàn)和技巧,獲

2、得一種“學(xué)有所用”、“學(xué)有所得”的成就感,同時(shí)贏得老師和同學(xué)(同事)對(duì)你的格外尊重。在此項(xiàng)目的學(xué)習(xí)中,你不但是個(gè)學(xué)生,還是一個(gè)職業(yè)人,將與同事一起盡全力完成你所要做的工作,并再次驗(yàn)證“天道酬勤”的真理。我們的信念是:“不拋棄,不放棄”。你的改變和收獲是老師真誠(chéng)的期待。</p><p><b>  1.1 背景介紹</b></p><p>  1.1.1 業(yè)務(wù)背景<

3、;/p><p>  “海之星”網(wǎng)吧,是一個(gè)小型網(wǎng)吧,以前是人工記帳,現(xiàn)需要開發(fā)一個(gè)簡(jiǎn)單的網(wǎng)吧計(jì)費(fèi)管理系統(tǒng)。原人工管理的主要過(guò)程如下:客戶在門口服務(wù)臺(tái),出示上機(jī)卡,若是新客戶則先發(fā)新卡;管理員先查詢是否有空機(jī)器,若有則根據(jù)上機(jī)卡號(hào)查到該卡對(duì)應(yīng)的記錄(賬簿),若有余額(〉5元),則分配一個(gè)空閑的機(jī)器號(hào)給客戶,客戶根據(jù)機(jī)器號(hào)對(duì)號(hào)入座,管理員記下客戶卡號(hào)、上機(jī)機(jī)器號(hào)、上機(jī)時(shí)間??蛻粝聶C(jī)要到門口的服務(wù)臺(tái),請(qǐng)求下機(jī),管理員根據(jù)當(dāng)

4、前時(shí)間、上機(jī)時(shí)間及費(fèi)率計(jì)算出本次上機(jī)費(fèi)用,并記錄,同時(shí)將費(fèi)用從卡余額中扣除,若費(fèi)用不夠則需充值。原手工系統(tǒng)主要有如下缺點(diǎn):1 手工記帳,管理員工作量大,且易出錯(cuò);2 超時(shí)超費(fèi)使用不能及時(shí)發(fā)現(xiàn)。因此需要開發(fā)一個(gè)簡(jiǎn)易計(jì)費(fèi)管理軟件,取代人工記帳方式,由軟件統(tǒng)一管理記錄上下機(jī)、計(jì)費(fèi)、上機(jī)卡、機(jī)器情況,提供簡(jiǎn)單統(tǒng)計(jì)功能,超時(shí)超費(fèi)提醒功能等。</p><p>  1.1.2 技術(shù)背景</p><p>

5、  本系統(tǒng)要求使用java技術(shù)開發(fā),使用數(shù)據(jù)庫(kù)(如ACCESS,SQLServer)保存數(shù)據(jù),集成開發(fā)環(huán)境可使用支持可視化GUI界面設(shè)計(jì)的主流工具(如eclipse\ant bean\jbuilder)。開發(fā)者應(yīng)有java程序設(shè)計(jì)語(yǔ)言、SWING基本GUI組件、文件使用、JDBC存取數(shù)據(jù)庫(kù)、使用一種集成開發(fā)工具的基本知識(shí)和技能。系統(tǒng)采用兩層C/S體系結(jié)構(gòu),C端負(fù)責(zé)通過(guò)GUI與管理員交互、處理業(yè)務(wù)邏輯及存取數(shù)據(jù)庫(kù),S端主要是數(shù)據(jù)庫(kù)系統(tǒng)。系

6、統(tǒng)分析設(shè)計(jì)主要采用面向?qū)ο蟮姆治鲈O(shè)計(jì)方法。</p><p>  友情提示:對(duì)項(xiàng)目有了一個(gè)最基本的認(rèn)識(shí)后,是不是立即準(zhǔn)備大干一場(chǎng)?是否要問(wèn)一問(wèn)值不值得干?能不能干?商業(yè)項(xiàng)目一般可以從經(jīng)濟(jì)性、技術(shù)性、法律社會(huì)等方面進(jìn)行可行性分析,但本項(xiàng)目作為一個(gè)學(xué)習(xí)型項(xiàng)目顯然無(wú)利可圖、技術(shù)也欠缺(事實(shí)上技術(shù)正是要學(xué)習(xí)的東西)、好在項(xiàng)目是合法的。那是否繼續(xù)?當(dāng)然!因?yàn)楸卷?xiàng)目的目標(biāo)不是在合法的前提下獲取最大利潤(rùn),而是習(xí)得知識(shí)和技能,只要

7、你愿意,就可以繼續(xù)進(jìn)一步了解“網(wǎng)吧計(jì)費(fèi)管理系統(tǒng)”,Let’s go!</p><p><b>  1.2 需求分析</b></p><p>  1.2.1功能需求分析</p><p>  系統(tǒng)需求分析的主要任務(wù)是從用戶角度考察系統(tǒng)應(yīng)具有哪些功能及非功能性需求,對(duì)于網(wǎng)吧計(jì)費(fèi)管理系統(tǒng),用戶主要是指系統(tǒng)管理員,系統(tǒng)的主要功能是:登錄、上機(jī)、下機(jī)、卡

8、管理(發(fā)卡、刪卡、充值、查詢)、機(jī)器管理(添加機(jī)器、刪除機(jī)器、查詢狀態(tài)、修改狀態(tài)),統(tǒng)計(jì)功能(日、月費(fèi)用統(tǒng)計(jì)),口令管理(添加用戶、刪除用戶、修改口令),參數(shù)設(shè)置(時(shí)段費(fèi)率),使用幫助。主要使用流程是:管理員登錄,根據(jù)客戶請(qǐng)求上機(jī),根據(jù)客戶請(qǐng)求下機(jī)。主要功能的用例(use case)描述如下:</p><p><b>  一 上機(jī)</b></p><p>  1 管理

9、員輸入空閑機(jī)器號(hào),上網(wǎng)人輸入口令、卡號(hào),請(qǐng)求上機(jī)。</p><p>  2 系統(tǒng)驗(yàn)證卡號(hào),檢查卡中余額,卡狀態(tài)</p><p>  3系統(tǒng)獲取當(dāng)前系統(tǒng)時(shí)間作為上機(jī)開始時(shí)間</p><p>  4 系統(tǒng)修改該機(jī)器的使用標(biāo)志為“在用”,卡標(biāo)志為“在用”。</p><p>  5 系統(tǒng)記錄上機(jī)信息(卡號(hào)、機(jī)器號(hào)、上機(jī)時(shí)間)</p>&

10、lt;p>  6 系統(tǒng)提示上機(jī)成功</p><p>  若1中無(wú)空閑機(jī)器又請(qǐng)求上機(jī)的,系統(tǒng)提示“沒(méi)用空閑機(jī)器”,</p><p>  2中卡驗(yàn)證未通過(guò),提示“無(wú)此卡號(hào)”,余額不足,提示“余額不足”,卡狀態(tài)為“在用”,則提示“不能一卡多用”。</p><p><b>  二 下機(jī)</b></p><p>  1 管理

11、員選擇被使用的機(jī)器號(hào),請(qǐng)求下機(jī)</p><p>  2 系統(tǒng)獲取系統(tǒng)當(dāng)前時(shí)間作為下機(jī)時(shí)間;</p><p><b>  3 系統(tǒng)計(jì)算費(fèi)用;</b></p><p>  4 系統(tǒng)顯示應(yīng)繳費(fèi)用</p><p>  5 系統(tǒng)記錄下機(jī)時(shí)間和此次費(fèi)用;</p><p>  6 系統(tǒng)從卡中扣費(fèi),修改卡狀態(tài)為“

12、空閑”;</p><p>  7 系統(tǒng)修改該機(jī)器的狀態(tài)為“空閑”;</p><p>  8系統(tǒng)顯示本次上機(jī)記錄信息,提示下機(jī)成功</p><p><b>  三 登錄</b></p><p>  1 管理員輸入用戶名和密碼,請(qǐng)求進(jìn)入系統(tǒng)</p><p>  2 系統(tǒng)驗(yàn)證用戶名和密碼</p&g

13、t;<p><b>  3 系統(tǒng)顯示主界面</b></p><p>  若一次驗(yàn)證不通過(guò),則提示再輸入一次,仍不通過(guò)則系統(tǒng)退出。</p><p><b>  四 卡維護(hù)</b></p><p>  卡有三種狀態(tài):停用、空閑、在用。</p><p><b>  發(fā)新卡:<

14、/b></p><p>  1 管理員輸入卡號(hào)(保證卡號(hào)唯一)</p><p>  2 管理員輸入卡初始金額</p><p>  3 上網(wǎng)人輸入用戶名、口令</p><p>  4 管理員請(qǐng)求添加新卡</p><p>  5 系統(tǒng)保存卡號(hào)、金額、用戶名和密碼,狀態(tài)為“空閑”</p><p>

15、;  6 系統(tǒng)提示添卡成功,顯示卡號(hào)及金額,以便核對(duì)。</p><p>  7管理員將系統(tǒng)生成的有卡號(hào)、用戶名的紙卡給上網(wǎng)人。</p><p><b>  充值:</b></p><p><b>  1 管理員輸入卡號(hào)</b></p><p>  2 系統(tǒng)顯示該卡信息(卡號(hào)、用戶名、余額、狀態(tài))&l

16、t;/p><p>  3 管理員核對(duì)后,輸入充值金額</p><p>  4 系統(tǒng)計(jì)算并保存該卡總金額</p><p>  5 系統(tǒng)顯示充值后的卡信息(卡號(hào)、用戶名、余額、狀態(tài))。</p><p><b>  查詢卡信息:</b></p><p>  1 管理員輸入卡號(hào)或請(qǐng)求察看所有卡信息</p

17、><p>  2 系統(tǒng)查詢卡信息(卡號(hào)、用戶名、余額)并顯示</p><p><b>  刪除卡:</b></p><p><b>  1管理員輸入卡號(hào)</b></p><p>  2 系統(tǒng)查詢卡余額及狀態(tài)</p><p>  3 若余額已結(jié)清且狀態(tài)為“空閑”,則將該卡信息刪除&

18、lt;/p><p>  4 系統(tǒng)提示刪除成功</p><p>  若有余額或“在用”則不能刪除</p><p><b>  五 機(jī)器維護(hù)</b></p><p>  機(jī)器有三種狀態(tài):停用、空閑、在用。</p><p><b>  添加機(jī)器:</b></p><

19、p>  1 管理員輸入機(jī)器號(hào),請(qǐng)求添加</p><p>  2 系統(tǒng)驗(yàn)證機(jī)器號(hào)是否重復(fù)</p><p>  3 系統(tǒng)添加機(jī)器記錄信息(機(jī)器號(hào)、狀態(tài)為“空閑”)</p><p>  4 系統(tǒng)提示添加成功</p><p><b>  刪除機(jī)器:</b></p><p>  1 管理員輸入機(jī)器號(hào),

20、請(qǐng)求刪除</p><p>  2 系統(tǒng)刪除相應(yīng)機(jī)器信息</p><p>  3 系統(tǒng)提示刪除成功</p><p><b>  查詢機(jī)器狀態(tài):</b></p><p>  1管理員輸入機(jī)器號(hào)或請(qǐng)求察看所有機(jī)器信息</p><p>  2 系統(tǒng)查詢并顯示機(jī)器信息(機(jī)器號(hào)和狀態(tài))并顯示</p>

21、;<p><b>  六 管理員口令管理</b></p><p><b>  添加用戶</b></p><p>  1 管理員輸入用戶名、密碼和確認(rèn)密碼,請(qǐng)求添加</p><p>  2 系統(tǒng)驗(yàn)證用戶是否是新用戶,兩次輸入的密碼是否相同</p><p>  3 系統(tǒng)添加用戶、密碼信息&

22、lt;/p><p>  4 系統(tǒng)提示添加成功</p><p><b>  刪除用戶</b></p><p>  1 管理員輸入用戶名、密碼</p><p>  2 系統(tǒng)驗(yàn)證用戶名、密碼是否正確</p><p>  3 系統(tǒng)刪除用戶名、密碼記錄</p><p>  4 系統(tǒng)提示刪

23、除成功</p><p><b>  修改密碼</b></p><p>  1管理員輸入用戶名、密碼,請(qǐng)求修改密碼</p><p>  2 系統(tǒng)驗(yàn)證用戶名、密碼是否正確</p><p>  3 管理員輸入新密碼、及確認(rèn)密碼</p><p><b>  4 系統(tǒng)保存新密碼</b>

24、</p><p>  5 系統(tǒng)提示修改成功</p><p><b>  七 統(tǒng)計(jì)管理</b></p><p>  1 管理員輸入起始時(shí)間(年、月、日),結(jié)束時(shí)間,請(qǐng)求按日、月、年匯總</p><p>  2 系統(tǒng)查詢上網(wǎng)記錄,計(jì)算、統(tǒng)計(jì)出時(shí)間段的總費(fèi)用、人次、總上機(jī)時(shí)間等信息。</p><p&g

25、t;  3 系統(tǒng)顯示上述信息</p><p><b>  八 參數(shù)管理</b></p><p><b>  時(shí)段費(fèi)率設(shè)置:</b></p><p>  0 系統(tǒng)顯示當(dāng)前設(shè)置</p><p>  1 管理員設(shè)置時(shí)間段(時(shí)、分)及對(duì)應(yīng)的費(fèi)率,請(qǐng)求保存</p><p><b

26、>  2 系統(tǒng)保存設(shè)置</b></p><p>  3 系統(tǒng)提示保存成功</p><p>  超時(shí)報(bào)警定時(shí)器間隔設(shè)置</p><p><b>  九 超時(shí)超費(fèi)報(bào)警</b></p><p>  1 設(shè)置定時(shí)器為周期觸發(fā)方式,觸發(fā)間隔由參數(shù)獲得,默認(rèn)為30分鐘</p><p>  2

27、 定時(shí)器到時(shí),系統(tǒng)查詢當(dāng)前正在上機(jī)的記錄,計(jì)算其上機(jī)時(shí)間及費(fèi)用,計(jì)算其卡中余額是否低于最低費(fèi)用。</p><p>  3 系統(tǒng)提示已超費(fèi)卡號(hào)、機(jī)器號(hào),及超的費(fèi)用</p><p>  本系統(tǒng)除了功能性需求,還有易用性、可靠性、安全性等要求,可以在實(shí)現(xiàn)上述功能性需求的基礎(chǔ)上,進(jìn)一步實(shí)現(xiàn)完善非功能性要求。</p><p>  友情提示:本文使用“用例”法分析功能性需求,屬

28、于面向?qū)ο蠓治觯∣OA)法,其實(shí)質(zhì)就是從用戶角度,通過(guò)觀察、與用戶交談等方式,記錄下用戶希望如何使用系統(tǒng),系統(tǒng)相應(yīng)需要實(shí)現(xiàn)哪些功能。分析用戶需求一般由系統(tǒng)分析人員完成,其核心能力是熟練掌握業(yè)務(wù)領(lǐng)域的知識(shí)和溝通的技巧,需求分析的最大難點(diǎn)在于需求的可變性,最令開發(fā)人員氣餒的莫過(guò)于辛苦設(shè)計(jì)實(shí)現(xiàn)了一個(gè)功能,用戶突然說(shuō)不需要這個(gè)功能了,另一個(gè)常見(jiàn)的問(wèn)題是隱蔽性的需求(行業(yè)慣例、日常規(guī)則)常被用戶和分析人員忽略。不同的需求對(duì)于客戶而言重要性是不同的

29、,一般需要對(duì)需求劃分優(yōu)先級(jí),優(yōu)先級(jí)高的優(yōu)先設(shè)計(jì)實(shí)現(xiàn)。你能否從上述一到九大用例描述中找出哪些用例是高優(yōu)先級(jí)的?</p><p>  1.2.2 業(yè)務(wù)對(duì)象分析</p><p>  根據(jù)上面的主要用例描述,可以分析出系統(tǒng)的主要業(yè)務(wù)對(duì)象,它是設(shè)計(jì)階段核心類圖的基礎(chǔ)(不一定一一對(duì)應(yīng)),這些對(duì)象必須實(shí)際存在,其行為和屬性應(yīng)與問(wèn)題領(lǐng)域相關(guān):</p><p>  1 上網(wǎng)卡: 主要

30、維護(hù)上網(wǎng)卡的相關(guān)信息??ㄌ?hào)、密碼、余額、卡用戶名、卡狀態(tài)(在用、空閑、停用) </p><p>  2 機(jī)器:主要維護(hù)上網(wǎng)吧計(jì)算機(jī)的相關(guān)信息。機(jī)器號(hào)、使用標(biāo)志(在用、停用、空閑)、備注</p><p>  3 費(fèi)用記錄:記錄每次上機(jī)的信息。記錄編號(hào)、卡號(hào)、機(jī)器號(hào)、開始上機(jī)時(shí)間,下機(jī)時(shí)間、費(fèi)用 </p><p>  4 費(fèi)率記錄:起始時(shí)間、終止時(shí)間,

31、費(fèi)率</p><p>  5 管理員: 利用1—4完成各種業(yè)務(wù)操作。</p><p>  1.2.3 驗(yàn)收測(cè)試要求</p><p>  用戶要求開發(fā)產(chǎn)品,產(chǎn)品開發(fā)完成后,需要交付用戶驗(yàn)收,驗(yàn)收要求常常是合同中的重要組成部分,這是一個(gè)必經(jīng)的環(huán)節(jié),主要思路是按照用戶使用的過(guò)程測(cè)試系統(tǒng),越頻繁使用的功能越要多測(cè)試。本系統(tǒng)功能性需求驗(yàn)收測(cè)試的基本要求如下:</p>

32、;<p><b>  前置條件:</b></p><p>  1 除口令表有初始用戶名和密碼外,各庫(kù)表為空。</p><p>  2 程序安裝配置正確,能正常啟動(dòng)運(yùn)行。</p><p><b>  一 初始化數(shù)據(jù)</b></p><p>  1 啟動(dòng)程序,進(jìn)入“卡維護(hù)”,選“發(fā)新卡”,

33、輸入一條數(shù)據(jù)記錄,退出,進(jìn)入“信息瀏覽”,查看記錄是否已被正確加入;退出“信息瀏覽”,再進(jìn)入“發(fā)新卡”,連續(xù)發(fā)3張卡,其中有張卡余額為0;再進(jìn)入“信息瀏覽”,查看記錄是否已被正確加入。</p><p>  2 同理按1 ,添加機(jī)器。</p><p>  3 進(jìn)入“費(fèi)率維護(hù)”,設(shè)置費(fèi)率。</p><p><b>  二 功能測(cè)試</b></

34、p><p>  1 上下機(jī)測(cè)試。進(jìn)入“上機(jī)”,觀察上機(jī)界面,有無(wú)可用機(jī)器,按說(shuō)明操作上機(jī),連續(xù)上機(jī)3次,第一次正確輸入,第二次輸入不存在的卡號(hào),第三次輸入錯(cuò)誤口令;進(jìn)入“下機(jī)”界面,看有無(wú)正確的上機(jī),連續(xù)下機(jī)兩次。觀察輸出信息界面,看內(nèi)容是否正確(金額、卡號(hào),時(shí)間,費(fèi)用)。已下機(jī)器是否已被同步從上機(jī)下拉表中清除。再進(jìn)入“上機(jī)”,比對(duì)可選空閑機(jī)器是否正確,輸入已上機(jī)用戶的卡號(hào),觀察結(jié)果;輸入卡金額不足的卡號(hào),觀察結(jié)果;

35、不輸入任何值,直接按確認(rèn)的結(jié)果。</p><p>  2 統(tǒng)計(jì)測(cè)試,進(jìn)入“統(tǒng)計(jì)”功能,按日,月,年查詢統(tǒng)計(jì),與庫(kù)中實(shí)際數(shù)據(jù)比對(duì),不同日、月、年分別查2次</p><p>  3進(jìn)入“卡維護(hù)”,進(jìn)入“卡充值“,輸入余額不足卡號(hào),給卡充值,進(jìn)入“信息瀏覽”,查看卡充值是否正確,并以此卡號(hào)上機(jī);再進(jìn)入“卡維護(hù)”的“信息瀏覽”,查看記錄;然后選“刪除卡”,連續(xù)刪2張卡,應(yīng)不能刪除在線卡,并能標(biāo)識(shí)出

36、卡余額,以便清帳;進(jìn)入“信息瀏覽”,查看記錄是否已被正確刪除。正在上機(jī)的不能被刪除。選“修改密碼”,輸入正確的用戶名、口令,修改成新口令;進(jìn)入“信息瀏覽”,查看口令是否已更改;進(jìn)入“上機(jī)”,以新口令上機(jī)。</p><p>  4 同3測(cè)試“機(jī)器維護(hù)”中的刪除機(jī)器功能,應(yīng)不能刪除在線機(jī)器</p><p>  5 測(cè)試“費(fèi)率維護(hù)”,退出程序,重啟動(dòng),進(jìn)入“費(fèi)率維護(hù)”,修改費(fèi)率,上下機(jī),觀察費(fèi)用

37、計(jì)算結(jié)果。</p><p>  6 測(cè)試超時(shí)報(bào)警功能:發(fā)一張新卡,初始額剛達(dá)到最低標(biāo)準(zhǔn),以此卡上機(jī),為縮短超時(shí)等待時(shí)間,可設(shè)置定時(shí)器間隔為1分鐘,等待2分鐘,看系統(tǒng)是否能正確報(bào)警。</p><p>  7 測(cè)試幫助功能。按照幫助說(shuō)明使用系統(tǒng),驗(yàn)證幫助說(shuō)明的正確性。</p><p>  友情提示:測(cè)試是保證程序質(zhì)量的基本手段,一般可分為單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試、驗(yàn)

38、收測(cè)試,其中驗(yàn)收測(cè)試一般由用戶在真實(shí)的運(yùn)行環(huán)境下測(cè)試系統(tǒng),是用戶確認(rèn)系統(tǒng)符合要求的關(guān)鍵環(huán)節(jié),你開發(fā)的系統(tǒng)必須通過(guò)上述最基本的驗(yàn)收測(cè)試。并不是整個(gè)系統(tǒng)完成后才可以進(jìn)行上述測(cè)試,完成相應(yīng)模塊后就可以有針對(duì)性地測(cè)試,驗(yàn)收測(cè)試的內(nèi)容經(jīng)過(guò)分解后是單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試的基本依據(jù),測(cè)試工作并不是從編碼時(shí)才開始的,在需求分析階段就已展開(如根據(jù)用例提出驗(yàn)收測(cè)試要求)。有的IT公司內(nèi)部的質(zhì)量部門在產(chǎn)品正式交付用戶前,也會(huì)做類似的測(cè)試,以保證用戶驗(yàn)

39、收時(shí)一次通過(guò)。</p><p><b>  1.3 系統(tǒng)設(shè)計(jì)</b></p><p>  1.3.1 總體設(shè)計(jì)</p><p><b>  一 系統(tǒng)體系結(jié)構(gòu)</b></p><p>  一般要確定系統(tǒng)的體系結(jié)構(gòu),主要模塊,系統(tǒng)運(yùn)行環(huán)境(如操作系統(tǒng)、數(shù)據(jù)庫(kù)),開發(fā)平臺(tái)及語(yǔ)言。本系統(tǒng)主要運(yùn)行在windo

40、ws系列平臺(tái)上,數(shù)據(jù)庫(kù)使用ACCESS,使用eclipse開發(fā)系統(tǒng)。采用兩層C/S體系結(jié)構(gòu)。系統(tǒng)體系結(jié)構(gòu)圖如下圖所示:</p><p><b>  圖1 系統(tǒng)體系結(jié)構(gòu)</b></p><p>  客戶端分3層,圖形界面層(采用java的SWING設(shè)計(jì))負(fù)責(zé)與用戶交互,業(yè)務(wù)邏輯層則根據(jù)用戶的請(qǐng)求執(zhí)行各種功能(如上、下機(jī)等),數(shù)據(jù)訪問(wèn)層主要根據(jù)業(yè)務(wù)邏輯層的請(qǐng)求通過(guò)JDBC

41、/SQL存取數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)使用ACCESS,可根據(jù)情況使用其他數(shù)據(jù)庫(kù)(如SQL Server),客戶端基本不做修改,僅有的少量修改也只在數(shù)據(jù)訪問(wèn)層。客戶端與服務(wù)端在物理上可以運(yùn)行在一臺(tái)機(jī)器上,也可以分別運(yùn)行在不同機(jī)器上。</p><p>  二 系統(tǒng)功能模塊及主要類</p><p>  系統(tǒng)的主要功能模塊如圖2所示:</p><p><b>  圖2 系統(tǒng)

42、模塊圖</b></p><p>  可據(jù)此設(shè)計(jì)菜單,劃分模塊。</p><p><b>  系統(tǒng)主要類圖如下:</b></p><p><b>  圖 3</b></p><p>  總類圖的畫法基本遵循視圖層、業(yè)務(wù)邏輯層、數(shù)據(jù)模型及數(shù)據(jù)庫(kù)訪問(wèn)層的自上而下的順序,其中視圖層中的視圖因?yàn)檩^

43、多未畫出,主要的業(yè)務(wù)邏輯控制類是BusinessManager,用戶的上下機(jī)請(qǐng)求,通過(guò)界面的事件機(jī)制,在事件處理程序中會(huì)調(diào)用BusinessManager中的方法,然后再調(diào)用xDAO類方法,在xDAO類中一般先通過(guò)DBConnection獲取連接,再通過(guò)JDBC/SQL訪問(wèn)數(shù)據(jù)庫(kù)。Card\Computer\Record\Manager類是“值對(duì)象”,主要是存放相應(yīng)的屬性,方法也是setX\getX類方法,“值對(duì)象”常作為參數(shù)在各種方法

44、中傳遞。</p><p><b>  三 經(jīng)驗(yàn)共享</b></p><p>  1 客戶端基本采用三層結(jié)構(gòu)(視圖View、控制Controller、模型Mode),層與層間耦合性較小,提高了整體的可擴(kuò)展性、可重用及抗變動(dòng)能力。缺點(diǎn)是要求預(yù)先設(shè)計(jì)好,對(duì)設(shè)計(jì)水平要求高,不過(guò)一旦形成模式,養(yǎng)成習(xí)慣,能“照葫蘆畫瓢”,也是提高設(shè)計(jì)水平的捷徑。</p><p

45、>  2 使用xDAO類將業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)訪問(wèn)隔離,只要xDAO對(duì)上提供的接口不變,以后數(shù)據(jù)庫(kù)存取代碼發(fā)生改變也不會(huì)影響上層代碼(如業(yè)務(wù)邏輯層)。接口中的參數(shù)主要是“值對(duì)象”,這樣即使Card\Computer\Record\Manager類中的屬性發(fā)生改變,由于“值對(duì)象”的封裝,對(duì)接口的影響也不大,缺點(diǎn)是如果“值對(duì)象”本身很大,而又只用到其中很少的屬性,則對(duì)性能和內(nèi)存浪費(fèi)較大。與此對(duì)應(yīng),比較一般的設(shè)計(jì)是在事件處理代碼中就實(shí)現(xiàn)業(yè)務(wù)

46、邏輯(如驗(yàn)證、計(jì)算、上下機(jī))、</p><p>  獲取數(shù)據(jù)庫(kù)連接并通過(guò)JDBC訪問(wèn)數(shù)據(jù)庫(kù),這樣做的好處是實(shí)現(xiàn)較容易、符合一般過(guò)程性思維(常用于初始的或原型系統(tǒng)的開發(fā)中),缺點(diǎn)是代碼一旦需要修改,則改動(dòng)較多、且容易出錯(cuò),代碼重用性差。</p><p>  3 使用DBConnection類統(tǒng)一完成連接的獲取和釋放,好處是連接部分代碼可重復(fù)使用,如果連接參數(shù)(如連到不同的數(shù)據(jù)庫(kù))改動(dòng),只需更

47、改DBConnection類中的相關(guān)參數(shù)屬性(當(dāng)然更好的做法是將這些連接參數(shù)放在配置文件中,這樣可以只修改配置文件,無(wú)需修改程序),另外還可以為了提高性能擴(kuò)展成“連接池”,同時(shí)對(duì)使用它的xDAO類沒(méi)有影響。</p><p>  友情提示:如果你不能理解上述描述,也不必?fù)?dān)心,按照你的直覺(jué)去開發(fā)系統(tǒng),如果你一帆風(fēng)順,那么你肯定是這方面的天才,如果遇到各種問(wèn)題,上述的文字可供參考,同學(xué)之間可以互相交流,老師也樂(lè)意為你效

48、勞,勤思、善問(wèn)、實(shí)干是快速提高水平的不二法門。</p><p>  1.3.2 詳細(xì)設(shè)計(jì)</p><p>  詳細(xì)設(shè)計(jì)主要是關(guān)注模塊一級(jí)的設(shè)計(jì),一般有界面,核心算法及處理流程,數(shù)據(jù)庫(kù)表(表、屬性及表間關(guān)系)的設(shè)計(jì)。由于模塊較多,下面選擇幾個(gè)典型模塊分析設(shè)計(jì),其中“經(jīng)驗(yàn)共享”,揭示難點(diǎn)的同時(shí),也介紹了相應(yīng)的解決方法及設(shè)計(jì)經(jīng)驗(yàn)。</p><p>  1.3.2.1 數(shù)據(jù)

49、庫(kù)設(shè)計(jì)</p><p>  數(shù)據(jù)庫(kù)設(shè)計(jì)主要是根據(jù)分析和概要設(shè)計(jì)中發(fā)現(xiàn)的對(duì)象和類,確定哪些對(duì)象需要持久保存,然后將對(duì)象屬性及對(duì)象間關(guān)系轉(zhuǎn)化成關(guān)系表。經(jīng)過(guò)分析Card、Computer、Record、Manger需要保存在數(shù)據(jù)庫(kù)中,將Config參數(shù)配置信息保存在文件中。其中Card、Computer、Record的關(guān)系如下圖所示:</p><p>  圖 持久對(duì)象屬性及關(guān)系圖</

50、p><p>  一條Record記錄必有對(duì)應(yīng)的一個(gè)Card及一臺(tái)Computer,對(duì)于未用機(jī)器及卡,則沒(méi)有對(duì)應(yīng)的記錄。將其轉(zhuǎn)換為關(guān)系表時(shí),關(guān)鍵是在Record中設(shè)置CARDID,COMPUTERID作為外鍵指向Card和Computer。共設(shè)計(jì)出四張表:</p><p><b>  1.CARD 表</b></p><p>  2.COMPUTER

51、 表</p><p>  3.RECORD 表</p><p>  4. Manager 表</p><p>  經(jīng)驗(yàn)共享:數(shù)據(jù)庫(kù)設(shè)計(jì)一般相對(duì)獨(dú)立,采用的主要方法是將對(duì)象模型轉(zhuǎn)化為數(shù)據(jù)庫(kù)關(guān)系模型,也可以采用傳統(tǒng)的設(shè)計(jì)出E-R圖,再定關(guān)系表的方法。即使是簡(jiǎn)單數(shù)據(jù)庫(kù)的設(shè)計(jì)若從實(shí)用角度出發(fā)也需要考慮多方面的問(wèn)題。首先基本的是確定有哪幾張表,表間關(guān)系,然后是表中的字段,比較

52、麻煩的是確定字段的約束(主鍵、非空等),字段數(shù)據(jù)類型,范式的調(diào)整等,因?yàn)榇藭r(shí)會(huì)考慮到存儲(chǔ)空間、性能、易編程、數(shù)據(jù)質(zhì)量等方面的因素。</p><p>  如定義“用戶名”字段要有多大,就需要在存儲(chǔ)空間節(jié)省和適應(yīng)性間權(quán)衡,定義的較小,遇到長(zhǎng)名字的情況,程序不能適應(yīng);定義的過(guò)大,對(duì)于大多數(shù)情況可能又會(huì)浪費(fèi)存儲(chǔ)空間,一般寧愿定義的大些,以空間換取適應(yīng)性。</p><p>  再比如確定哪些字段為“

53、非空”,從編程角度看必須保證“非空”字段有值,這會(huì)增加驗(yàn)證“非空”字段程序的代碼量,對(duì)用戶的約束也加強(qiáng),有些值要求用戶必須輸入,如口令就不能為空。但若允許字段可以為“空”,如機(jī)器狀態(tài)字段,則機(jī)器的當(dāng)前狀態(tài)就可能難以確定,影響數(shù)據(jù)質(zhì)量。一個(gè)基本的方向是“約束”多,則編程的代碼量會(huì)變大,性能會(huì)下降,但數(shù)據(jù)的質(zhì)量會(huì)得到提高。在Record表中“下機(jī)時(shí)間”和“上機(jī)費(fèi)用”沒(méi)有定義為“非空”,是因?yàn)樯蠙C(jī)時(shí)這兩項(xiàng)不能確定,只能填寫部分上機(jī)記錄信息。&

54、lt;/p><p>  一般數(shù)據(jù)庫(kù)表結(jié)構(gòu)的變動(dòng)對(duì)于程序的影響較大,在程序設(shè)計(jì)上可通過(guò)xDAO類盡量消減變動(dòng)的影響,在實(shí)現(xiàn)階段應(yīng)避免對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)大的改動(dòng)。</p><p>  1.3.2.2 上機(jī)模塊設(shè)計(jì)</p><p><b>  一 界面設(shè)計(jì)</b></p><p>  界面設(shè)計(jì)主要是根據(jù)功能要求構(gòu)建界面,界面中的每個(gè)元素

55、均應(yīng)有其作用,以支持功能的實(shí)現(xiàn),界面設(shè)計(jì)還要考慮到界面風(fēng)格的一致、符合一般window應(yīng)用GUI的規(guī)范。設(shè)計(jì)應(yīng)簡(jiǎn)潔實(shí)用,避免在細(xì)節(jié)上(如字體、顏色)耗費(fèi)時(shí)間。上機(jī)模塊參考界面如圖4所示:</p><p><b>  圖4 參考界面</b></p><p><b>  二 上機(jī)流程</b></p><p><b>

56、  1 初始化</b></p><p><b> ?。?) 顯示界面</b></p><p><b> ?。?)獲取空閑機(jī)器</b></p><p> ?。?) 將空閑機(jī)器號(hào)加入下拉列表</p><p><b>  2 上機(jī)處理過(guò)程:</b></p>

57、<p> ?。?)驗(yàn)證機(jī)器號(hào)、卡號(hào)、密碼是否為空</p><p>  (2)根據(jù)卡號(hào)、密碼獲取卡對(duì)象</p><p>  (3) 若卡對(duì)象為空則說(shuō)明卡號(hào)或密碼錯(cuò),給出提示“卡號(hào)或密碼錯(cuò)”,要求重輸</p><p> ?。?)判斷卡狀態(tài),若卡正在使用則給出提示“不能一卡多用”</p><p> ?。?)計(jì)算卡中余額,若低于設(shè)定值,則提

58、示“余額不足”</p><p> ?。?)修改卡狀態(tài)為在用,修改機(jī)器狀態(tài)為在用,獲取上機(jī)時(shí)間,將上機(jī)時(shí)間、機(jī)器號(hào)、卡號(hào)保存到記錄對(duì)象,再通過(guò)RecordDAO在庫(kù)中添加一條新上網(wǎng)記錄。</p><p><b> ?。?)提示上網(wǎng)成功</b></p><p><b>  三 經(jīng)驗(yàn)共享</b></p><p

59、>  1 上機(jī)處理中的第6步要在一個(gè)完整的“事務(wù)”中完成,對(duì)卡、記錄、機(jī)器數(shù)據(jù)的更改添加要保證要么全部更改成功,要么都不更改,以保證數(shù)據(jù)的一致性。</p><p>  2 費(fèi)用計(jì)算是按時(shí)段計(jì)算的,需要考慮跨時(shí)段費(fèi)用如何計(jì)算,另外為了降低復(fù)雜性,可規(guī)定時(shí)段只能為三段,時(shí)間精確到分,費(fèi)用精確到角。</p><p>  3 記錄ID如何保證唯一且自動(dòng)增長(zhǎng)?;居袃煞N:一是編程控制,插入新記

60、錄前獲取當(dāng)前最大記錄號(hào),通過(guò)select max(id) from record,加1后,將ID及其它信息寫入,若有多用戶訪問(wèn)該表,則上述過(guò)程要放在一個(gè)“事務(wù)”中。二是利用關(guān)系數(shù)據(jù)庫(kù)提供的“自增字段”特性,將ID設(shè)置成“自增字段”,由數(shù)據(jù)庫(kù)負(fù)責(zé)每添加一條記錄就將ID加1。</p><p>  1.3.2.3 下機(jī)模塊設(shè)計(jì)</p><p><b>  一 界面設(shè)計(jì)</b>

61、;</p><p>  下機(jī)模塊主要根據(jù)用戶請(qǐng)求(報(bào)出卡號(hào)/機(jī)器號(hào)),管理員根據(jù)卡號(hào)/機(jī)器號(hào)執(zhí)行下機(jī)操作,參考界面如圖5所示,大的文本空白文本框用于顯示下機(jī)記錄信息。當(dāng)然還有其它的設(shè)計(jì)方式,如顯示當(dāng)前上機(jī)的所有記錄信息,選中其中一條執(zhí)行下機(jī)操作。</p><p>  圖 5 下機(jī)模塊界面</p><p><b>  二 下機(jī)流程</b><

62、/p><p>  1 管理員輸入機(jī)器號(hào)或卡號(hào),請(qǐng)求下機(jī)</p><p>  2 系統(tǒng)獲取機(jī)器號(hào),據(jù)機(jī)器號(hào)獲取相應(yīng)記錄對(duì)象,要處理機(jī)器號(hào)錯(cuò)誤的情況</p><p>  3 系統(tǒng)根據(jù)記錄對(duì)象獲取該記錄對(duì)應(yīng)的卡對(duì)象</p><p>  4 系統(tǒng)計(jì)算費(fèi)用,并比較卡對(duì)象余額,若不夠則提示“余額不足”,并顯示余額</p><p>  

63、5 系統(tǒng)從卡中扣費(fèi),修改卡狀態(tài)為“空閑”; 系統(tǒng)修改該機(jī)器的狀態(tài)為“空閑”;系統(tǒng)更新記錄信息(下機(jī)時(shí)間、費(fèi)用)。</p><p>  6 系統(tǒng)顯示本次上網(wǎng)完整的記錄(Record)信息及卡余額,并提示下機(jī)成功</p><p>  注: 下機(jī)處理4中修改三表的操作應(yīng)作為一個(gè)“事務(wù)”完成。</p><p>  1.3.2.4 發(fā)新卡模塊設(shè)計(jì)</p><

64、;p><b>  一 界面設(shè)計(jì)</b></p><p>  發(fā)卡需要輸入卡號(hào)、用戶名、密碼、金額,參考界面如下圖所示。界面設(shè)計(jì)布局應(yīng)簡(jiǎn)潔一致,從用戶友好性出發(fā),提供了輸入提示,增加了“確認(rèn)密碼”,以提醒用戶記住密碼,輸入的密碼用*號(hào)顯示以提高安全性。雖然有了提示但在代碼中仍需對(duì)輸入進(jìn)行驗(yàn)證,如金額不能為負(fù)值,以避免誤輸及惡意輸入。當(dāng)然從口令強(qiáng)度考慮,要求密碼只輸入數(shù)字和字母又是不妥的,

65、相反可提示用戶輸入特殊字符及輸入的最小字符數(shù)。所以此界面雖簡(jiǎn)單,但已涉及到界面的視覺(jué)風(fēng)格、用戶友好性、安全性考慮。</p><p><b>  圖 發(fā)卡界面</b></p><p><b>  二 發(fā)卡流程</b></p><p>  1 系統(tǒng)從界面獲取所有信息,依次判斷是否為空</p><p>

66、  2 判斷金額是否大于0</p><p>  3 判斷密碼和確認(rèn)密碼是否一致,</p><p>  4 判斷密碼和用戶名是否在最小及最大長(zhǎng)度之間</p><p>  5 判斷卡號(hào)是否有效(唯一)</p><p>  6 生成Card對(duì)象,請(qǐng)求CardDao向Card表中添加一條新記錄。</p><p>  7 提示卡

67、添加成功,并顯示卡號(hào)和金額</p><p><b>  三 經(jīng)驗(yàn)共享</b></p><p>  1 輸入數(shù)據(jù)的驗(yàn)證是難點(diǎn),驗(yàn)證輸入數(shù)據(jù)是保證程序可靠性的重要措施,例如:若不限制用戶或口令長(zhǎng)度在相應(yīng)數(shù)據(jù)庫(kù)表字段設(shè)定的范圍內(nèi),一旦將超長(zhǎng)的用戶名寫入數(shù)據(jù)庫(kù)則會(huì)產(chǎn)生數(shù)據(jù)被截?cái)嗷驍?shù)據(jù)庫(kù)異常,而這完全可以在用戶輸入時(shí)予以控制。驗(yàn)證輸入數(shù)據(jù)的難點(diǎn)之一在于在驗(yàn)證的代碼量和限制大多數(shù)

68、常見(jiàn)錯(cuò)誤間取得平衡,過(guò)多地驗(yàn)證代碼無(wú)疑會(huì)增加編碼量和難度,但沒(méi)有驗(yàn)證或很少驗(yàn)證又使程序可靠性太差而難以實(shí)用。但也有一些常規(guī)經(jīng)驗(yàn)可循,如是否限定字符數(shù)據(jù)的長(zhǎng)度,驗(yàn)證是否為空、數(shù)字?jǐn)?shù)據(jù)是否在范圍內(nèi)等,有些輸入控件提供了限定輸入長(zhǎng)度等功能,應(yīng)該充分利用以減少編碼量。</p><p>  一般驗(yàn)證可遵循如下策略:輸入前提示如何輸入,輸入后驗(yàn)證,驗(yàn)證不通過(guò)則再提示(如通過(guò)對(duì)話框)。輸入驗(yàn)證的時(shí)機(jī):可以在輸入一項(xiàng)后立即驗(yàn)證該

69、項(xiàng)輸入是否合法,也可以全部輸完后再逐項(xiàng)驗(yàn)證,某項(xiàng)若驗(yàn)證不通過(guò),除給出提示,從用戶友好性角度,還可以將焦點(diǎn)定位到出錯(cuò)項(xiàng)(缺點(diǎn)是代碼復(fù)雜性增加)。驗(yàn)證通過(guò)后的數(shù)據(jù)在程序內(nèi)部傳遞時(shí),一般無(wú)需重復(fù)驗(yàn)證。</p><p>  2 卡號(hào)的獲取。最基本的方式由管理員手工編號(hào)并保證卡號(hào)的唯一性,但卡一旦多了,這會(huì)成為管理員的負(fù)擔(dān),因此,可以由系統(tǒng)自動(dòng)編號(hào),如規(guī)定卡號(hào)從1依次遞增編號(hào),這樣卡號(hào)就無(wú)需輸入。可在每次增加新卡時(shí),從卡表

70、中獲取最大ID,加1后作為新增卡的卡號(hào)。也可以獲取當(dāng)前時(shí)間轉(zhuǎn)化成字符串作為ID,一般時(shí)間不會(huì)重復(fù),可保證ID唯一,優(yōu)點(diǎn)是生成ID無(wú)需訪問(wèn)數(shù)據(jù)庫(kù),還可以代表發(fā)卡時(shí)間。</p><p><b>  刪除卡模塊設(shè)計(jì)</b></p><p><b>  一 界面設(shè)計(jì)</b></p><p>  刪除卡參考界面如下圖所示:</

71、p><p><b>  圖 刪除卡界面</b></p><p><b>  二 刪除卡流程</b></p><p><b>  1管理員輸入卡號(hào)</b></p><p>  2 系統(tǒng)根據(jù)卡號(hào),請(qǐng)求CardDAO查詢有無(wú)該卡</p><p>  3 若返回的卡

72、對(duì)象存在,則執(zhí)行下一步,否則提示“卡號(hào)錯(cuò)誤”,要求重輸。</p><p>  4 系統(tǒng)從Card查詢卡狀態(tài)</p><p>  5 若為“在用”,則提示“不能刪除在用卡”</p><p>  6 查詢余額,若有則對(duì)話框提示“請(qǐng)結(jié)清余額”</p><p>  7 若余額已結(jié)清且狀態(tài)為“空閑”,則將該卡信息刪除</p><p&

73、gt;<b>  8系統(tǒng)提示刪除成功</b></p><p><b>  三 經(jīng)驗(yàn)共享</b></p><p>  1 如何刪除卡:一種是真刪,卡記錄信息從數(shù)據(jù)庫(kù)中永久刪除,采用delete from where 語(yǔ)句,此時(shí)還要注意,由于Record中有指向Card表的外鍵,刪除涉及到“級(jí)連刪除”這一概念,即在Record中包含該卡號(hào)的記錄是否要

74、一起刪除。一般不允許“級(jí)連刪除”,因?yàn)镽ecord中記錄是統(tǒng)計(jì)費(fèi)用的基本依據(jù),刪除后會(huì)使統(tǒng)計(jì)數(shù)據(jù)失真。還有一種是假刪,即標(biāo)注卡狀態(tài)信息為“停用”,只需用update語(yǔ)句更改其狀態(tài)即可,這樣做好處是:一是可以完整保留已發(fā)卡信息,二是易于重新恢復(fù)已刪卡。壞處是:若有大量卡(數(shù)以十萬(wàn)計(jì))長(zhǎng)期不用,會(huì)占用數(shù)據(jù)庫(kù)空間,影響訪問(wèn)卡表的性能。</p><p>  2 一般數(shù)據(jù)庫(kù)中數(shù)據(jù)刪除后難以恢復(fù),同時(shí)難以避免因?yàn)橐馔鈱?dǎo)致的數(shù)

75、據(jù)損壞,因此重要數(shù)據(jù)的保存?zhèn)浞荼夭豢缮伲鞠到y(tǒng)沒(méi)有要求做數(shù)據(jù)備份功能,因?yàn)閿?shù)據(jù)庫(kù)管理工具一般會(huì)提供相應(yīng)功能,只是要求用戶會(huì)使用數(shù)據(jù)庫(kù)管理工具,所以從方便用戶使用考慮,程序本身提供備份(手動(dòng)或定期自動(dòng)備份)功能也是必要的。</p><p><b>  1.4 系統(tǒng)實(shí)現(xiàn)</b></p><p>  系統(tǒng)實(shí)現(xiàn)主要運(yùn)用集成開發(fā)環(huán)境、Java、數(shù)據(jù)庫(kù)工具根據(jù)設(shè)計(jì)制做出實(shí)際的界面

76、,編寫代碼,生成數(shù)據(jù)庫(kù)表,進(jìn)行測(cè)試,這也是初級(jí)程序員所要完成的主要任務(wù),在此列出部分典型代碼,僅供參考。</p><p>  1.4.1 數(shù)據(jù)庫(kù)訪問(wèn)</p><p>  對(duì)數(shù)據(jù)庫(kù)的基本操作是:增、刪、改、查,數(shù)據(jù)庫(kù)連接的建立、關(guān)閉,其中的難點(diǎn)是訪問(wèn)數(shù)據(jù)庫(kù)的異常處理和參數(shù)化SQL,現(xiàn)舉例如下:</p><p>  1 獲取連接的代碼:</p><p

77、>  private static final String DRIVER_CLASS =</p><p>  "sun.jdbc.odbc.JdbcOdbcDriver"; //定義驅(qū)動(dòng)類</p><p>  private static final String DATASOURCE = "jdbc:odbc:NetBarDataSource&qu

78、ot;; //定義ODBC數(shù)據(jù)源</p><p>  public static Connection getConnction() {</p><p>  Connection dbConnection = null;</p><p><b>  try {</b></p><p>  Class.forName(D

79、RIVER_CLASS);</p><p>  dbConnection = DriverManager.getConnection(DATASOURCE);</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b&

80、gt;</p><p>  return dbConnection;</p><p><b>  }</b></p><p>  該代碼針對(duì)JdbcOdbcDriver驅(qū)動(dòng),ODBC源名為NetBarDataSource,未支持口令驗(yàn)證。 </p><p><b>  查詢代碼:</b></p

81、><p>  下面是根據(jù)用戶名和口令驗(yàn)證卡是否有效的代碼,需要注意的是查詢參數(shù)值需要加單引號(hào)‘’:</p><p><b>  /**</b></p><p>  * judge card is valid or not.</p><p>  * @param card Card</p><p>  

82、* @return boolean</p><p><b>  */</b></p><p>  public boolean isValid( Card card) {</p><p>  boolean isValid = false;</p><p>  Connection dbConnection = nul

83、l;</p><p>  PreparedStatement pStatement = null;</p><p>  ResultSet res = null;</p><p><b>  try {</b></p><p>  dbConnection = ConnectionManager.getConnction

84、();</p><p>  // 構(gòu)建查詢SQL語(yǔ)句</p><p>  String strSql = "select * from card where id='" + card.getId()</p><p>  + "' and password ='" + card.getPassword()

85、 + "'";</p><p>  if (dbConnection != null) {</p><p>  System.out.println(dbConnection != null);</p><p><b>  }</b></p><p><b>  //查詢操作<

86、/b></p><p>  pStatement = dbConnection.prepareStatement(strSql);</p><p>  res = pStatement.executeQuery();//執(zhí)行SQL語(yǔ)句,并返回結(jié)果</p><p>  if (res.next()) { //若res有記錄說(shuō)明卡存在</p>

87、<p>  isValid = true;</p><p><b>  }</b></p><p>  } catch (SQLException sqlE) {</p><p>  sqlE.printStackTrace();</p><p>  } finally {</p><p&g

88、t;  ConnectionManager.closeResultSet(res);//關(guān)閉結(jié)果集</p><p>  ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(dbConnection); //關(guān)閉連接</p><p><b>  }</b>

89、;</p><p>  return isValid;</p><p><b>  }</b></p><p><b>  更新代碼</b></p><p>  下面是更新機(jī)器狀態(tài)的代碼,其中SQL語(yǔ)句中,“id =(?)”是動(dòng)態(tài)參數(shù),具體值設(shè)置在pStatement.setString(1, co

90、mputer.getId())</p><p><b>  /**</b></p><p>  * record the computer have used.</p><p>  * @param computer Computer</p><p><b>  */</b></p>

91、<p>  public void updateOnUse( Computer computer) {</p><p>  Connection dbConnection = null;</p><p>  PreparedStatement pStatement = null;</p><p><b>  try {</b><

92、;/p><p>  String strSql =</p><p>  "update computer set Status =1 where id =(?) ; ";</p><p>  pStatement = dbConnection.prepareStatement(strSql);</p><p>  pState

93、ment.setString(1, computer.getId()); //設(shè)置機(jī)器號(hào)id參數(shù)</p><p>  pStatement.executeUpdate();</p><p>  } catch (SQLException sqlE) {</p><p>  sqlE.printStackTrace();</p><p>  }

94、 finally {</p><p>  ConnectionManager.closeStatement(pStatement);</p><p>  ConnectionManager.closeConnection(dbConnection);</p><p><b>  }</b></p><p><b&g

95、t;  }</b></p><p>  1.4.2 下機(jī)模塊</p><p>  在BusinessManager類中有一doCheckOut()方法是實(shí)現(xiàn)下機(jī)過(guò)程的關(guān)鍵。</p><p><b>  /**</b></p><p>  * do check out business.</p>

96、<p>  * @param rec Record,已有機(jī)器號(hào)值</p><p>  * @return ComsumeDisplayInfo含有上機(jī)記錄、對(duì)應(yīng)卡記錄</p><p><b>  */</b></p><p>  public static ComsumeDisplayInfo doCheckOut( Record r

97、ec) {</p><p>  RecordDAO dao = new RecordDAO();</p><p>  //獲取包含了下機(jī)記錄及對(duì)應(yīng)卡信息的ComsumeDisplayInfo</p><p>  ComsumeDisplayInfo result = dao.getStopCompouterRelationInfo(rec);</p>

98、<p>  Record record = result.getRecord();</p><p>  Card card = result.getCard();</p><p>  //計(jì)算本次上機(jī)的費(fèi)用</p><p>  int fee = calFee(record.getBeginTime(), record.getEndTime());<

99、/p><p>  record.setFee(fee);</p><p><b>  //計(jì)算余額</b></p><p>  int balance = card.getBalance() - fee;</p><p>  card.setId(record.getCardId());</p><p&g

100、t;  card.setBalance(balance);</p><p>  //將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)</p><p>  RecordDAO dao2 = new RecordDAO();</p><p>  dao2.doCheckOutDB(record, card);</p><p>  //返回含有上機(jī)記錄、CARD記錄的Comsum

101、eDisplayInfo,供界面顯示下機(jī)結(jié)果</p><p>  result.setRecord(record);</p><p>  result.setCard(card);</p><p>  return result;</p><p><b>  }</b></p><p>  1.4

102、.3 上機(jī)模塊</p><p>  處理請(qǐng)求上機(jī)的部分代碼如下,主要有界面數(shù)據(jù)(機(jī)器號(hào)、密碼、卡用戶號(hào))驗(yàn)證代碼;卡有效性、余額可用性驗(yàn)證。</p><p><b>  /**</b></p><p>  * deal business about click confirm button.</p><p>  * @p

103、aram e ActionEvent</p><p><b>  */</b></p><p>  void confirmButton_actionPerformed(ActionEvent e) {</p><p>  String cardId="";</p><p>  String pass

104、wordtemp = "";</p><p>  String computerId ="";</p><p>  //獲取機(jī)器號(hào),并去掉空格</p><p>  cardId = cardIdTextField.getText().trim();</p><p><b>  //獲取密碼&l

105、t;/b></p><p>  for(int i=0;i<passwordFiled.getPassword().length;i++){</p><p>  passwordtemp += passwordFiled.getPassword()[i];</p><p><b>  }</b></p><p&g

106、t;<b>  //獲取機(jī)器號(hào)</b></p><p>  computerId = computerIdCombox.getSelectedItem().toString();</p><p>  //判斷機(jī)器號(hào)是否為空,未填或只有空格 </p><p>  if(computerId==null || computerId.trim()

107、.length()==0){</p><p>  JOptionPane.showMessageDialog(this,"請(qǐng)選擇機(jī)器號(hào)!","警告",</p><p>  JOptionPane.WARNING_MESSAGE ,null );</p><p><b>  return ;</b><

108、/p><p><b>  }</b></p><p>  /判斷卡號(hào)是否為空,未填或只有空格</p><p>  if(cardId==null || cardId.length()==0){</p><p>  JOptionPane.showMessageDialog(this,"請(qǐng)輸入卡號(hào)!",&q

109、uot;警告",</p><p>  JOptionPane.WARNING_MESSAGE ,null );</p><p><b>  return ;</b></p><p><b>  }</b></p><p>  if(passwordtemp==null || passwor

110、dtemp.length()==0){</p><p>  JOptionPane.showMessageDialog(this,"請(qǐng)輸入密碼!","警告",</p><p>  JOptionPane.WARNING_MESSAGE ,null );</p><p><b>  return ;</b>

111、</p><p><b>  }</b></p><p>  //生成卡對(duì)象,并設(shè)置卡用戶名、口令、上機(jī)時(shí)間</p><p>  Card card = new Card();</p><p>  card.setId(cardId);</p><p>  card.setPassword(pas

112、swordtemp);</p><p>  Record record = new Record();</p><p>  record.setCardId(cardId);</p><p>  record.setComputerId(computerId);</p><p>  record.setBeginTime(dispalyNow

113、Time);</p><p>  //生成機(jī)器對(duì)象,更新機(jī)器狀態(tài)時(shí)用</p><p>  Computer computer = new Computer();</p><p>  computer.setId(computerId);</p><p>  //驗(yàn)證卡是否有效、余額是否夠,符合要求后調(diào)doCheckIn實(shí)際處理上機(jī)業(yè)務(wù)<

114、/p><p>  if(BusinessManager.cardIsValid(card)){</p><p>  if(BusinessManager.cardHaveBalance(card)){</p><p>  BusinessManager.doCheckIn(record,computer);</p><p><b>  

115、}else{</b></p><p>  JOptionPane.showMessageDialog(this,"卡余額不足,請(qǐng)充值!","警告", JOptionPane.WARNING_MESSAGE ,null );</p><p><b>  r

116、eturn ;</b></p><p><b>  }</b></p><p><b>  }else{</b></p><p>  JOptionPane.showMessageDialog(this,"卡號(hào)或者密碼不對(duì)!","警告",</p><p

117、>  JOptionPane.WARNING_MESSAGE ,null );</p><p>  System.out.println("卡號(hào)或者密碼不對(duì)");</p><p><b>  return;</b></p><p><b>  }</b></p><p> 

118、 1.4.4 幫助模塊</p><p>  在實(shí)現(xiàn)幫助功能時(shí),編碼上沒(méi)有難點(diǎn),基本上是一個(gè)簡(jiǎn)單的帶滾動(dòng)條的只讀文本瀏覽器,難在幫助文件的內(nèi)容如何寫?幫助文件是指導(dǎo)用戶如何操作系統(tǒng)的,內(nèi)容應(yīng)正確,語(yǔ)言應(yīng)對(duì)客戶簡(jiǎn)明易懂,最好輔以圖形說(shuō)明。做到這兩點(diǎn)并不容易,內(nèi)容正確要求寫幫助的人對(duì)系統(tǒng)的功能非常熟悉,簡(jiǎn)明易懂則充分體現(xiàn)出作者的文字功底。建議參考類似“記事本”(winodws主菜單-〉所有程序-〉附件-〉記事本)這樣的

119、程序,看它們的幫助是如何寫的。</p><p>  友情提示:客戶會(huì)根據(jù)幫助說(shuō)明來(lái)使用系統(tǒng),系統(tǒng)功能正確,但因?yàn)閹椭f(shuō)明錯(cuò)誤導(dǎo)致的問(wèn)題甚至官司比比皆是,所以在通過(guò)基本的驗(yàn)收測(cè)試后,老師會(huì)按照你寫的幫助來(lái)使用系統(tǒng),進(jìn)而測(cè)試幫助文檔的正確性。</p><p><b>  1.5 小結(jié)</b></p><p>  經(jīng)過(guò)日夜奮戰(zhàn),終于做出了系統(tǒng),通過(guò)了

120、驗(yàn)收和答辯,雖然有點(diǎn)難熬,但終于熬過(guò)來(lái)了,是不是可以松一口氣或是慶祝一下?請(qǐng)不要忘記老師對(duì)你的期待,期待你的改變和收獲,做一件事情和沒(méi)做這件事情結(jié)果都一樣將是我們共同的失敗,請(qǐng)寫下你所做的工作,發(fā)現(xiàn)了哪些問(wèn)題?如何解決的?有哪些經(jīng)驗(yàn)和教訓(xùn)?不應(yīng)局限于技術(shù),只要是與項(xiàng)目相關(guān)的屬于自己的思考和想法都可以寫下來(lái),請(qǐng)牢記,你的意見(jiàn)(教學(xué)內(nèi)容、教學(xué)方式方法、考核方式、解決問(wèn)題的方式等方面)是對(duì)老師最好的獎(jiǎng)勵(lì),經(jīng)過(guò)深思熟慮的寶貴意見(jiàn)還將是你在本項(xiàng)目

121、中最終取勝的法寶。</p><p><b>  1.6 展望</b></p><p>  本系統(tǒng)是一個(gè)簡(jiǎn)單的網(wǎng)吧計(jì)費(fèi)管理系統(tǒng),無(wú)論在功能上還是使用方式上,與現(xiàn)實(shí)中的網(wǎng)吧管理系統(tǒng)相比仍有較大差距,但本系統(tǒng)可進(jìn)一步擴(kuò)展成實(shí)用的系統(tǒng),并且大部分代碼(業(yè)務(wù)邏輯、數(shù)據(jù)庫(kù)及存取部分)可以重用。其中從技術(shù)角度看實(shí)際的系統(tǒng)一般是一個(gè)由多客戶端(上網(wǎng)機(jī))、單服務(wù)器(管理員機(jī))及數(shù)據(jù)庫(kù)構(gòu)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論