計(jì)算機(jī)本科畢業(yè)論文-delphi稅務(wù)信息采集系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩91頁(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><b>  第一章前言</b></p><p><b>  1.1軟件開(kāi)發(fā)背景</b></p><p>  1.1.1稅務(wù)系統(tǒng)信息建設(shè)現(xiàn)狀</p><p>  1994年我國(guó)稅制改革以來(lái),稅務(wù)系統(tǒng)全面貫徹黨中央國(guó)務(wù)院關(guān)于加強(qiáng)稅務(wù)信息化建設(shè)的指導(dǎo)方針,堅(jiān)持“科技加管理”的工作思路,稅務(wù)信息化建設(shè)全面推進(jìn)。自

2、上而下實(shí)現(xiàn)了國(guó)家稅務(wù)總局、省局、市局、到區(qū)縣局的四級(jí)廣域高速互聯(lián)網(wǎng)絡(luò),建設(shè)了金稅工程二期工程、推行了綜合征管軟件、增值稅管理系統(tǒng)、出口退稅管理系統(tǒng)等多項(xiàng)大型稅收征管信息系統(tǒng)。稅務(wù)信息化建設(shè)全面提高了稅收征管質(zhì)量和效益,降低了稅收成本和風(fēng)險(xiǎn),為國(guó)民經(jīng)濟(jì)的發(fā)展奠定了良好的基礎(chǔ)。</p><p>  我國(guó)稅務(wù)信息化的發(fā)展大致可劃分為三個(gè)階段。第一階段是模擬手工操作的稅收電子化階段;第二階段是步入面向管理的稅務(wù)管理信息系

3、統(tǒng)階段;第三階段是實(shí)現(xiàn)創(chuàng)造稅收價(jià)值的全方位稅收服務(wù)系統(tǒng)階段。2005年至2006年是我國(guó)稅務(wù)信息化從第二階段向第三階段攀登的關(guān)鍵時(shí)期,這個(gè)階段涉及的稅務(wù)業(yè)務(wù)應(yīng)用,已從稅務(wù)業(yè)務(wù)操作、簡(jiǎn)單的稅收管理發(fā)展到深層次的稅收管理和高層決策,這對(duì)信息技術(shù)在稅務(wù)領(lǐng)域的應(yīng)用提出了更高的要求。在這種大的背景下,積極研究發(fā)揮稅務(wù)機(jī)關(guān)服務(wù)職能,將納稅服務(wù)理念融入稅收工作,不斷拓展納稅服務(wù)的新領(lǐng)域,為納稅人提供全方位的服務(wù)已成為新時(shí)期的首要任務(wù),這也包括對(duì)納稅人

4、稅務(wù)信息的采集。</p><p>  1.1.2稅務(wù)信息采集中存在的問(wèn)題</p><p>  稅務(wù)部門(mén)由于自身信息化建設(shè)的需要,對(duì)所需要采集的信息有的是推行單一功能軟件,有的還停留在手工填寫(xiě)報(bào)表的原始方式。主要表現(xiàn)在:一是納稅人端各類稅收數(shù)據(jù)采集手段不一、方式多樣、效率低下、質(zhì)量不高;二是納稅人端采集系統(tǒng)林立、多頭采集、重復(fù)采集、口徑不一;三是稅務(wù)端辦稅手段不高、手工審核比對(duì)工作量大、效率

5、低下、服務(wù)質(zhì)量不高。</p><p>  針對(duì)稅務(wù)信息采集存在諸多問(wèn)題,為了優(yōu)化納稅服務(wù),提高數(shù)據(jù)采集質(zhì)量,減輕征納雙方的勞動(dòng)強(qiáng)度,急需要一個(gè)能“口徑統(tǒng)一、集中采集”納稅人的各類信息的應(yīng)用系統(tǒng)——《稅務(wù)信息采集系統(tǒng)》。</p><p>  1. 2應(yīng)用系統(tǒng)要實(shí)現(xiàn)的目標(biāo)</p><p>  待開(kāi)發(fā)的稅務(wù)信息采集系統(tǒng)的使用者是廣大的各類納稅人,系統(tǒng)要實(shí)現(xiàn)優(yōu)化納稅服務(wù),提

6、高數(shù)據(jù)采集質(zhì)量,減輕征納雙方的勞動(dòng)強(qiáng)度的目的,力求做到三個(gè)覆蓋:一是覆蓋所有國(guó)稅機(jī)關(guān)管轄的所有企業(yè)納稅人;二是覆蓋國(guó)稅機(jī)關(guān)征管的所有稅種的申報(bào);三是覆蓋所有法定涉稅資料的報(bào)送。</p><p>  該系統(tǒng)還需要整合了外貿(mào)企業(yè)和生產(chǎn)企業(yè)的出口退稅申報(bào)系統(tǒng)。其采集、輸出數(shù)據(jù)必須實(shí)現(xiàn)與稅務(wù)部門(mén)運(yùn)行的綜合征管軟件、通用數(shù)據(jù)采集匯總軟件、重點(diǎn)稅源監(jiān)控系統(tǒng)、出口退稅審核系統(tǒng)的對(duì)接,還要做到電子數(shù)據(jù)的網(wǎng)上交換,避免了網(wǎng)上申報(bào)數(shù)

7、據(jù)的二次錄入,減輕納稅人網(wǎng)上申報(bào)的工作量、保證申報(bào)的準(zhǔn)確性。也就是說(shuō)該系統(tǒng)要具有簡(jiǎn)便、實(shí)用、集成等特點(diǎn),要做到“四個(gè)一”:一套系統(tǒng)、“一張軟盤(pán)”、一個(gè)口徑、一次采集,完成稅務(wù)信息采集工作。</p><p>  一套系統(tǒng)。一套《稅收信息采集系統(tǒng)》集各稅種納稅申報(bào)、運(yùn)輸發(fā)票、廢舊物資發(fā)票、海關(guān)完稅憑證、重點(diǎn)稅源監(jiān)控及財(cái)務(wù)報(bào)表等數(shù)據(jù)采集于一身,整合外貿(mào)企業(yè)和生產(chǎn)企業(yè)的出口退稅申報(bào)系統(tǒng),具有增值稅納稅申報(bào)、內(nèi)外資企業(yè)所得

8、稅申報(bào)、增值稅“四票”以及企業(yè)財(cái)務(wù)會(huì)計(jì)報(bào)表(資產(chǎn)負(fù)債表、損益表)等72張報(bào)表的數(shù)據(jù)采集、計(jì)算、審核、比對(duì)功能。納稅人安裝該系統(tǒng)后,不再需要安裝其他多套采集系統(tǒng),利用這一套系統(tǒng)便可實(shí)現(xiàn)多項(xiàng)涉稅信息采集工作。 </p><p>  “一張軟盤(pán)”。納稅人不再需要攜帶多張軟盤(pán)或其他存儲(chǔ)介質(zhì),辦理納稅申報(bào),只需通過(guò)本系統(tǒng)一次報(bào)送一張軟盤(pán)即可,隨著網(wǎng)絡(luò)報(bào)送功能的拓展,系統(tǒng)還應(yīng)能自動(dòng)打包上傳數(shù)據(jù)。</p><

9、;p>  一個(gè)口徑。納稅人不再為填寫(xiě)各類指標(biāo)口徑而煩惱,系統(tǒng)通過(guò)內(nèi)嵌的表內(nèi)、表間計(jì)算公式、邏輯關(guān)系,自動(dòng)實(shí)現(xiàn)各表的計(jì)算和審核比對(duì),表集底層數(shù)據(jù)就實(shí)現(xiàn)共享機(jī)制,實(shí)現(xiàn)填報(bào)口徑的統(tǒng)一。</p><p>  一次采集。納稅人辦理納稅申報(bào)或法定涉稅數(shù)據(jù)的采集時(shí),所報(bào)送的稅務(wù)信息只需一次錄入,系統(tǒng)自動(dòng)存儲(chǔ)、自動(dòng)結(jié)轉(zhuǎn),不再多頭采集、多頭報(bào)送、多次錄入。</p><p><b>  第二章

10、系統(tǒng)需求分析</b></p><p>  2.1現(xiàn)行稅務(wù)信息采集描述</p><p>  通過(guò)對(duì)《中華人民共和國(guó)稅收征收管理法》及其實(shí)施細(xì)則、各稅種單行條例、各稅種納稅申報(bào)辦法等法律法規(guī)、規(guī)范性文件的對(duì)稅務(wù)信息采集的規(guī)定,對(duì)納稅人在實(shí)際稅務(wù)信息采集中的實(shí)踐經(jīng)驗(yàn)進(jìn)行調(diào)研,結(jié)合稅務(wù)部門(mén)業(yè)務(wù)人員的對(duì)國(guó)稅業(yè)務(wù)的細(xì)化、提煉。</p><p>  納稅人報(bào)送到稅務(wù)部

11、門(mén)的信息基本上是種類報(bào)表或清單,單一的納稅人基本上不涉及到大量的數(shù)據(jù),也沒(méi)有太多的數(shù)據(jù)處理過(guò)程,只是納稅人按照有關(guān)規(guī)定制作、錄入報(bào)表數(shù)據(jù)后,打印紙質(zhì)報(bào)表或報(bào)送電子數(shù)據(jù)?,F(xiàn)行需要采集的稅務(wù)信息主要是增值稅納稅申報(bào)、消費(fèi)稅納稅申報(bào)、內(nèi)外資企業(yè)所得稅納稅申報(bào)、個(gè)人儲(chǔ)蓄利息所得稅納稅申報(bào)、運(yùn)輸發(fā)票信息、廢舊物資發(fā)票信息、海關(guān)完稅憑證信息、重點(diǎn)稅源信息等幾方面內(nèi)容。稅務(wù)信息采集流程圖如圖2.1所示下:</p><p>  

12、圖2.1 稅務(wù)信息采集流程圖</p><p>  2.2現(xiàn)行稅務(wù)信息采集存在的主要問(wèn)題分析</p><p>  現(xiàn)行的稅務(wù)信息采集存在方式不一、手段不高、軟件林立、多次多盤(pán)報(bào)送等問(wèn)題,納稅人多次反映信息采集頗為繁瑣和反感,有較強(qiáng)的抵觸情緒,不能較好地完成稅務(wù)信息的采集報(bào)送工作,這也是稅務(wù)部門(mén)值得考慮的問(wèn)題——如何進(jìn)行為納稅人服務(wù)。</p><p>  2.3現(xiàn)行稅

13、務(wù)信息采集業(yè)務(wù)流程</p><p>  2.3.1各稅種納稅申報(bào)業(yè)務(wù)流程</p><p>  圖2.2 各稅種納稅申報(bào)流程圖</p><p>  2.3.2運(yùn)輸發(fā)票、廢舊物資發(fā)票和海關(guān)完稅憑證信息采集流程</p><p>  圖2.3 增值稅“四票”信息采集流程圖</p><p>  2.3.3重點(diǎn)稅源信息采集流程

14、</p><p>  圖2.4 重點(diǎn)稅源監(jiān)控信息采集流程圖</p><p>  2.4解決現(xiàn)行稅務(wù)信息采集問(wèn)題的方案</p><p>  2.4.1提高納稅申報(bào)等單項(xiàng)數(shù)據(jù)采集的方案</p><p>  將各稅種納稅申報(bào)資料表格電子化,加強(qiáng)表內(nèi)、表與表間的計(jì)算與邏輯審核,增加報(bào)表的上下申報(bào)期的結(jié)轉(zhuǎn)功能,增強(qiáng)申報(bào)資料,保證報(bào)表資料的完整性。如對(duì)

15、增值稅申報(bào)表主表的第12行“本月數(shù)”應(yīng)等于上個(gè)申報(bào)期申報(bào)表第20行“本月數(shù)”,第25行“本月數(shù)”應(yīng)等于上個(gè)申報(bào)期申報(bào)表第32行“本月數(shù)”等等;還應(yīng)增加表間的審核關(guān)系,如主表第11行“本月數(shù)”等于附表一第7行小計(jì)中的“銷項(xiàng)稅額”。</p><p>  表2.1 增值稅納稅申報(bào)表</p><p>  2.4.2提高整體信息采集的方案</p><p>  只要達(dá)到系統(tǒng)實(shí)

16、現(xiàn)的目標(biāo):一套系統(tǒng)、“一張軟盤(pán)”、一個(gè)口徑、一次采集,即可整體提高稅務(wù)信息采集的質(zhì)量和效率。</p><p><b>  2.5可行性分析</b></p><p>  2.5.1經(jīng)濟(jì)可行性分析</p><p>  本系統(tǒng)集各稅種納稅申報(bào)與其他信息采集系統(tǒng)于一體,解決了稅收信息多次采集、多頭采集等問(wèn)題,減輕了征納雙方工作強(qiáng)度。</p>

17、<p>  本系統(tǒng)開(kāi)發(fā)完成后的目標(biāo)用戶群是國(guó)稅部門(mén)征管的各企業(yè)納稅人。社會(huì)信息化的快速發(fā)展以及國(guó)稅部門(mén)增值稅防偽稅控已推行多年,大部分用戶已有計(jì)算機(jī)設(shè)備,無(wú)需增加新的投入即可使用該系統(tǒng);該系統(tǒng)的開(kāi)發(fā)完全由國(guó)稅部門(mén)自身開(kāi)發(fā),免費(fèi)提供給納稅人使用;系統(tǒng)開(kāi)發(fā)后通過(guò)互聯(lián)網(wǎng)、光盤(pán)等方式分發(fā),國(guó)稅部門(mén)組織人員為納稅人免費(fèi)安裝和培訓(xùn)操作人員。</p><p>  整個(gè)系統(tǒng)只是利用現(xiàn)有資源,提高了納稅人的辦稅質(zhì)量、

18、減輕了納稅辦稅工作量、節(jié)約了稅務(wù)人員錄入信息的時(shí)間、降低了稅務(wù)人員的勞動(dòng)強(qiáng)度。</p><p>  該系統(tǒng)上線后,企業(yè)納稅人不再需要購(gòu)買(mǎi)紙質(zhì)申報(bào)資料了、不再需要運(yùn)行多個(gè)稅務(wù)信息采集軟件了、不再需要多次報(bào)送電子信息了、甚至還可以通過(guò)互聯(lián)網(wǎng)足不出戶地辦理納稅申報(bào)等涉稅事宜了。</p><p>  2.5.2社會(huì)可行性分析</p><p>  本系統(tǒng)可實(shí)現(xiàn)了所有企業(yè)納稅人

19、、所有稅種申報(bào)、所有法定報(bào)送涉稅資料采集的三覆蓋;實(shí)現(xiàn)了申報(bào)表內(nèi)自動(dòng)計(jì)算、自動(dòng)審核、數(shù)據(jù)共享的三級(jí)保障;可實(shí)現(xiàn)辦稅服務(wù)效率、數(shù)據(jù)利用效率、企業(yè)信息化應(yīng)用水平的三提高。</p><p>  本系統(tǒng)是一次開(kāi)發(fā),將在數(shù)以萬(wàn)計(jì)的企業(yè)納稅人中推廣使用,既可加強(qiáng)稅收監(jiān)控,減輕征納雙方勞動(dòng)強(qiáng)度,提高納稅申報(bào)質(zhì)量,優(yōu)化稅收服務(wù),密切了稅企關(guān)系,應(yīng)該會(huì)取得良好的經(jīng)濟(jì)效益和社會(huì)效益。</p><p>  2.

20、5.2.1提高了申報(bào)質(zhì)量,強(qiáng)化了稅源監(jiān)控</p><p>  本系統(tǒng)自動(dòng)匯總、計(jì)算各種報(bào)稅數(shù)據(jù)并生成標(biāo)準(zhǔn)的各稅稅納稅申報(bào)表,既能大大提高納稅人的工作效率,又能保證申報(bào)數(shù)據(jù)的正確性。</p><p>  主管國(guó)稅機(jī)關(guān)采集涉稅信息后,系統(tǒng)能準(zhǔn)確和快速填報(bào)增值稅納稅申報(bào)表、企業(yè)所得稅申報(bào)表、財(cái)務(wù)報(bào)表及其他信息采集表,提高了納稅申報(bào)質(zhì)量,加強(qiáng)了稅收監(jiān)控。</p><p> 

21、 2.5.2.2方便了納稅人,優(yōu)化了納稅服務(wù)</p><p>  本系統(tǒng)在打印報(bào)表前對(duì)報(bào)表進(jìn)行嚴(yán)格的數(shù)據(jù)邏輯關(guān)系審核,只有全部邏輯關(guān)系符合規(guī)定,才允許打印出申報(bào)資料,提高了納稅人納稅申報(bào)一次性成功率。企業(yè)辦理納稅申報(bào),只需通過(guò)本系統(tǒng)每月報(bào)送一張軟盤(pán),所有報(bào)送資料一次錄入,系統(tǒng)自動(dòng)存儲(chǔ),不再多頭采集、多頭報(bào)送、多次錄入。納稅人普遍反映,現(xiàn)在辦理納稅申報(bào)方便多了。</p><p>  2.5.

22、3技術(shù)可行性分析</p><p>  該系統(tǒng)是基于Windows操作系統(tǒng)的桌面應(yīng)用系統(tǒng),數(shù)據(jù)庫(kù)采用的是與Windows操作系統(tǒng)無(wú)縫對(duì)接的Access桌面數(shù)據(jù)系統(tǒng),其系統(tǒng)的性能、可靠性、可維護(hù)性和操作方便性得到了保障。</p><p>  該系統(tǒng)的主要功能是對(duì)現(xiàn)行稅法及相關(guān)規(guī)章制度規(guī)定的報(bào)表資料進(jìn)行電子化,面向?qū)ο蟮腄elphi開(kāi)發(fā)工具保障了系統(tǒng)的易實(shí)現(xiàn)性、易修改性。</p>

23、<p><b>  第三章邏輯方案</b></p><p><b>  3.1數(shù)據(jù)流程分析</b></p><p>  該系統(tǒng)要處理14種報(bào)表、共72張報(bào)表資料,對(duì)這72張報(bào)表資料錄入后要完成系統(tǒng)自動(dòng)結(jié)轉(zhuǎn)、自動(dòng)計(jì)算、自動(dòng)校驗(yàn)等功能,半進(jìn)行報(bào)表的打印、查詢和電子數(shù)據(jù)的導(dǎo)出。在這之前,還要對(duì)納稅人的基本信息進(jìn)行維護(hù),對(duì)納稅人自身的信息進(jìn)行定

24、義、對(duì)所適用的報(bào)表種類進(jìn)行選擇后進(jìn)行表集的初始化和原始資料的錄入。</p><p>  3.1.1納稅人基本信息數(shù)據(jù)流程分析</p><p>  圖3.1 納稅人基本信息維護(hù)數(shù)據(jù)流程圖</p><p>  納稅人以系統(tǒng)管理員身份登錄稅務(wù)信息采集系統(tǒng)后,首先要進(jìn)行本納稅人基本信息的維護(hù)錄入,包括納稅人的識(shí)別號(hào)、納稅人名稱、企業(yè)注冊(cè)類型、行業(yè)等數(shù)據(jù)項(xiàng)后并進(jìn)行操作員的信

25、息維護(hù);然后選擇該納稅人所要使用的表集,和一些開(kāi)關(guān)項(xiàng)的選擇;最后是對(duì)所選用的表集進(jìn)行初始化、并對(duì)相應(yīng)的原始資料進(jìn)行錄入,完成該系統(tǒng)的啟用工作。</p><p>  3.1.2納稅人稅務(wù)信息采集數(shù)據(jù)流程分析</p><p>  圖3.2 納稅人稅務(wù)信息采集流程圖</p><p><b>  3.2數(shù)據(jù)流描述</b></p><

26、;p>  圖3.4 數(shù)據(jù)流示意圖</p><p><b>  3.3數(shù)據(jù)表描述</b></p><p>  該系統(tǒng)要完成納稅人以下信息的維護(hù),并進(jìn)行相關(guān)的系統(tǒng)初始化設(shè)置:</p><p>  表3.1 系統(tǒng)管理員身份登錄入的功能菜單表</p><p>  該系統(tǒng)把關(guān)系密切的報(bào)表組合在一起形成一個(gè)個(gè)表集,把72張

27、報(bào)表分為14個(gè)表集,每個(gè)表集及報(bào)表都是該系統(tǒng)的菜單項(xiàng)。該系統(tǒng)要完成以下表集的數(shù)據(jù)報(bào)表采集:</p><p>  表3.2 以一般操作員身份登錄系統(tǒng)后的功能菜單</p><p><b>  3.4基本加工說(shuō)明</b></p><p>  數(shù)據(jù)加工是以各稅種法定申報(bào)為主,結(jié)合相關(guān)稅務(wù)數(shù)據(jù)采集,進(jìn)行表內(nèi)、表間的數(shù)據(jù)加工,這與其他的信息管理有所不同,

28、此系統(tǒng)只負(fù)責(zé)數(shù)據(jù)的采集與導(dǎo)出,數(shù)據(jù)的接收與接收后的加工由現(xiàn)有的征管信息系統(tǒng)、通用信息采集匯總軟件、重點(diǎn)稅源接收系統(tǒng)接收后再進(jìn)行后臺(tái)的數(shù)據(jù)加工。</p><p>  第四章系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)</p><p><b>  4.1軟件設(shè)計(jì)過(guò)程</b></p><p>  軟件設(shè)計(jì)過(guò)程如圖4.1所示</p><p>  圖4.1

29、 軟件設(shè)計(jì)過(guò)程圖</p><p><b>  4.2軟件模塊設(shè)計(jì)</b></p><p>  圖4.2 系統(tǒng)模塊即功能菜單示意圖</p><p><b>  4.3開(kāi)發(fā)方法概述</b></p><p>  圖4.3 軟件開(kāi)發(fā)方法流程圖</p><p>  4.3.1開(kāi)發(fā)工具

30、的選擇</p><p>  經(jīng)過(guò)充分考慮,我們決定使用Borland公司開(kāi)發(fā)的、著名的可視化軟件開(kāi)發(fā)工具——DELPHI作為該系統(tǒng)的開(kāi)發(fā)工具。“真正的程序員用C,聰明的程序員用Delphi”,這句話是對(duì)Delphi最經(jīng)典、最實(shí)在的描述。Delphi被稱為第四代編程語(yǔ)言,它具有簡(jiǎn)單、高效、功能強(qiáng)大的特點(diǎn)。Delphi具有以下的特性:</p><p>  (1)可視化的開(kāi)發(fā)環(huán)境(IDE)<

31、;/p><p>  可視化開(kāi)發(fā)環(huán)境(Integrated Development Environment IDE)通常分為三個(gè)組成部分:編輯器、調(diào)試器和窗體設(shè)計(jì)器。和大多數(shù)現(xiàn)代RAD(快速應(yīng)用開(kāi)發(fā))工具一樣,這三部分是協(xié)同工作的。Delphi 的窗體設(shè)計(jì)器支持可視化窗體的繼承和鏈接。</p><p>  (2)基于窗體和面向?qū)ο螅∣OP)的方法</p><p>  OO

32、P的英文全稱是Object Oriented Programming,翻譯過(guò)來(lái)就是面向?qū)ο缶幊?。OOP是一種非常重要的編程思想。大家知道,Delphi的語(yǔ)言基礎(chǔ)是 Object Pascal。這是Borland在傳統(tǒng)的Pascal語(yǔ)言中增加了面向?qū)ο蟮奶匦院蟀l(fā)展而成,并且特地冠以O(shè)bject的字樣,以示與傳統(tǒng)的Pascal語(yǔ)言的差別, 可見(jiàn)面向?qū)ο蠹夹g(shù)對(duì)其影響之大??梢哉f(shuō),Delphi構(gòu)建在Object Pascal的基礎(chǔ)之上,而Obj

33、ect Pascal構(gòu)建在面向?qū)ο蠹夹g(shù)之上。事實(shí)上,不但Delphi,C++、Java等其他許多現(xiàn)代編程語(yǔ)言的基礎(chǔ)也是OOP(Visual Basic不完全地支持OOP)。OOP有三個(gè)主要的特征:</p><p>  一是封裝(encapsulation)。這是OOP的第一個(gè)特征。就是把數(shù)據(jù)和代碼結(jié)合在一起,并隱藏了實(shí)現(xiàn)的細(xì)節(jié)。使得除了該對(duì)象方法以外的任何東西都不能使用這些數(shù)據(jù)。封裝擴(kuò)展了方法的實(shí)現(xiàn),意味著對(duì)象的

34、內(nèi)部工作細(xì)節(jié)除了該對(duì)象以外的任何東西都是不可用的。那些可以被外部代碼訪問(wèn)的成員稱之為類的接口。這樣做有什么好處呢?首先,這讓類的作者可以檢測(cè)被賦值的內(nèi)容。比如,用戶可能給一個(gè)對(duì)象賦予13月40日這樣的無(wú)效日期。而在隱含了一些成員之后,類的作者可以在方法的代碼中檢測(cè)這些值是否有效,從而大大地減少了產(chǎn)生錯(cuò)誤的機(jī)會(huì)。其次,使用規(guī)范的類,作者可以隨時(shí)修改類內(nèi)部的代碼,而使用該類的代碼卻無(wú)需任何修改!這樣使得代碼的維護(hù)成了一件輕松的事件,特別是對(duì)

35、于多人協(xié)作的大型軟件而言。</p><p>  二是繼承。繼承是指一個(gè)新的對(duì)象能夠從父對(duì)象中獲取屬性和方法,首選建立通用對(duì)象,然后創(chuàng)建這些通用對(duì)象的有專用功能的子對(duì)象。</p><p>  通過(guò)這種繼承的機(jī)制,類不再僅僅是數(shù)據(jù)和方法的封裝,它提供了開(kāi)放性。你可以方便地繼承一個(gè)功能強(qiáng)大的類,然后添加進(jìn)自己需要的特性,同時(shí),你又不需要對(duì)基類進(jìn)行任何的修改。相反,原作者對(duì)基類的任何改動(dòng),都可以在

36、你的新類中立即反映出來(lái)。這非常符合代碼的重用要求。</p><p>  這種繼承機(jī)制也非常符合現(xiàn)實(shí)世界中的情形。可以設(shè)想,一般意義上的“動(dòng)物”是一個(gè)類,具有自己的一些特征(成員);而“狗”是“動(dòng)物”的派生類,它具有動(dòng)物的所有特征,同時(shí)還具有自己獨(dú)有的特征(四條腿,汪汪叫,等等)。而“狗”這個(gè)類可以繼續(xù)派生下去,例如“黑狗”“白狗”,它們除了保留狗的全部特征之外,還具有自己的特征(黑顏色,白顏色,等等)。而具體到一

37、只活生生的狗,可以認(rèn)為它就是“黑狗”或“白狗”(或其他什么狗)的一個(gè)實(shí)例(對(duì)象)。</p><p>  OOP這種對(duì)現(xiàn)實(shí)世界的模擬不僅極大地簡(jiǎn)化了代碼的維護(hù),而且使得整個(gè)編程思想產(chǎn)生了革命性的變化,較之模塊化編程有了飛躍的進(jìn)步。</p><p>  三是多態(tài)。從字面上說(shuō),是指多種形狀。調(diào)用一個(gè)對(duì)象變量的方法時(shí),實(shí)際被調(diào)用的代碼與實(shí)際在變量中的對(duì)象的實(shí)例有關(guān)。這個(gè)非常重要的特點(diǎn)大大地增加了代

38、碼的可復(fù)用性,還具有簡(jiǎn)潔和維護(hù)性好的特點(diǎn)。眾所周知,Pascal以及Object Pascal是一種類型定義嚴(yán)格的語(yǔ)言,你不能將某個(gè)類型的值賦予不同類型的變量,例如將一個(gè)整型值賦予布爾型變量,將會(huì)導(dǎo)致出錯(cuò)。但是,這個(gè)規(guī)則在涉及到OOP領(lǐng)域時(shí),出現(xiàn)了一個(gè)重要的例外,那就是:可以將一個(gè)子類的值賦予一個(gè)父類類型的變量。但倒過(guò)來(lái)卻是不行的,一個(gè)父類的值決不能賦予一個(gè)子類類型的變量。如果將這個(gè)原則放到現(xiàn)實(shí)世界中,那就很容易理解了:“狗”繼承自“動(dòng)

39、物”,因?yàn)楣芬彩且环N動(dòng)物。所以可以將一個(gè)“狗”類型的值賦予“動(dòng)物”類型的變量,因?yàn)椤肮贰本哂小皠?dòng)物”的一切特征。但反過(guò)來(lái),“動(dòng)物”不具有“狗”的所有特征,因此反向賦值是不行的。</p><p><b>  (3)高速的編譯器</b></p><p>  快速的編譯器可以使你逐步遞進(jìn)地開(kāi)發(fā)軟件,經(jīng)常地修改源代碼、重新編譯、測(cè)試、再修改、再編譯、再測(cè)試……形成這樣一個(gè)良好

40、的開(kāi)發(fā)循環(huán)。如果編譯速度很慢,開(kāi)發(fā)者就不得不分批地修改代碼,每次編譯前進(jìn)行多處修改以適應(yīng)一個(gè)低效的循環(huán)過(guò)程。提高運(yùn)行效率、節(jié)約運(yùn)行時(shí)間、生成二進(jìn)制代碼更為短小,其優(yōu)越性是不言而喻的。也許Pascal編譯器最著名的特點(diǎn)就是速度快,而Delphi正是建立在這種編譯器的基礎(chǔ)之上的。事實(shí)上,它可能是針對(duì)Windows的最快的高級(jí)語(yǔ)言本地代碼編譯器。以往速度很慢的C++編譯器在近年來(lái)取得了很大的進(jìn)步,增加了鏈接和各種緩存策略,尤其是在Visual

41、 C++和C++Builder 中。但即便如此,C++的編譯器還是比Delphi 的慢了幾倍。</p><p>  (4)強(qiáng)大的數(shù)據(jù)庫(kù)支持</p><p>  由于Borland本身缺少一種數(shù)據(jù)庫(kù)計(jì)劃,因此Delphi保留了我們認(rèn)為是所有工具中最靈活的數(shù)據(jù)庫(kù)結(jié)構(gòu)。對(duì)大多數(shù)基于本地、客戶/服務(wù)器和ODBC數(shù)據(jù)庫(kù)平臺(tái)的應(yīng)用程序來(lái)說(shuō),BDE的功能都非常強(qiáng)大。如果你對(duì)此不滿意,可以避開(kāi)使用BDE以

42、支持新的本地ADO組件。如果你沒(méi)有裝ADO,可以自己創(chuàng)建數(shù)據(jù)訪問(wèn)類或者購(gòu)買(mǎi)第三方數(shù)據(jù)訪問(wèn)解決方案。此外,MIDAS(Multitier Distributed Application Services Suite)使對(duì)數(shù)據(jù)源的多層訪問(wèn)更易于實(shí)現(xiàn)。</p><p>  (5)強(qiáng)大而成熟的組件技術(shù)</p><p>  組件是可視化編程的基礎(chǔ),開(kāi)發(fā)人員用它們來(lái)設(shè)計(jì)用戶界面以及提供給應(yīng)用程序的一些

43、非可視化性能。對(duì)于應(yīng)用程序開(kāi)發(fā)者來(lái)說(shuō),組件就是他們從組件面板上取得的并放到窗口上的某種事物。自從Borland在Turbo Pascal for Windows中第一次引入了Object Windows Library(OWL),傳統(tǒng)的Windows得到了大大的簡(jiǎn)化。以前,許多冗長(zhǎng)乏味的工作需要自己來(lái)編寫(xiě)代碼,現(xiàn)在,OWL對(duì)象會(huì)自動(dòng)地合理地完成這些工作。你不必再編寫(xiě)冗長(zhǎng)的case 語(yǔ)句來(lái)捕獲消息,或一長(zhǎng)串代碼來(lái)管理Windows類;OW

44、L將為你代勞。Delphi引入的Visual Component Library(VCL)是OWL的延續(xù)。原則上,VCL與OWL相似,都是基于對(duì)象模型,但實(shí)現(xiàn)上有本質(zhì)的不同。VCL是專為Delphi可視化開(kāi)發(fā)環(huán)境設(shè)計(jì)的。當(dāng)設(shè)計(jì)可視化程序時(shí),不必寫(xiě)代碼來(lái)建立窗口或?qū)υ捒?,只要修改組件的行為和可視化屬性即可。</p><p>  和VC相比,Delphi更簡(jiǎn)單、更易于掌握,而在功能上卻絲毫不遜色;和VB相比,Delp

45、hi則功能更強(qiáng)大、更實(shí)用。可以說(shuō)Delphi同時(shí)兼?zhèn)淞薞C功能強(qiáng)大和VB簡(jiǎn)單易學(xué)的特點(diǎn)。它一直是程序員至愛(ài)的編程工具。隨著我國(guó)信息化程度的不斷提高,越來(lái)越多的職能機(jī)關(guān)有了自己專用的操作軟件,這一方面是為了滿足自身的特性要求,另一方面是為了提高整體的管理水平和辦事效率,同時(shí)有利于在行業(yè)上進(jìn)行規(guī)范。我們知道辦公、檔案等方面的管理在每個(gè)行業(yè)都是相通的,因此可以選用通用的管理軟件,但在每個(gè)行業(yè)的具體問(wèn)題的處理上,方法和規(guī)定是千差萬(wàn)別的,如何抽象

46、出這種種不同將其分化為計(jì)算機(jī)操作的規(guī)范,就是我們的政務(wù)信息化所要解決的主要問(wèn)題。</p><p>  4.3.2數(shù)據(jù)庫(kù)的選擇</p><p>  Access是Office辦公套件中一個(gè)極為重要的組成部分。剛開(kāi)始時(shí)微軟公司是將Access單獨(dú)作為一個(gè)產(chǎn)品進(jìn)行銷售的,后來(lái)微軟發(fā)現(xiàn)如果將Access捆綁在OFFICE中一起發(fā)售,將帶來(lái)更加可觀的利潤(rùn),于是第一次將Access捆綁到OFFICE9

47、7中,成為OFFICE套件中的一個(gè)重要成員?,F(xiàn)在它已經(jīng)成為Office辦公套件中不可缺少的部件了。自從1992年開(kāi)始銷售以來(lái),Access 已經(jīng)賣(mài)出了超過(guò)6000萬(wàn)份,現(xiàn)已成為世界上最流行的桌面數(shù)據(jù)庫(kù)管理系統(tǒng)。它提供了數(shù)據(jù)存儲(chǔ)庫(kù),可以使用桌面數(shù)據(jù)庫(kù)文件把數(shù)據(jù)庫(kù)文件置于網(wǎng)絡(luò)文件服務(wù)器,與其他網(wǎng)絡(luò)用戶共享數(shù)據(jù)庫(kù)。Access 是一種關(guān)系數(shù)據(jù)庫(kù)工具,關(guān)系數(shù)據(jù)庫(kù)是已開(kāi)發(fā)的最通用的數(shù)據(jù)庫(kù)之一。如上所述,Access 作為關(guān)系數(shù)據(jù)庫(kù)開(kāi)發(fā)具備了許多優(yōu)

48、點(diǎn),可以在一個(gè)數(shù)據(jù)包中同時(shí)擁有桌面數(shù)據(jù)庫(kù)的便利和關(guān)系數(shù)據(jù)庫(kù)的強(qiáng)大功能。另外因?yàn)樗瑯訉儆贛icrosoft家族,與Windows操作系統(tǒng)無(wú)縫對(duì)接,增強(qiáng)了它在Windows平臺(tái)運(yùn)行穩(wěn)定性,所以選用了該桌面數(shù)據(jù)庫(kù)系統(tǒng)。</p><p>  4.4數(shù)據(jù)庫(kù)的設(shè)計(jì)過(guò)程</p><p>  在我們對(duì)數(shù)據(jù)庫(kù)操作進(jìn)行講解前,我們覺(jué)得有必要向大家介紹一下關(guān)系型數(shù)據(jù)庫(kù)這個(gè)概念,因?yàn)槲覀冇X(jué)得無(wú)論是你做什么樣的系

49、統(tǒng),都或多或少要接觸到數(shù)據(jù)庫(kù),而現(xiàn)在提到數(shù)據(jù)庫(kù),當(dāng)然就是關(guān)系型數(shù)據(jù)庫(kù)了。那么,什么是關(guān)系型數(shù)據(jù)庫(kù)(RDB)呢?</p><p>  在關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)以行和列的形式存儲(chǔ),以便于用戶理解,這一系列的行和列被稱為表,一組表便組成了數(shù)據(jù)庫(kù)。在關(guān)系數(shù)據(jù)庫(kù)中:各數(shù)據(jù)項(xiàng)之間用關(guān)系來(lái)組織,關(guān)系(relationship)是表之間的一種連接,通過(guò)關(guān)系,我們可以更靈活地表示和操縱數(shù)據(jù);另外,用戶可以非常方便的用查詢(Query)

50、來(lái)檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù),一個(gè)Query是一個(gè)用于指定數(shù)據(jù)庫(kù)中行和列的SELECT語(yǔ)句。</p><p>  4.4.1新建一個(gè)數(shù)據(jù)庫(kù)</p><p>  創(chuàng)建任何一個(gè)數(shù)據(jù)庫(kù)的第一步是仔細(xì)的規(guī)劃數(shù)據(jù)庫(kù),設(shè)計(jì)必須是靈活的、有邏輯的。創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的過(guò)程被認(rèn)為是數(shù)據(jù)模型設(shè)計(jì)。</p><p><b>  標(biāo)識(shí)需要的數(shù)據(jù);</b></p>

51、<p>  收集被標(biāo)識(shí)的字段到表中;</p><p><b>  標(biāo)識(shí)主關(guān)鍵字字段;</b></p><p>  繪制一個(gè)簡(jiǎn)單的數(shù)據(jù)圖表;</p><p><b>  規(guī)范數(shù)據(jù);</b></p><p>  標(biāo)識(shí)指定字段的信息;</p><p><b>

52、;  創(chuàng)建物理表。</b></p><p>  4.4.2 修改已建的數(shù)據(jù)庫(kù)</p><p>  數(shù)據(jù)庫(kù)的修改分為:添加、編輯和刪除記錄。這三種操作均可由DELPHI 7.0 創(chuàng)建的程序來(lái)完成,下面的章節(jié)將詳細(xì)描述實(shí)現(xiàn)的具體方法。</p><p>  4.4.3實(shí)現(xiàn)數(shù)據(jù)庫(kù)之間的聯(lián)系</p><p>  數(shù)據(jù)庫(kù)之間的關(guān)系指明兩個(gè)庫(kù)之

53、間共享一個(gè)共同的關(guān)鍵字值。一個(gè)連接是指一種虛擬的表,這種表是在當(dāng)用戶要求從相互關(guān)聯(lián)的各個(gè)不同的表中獲取信息時(shí)建立的,關(guān)鍵字段用于在相互連接的不同表中查找匹配的記錄。一個(gè)更高級(jí)的連接形式稱為自連接。這種連接是指一個(gè)表被連接到它自己的一個(gè)字段,或在不同的紀(jì)錄中由重復(fù)數(shù)據(jù)的組合字段。數(shù)據(jù)庫(kù)中有三種不同類型的關(guān)鍵字:主關(guān)鍵字、組合關(guān)鍵字和外關(guān)鍵字。在表中使用的關(guān)鍵字類型用于描述庫(kù)表示什么以及在數(shù)據(jù)庫(kù)中如何與其它的庫(kù)建立關(guān)系。</p>

54、<p>  4.4.4數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)</p><p>  數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)從某種意義上說(shuō)是設(shè)計(jì)活動(dòng)中最重要的一個(gè),因?yàn)閿?shù)據(jù)結(jié)構(gòu)對(duì)程序結(jié)構(gòu)和過(guò)程的復(fù)雜性有直接的影響,從而在很大程度上決定了軟件的質(zhì)量。無(wú)論采用哪一種軟件設(shè)計(jì)技術(shù),沒(méi)有良好的數(shù)據(jù)結(jié)構(gòu),不可能導(dǎo)出良好的程序結(jié)構(gòu)。</p><p>  數(shù)據(jù)設(shè)計(jì)是為在需求規(guī)格說(shuō)明中定義的那些數(shù)據(jù)對(duì)象選擇合適的邏輯表示,并確定可能作用的在這些

55、邏輯結(jié)構(gòu)上的所有操作。</p><p>  通常,數(shù)據(jù)設(shè)計(jì)方案不是唯一的,有時(shí)需進(jìn)行算法復(fù)雜懷分析之后才能從多種設(shè)計(jì)中找出最佳設(shè)計(jì)方案。</p><p>  4.4.4.1本系統(tǒng)采用的用戶表</p><p>  表4.1 系統(tǒng)操作員數(shù)據(jù)表</p><p>  4.4.4.2本系統(tǒng)稅務(wù)信息所用的數(shù)據(jù)表</p><p>

56、  表4.2 系統(tǒng)使用的各數(shù)據(jù)表名稱表</p><p>  結(jié)構(gòu)程序設(shè)計(jì)的思想,應(yīng)該在軟件設(shè)計(jì)中體現(xiàn)出來(lái),但這并不排除為效率或其他原因?qū)Y(jié)構(gòu)程序設(shè)計(jì)作一點(diǎn)修改。隨著面向?qū)ο?、軟件重用等新的軟件開(kāi)發(fā)方法的發(fā)展,更現(xiàn)實(shí)、更有效的開(kāi)發(fā)途徑可能是自頂向下和自底向上兩種方法的有機(jī)結(jié)合。</p><p><b>  4.5表集的定制</b></p><p&g

57、t;  前面說(shuō)過(guò),在開(kāi)發(fā)采集時(shí)我們引入了“表集”要概念。表集是一張或若干張相互關(guān)聯(lián)的報(bào)表集合。對(duì)于一個(gè)納稅人來(lái)說(shuō),這十幾種表集不可能都用到,比如,增值稅一般納稅人就不可能有增值稅小規(guī)模納稅申報(bào)表。那么,如何來(lái)定制納稅人用到的這些表集呢?</p><p><b>  4.6操作員的設(shè)置</b></p><p>  我們把操作員分成二類,一類是普通用戶,負(fù)責(zé)報(bào)表數(shù)據(jù)的錄入

58、,打印報(bào)表、生成接口文件等;一種類是系統(tǒng)管理員,負(fù)責(zé)采集系統(tǒng)的基本信息錄入、申報(bào)表(表集)的選擇、對(duì)選定的表集初始化等。只有在基本信息管理窗口選中的表集才能在數(shù)據(jù)采集中顯示出來(lái)。而且,表集的增加(原來(lái)不是一般納稅人,現(xiàn)在是了,要增加增值稅一般納稅人申報(bào)表)或刪除(原來(lái)是一般納稅人,現(xiàn)在被取消了,是小規(guī)模納稅人了,要?jiǎng)h除增值稅一般納稅人申報(bào)表)不會(huì)影響其他表集的操作。</p><p>  本系統(tǒng)的使用者是廣大納稅人

59、,計(jì)算機(jī)操作水平參差不齊,這樣設(shè)置的好處,可以避免操作員的誤操作導(dǎo)致系統(tǒng)的紊亂。</p><p>  4.6系統(tǒng)總體的安全性、可靠性方案與措施</p><p>  在安全性與可靠性方面,本系統(tǒng)主要是采用用戶登錄管理,使用具有相應(yīng)權(quán)限的人員才能操作本系統(tǒng),對(duì)Access數(shù)據(jù)庫(kù)采用口令保護(hù),對(duì)數(shù)據(jù)庫(kù)內(nèi)保存的用戶口令采用密文方式存放。</p><p>  采用了數(shù)據(jù)備份與

60、恢復(fù)模塊,讓用戶可以隨時(shí)將數(shù)據(jù)備份到安全的地方,當(dāng)系統(tǒng)因病毒、誤刪除、操作系統(tǒng)崩潰等原因,導(dǎo)致該系統(tǒng)不能正常運(yùn)轉(zhuǎn)時(shí),可能恢復(fù)此系統(tǒng)。</p><p>  因?yàn)锳ccess有個(gè)致命的缺陷就是,當(dāng)數(shù)據(jù)庫(kù)過(guò)一段時(shí)間讀寫(xiě)操作后,數(shù)據(jù)庫(kù)會(huì)大幅度膨脹,讀寫(xiě)速度會(huì)越來(lái)越慢。為此,我們?cè)O(shè)置了數(shù)據(jù)壓縮模塊,使用該模塊,能加快系統(tǒng)的運(yùn)行速度。</p><p><b>  第五章詳細(xì)設(shè)計(jì)</b&

61、gt;</p><p>  軟件的詳細(xì)設(shè)計(jì)是對(duì)總體設(shè)計(jì)的局部細(xì)化和實(shí)現(xiàn),對(duì)各模塊進(jìn)行具體化實(shí)現(xiàn),體現(xiàn)在代碼設(shè)計(jì)、人機(jī)界面設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)和模塊實(shí)現(xiàn)上。</p><p><b>  5.1代碼設(shè)計(jì)</b></p><p>  Delphi是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,很大程度上不需要太多的程序源代碼的編寫(xiě)。本系統(tǒng)采取模塊化代碼設(shè)計(jì),在代碼設(shè)計(jì)中我們基

62、本做到了</p><p>  編制易于修改和維護(hù)的代碼,在模塊化和面向?qū)ο笤敿?xì)設(shè)計(jì)的基礎(chǔ)上,進(jìn)一步按屬性劃分程序。</p><p>  編制易于測(cè)試的代碼,測(cè)試包括單元測(cè)試、綜合測(cè)試、確認(rèn)測(cè)試和系統(tǒng)集成測(cè)試,若在編碼階段考慮到測(cè)試的需要,在編程風(fēng)格上會(huì)有很大不同。一般來(lái)說(shuō),人們總是通過(guò)運(yùn)用條件編譯語(yǔ)句盡早設(shè)計(jì)出測(cè)試用例,采用統(tǒng)一的命名管理這些測(cè)試用例并適時(shí)地進(jìn)行回歸測(cè)試等一系列措施提高程序

63、的可測(cè)試性。</p><p>  將編程與編文檔的工作統(tǒng)一開(kāi)來(lái),多數(shù)程序員都厭倦編寫(xiě)文檔,但只有配套的文檔完成后,整個(gè)軟件開(kāi)發(fā)才千結(jié)束。一個(gè)程序段的文檔就包括下列內(nèi)容:代碼的功能、代碼的完成者、代碼在整個(gè)軟件系統(tǒng)中的位置、代碼編制復(fù)審的時(shí)間、保留代碼的原因、代碼中如何使用數(shù)據(jù)結(jié)構(gòu)和算法。</p><p>  編程中采用統(tǒng)一的標(biāo)準(zhǔn)和約定,降低了程序復(fù)雜性。</p><p&

64、gt;  5.1.1代碼設(shè)計(jì)中防止同時(shí)出現(xiàn)多個(gè)應(yīng)用程序?qū)嵗?lt;/p><p>  多實(shí)例指同時(shí)有一個(gè)應(yīng)用程序的多個(gè)副本在運(yùn)行。同一個(gè)應(yīng)用程序的多個(gè)副本可以相互獨(dú)立地同時(shí)運(yùn)行,是Win32操作系統(tǒng)提供的一個(gè)功能。但我們開(kāi)發(fā)《增值稅納稅申報(bào)系統(tǒng)》時(shí),沒(méi)有限制應(yīng)用程序的多個(gè)副本同時(shí)運(yùn)行,有的納稅人在使用時(shí)就出現(xiàn)了數(shù)據(jù)錄入錯(cuò)誤。納稅人在操作時(shí)雙擊桌面圖標(biāo)啟動(dòng)申報(bào)系統(tǒng)時(shí)由于計(jì)算機(jī)系統(tǒng)比較慢,應(yīng)用系統(tǒng)一時(shí)出不來(lái),操作人員就又雙

65、擊桌面圖標(biāo)。這樣就導(dǎo)致同時(shí)運(yùn)行多個(gè)副本。在一個(gè)副本錄入完數(shù)據(jù)后退出系統(tǒng),在另一個(gè)副本中沒(méi)有錄入數(shù)據(jù)就退出系統(tǒng),到下一次啟動(dòng)應(yīng)用系統(tǒng)時(shí)發(fā)現(xiàn)數(shù)據(jù)沒(méi)有了。為了防止此類現(xiàn)象的發(fā)生,我們就在開(kāi)發(fā)時(shí)限制多個(gè)副本的同時(shí)運(yùn)行。</p><p>  在16位的Windows中,要防止出現(xiàn)多個(gè)實(shí)例是很簡(jiǎn)單的,因?yàn)橄到y(tǒng)變量hPrevInst可以被用來(lái)判斷是否有其他的實(shí)例存在。當(dāng)hPrevInst變量不為0時(shí),表示已經(jīng)有別的應(yīng)用程序?qū)嵗?/p>

66、在運(yùn)行。然而,在Win32系統(tǒng)中每個(gè)進(jìn)程之間有R32絕緣層來(lái)彼此隔絕。因此,在Win32系統(tǒng)中變量hPrevInst的值總為0。</p><p>  另一種既適合Win32系統(tǒng)又適合于16位Windows的技術(shù),是調(diào)用FindWindow() API函數(shù)去搜索一個(gè)已激活的程序窗口。但是,這種方法有兩個(gè)缺陷:一是它只能基于窗口類名或標(biāo)題來(lái)搜索窗口,但是在整個(gè)系統(tǒng)中窗口很可能會(huì)重復(fù)。所以,這樣做是不可靠的。而利用窗口

67、的標(biāo)題的方法也有問(wèn)題,因?yàn)榇翱诘臉?biāo)題有可能發(fā)生變化(以Delphi和Word為例,每次打開(kāi)不同的文件,它們的標(biāo)題是不同的)所以這種方法不可取。另一個(gè)缺陷是它每次搜索都要遍歷所有窗口,這樣執(zhí)行起來(lái)非常慢。</p><p>  在Win32系統(tǒng)中最好的解決辦法是利用那些不依賴于進(jìn)程的API對(duì)象。當(dāng)一個(gè)應(yīng)用程序首次進(jìn)行時(shí),我們就使一個(gè)互斥對(duì)象被API函數(shù)CreateMutex()創(chuàng)建。這個(gè)函數(shù)的參數(shù)lpName是一個(gè)唯

68、一標(biāo)識(shí)互斥對(duì)象的字符串。當(dāng)應(yīng)用程序的實(shí)例要運(yùn)行前,它首先要用OpenMutex()來(lái)打開(kāi)互斥對(duì)象,如果已經(jīng)有一個(gè)CreateMutex()創(chuàng)建的互斥對(duì)象則返回一個(gè)非零值。</p><p>  另外,當(dāng)試圖運(yùn)行另一個(gè)程序?qū)嵗龝r(shí),使第一個(gè)實(shí)例被激活。對(duì)于這個(gè)問(wèn)題最好的解決辦法是在首次運(yùn)行時(shí),利用RegisterWindowMessage()函數(shù)注冊(cè)一個(gè)消息,并在應(yīng)用程序中創(chuàng)建唯一的消息標(biāo)識(shí)符。然后,利用第一個(gè)實(shí)例對(duì)這

69、個(gè)消息的響應(yīng)使它被第二個(gè)實(shí)例激活。</p><p><b>  程序清單如下:</b></p><p>  unit MultInst;</p><p><b>  interface</b></p><p><b>  const</b></p><p&g

70、t;  MI_QUERYWINDOWHANDLE = 1;</p><p>  MI_RESPONDWINDOWHANDLE = 2;</p><p>  MI_ERROR_NONE = 0;</p><p>  MI_ERROR_FAILSUBCLASS = 1;</p><p>  MI_ERROR_CREATIN

71、GMUTEX = 2;</p><p>  // Call this function to determine if error occurred in startup.</p><p>  // Value will be one or more of the MI_ERROR_* error flags.</p><p>  function GetMIErr

72、or: Integer;</p><p>  implementation</p><p>  uses Forms, Windows, SysUtils;</p><p><b>  const</b></p><p>  UniqueAppStr = 'DDG.I_am_the_Taxsbxt!';&

73、lt;/p><p><b>  var</b></p><p>  MessageId: Integer;</p><p>  WProc: TFNWndProc;</p><p>  MutHandle: THandle;</p><p>  MIError: Integer;</p>

74、<p>  function GetMIError: Integer;</p><p><b>  begin</b></p><p>  Result := MIError;</p><p><b>  end;</b></p><p>  function NewWndProc(Ha

75、ndle: HWND; Msg: Integer; wParam, lParam: Longint):</p><p>  Longint; stdcall;</p><p><b>  begin</b></p><p>  Result := 0;</p><p>  // If this is the regist

76、ered message...</p><p>  if Msg = MessageID then</p><p><b>  begin</b></p><p>  case wParam of</p><p>  MI_QUERYWINDOWHANDLE:</p><p>  // A new

77、 instance is asking for main window handle in order</p><p>  // to focus the main window, so normalize app and send back</p><p>  // message with main window handle.</p><p><b>

78、;  begin</b></p><p>  if IsIconic(Application.Handle) then</p><p><b>  begin</b></p><p>  Application.MainForm.WindowState := wsNormal;</p><p>  Appli

79、cation.Restore;</p><p><b>  end;</b></p><p>  PostMessage(HWND(lParam), MessageID, MI_RESPONDWINDOWHANDLE,</p><p>  Application.MainForm.Handle);</p><p><

80、;b>  end;</b></p><p>  MI_RESPONDWINDOWHANDLE:</p><p>  // The running instance has returned its main window handle,</p><p>  // so we need to focus it and go away.</p&g

81、t;<p><b>  begin</b></p><p>  SetForegroundWindow(HWND(lParam));</p><p>  Application.Terminate;</p><p><b>  end;</b></p><p><b>  e

82、nd;</b></p><p><b>  end</b></p><p>  // Otherwise, pass message on to old window proc</p><p><b>  else</b></p><p>  Result := CallWindowPr

83、oc(WProc, Handle, Msg, wParam, lParam);</p><p><b>  end;</b></p><p>  procedure SubClassApplication;</p><p><b>  begin</b></p><p>  // We subcla

84、ss Application window procedure so that</p><p>  // Application.OnMessage remains available for user.</p><p>  WProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC,</p><p

85、>  Longint(@NewWndProc)));</p><p>  // Set appropriate error flag if error condition occurred</p><p>  if WProc = nil then</p><p>  MIError := MIError or MI_ERROR_FAILSUBCLASS;&l

86、t;/p><p><b>  end;</b></p><p>  procedure DoFirstInstance;</p><p>  // This is called only for the first instance of the application</p><p><b>  begin<

87、;/b></p><p>  // Create the mutex with the (hopefully) unique string</p><p>  MutHandle := CreateMutex(nil, False, UniqueAppStr);</p><p>  if MutHandle = 0 then</p><p&

88、gt;  MIError := MIError or MI_ERROR_CREATINGMUTEX;</p><p><b>  end;</b></p><p>  procedure BroadcastFocusMessage;</p><p>  // This is called when there is already an ins

89、tance running.</p><p><b>  var</b></p><p>  BSMRecipients: DWORD;</p><p><b>  begin</b></p><p>  // Prevent main form from flashing</p>&

90、lt;p>  Application.ShowMainForm := False;</p><p>  // Post message to try to establish a dialogue with previous instance</p><p>  BSMRecipients := BSM_APPLICATIONS;</p><p>  Broa

91、dCastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE,</p><p>  @BSMRecipients, MessageID, MI_QUERYWINDOWHANDLE,</p><p>  Application.Handle);</p><p><b>  end;</b>

92、</p><p>  procedure InitInstance;</p><p><b>  begin</b></p><p>  SubClassApplication; // hook application message loop</p><p>  MutHandle := OpenMutex(MUT

93、EX_ALL_ACCESS, False, UniqueAppStr);</p><p>  if MutHandle = 0 then</p><p>  // Mutex object has not yet been created, meaning that no previous</p><p>  // instance has been created

94、.</p><p>  DoFirstInstance</p><p><b>  else</b></p><p>  BroadcastFocusMessage;</p><p><b>  end;</b></p><p>  initialization</p&

95、gt;<p>  MessageID := RegisterWindowMessage(UniqueAppStr);</p><p>  InitInstance;</p><p>  finalization</p><p>  // Restore old application window procedure</p><p&

96、gt;  if WProc <> Nil then</p><p>  SetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(WProc));</p><p>  if MutHandle <> 0 then CloseHandle(MutHandle); // Free mutex</p>&

97、lt;p><b>  end.</b></p><p>  5.1.2代碼設(shè)計(jì)中避免創(chuàng)建一個(gè)窗體的多個(gè)實(shí)例</p><p>  在本系統(tǒng)中由于有幾十個(gè)窗體存在,如果在應(yīng)用系統(tǒng)運(yùn)行時(shí)同時(shí)創(chuàng)建將使系統(tǒng)的啟動(dòng)時(shí)間太長(zhǎng),消耗大量的內(nèi)存,影響系統(tǒng)的性能。所以,我們就在程序中用到窗體的時(shí)候才創(chuàng)建它,用完就釋放掉。那么,在使用Application.CreateForm()或

98、Tform.Create()來(lái)創(chuàng)建窗體的實(shí)例就要判斷相同的實(shí)例是否存在。對(duì)有模式的窗體,可以用如下的方法來(lái)解決:</p><p><b>  begin</b></p><p>  if not Assigned(SomeForm) then </p><p><b>  begin</b></p><

99、p>  Application.CreateForm(TsomeForm,SomeForm);</p><p><b>  Try</b></p><p>  SomeForm.ShowModal;</p><p><b>  Finally</b></p><p>  SomeForm.Fr

100、ee;</p><p>  SomeForm:=nil;</p><p><b>  End;</b></p><p><b>  End</b></p><p><b>  Else</b></p><p>  SomeForm.ShowModal;&

101、lt;/p><p><b>  End;</b></p><p>  對(duì)于無(wú)模式的窗體來(lái)說(shuō),程序代碼并不知道什么時(shí)候刪除窗體實(shí)例。因此,必須在處理OnDestroy事件的處理方法中把窗體的實(shí)例賦值為nil。</p><p>  5.1.3代碼設(shè)計(jì)中定義自己的消息</p><p>  消息,就是指Windows發(fā)出的一個(gè)通知,

102、告訴應(yīng)用程序某個(gè)事情發(fā)生了。例如,單擊鼠標(biāo),改變窗口尺寸、按下鍵盤(pán)上的一個(gè)鍵都會(huì)使Windows發(fā)送一個(gè)消息給應(yīng)用程序。在本系統(tǒng)中,為了告訴主程序,子程序(納稅人基本信息錄入模塊)中某一特殊事件發(fā)生了一些變化(如納稅人的名稱變了),于是子程序就向主程序發(fā)送一個(gè)自定義的消息,主程序在收到消息時(shí)都要檢查這個(gè)消息是否是自定義的,如果是就進(jìn)行相應(yīng)的處理,不是就跳過(guò)。Delphi提供了幾種在一個(gè)應(yīng)用程序內(nèi)部發(fā)送消息的方式:調(diào)用PerForm()(

103、這種方式不依賴于Windows API),以及調(diào)用SendMessage()、PostMessage() API函數(shù)。在本系統(tǒng)中用的是SendMessage()。</p><p>  5.1.4代碼設(shè)計(jì)中加強(qiáng)了包的運(yùn)用</p><p>  Delphi的包能把應(yīng)用程序的部分代碼放到一個(gè)單獨(dú)的模塊中,它能被多個(gè)應(yīng)用程序所共享??梢园寻醋魇侨舾蓚€(gè)單元集中在一起以類似于DLL的形式存儲(chǔ)的模塊(

104、Borland Package Library 或BPL文件)。應(yīng)用程序在運(yùn)行的時(shí)候鏈接上這些包中的單元而不是在編譯/鏈接時(shí),因?yàn)檫@些單元的代碼存在于BPL文件而不是存在于EXE或DLL中,所以EXE和DLL的長(zhǎng)度變得更短。BPL文件只能被Delphi所共享,不用被其他開(kāi)發(fā)工具所共享,這是它的局限性。</p><p>  5.1.5代碼設(shè)計(jì)中實(shí)現(xiàn)了DLL的運(yùn)用</p><p>  動(dòng)態(tài)鏈接

105、庫(kù)(Dynamic Linking Library DLL)是程序模塊,它包括代碼、數(shù)據(jù)或資源,能夠被其他的Windows應(yīng)用程序共享。DLL的主要特點(diǎn)之一是應(yīng)用程序可以在運(yùn)行時(shí)調(diào)入代碼執(zhí)行,而不是在編譯時(shí)鏈接代碼。因此,多個(gè)應(yīng)用程序可以共享同一個(gè)DLL代碼。另一個(gè)特點(diǎn)是有利于應(yīng)用程序的模塊化。這樣就簡(jiǎn)化了應(yīng)用程序的修改,因?yàn)橐话阒恍栊薷腄LL,而不是整個(gè)應(yīng)用程序?!∨cBPL不同的時(shí),它可以被其他開(kāi)發(fā)工具所共享。</p>

106、<p>  在《稅務(wù)信息采集系統(tǒng)》中,它導(dǎo)出的XML接口文件同時(shí)都要對(duì)文件的內(nèi)容生成一個(gè)CRC碼存放在一個(gè)同名的校驗(yàn)文件中。生成CRC碼的過(guò)程就是一個(gè)DLL文件(getcrcprj.dll)</p><p><b>  5.2人機(jī)界面設(shè)計(jì)</b></p><p>  界面設(shè)計(jì)一般只是作為附屬品;用戶模型概括了終端用戶的大致情況,只有對(duì)假想用戶的情況,包括年

107、齡、性別、心理情況、教育、文化、種族背景、動(dòng)機(jī)、目的和個(gè)性等有所才能設(shè)計(jì)出有效的用戶界面;系統(tǒng)假想是終端用戶想象的系統(tǒng)映象,它描述了期望系統(tǒng)能提供的操作,至于這些描述的準(zhǔn)確程度,則完全依賴于用戶的發(fā)問(wèn)和他對(duì)軟件和熟悉程度;系統(tǒng)映象是系統(tǒng)的外部特征(指界面形式和感觀)與所有支撐信息的總和,一般來(lái)說(shuō),若系統(tǒng)映象能與系統(tǒng)假想吻合,用戶即對(duì)系統(tǒng)感到滿意并能有效地使用它。</p><p>  在界面設(shè)計(jì)上,我們采用了系統(tǒng)登

108、錄管理、基本信息管理、稅務(wù)信息采集管理等。在數(shù)據(jù)輸入上做到了:對(duì)表間關(guān)系實(shí)現(xiàn)自動(dòng)計(jì)算盡量減少用戶輸入的動(dòng)作、保證信息顯示方式與數(shù)據(jù)輸入方式的協(xié)調(diào)一致、為所有輸入動(dòng)作提供幫助信息。</p><p>  在菜單設(shè)計(jì)上,我們使用了表集的概念,對(duì)各稅種信息、重點(diǎn)稅源信息等各類信息分門(mén)別類歸集的相應(yīng)的表集中,方便用戶選擇使用;在系統(tǒng)菜單設(shè)計(jì)上,則采用了比較簡(jiǎn)便、通用的系統(tǒng)菜單,并在工具欄提供了相應(yīng)的菜單按鈕,方便了用戶的使

109、用。</p><p>  圖5.1 稅務(wù)采集系統(tǒng)登錄界面</p><p>  圖5.2 稅務(wù)信息采集系統(tǒng)表集功能示意圖</p><p>  圖5.2 稅務(wù)信息采集系統(tǒng)系統(tǒng)管理功能圖</p><p>  圖5.2 稅務(wù)信息采集系統(tǒng)表集初始化示意圖</p><p>  5.3數(shù)據(jù)庫(kù)引擎的采用</p>

110、<p>  在數(shù)據(jù)庫(kù)引擎的采用上,我們避免采用Delphi的BDE(Borland database Engine)數(shù)據(jù)庫(kù)引擎, 由于市面上的《速達(dá)財(cái)務(wù)軟件》等系統(tǒng)采用這種數(shù)據(jù)庫(kù)引擎,與之共用時(shí)可能我們的系統(tǒng)無(wú)法正常工作。為了避免這類事件的發(fā)生,我們就放棄了BDE,而采用了第三方的數(shù)據(jù)庫(kù)引擎KADAO。KADAO是一個(gè)免費(fèi)的控件,透過(guò) Microsoft DAO Engine 存取 Microsoft Access 數(shù)據(jù)庫(kù),并

111、能夠使用 Delphi 的數(shù)據(jù)感知構(gòu)件,速度也比BDE快,功能也比較全。用delphi處理Access數(shù)據(jù)庫(kù)后,該數(shù)據(jù)庫(kù)文件會(huì)變得越來(lái)越大,如何來(lái)壓縮數(shù)據(jù)庫(kù)文件?BDE就沒(méi)有此功能, KADAO就可以,它直接調(diào)用DAO函數(shù),可以實(shí)現(xiàn)壓縮數(shù)據(jù)庫(kù)的工作(使用CompactAccessDatabase或CompactAccessDatabaseEx)。這個(gè)工具在很多方面強(qiáng)于Delphi自己的驅(qū)動(dòng),支持MS Access 2000并提供源程序。

112、</p><p><b>  5.4模塊處理過(guò)程</b></p><p>  在模塊處理過(guò)程中,我們除了按現(xiàn)實(shí)業(yè)務(wù)需求,對(duì)各稅種報(bào)表等各項(xiàng)資料的實(shí)現(xiàn)統(tǒng)一處理,還加強(qiáng)了如下技術(shù)的運(yùn)用。</p><p>  5.4.1XML的運(yùn)用</p><p>  XML是EXtensible Markup Language的縮寫(xiě),即擴(kuò)展

113、標(biāo)識(shí)語(yǔ)言。它是Internet環(huán)境下跨平臺(tái)的、依賴于內(nèi)容的技術(shù),是這個(gè)時(shí)代中處理分部式結(jié)構(gòu)信息的選擇工具。在W3C組織領(lǐng)導(dǎo)下的工作小組發(fā)展并支持XML技術(shù),使用它來(lái)簡(jiǎn)化通過(guò)Internet的文檔信息傳輸。XML是年輕的元語(yǔ)言(meta)。早在1998年,W3C就發(fā)布了XML1.0規(guī)范。內(nèi)容建設(shè)們已經(jīng)開(kāi)始開(kāi)發(fā)各種各樣的XML應(yīng)用程序,比如說(shuō)數(shù)據(jù)標(biāo)記語(yǔ)言MathMl,化學(xué)標(biāo)記語(yǔ)言CML等待。XML不僅滿足了WEB開(kāi)發(fā)者的需要,而且適用于任何

114、對(duì)出格出版業(yè)感興趣的人。XML屬于SGML(Standard Greneralized Markup Language 標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)的一個(gè)子集, 它是一種采用標(biāo)記來(lái)描述文檔(數(shù)據(jù))的種類和方法。 XML是由W3C下屬的XML小組在JonBosak 的領(lǐng)導(dǎo)下于1996年完成的規(guī)范, 1998年正是成為一種W3C推薦的標(biāo)準(zhǔn)。使用過(guò)HTML的開(kāi)發(fā)人員都知道, HTML是屬于樹(shù)狀結(jié)構(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)論