版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序編碼習(xí)題【4-1】從下列關(guān)于模塊化程序設(shè)計(jì)的敘述中選出5條正確的敘述。①程序設(shè)計(jì)比較方便,但比較難以維護(hù)。②便于由多個(gè)人分工編制大型程序。③軟件的功能便于擴(kuò)充。④程序易于理解,也便于排錯(cuò)。⑤在主存儲(chǔ)器能夠容納得下的前提下,應(yīng)使模塊盡可能大,以便減少模塊的個(gè)數(shù)。⑥模塊之間的接口叫做數(shù)據(jù)文件。⑦只要模塊之間的接口關(guān)系不變,各模塊內(nèi)部實(shí)現(xiàn)細(xì)節(jié)的修改將不會(huì)影響別的模塊。⑧模塊間的單向調(diào)用關(guān)系叫做模塊的層次結(jié)構(gòu)。⑨模塊越小,模塊化的優(yōu)點(diǎn)越明顯。一般來(lái)說,模塊的大小都在10行以下。【4-2】結(jié)構(gòu)化程序設(shè)計(jì)有時(shí)被錯(cuò)誤地稱為“無(wú)GOTO語(yǔ)句”的程序設(shè)計(jì)。請(qǐng)說明為什么會(huì)出現(xiàn)這樣的說法,并討論環(huán)繞著這個(gè)問題的一些爭(zhēng)論?!?-3】從下面關(guān)于程序編制的敘述中,選出三條正確的敘述。①在編制程序之前,首先必須仔細(xì)閱讀給定的程序說明書。然后,必須如實(shí)地依照說明書編寫程序。說明書中常會(huì)有含糊不清或難以理解的地方。程序員在作業(yè)時(shí)應(yīng)該對(duì)這些地方作出適當(dāng)?shù)慕忉?。②在著手編制程序時(shí),重要的是采用既能使程序正確地按設(shè)計(jì)說明書進(jìn)行處理,又易于出錯(cuò)的編寫方法。③在編制程序時(shí),首先應(yīng)該對(duì)程序的結(jié)構(gòu)充分考慮,不要急于開始編碼,而要象寫軟件文檔那樣,很好地琢磨程序具有什么樣的功能,這些功能如何安排等等。④考慮到以后的程序變更,為程序編寫完整的說明書是一項(xiàng)很重要的工作。只要有了完整的程序說明書,即使程序的編寫形式難以讓他人看懂也沒有什么關(guān)系。⑤編制程序時(shí)不可缺少的條件是,程序的輸入和輸出數(shù)據(jù)的格式都應(yīng)確定。其他各項(xiàng)規(guī)定都是附帶的,無(wú)足輕重。⑥作為一個(gè)好的程序,不僅處理速度要快,而且易讀易修改等等也都是重要的條件。為了能得到這樣的程序,不僅要熟悉程序設(shè)計(jì)語(yǔ)言的語(yǔ)法,還要注意采用適當(dāng)?shù)囊?guī)程和單純的表現(xiàn)方法,注意使整個(gè)程序的結(jié)構(gòu)簡(jiǎn)潔。【4-7】下面給出一個(gè)求實(shí)函數(shù)方程F(x)在自變量區(qū)間[a,b]中的全部實(shí)根的算法。首先閱讀此程序,然后 畫出消去全部goto語(yǔ)句的結(jié)構(gòu)化程序流程圖。 在算法中,a與b是區(qū)間[a,b]的兩端點(diǎn)值;eps1與eps2是用戶要求的求解精度。如果區(qū)間中點(diǎn)的函數(shù)值的絕對(duì)值小于eps1或新的小區(qū)間的長(zhǎng)度小于eps2,就認(rèn)為這個(gè)中點(diǎn)為根。 floatBinRoot(floata,floatb,floateps1,floateps2){ floatlow=a,high=b,mid,fmid;floatflow=Func(low),fhigh:=Func(high); labelL1,L2,L3;//標(biāo)號(hào)說明,給定某些程序地址 if(flow*fhigh>0.0){BinRoot=0;gotoL3;}//無(wú)實(shí)根L1: mid=(low+high)/2;fmid=Func(mid); if(abs(fmid)<=eps1){L2: BinRoot=mid;gotoL3; } elseif(high-mid<=eps2)gotoL2; elseif(flow*fmid>0.0){low=mid;flow=fmid;gotoL1;} else{high=mid;gotoL1};L3:}習(xí)題解答【4-1】正確的敘述有②、③、④、⑦、⑧。如果程序結(jié)構(gòu)的模塊化滿足評(píng)價(jià)的標(biāo)準(zhǔn)(高內(nèi)聚,低耦合),這樣的結(jié)構(gòu)是容易編碼,容易測(cè)試,容易理解,容易修改,容易維護(hù)的。程序的功能也容易擴(kuò)充。特別適合于大型程序編制時(shí),多人分工合作,協(xié)同完成任務(wù)的情形。因?yàn)槭遣捎米皂斚蛳?,逐層分解?lái)劃分模塊結(jié)構(gòu)的,所以模塊之間的調(diào)用關(guān)系是分層次的模塊結(jié)構(gòu),就叫做模塊的層次結(jié)構(gòu)。模塊之間的信息傳遞叫做模塊的接口,模塊之間傳遞信息可以通過參數(shù)表、全局變量或全局?jǐn)?shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)文件、專門的通信模塊,不是專指數(shù)據(jù)文件。劃分模塊時(shí),模塊大小要適中。模塊太大,控制路徑數(shù)目多、涉及的范圍廣、變量的數(shù)目多、總體復(fù)雜性高,可理解性、可修改性、可靠性就會(huì)變差。模塊太小,模塊個(gè)數(shù)增大,調(diào)用的系統(tǒng)開銷就會(huì)增大。所以要有一個(gè)權(quán)衡。【紛亂如麻的程序流程4-2】早在1963年,針對(duì)當(dāng)時(shí)流行的ALGOL語(yǔ)言,PeterNaur指出,在程序中大量地,沒有節(jié)制地使用GOTO語(yǔ)句,會(huì)使程序結(jié)構(gòu)變得非?;靵y。但是很多人還不太注意這一問題。以致許多人寫出來(lái)的程序仍然是紛亂如麻的。紛亂如麻的程序流程1965年,E.W.Dijkstra在一次會(huì)議上提出,應(yīng)當(dāng)把GOTO語(yǔ)句從高級(jí)語(yǔ)言中取消。并指出,程序的質(zhì)量與程序中包含的GOTO語(yǔ)句的數(shù)量成反比。在這種思想的影響下,當(dāng)時(shí)新開發(fā)的幾種高級(jí)程序設(shè)計(jì)語(yǔ)言,例如LISP、ISWIM、BLISS等,都把GOTO語(yǔ)句取消了。1966年,Bohm與Jacopini證明了任何單入口單出口的沒有“死循環(huán)”的程序都能由三種最基本的控制結(jié)構(gòu)構(gòu)造出來(lái)。這三種基本控制結(jié)構(gòu)就是“順序結(jié)構(gòu)”、“選擇IF-THEN-ELSE結(jié)構(gòu)”、“重復(fù)DO-WHILE或DO-UNTIL結(jié)構(gòu)”。1968年,Dijkstra在寫給<ACM>(美國(guó)計(jì)算機(jī)協(xié)會(huì)通訊)雜志編輯部的信中再次建議從一切高級(jí)語(yǔ)言中取消GOTO語(yǔ)句,只使用三種基本控制結(jié)構(gòu)編寫程序。他的建議引起了激烈的爭(zhēng)論。爭(zhēng)論集中在如何看待GOTO語(yǔ)句的問題上。贊成取消GOTO語(yǔ)句的一方認(rèn)為,GOTO語(yǔ)句對(duì)程序清晰性有很大破壞作用,凡是使用GOTO語(yǔ)句多的程序,其控制流時(shí)而GOTO向前,時(shí)而GOTO向后,常使程序變得很難理解,從而增加查錯(cuò)和維護(hù)的困難,降低程序的可維護(hù)性。但以D.E.Knuth為代表的另一方認(rèn)為,GOTO語(yǔ)句雖然存在著破壞程序清晰性的問題,但不應(yīng)完全禁止。因?yàn)镚OTO語(yǔ)句概念簡(jiǎn)單,使用方便,在某些情況下,保留GOTO語(yǔ)句反能使寫出的程序更加簡(jiǎn)潔,并且GOTO語(yǔ)句可直接得到硬件指令的支持。經(jīng)過爭(zhēng)論,人們認(rèn)識(shí)到,不是簡(jiǎn)單地去掉GOTO語(yǔ)句的問題,而是要?jiǎng)?chuàng)立一種新的程序設(shè)計(jì)思想、方法和風(fēng)格,以顯著提高軟件生產(chǎn)率和軟件質(zhì)量,降低軟件維護(hù)的成本。70年代初N.Wirth在設(shè)計(jì)Pascal語(yǔ)言時(shí)對(duì)GOTO語(yǔ)句的處理可被當(dāng)做對(duì)GOTO語(yǔ)句爭(zhēng)論的結(jié)論。在Pascal語(yǔ)言中設(shè)置了支持上述三種基本控制結(jié)構(gòu)的語(yǔ)句;另一方面,GOTO語(yǔ)句仍然保留在該語(yǔ)言中。不過,N.Wirth解釋說,通常使用所提供的幾種基本控制結(jié)構(gòu)已經(jīng)足夠,習(xí)慣于這樣做的人不會(huì)感到GOTO語(yǔ)句的必要。也就是說,在一般情況下,可以完全不使用GOTO語(yǔ)句。如果在特殊情況下,由于特定的要求,偶然使用GOTO語(yǔ)句能解決問題,那也未嘗不可,只是不應(yīng)大量使用罷了。事實(shí)上,大量采用GOTO語(yǔ)句實(shí)現(xiàn)控制路徑,會(huì)使程序路徑變得復(fù)雜而且混亂,從而使程序變得不易閱讀,給程序的測(cè)試和維護(hù)造成困難,還會(huì)增加出錯(cuò)的機(jī)會(huì),降低程序的可靠性。因此要控制GOTO語(yǔ)句的使用。但有時(shí)完全不用GOTO語(yǔ)句進(jìn)行程序編碼,比用GOTO語(yǔ)句編出的程序可讀性差。例如,在查找結(jié)束時(shí),文件訪問結(jié)束時(shí),出現(xiàn)錯(cuò)誤情況要從循環(huán)中轉(zhuǎn)出時(shí),使用布爾變量和條件結(jié)構(gòu)來(lái)實(shí)現(xiàn)就不如用GOTO語(yǔ)句來(lái)得簡(jiǎn)潔易懂?!?-3】①、④、⑥。編制程序的過程實(shí)際上是根據(jù)設(shè)計(jì)的結(jié)果,用某種機(jī)器能夠識(shí)別的程序設(shè)計(jì)語(yǔ)言,將設(shè)計(jì)翻譯成機(jī)器代碼的過程。因此,必須如實(shí)地按照設(shè)計(jì)說明書編寫程序。至于設(shè)計(jì)說明書中含糊不清的地方,應(yīng)當(dāng)在編程時(shí)與分析人員或設(shè)計(jì)人員協(xié)商,對(duì)這些地方做出適當(dāng)?shù)慕忉?。另外,考慮到將來(lái)的程序修改,必須為程序編寫完整的說明書,同時(shí)程序必須編寫得容易讓別人看得懂,這樣程序才容易修改,修改時(shí)不容易出錯(cuò),而且容易驗(yàn)證修改后得結(jié)果。還有,編寫程序的人不須重新考慮程序要完成什么功能,這些已經(jīng)在軟件分析與設(shè)計(jì)過程中充分考慮過了。【4-7】結(jié)構(gòu)化的程序流程圖:low=alow=a;high=b;flow=Func(low);fhigh=Func(high);mid=(low+highmid=(low+high)/2;fmid=Func(mid);end=1;flow*fhigh>0.0?Tretval=0;T|fmid|epsT|fmid|eps1?Fend==1?返回retval;結(jié)束Fend==1?返回retval;結(jié)束Fhigh-mideps2high-mideps2?FTend=0;retval=end=0;retval=mid;TTFflow*fmid>0.0?FTFflow*fmid>0.0?Fhigh=mid;low=mid;flow=high=mid;low=mid;flow=fmid;軟件測(cè)試復(fù)習(xí)要求1.了解軟件測(cè)試的目的和原則。2.了解軟件錯(cuò)誤的分類。3.了解軟件測(cè)試的過程和策略。4.了解軟件測(cè)試用例設(shè)計(jì)的方法,掌握邏輯覆蓋、基本路徑測(cè)試、因果圖等測(cè)試用例設(shè)計(jì)方法。5.了解程序靜態(tài)測(cè)試的方法。習(xí)題【5-1】從供選擇的答案中選出應(yīng)填入下列()中的字句。軟件測(cè)試的目的是(A)。為了提高測(cè)試的效率,應(yīng)該(B)。使用白盒測(cè)試方法時(shí),確定測(cè)試數(shù)據(jù)應(yīng)根據(jù)(C)和指定的覆蓋標(biāo)準(zhǔn)。與設(shè)計(jì)測(cè)試數(shù)據(jù)無(wú)關(guān)的文檔是(D)。軟件的集成測(cè)試工作最好由(E)承擔(dān),以提高集成測(cè)試的效果。供選擇的答案:A. ①評(píng)價(jià)軟件的質(zhì)量 ②發(fā)現(xiàn)軟件的錯(cuò)誤③找出軟件中的所有錯(cuò)誤 ④證明軟件是正確的B. ①隨機(jī)地選取測(cè)試數(shù)據(jù) ②取一切可能的輸入數(shù)據(jù)作為測(cè)試數(shù)據(jù)③在完成編碼以后制定軟件的測(cè)試計(jì)劃④選擇發(fā)現(xiàn)錯(cuò)誤的可能性大的數(shù)據(jù)作為測(cè)試數(shù)據(jù)C. ①程序的內(nèi)部邏輯 ②程序的復(fù)雜程度③使用說明書 ④程序的功能D. ①該軟件的設(shè)計(jì)人員 ②程序的復(fù)雜程度③源程序 ④項(xiàng)目開發(fā)計(jì)劃E. ①該軟件的設(shè)計(jì)人員 ②該軟件開發(fā)組的負(fù)責(zé)人③該軟件的編程人員 ④不屬于該軟件開發(fā)組的軟件設(shè)計(jì)人員【5-2】請(qǐng)從供選擇的答案中選出應(yīng)填入下列()中的字句。程序的三種基本控制結(jié)構(gòu)是(A)。它們的共同點(diǎn)是(B)。結(jié)構(gòu)化程序設(shè)計(jì)的一種基本方法是(C)。軟件測(cè)試的目的是(D)。軟件調(diào)試的目的是(E)。供選擇的答案:A. ①過程,子程序,分程序 ②順序,條件,循環(huán)③遞歸,堆棧,隊(duì)列 ④調(diào)用,返回,轉(zhuǎn)移B. ①不能嵌套使用 ②只能用來(lái)寫簡(jiǎn)單的程序③已經(jīng)用硬件實(shí)現(xiàn) ④只有一個(gè)入口和一個(gè)出口C. ①篩選法 ②遞歸法 ③歸納法 ④逐步求精法D. ①證明程序中沒有錯(cuò)誤 ②發(fā)現(xiàn)程序中的錯(cuò)誤③測(cè)量程序的動(dòng)態(tài)特性 ④檢查程序中的語(yǔ)法錯(cuò)誤E. ①找出錯(cuò)誤所在并改正之 ②排除存在錯(cuò)誤的可能性③對(duì)錯(cuò)誤性質(zhì)進(jìn)行分類 ④統(tǒng)計(jì)出錯(cuò)的次數(shù)【5-3】從下列關(guān)于軟件測(cè)試的敘述中,選出5條正確的敘述。(1)用黑盒法測(cè)試時(shí),測(cè)試用例是根據(jù)程序內(nèi)部邏輯設(shè)計(jì)的。(2)盡量用公共過程或子程序去代替重復(fù)的代碼段。(3)測(cè)試是為了驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶的要求。(4)對(duì)于連鎖型分支結(jié)構(gòu),若有n個(gè)判定語(yǔ)句,則有2n條路徑。(5)盡量采用復(fù)合的條件測(cè)試,以避免嵌套的分支結(jié)構(gòu)。(6)GOTO語(yǔ)句概念簡(jiǎn)單,使用方便,在某些情況下,保留GOTO語(yǔ)句反能使寫出的程序更加簡(jiǎn)潔。(7)發(fā)現(xiàn)錯(cuò)誤多的程序模塊,殘留在模塊中的錯(cuò)誤也多。(8)黑盒測(cè)試方法中最有效的是因果圖法。(9)在做程序的單元測(cè)試時(shí),樁(存根)模塊比驅(qū)動(dòng)模塊容易編寫。(10)程序效率的提高主要應(yīng)通過選擇高效的算法來(lái)實(shí)現(xiàn)?!?-4】從供選擇的答案中選出同下列關(guān)于軟件測(cè)試的各條敘述關(guān)系最密切的字句。(1)對(duì)可靠性要求很高的軟件,例如操作系統(tǒng),由第三者對(duì)源代碼進(jìn)行逐行檢查。(2)已有的軟件被改版時(shí),由于受到變更的影響,改版前正常的功能可能發(fā)生異常,性能也可能下降。因此,對(duì)變更的軟件進(jìn)行測(cè)試是必要的。(3)在意識(shí)到被測(cè)試模塊的內(nèi)部結(jié)構(gòu)或算法的情況下進(jìn)行測(cè)試。(4)為了確認(rèn)用戶的需求,先做出系統(tǒng)的主要部分,提交給用戶試用。(5)在測(cè)試具有層次結(jié)構(gòu)的大型軟件時(shí),有一種方法是從上層模塊開始,由上到下進(jìn)行測(cè)試。此時(shí),有必要用一些模塊替代尚未測(cè)試過的下層模塊。供選擇的答案:AE: ①仿真器 ②代碼審查③模擬器 ④樁 ⑤驅(qū)動(dòng)器⑥域測(cè)試 ⑦黑盒測(cè)試 ⑧原型 ⑨白盒測(cè)試 ⑩退化測(cè)試【5-5】對(duì)小的程序進(jìn)行窮舉測(cè)試是可能的,用窮舉測(cè)試能否保證程序是百分之百正確呢?【5-6】在任何情況下單元測(cè)試都是可能的嗎?都是需要的嗎?【5-7】從供選擇的答案中選出應(yīng)填入下面有關(guān)軟件測(cè)試的敘述的()內(nèi)的正確答案。軟件測(cè)試方法可分為黑盒測(cè)試法和白盒測(cè)試法兩種。黑盒測(cè)試法是通過分析程序的(A)來(lái)設(shè)計(jì)測(cè)試用例的方法。除了測(cè)試程序外,它還適用于對(duì)(B)階段的軟件文檔進(jìn)行測(cè)試。白盒測(cè)試法是根據(jù)程序的(C)來(lái)設(shè)計(jì)測(cè)試用例的方法。除了測(cè)試程序外,它也適用于對(duì)(D)階段的軟件文檔進(jìn)行測(cè)試。白盒法測(cè)試程序時(shí)常按照給定的覆蓋條件選取測(cè)試用例。(E)覆蓋比(F)覆蓋嚴(yán)格,它使得每一個(gè)判定的每一條分支至少經(jīng)歷一次。(G)覆蓋既是判定覆蓋,又是條件覆蓋,但它并不保證使各種條件都能取到所有可能的值。(H)覆蓋比其他條件都要嚴(yán)格,但它不能保證覆蓋程序中的每一條路徑。單元測(cè)試一般以(I)為主,測(cè)試的依據(jù)是(J)。供選擇的答案:A,C:①應(yīng)用范圍 ②內(nèi)部邏輯 ③功能 ④輸入數(shù)據(jù)B,D:①編碼 ②軟件詳細(xì)設(shè)計(jì) ③軟件總體設(shè)計(jì)④需求分析E,F,G,H:①語(yǔ)句 ②判定 ③條件 ④判定/條件⑤多重條件 ⑥路徑I:①白盒法 ②黑盒法J:①模塊功能規(guī)格說明 ②系統(tǒng)模塊結(jié)構(gòu)圖 ③系統(tǒng)需求規(guī)格說明【5-8】從供選擇的答案中選出應(yīng)該填入下列關(guān)于軟件測(cè)試的敘述的()內(nèi)的正確答案。軟件測(cè)試中常用的靜態(tài)分析方法是(A)和(B)。(B)用于檢查模塊或子程序間的調(diào)用是否正確。分析方法(白盒方法)中常用的方法是(C)方法。非分析方法(黑盒方法)中常用的方法是(D)方法和(E)方法。(E)方法根據(jù)輸出對(duì)輸入的依賴關(guān)系設(shè)計(jì)測(cè)試用例。供選擇的答案:AB: ①引用分析 ②算法分析 ③可靠性分析 ④效率分析 ⑤接口分析 ⑥操作分析C~E: ①路徑測(cè)試②等價(jià)類 ③因果圖 ④歸納測(cè)試⑤綜合測(cè)試⑥追蹤 ⑦深度優(yōu)先 ⑧調(diào)試⑨相對(duì)圖習(xí)題解答【5-1】A.②B.④C.①D.④E.④軟件測(cè)試的目的是軟件中的錯(cuò)誤。因?yàn)椴豢赡馨阉锌赡艿妮斎霐?shù)據(jù)都拿來(lái)測(cè)試(時(shí)間花費(fèi)不起),為了提高測(cè)試的效率,應(yīng)該選擇發(fā)現(xiàn)錯(cuò)誤的可能性大的數(shù)據(jù)作為測(cè)試數(shù)據(jù)。使用白盒測(cè)試方法時(shí),確定測(cè)試數(shù)據(jù)應(yīng)根據(jù)程序的內(nèi)部邏輯和指定的覆蓋標(biāo)準(zhǔn),可以不考慮程序的功能。與設(shè)計(jì)測(cè)試數(shù)據(jù)無(wú)關(guān)的文檔是項(xiàng)目開發(fā)計(jì)劃。軟件的集成測(cè)試工作最好由不屬于該軟件開發(fā)組的軟件設(shè)計(jì)人員承擔(dān),以提高集成測(cè)試的效果?!?-2】A.②B.④C.④D.②E.① 1966年,Bohm與Jacopini提出任何單入口單出口的沒有“死循環(huán)”的程序都能由三種最基本的控制結(jié)構(gòu)構(gòu)造出來(lái)。這三種基本控制結(jié)構(gòu)就是“順序結(jié)構(gòu)”、“選擇IF-THEN-ELSE結(jié)構(gòu)”、“重復(fù)DO-WHILE或DO-UNTIL結(jié)構(gòu)”。它們的共同點(diǎn)是只有一個(gè)入口和一個(gè)出口。E.W.Dijkstra提出了程序要實(shí)現(xiàn)結(jié)構(gòu)化的主張,并將這一類程序設(shè)計(jì)稱為結(jié)構(gòu)化程序設(shè)計(jì)。這種方法的一個(gè)重要原則就是采用自頂向下、逐步求精的方法編寫程序。N.Wirth曾做過如下說明:“我們對(duì)付一個(gè)復(fù)雜問題的最重要的方法就是抽象。因此,對(duì)于一個(gè)復(fù)雜的問題,不要急于馬上用計(jì)算機(jī)指令、數(shù)字和邏輯符號(hào)來(lái)表示它,而應(yīng)當(dāng)先用較自然的抽象的語(yǔ)句來(lái)表示,從而得到抽象的程序。抽象程序?qū)Τ橄蟮臄?shù)據(jù)類型進(jìn)行某些特定的運(yùn)算,并用一些合適的記號(hào)(可以是自然語(yǔ)言)來(lái)表示。下一步對(duì)抽象程序再做分解,進(jìn)入下一個(gè)抽象的層次。這樣的細(xì)化過程一直進(jìn)行下去,直到程序能被計(jì)算機(jī)接受為止。此時(shí)的程序已經(jīng)是用某種高級(jí)語(yǔ)言或機(jī)器指令書寫的了?!避浖{(diào)試則是在進(jìn)行了成功的測(cè)試之后才開始的工作。它與軟件測(cè)試不同,軟件測(cè)試的目的是盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤,但進(jìn)一步診斷和改正程序中潛在的錯(cuò)誤,則是調(diào)試的任務(wù)。調(diào)試活動(dòng)由兩部分組成:①確定程序中可疑錯(cuò)誤的確切性質(zhì)和位置。②對(duì)程序(設(shè)計(jì),編碼)進(jìn)行修改,排除這個(gè)錯(cuò)誤?!?-3】正確的敘述有(4)、(5)、(6)、(7)、(10)。黑盒測(cè)試主要是根據(jù)程序的有關(guān)功能規(guī)格說明和覆蓋準(zhǔn)則來(lái)設(shè)計(jì)測(cè)試用例,進(jìn)行測(cè)試的,不是根據(jù)程序的內(nèi)部邏輯來(lái)設(shè)計(jì)測(cè)試用例,這是白盒測(cè)試做的事情。在所有黑盒測(cè)試方法中,最有效的不是因果圖法,而是邊界值分析方法。測(cè)試的目的是盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤,其附帶的收獲才是驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶的要求。測(cè)試的一條重要原則是:發(fā)現(xiàn)錯(cuò)誤多的程序模塊,殘留在模塊中的錯(cuò)誤也多。軟件可靠性模型(Shooman)就是依據(jù)這個(gè)原則建立它的公式的。對(duì)于連鎖型分支結(jié)構(gòu),若有n個(gè)判定語(yǔ)句,則有2n條路徑。因此,隨著n的增大,路徑數(shù)增長(zhǎng)非常快。單元測(cè)試時(shí),因?yàn)闃赌K要模擬子模塊的功能,這不是一件容易的事情,而驅(qū)動(dòng)模塊只是控制被測(cè)模塊的執(zhí)行,所以樁模塊的編寫比驅(qū)動(dòng)模塊的編寫要難得多。在程序設(shè)計(jì)風(fēng)格方面,如果重復(fù)的代碼段沒有明顯的功能,不可以抽取出來(lái)形成獨(dú)立的公共過程或子程序,只有在這些代碼段表現(xiàn)出獨(dú)立的功能時(shí),才可把它們抽取出來(lái)形成獨(dú)立的公共過程或子程序。另外,程序效率的提高主要應(yīng)通過選擇高效的算法或使用高效的語(yǔ)言編譯器來(lái)實(shí)現(xiàn)。GOTO語(yǔ)句概念簡(jiǎn)單,使用方便,在某些情況下,保留GOTO語(yǔ)句反能使寫出的程序更加簡(jiǎn)潔,這句話是正確的?!?-4】(1)②(2)⑩(3)⑨(4)⑧(5)④(1)對(duì)可靠性要求很高的軟件,由第三者對(duì)源代碼進(jìn)行逐行檢查,這是代碼審查。(2)軟件變更時(shí)可能發(fā)生退化現(xiàn)象:原來(lái)正常的功能可能發(fā)生異常,性能也可能下降。因此,對(duì)變更的軟件要進(jìn)行退化測(cè)試。(3)基于被測(cè)試模塊的內(nèi)部結(jié)構(gòu)或算法設(shè)計(jì)測(cè)試用例進(jìn)行測(cè)試,這是白盒測(cè)試。(4)為了確認(rèn)用戶的需求,先做出系統(tǒng)的原型,提交給用戶試用。(5)自頂向下對(duì)具有層次結(jié)構(gòu)的大型軟件進(jìn)行集成測(cè)試時(shí),需要設(shè)計(jì)一些虛擬模塊來(lái)替代尚未測(cè)試過的下層模塊,這些模塊叫做樁模塊。【5-5】對(duì)小程序進(jìn)行窮舉測(cè)試,不見得能保證程序百分之百正確。所謂窮舉測(cè)試是拿所有可能的輸入數(shù)據(jù)來(lái)作為測(cè)試用例(黑盒測(cè)試),或覆蓋程序中所有可能的路徑(白盒測(cè)試)。對(duì)于小程序來(lái)說,實(shí)際上并不能真正作到窮舉測(cè)試。例如前面講過,一個(gè)小程序P只有兩個(gè)輸入X和Y及輸出Z,在字長(zhǎng)為32位的計(jì)算機(jī)上運(yùn)行。如果X、Y只取整數(shù),考慮把所有的X、Y值都做為測(cè)試數(shù)據(jù),按黑盒方法進(jìn)行窮舉測(cè)試,這樣做可能采用的測(cè)試數(shù)據(jù)組(Xi,Yi),基數(shù)(radix)i的最大可能數(shù)目為:232×232=264。如果程序P測(cè)試一組X、Y數(shù)據(jù)需要1毫秒,而且假定一天工作24小時(shí),一年工作365天,要完成264組測(cè)試,需要5億年。
【5-6】單元測(cè)試又稱模塊測(cè)試,是針對(duì)軟件設(shè)計(jì)的最小單位─程序模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯(cuò)。單元測(cè)試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計(jì)測(cè)試用例。多個(gè)模塊可以平行地獨(dú)立進(jìn)行單元測(cè)試。單元測(cè)試是在編碼階段完成的,每編寫出一個(gè)程序模塊,就開始做這個(gè)模塊的單元測(cè)試,所以只要采用模塊化方法開發(fā)軟件,單元測(cè)試都是必需的。它可由編寫程序的人來(lái)完成。因?yàn)樗枰鶕?jù)程序的內(nèi)部結(jié)構(gòu)設(shè)計(jì)測(cè)試用例,對(duì)于那些不了解程序內(nèi)部細(xì)節(jié)的人,這種測(cè)試無(wú)法進(jìn)行?!?-7】A.③B.④C.②D.②E.②F.①G.④H.⑤I.①J.①軟件測(cè)試方法可分為黑盒測(cè)試法和白盒測(cè)試法兩種。黑盒測(cè)試法是基于程序的功能來(lái)設(shè)計(jì)測(cè)試用例的方法。除了測(cè)試程序外,它還適用于對(duì)需求分析階段的軟件文檔進(jìn)行測(cè)試。白盒測(cè)試法是根據(jù)程序的內(nèi)部邏輯來(lái)設(shè)計(jì)測(cè)試用例的方法。除了測(cè)試程序外,它也適用于對(duì)軟件詳細(xì)設(shè)計(jì)階段的軟件文檔進(jìn)行測(cè)試。白盒法測(cè)試程序時(shí)常按照給定的覆蓋條件選取測(cè)試用例。判定覆蓋比語(yǔ)句覆蓋嚴(yán)格,它使得每一個(gè)判定的每一條分支至少經(jīng)歷一次。判定/條件覆蓋既是判定覆蓋,又是條件覆蓋,但它并不保證使各種條件都能取到所有可能的值。多重條件覆蓋,也叫組合條件覆蓋,比其他條件都要嚴(yán)格,但它不能保證覆蓋程序中的每一條路徑。單元測(cè)試一般以白盒法為主,測(cè)試的依據(jù)是系統(tǒng)的模塊功能規(guī)格說明。【5-8】A.①B.⑤C.①D.②E.③軟件測(cè)試中常用的靜態(tài)分析方法是引用分析和接口分析。接口分析用于檢查模塊或子程序間的調(diào)用是否正確。分析方法(白盒方法)中常用的方法是路徑測(cè)試方法。非分析方法(黑盒方法)中常用的方法是等價(jià)類(劃分)方法和因果圖方法。因果圖方法根據(jù)輸出對(duì)輸入的依賴關(guān)系設(shè)計(jì)測(cè)試用例。面向?qū)ο蠹夹g(shù)復(fù)習(xí)要求1.了解面向?qū)ο蟮母拍?.了解用面向?qū)ο蠓椒?gòu)造軟件的開發(fā)過程3.了解面向?qū)ο蠓治龇椒?.了解面向?qū)ο笤O(shè)計(jì)方法習(xí)題【6-1】什么叫面向?qū)ο??面向?qū)ο蠓椒ǖ奶攸c(diǎn)是什么?為什么要用面向?qū)ο蠓椒ㄩ_發(fā)軟件?【6-2】什么是“對(duì)象”?識(shí)別對(duì)象時(shí)將潛在對(duì)象分成7類,試給出這7類對(duì)象的名稱,并舉例說明。【6-3】什么是“類”?“類”與傳統(tǒng)的數(shù)據(jù)類型有什么關(guān)系?有什么區(qū)別?【6-6】面向?qū)ο箝_發(fā)方法與面向數(shù)據(jù)流的結(jié)構(gòu)化開發(fā)方法有什么不同?使用面向?qū)ο箝_發(fā)方法的優(yōu)點(diǎn)在什么地方?【6-12】在類的設(shè)計(jì)中需要遵循的方針是什么?三個(gè)主要的設(shè)計(jì)準(zhǔn)則:抽象、信息隱蔽和模塊化如何才能作到?習(xí)題解答【6-1】關(guān)于“面向?qū)ο蟆?,有許多不同的看法。Coad和Yourdon給出了一個(gè)定義:“面向?qū)ο?對(duì)象+類+繼承+消息通信”。如果一個(gè)軟件系統(tǒng)是使用這樣4個(gè)概念設(shè)計(jì)和實(shí)現(xiàn)的,則認(rèn)為這個(gè)軟件系統(tǒng)是面向?qū)ο蟮?。面向?qū)ο蠓椒ǖ奶攸c(diǎn)是:方法的唯一性,即方法是對(duì)軟件開發(fā)過程所有階段進(jìn)行綜合考慮而得到的。從生存期的一個(gè)階段到下一個(gè)階段的高度連續(xù)性,即生存期后一階段的成果只是在前一階段成果的補(bǔ)充和修改。把面向?qū)ο蠓治?OOA)、面向?qū)ο笤O(shè)計(jì)(OOD)和面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)集成到生存期的相應(yīng)階段。使用面向?qū)ο蠓椒ㄩ_發(fā)軟件的好處是:開發(fā)方法的唯一性,開發(fā)階段的高度連續(xù)性,表示方式的一致性;問題空間實(shí)體的自然表示,減輕了設(shè)計(jì)者的負(fù)擔(dān),在設(shè)計(jì)系統(tǒng)之初不必考慮一個(gè)很完整的解決方案。建立穩(wěn)定的系統(tǒng)結(jié)構(gòu),可促進(jìn)復(fù)用性,易于維護(hù),易于修改,可合理利用共同性,減少?gòu)?fù)雜性?!?-2】對(duì)象的定義:對(duì)象是面向?qū)ο箝_發(fā)模式的基本成分,是現(xiàn)實(shí)世界中個(gè)體或事物的抽象表示。每個(gè)對(duì)象可由一組屬性和它可以執(zhí)行的一組操作來(lái)定義??赡艿臐撛趯?duì)象有7類:外部實(shí)體:它們產(chǎn)生或接受為目標(biāo)系統(tǒng)所使用的信息。如各種物理設(shè)備、使用人員、其它相關(guān)的子系統(tǒng)。事物:?jiǎn)栴}的信息域所涉及的概念實(shí)體。如各種報(bào)告、顯示、文字、信號(hào)、規(guī)格說明等。事件:系統(tǒng)運(yùn)行時(shí)發(fā)生的并需要系統(tǒng)記憶的事件。如狀態(tài)轉(zhuǎn)換、物理運(yùn)動(dòng)等。角色:與系統(tǒng)有交互的各種人員所扮演的角色。如經(jīng)理、工程師、銷售人員等。場(chǎng)所或位置:建立系統(tǒng)整體環(huán)境或問題上下文的場(chǎng)所、位置。如基于計(jì)算機(jī)的系統(tǒng)的安裝場(chǎng)所等。組織機(jī)構(gòu):與應(yīng)用有關(guān)的組織機(jī)構(gòu)。如組織,部門等。結(jié)構(gòu):定義由一組成分對(duì)象組成的聚合對(duì)象,或在極端情況下,定義對(duì)象的相關(guān)類。如傳感器、四輪驅(qū)動(dòng)車、計(jì)算機(jī)等?!?-3】把具有相同特征和行為的對(duì)象歸在一起就形成了類。類成為某些對(duì)象的模板,抽象地描述了屬于該類的全部對(duì)象的屬性和操作。屬于某個(gè)類的對(duì)象叫做該類的實(shí)例。對(duì)象的狀態(tài)則包含在它的實(shí)例變量,即實(shí)例的屬性中。類定義了各個(gè)實(shí)例所共有的結(jié)構(gòu),類的每一個(gè)實(shí)例都可以使用類中定義的操作。實(shí)例的當(dāng)前狀態(tài)是由實(shí)例所執(zhí)行的操作定義的。類,就它是一個(gè)數(shù)據(jù)值的聚合的意義上來(lái)看,與Pascal中的記錄或C中的結(jié)構(gòu)類似,但又有差別。類擴(kuò)展了通常的記錄語(yǔ)義,可提供各種級(jí)別的可訪問性。也就是說,記錄的某些成份可能是不可訪問的,而這些成份對(duì)于本記錄型來(lái)說具有可訪問性。類不同于記錄,因?yàn)樗鼈儼瞬僮鞯亩x,這些操作與類中聲明的數(shù)據(jù)值有相同的地位。【6-6】結(jié)構(gòu)化開發(fā)方法是使用最廣泛、歷史最長(zhǎng)的過程化開發(fā)方法。結(jié)構(gòu)化開發(fā)方法產(chǎn)生過程的抽象,這些抽象把軟件視為處理流,定義構(gòu)成一系列步驟的算法,每一步驟都是帶有預(yù)定義輸入和特定輸出的一個(gè)過程,把這些步驟串聯(lián)在一起可產(chǎn)生合理的穩(wěn)定的貫通于整個(gè)程序的控制流。這將最終導(dǎo)致一個(gè)很簡(jiǎn)單的具有靜態(tài)結(jié)構(gòu)的體系結(jié)構(gòu)。在結(jié)構(gòu)化開發(fā)方法中,數(shù)據(jù)結(jié)構(gòu)是應(yīng)算法步驟的要求而開發(fā)的。數(shù)據(jù)結(jié)構(gòu)貫穿于過程,提供過程需要傳送給它的操作的信息。系統(tǒng)的狀態(tài)是一組全局變量,這組全局變量保持了狀態(tài)的值,把它們從一個(gè)過程傳送到另一個(gè)過程。結(jié)構(gòu)化開發(fā)方法是一種成熟的應(yīng)用開發(fā)過程。對(duì)這種方法已經(jīng)存在許多支持。然而,在大型系統(tǒng)的開發(fā)上和在面向用戶系統(tǒng)的構(gòu)造上存在一些問題。改進(jìn)大型系統(tǒng)開發(fā)的技術(shù)主要集中在開發(fā)數(shù)據(jù)抽象。日益增多的考慮是使用抽象數(shù)據(jù)類型,把過程化系統(tǒng)開發(fā)過程包括到數(shù)據(jù)驅(qū)動(dòng)的方法中。隨著大型系統(tǒng)的開發(fā),接踵而來(lái)的問題就是要把過程抽象與數(shù)據(jù)抽象方法組合起來(lái),這種需要導(dǎo)致了面向?qū)ο箝_發(fā)方法的誕生。面向?qū)ο箝_發(fā)方法是我們分解問題所使用方法演化的結(jié)果。在結(jié)構(gòu)化開發(fā)方法中過程抽象是優(yōu)先的,而面向?qū)ο箝_發(fā)方法中優(yōu)先的是實(shí)體,即問題論域的對(duì)象。在面向?qū)ο箝_發(fā)方法中,把標(biāo)識(shí)和模型化問題論域中的主要實(shí)體做為系統(tǒng)開發(fā)的起點(diǎn),主要考慮對(duì)象的行為而不是必須執(zhí)行的一系列動(dòng)作。面向?qū)ο笙到y(tǒng)中的對(duì)象是數(shù)據(jù)抽象與過程抽象的一個(gè)混合體。表示這些實(shí)體的數(shù)據(jù)抽象是面向?qū)ο笤O(shè)計(jì)過程的主要產(chǎn)品,系統(tǒng)的狀態(tài)保存在各個(gè)數(shù)據(jù)抽象的核心所定義的數(shù)據(jù)存儲(chǔ)中??刂屏鞅环殖蓧K,并被包括在各個(gè)在數(shù)據(jù)抽象上的各個(gè)操作里面。不像在結(jié)構(gòu)化開發(fā)方法里那樣,把數(shù)據(jù)從一個(gè)過程傳送到另一個(gè)過程,而是控制流從一個(gè)數(shù)據(jù)抽象被傳送到另一個(gè)數(shù)據(jù)抽象。完成的系統(tǒng)體系結(jié)構(gòu)更復(fù)雜但也更靈活。在塊中分離的控制流允許把復(fù)雜的動(dòng)作視為局部的相互影響?!?-12】在設(shè)計(jì)類時(shí)需要遵循的方針是:信息隱蔽:通過信息隱蔽可保護(hù)類的存儲(chǔ)表示不被其它類的實(shí)例直接存取。消息限制:該類實(shí)例的用戶應(yīng)當(dāng)只能使用界面提供的操作。 狹窄界面:只有對(duì)其它類的實(shí)例是必要的操作才放到界面上。強(qiáng)內(nèi)聚:模塊內(nèi)部各個(gè)部分之間應(yīng)有較強(qiáng)的關(guān)系,它們不能分別標(biāo)識(shí)。弱耦合:一個(gè)單獨(dú)模塊應(yīng)盡量不依賴于其它模塊。顯式信息傳遞:兩個(gè)類之間的交互應(yīng)當(dāng)僅涉及顯式信息傳遞。派生類當(dāng)做派生類型:每個(gè)派生類應(yīng)該當(dāng)做基類的特殊化來(lái)開發(fā),而基類所具有的公共界面成為派生類的共有界面的一個(gè)子集。抽象類:某些語(yǔ)言提供了一個(gè)類,用它做為繼承結(jié)構(gòu)的開始點(diǎn),所有用戶定義的類都直接或間接以這個(gè)類為基類。為了在類的設(shè)計(jì)中做到抽象、信息隱蔽和模塊化:以類作為系統(tǒng)的基本模塊單元,通過一般化―特殊化關(guān)系和整體―部分關(guān)系,搭建整個(gè)系統(tǒng)的類層次結(jié)構(gòu),實(shí)現(xiàn)數(shù)據(jù)抽象和過程抽象;將數(shù)據(jù)和相關(guān)的操作封裝在類內(nèi)部,建立共有、私有和子類型等存取級(jí)別,將數(shù)據(jù)表示定義成為類的私有成員,實(shí)現(xiàn)信息隱蔽。通過建立類屬性(類模板),將某些有可復(fù)用要求的類設(shè)計(jì)成在數(shù)據(jù)類型上通用的可復(fù)用的軟件構(gòu)件,這樣有助于實(shí)現(xiàn)模塊化。軟件維護(hù)在軟件交付使用后修改軟件的過程稱為軟件維護(hù)。軟件維護(hù)一般不包括重大的體系結(jié)構(gòu)的改變,變更的實(shí)現(xiàn)方法一般是修改已有的系統(tǒng)構(gòu)件以及在必要的地方添加新構(gòu)件到系統(tǒng)中。軟件維護(hù)的分類?改正性維護(hù):修改軟件缺陷。?適應(yīng)性維護(hù):適應(yīng)變更的操作環(huán)境(硬件、操作系統(tǒng)平臺(tái)、其他支持軟件)。?增強(qiáng)性維護(hù):系統(tǒng)需求改變(機(jī)構(gòu)因素、業(yè)務(wù)改變)軟件再工程是試圖增加當(dāng)前系統(tǒng)(或稱遺留系統(tǒng))的總體質(zhì)量、提高可維護(hù)性的工程。軟件再工程過程中的活動(dòng)主要包括以下幾個(gè)方面:?文檔重構(gòu)(redocument)?結(jié)構(gòu)重組(restructuring)?逆向工程(reverseengineering)?再工程(reengineering)【7-6】改錯(cuò)性維護(hù)與“排錯(cuò)”是否是一回事?為什么?【7-7】從下列敘述中選出5條與提高軟件的可移植性有關(guān)的敘述。①把程序中與計(jì)算機(jī)硬件特性有關(guān)的部分集成在一起。②選擇時(shí)間效率和空間效率高的算法。③使用結(jié)構(gòu)化的程序設(shè)計(jì)方法。④盡量用高級(jí)語(yǔ)言編寫程序中對(duì)效率要求不高的部分。⑤盡可能減少注釋。⑥采用表格控制方式。⑦文檔資料詳盡、正確。⑧在有虛擬存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)上開發(fā)軟件。⑨減少程序中對(duì)文件的讀寫次數(shù)。⑩充分利用宿主計(jì)算機(jī)的硬件特性。【7-6】改錯(cuò)性維護(hù)與“排錯(cuò)(調(diào)試)”不是一個(gè)概念。調(diào)試是作為測(cè)試的后繼工作而出現(xiàn)的,是當(dāng)測(cè)試發(fā)現(xiàn)軟件中的錯(cuò)誤后,進(jìn)一步診斷和改正程序中潛在的錯(cuò)誤的活動(dòng)。而改正性維護(hù)是指在軟件交付使用后,由于開發(fā)時(shí)測(cè)試的不徹底、不完全,必然會(huì)有一部分隱藏的錯(cuò)誤被帶到運(yùn)行階段來(lái),這些隱藏下來(lái)的錯(cuò)誤在某些特定的使用環(huán)境下就會(huì)暴露出來(lái)。為了識(shí)別和糾正軟件錯(cuò)誤、改正軟件性能上的缺陷、排除實(shí)施中的誤使用所進(jìn)行的診斷和改正錯(cuò)誤的過程。調(diào)試在程序編碼階段、測(cè)試階段、運(yùn)行和維護(hù)階段都可以發(fā)揮作用,它實(shí)際上是一種工具或手段。在軟件交付運(yùn)行之后,用戶實(shí)際充當(dāng)了測(cè)試員的角色,一旦發(fā)現(xiàn)軟件運(yùn)行中的錯(cuò)誤或缺陷,就會(huì)將問題報(bào)告通報(bào)軟件銷售商,申請(qǐng)軟件維護(hù)。其后軟件維護(hù)人員可以利用調(diào)試手段來(lái)診斷和改正軟件中存在的錯(cuò)誤。這時(shí)可能涉及的范圍不只包括程序,還有文檔和數(shù)據(jù),不僅可能修改程序代碼,而且可能需要修改設(shè)計(jì)。甚至需求。所以改正性維護(hù)是在更大范圍中做工作?!?-7】正確的敘述有①、③、④、⑥、⑦。 為了提高軟件的可移植性,應(yīng)當(dāng)盡可能用高級(jí)語(yǔ)言編寫源程序代碼。對(duì)于與硬件或操作系統(tǒng)有關(guān)的部分,或?qū)π室蠛芨叩牟糠郑瑧?yīng)當(dāng)為它們建立專門的模塊,將用匯編語(yǔ)言寫的程序封裝在這些模塊中,與程序中其它部分以事先約定的標(biāo)準(zhǔn)方式接口。這樣,一旦硬件環(huán)境或操作系統(tǒng)環(huán)境發(fā)生變化,只需修改個(gè)別模塊即可。 采用表格控制方式,將所有的外部設(shè)備接口或與其它系統(tǒng)的接口,包括信息傳遞、驅(qū)動(dòng)程序入口等都用表格控制,即使將來(lái)硬件、相關(guān)軟件發(fā)生的變化,只需修改表格中的登記項(xiàng),原來(lái)的程序一律可以不改。 為了將來(lái)修改方便,不致于引入新的錯(cuò)誤,相關(guān)文檔一定要齊全、正確,程序中必須有必要的注釋,并使用如結(jié)構(gòu)化程序設(shè)計(jì)方法這樣的良好的程序設(shè)計(jì)方法來(lái)編寫程序。至于算法選擇,與效率有關(guān),與可移植性無(wú)關(guān)。其它敘述,如⑧、⑨、⑩,都不利于可移植性。編號(hào):軟件工程課程設(shè)計(jì)說明書題目:六子棋游戲軟件開發(fā)學(xué)院:計(jì)算機(jī)科學(xué)與工程學(xué)院專業(yè):信息安全學(xué)生姓名:學(xué)號(hào):指導(dǎo)教師:20年10月8日摘要六子棋是流傳于中國(guó)民間的一類版圖游戲。是一種雙人對(duì)弈搏殺的一種游戲,交戰(zhàn)雙方棋子數(shù)均為六顆,故稱六子棋。六子棋不同于五子棋,沒有過多的棋子無(wú)論是從感觀上還是公平性上都要優(yōu)先于五子棋,六子棋的規(guī)則簡(jiǎn)單易懂,不像國(guó)際棋規(guī)則中的繁復(fù)規(guī)則,適用于各個(gè)年齡段的人玩。規(guī)則簡(jiǎn)單明了,游戲?qū)Νh(huán)境的要求不高,孩子們大都是在光滑的地面或石板上畫上方格,以石子或木棍、草節(jié)等為棋子,并有簡(jiǎn)單的比賽,可以鍛煉腦力。隨著經(jīng)濟(jì)的發(fā)展和人們的生活水平的提高,每個(gè)人的業(yè)余休閑時(shí)間越發(fā)增多。人們也已經(jīng)開始厭煩這燈紅酒綠的生活,所以有許多的青年人多一起老一輩們所玩的游戲越發(fā)的感興趣,其中六子棋就是再度興起的一種小型的游戲,各種網(wǎng)站關(guān)于六子棋的網(wǎng)頁(yè)版游戲頻繁出現(xiàn),令人耳目一新啊,例如3366小游戲,手機(jī)版的六子棋游戲也開始漸漸走入各種類型的手機(jī)中,為人民增添了生活的樂趣豐富了大家的娛樂時(shí)間。讓很多人
重溫70、80后玩家兒時(shí)的感動(dòng),讓小孩子感受到父母兒時(shí)的樂趣。根據(jù)社會(huì)上人們對(duì)游戲的熱切程度,把以前的游戲通過科學(xué)技術(shù)轉(zhuǎn)換成現(xiàn)代的小游戲軟件。設(shè)計(jì)該軟件采用了JAVA技術(shù)并且借鑒了很多小的游戲網(wǎng)站的六子棋游戲,制作了一個(gè)簡(jiǎn)單方便的游戲。具體實(shí)現(xiàn)了這個(gè)游戲更加方便了喜歡六子棋的人群,不需要反反復(fù)復(fù)的花棋盤找棋子。不僅僅豐富了人們的生活,增加了娛樂項(xiàng)目,有為人民帶去便利,讓大眾的生活充滿歡樂。目錄TOC\o"1-3"\h\u23193第1章緒論 頁(yè)第1章緒論1.1課題背景和意義1.1.1課題背景六子棋是流傳于中國(guó)民間的一類版圖游戲。是一種雙人對(duì)弈搏殺的一種游戲,交戰(zhàn)雙方棋子數(shù)均為六顆,故稱六子棋。六子棋的棋盤為3乘以3的方格。棋子可信手拿來(lái),只要互相區(qū)分即可。據(jù)傳,六子沖游戲源自中國(guó)古代戰(zhàn)爭(zhēng)的士兵陣型訓(xùn)練,后逐漸演變?yōu)橐环N棋類游戲。六子沖規(guī)則簡(jiǎn)單,上手容易,但變化無(wú)窮,是一種讓人玩起來(lái)就欲罷不能的智力對(duì)抗游戲。六子沖游戲在上世紀(jì)主要流行于中國(guó)四川一帶。在中國(guó)山區(qū)農(nóng)村流傳甚廣,由于規(guī)則簡(jiǎn)單,工具可信手拈來(lái),是我國(guó)鄉(xiāng)間常見的棋類游戲。在商洛鎮(zhèn)安,涪城等地農(nóng)村流行。重慶潼南鄉(xiāng)村地區(qū)也盛行。在江西省寧都縣農(nóng)村,一直流傳有“六子棋”這一棋類游戲。由于筆者是從自己的祖母那里學(xué)會(huì)該棋類,而筆者的祖母應(yīng)當(dāng)也是從他人那里學(xué)會(huì)的該棋類。有近百年或以上歷史。棋盤。棋盤是4*4。棋子擺放比較自由。假設(shè)以一條平行于底線的橫線將棋盤對(duì)半而分,對(duì)戰(zhàn)雙方可以將自己所持的6子任意的擺放在己方半邊3個(gè)方格的8個(gè)頂點(diǎn)的任意6個(gè)頂點(diǎn)上。吃子。設(shè)對(duì)戰(zhàn)雙方各持黑子與白子。以黑子吃掉白子為例,若黑子的行棋應(yīng)當(dāng)在棋盤上形成某條棋盤線上兩個(gè)黑子緊靠著頂著一個(gè)緊挨著某個(gè)黑子的白子,且同一條棋盤線上只有那兩個(gè)黑子和一個(gè)白子,那么白子將被吃掉。若由于白子的行走造成的雙黑字頂一個(gè)白子,則不構(gòu)成黑子吃白子的條件。反之,白子吃黑字亦然。勝負(fù)。在某一方最后只剩一個(gè)棋子時(shí),比賽結(jié)束,以剩下棋子較多的一方為勝。若最終,步入僵局,雙方都無(wú)法再吃對(duì)方棋子時(shí),則以剩下棋子較多的一方為勝,若雙方棋子數(shù)量一樣,那么視為平局。舊時(shí),農(nóng)閑時(shí),或是在人們?cè)诘乩飫趧?dòng)停下來(lái)休息時(shí),大家在地上畫方格為棋盤,拾碎石、折樹枝作為棋子,以對(duì)弈。1.1.2意義六子棋不同于五子棋,沒有過多的棋子無(wú)論是從感觀上還是公平性上都要優(yōu)先于五子棋,六子棋的規(guī)則簡(jiǎn)單易懂,不像國(guó)際棋規(guī)則中的繁復(fù)規(guī)則,適用于各個(gè)年齡段的人玩。規(guī)則簡(jiǎn)單明了,游戲?qū)Νh(huán)境的要求不高,孩子們大都是在光滑的地面或石板上畫上方格,以石子或木棍、草節(jié)等為棋子,并有簡(jiǎn)單的比賽,可以鍛煉腦力。1.2國(guó)內(nèi)發(fā)展現(xiàn)狀隨著經(jīng)濟(jì)的發(fā)展和人們的生活水平的提高,每個(gè)人的業(yè)余休閑時(shí)間越發(fā)增多。人們也已經(jīng)開始厭煩這燈紅酒綠的生活,所以有許多的青年人多一起老一輩們所玩的游戲越發(fā)的感興趣,其中六子棋就是再度興起的一種小型的游戲,各種網(wǎng)站關(guān)于六子棋的網(wǎng)頁(yè)版游戲頻繁出現(xiàn),令人耳目一新啊,例如3366小游戲,手機(jī)版的六子棋游戲也開始漸漸走入各種類型的手機(jī)中,為人民增添了生活的樂趣豐富了大家的娛樂時(shí)間。讓很多人
重溫70、80后玩家兒時(shí)的感動(dòng),讓小孩子感受到父母兒時(shí)的樂趣。1.3論文的主要工作雖然六子棋并不算是一個(gè)小型軟件,但是要做到工作也是相當(dāng)?shù)亩喟 T谠撜撐闹幸獙?duì)軟件進(jìn)行可行性分析和需求分析,同時(shí)還要進(jìn)行系統(tǒng)設(shè)計(jì)和系統(tǒng)的功能說明,要對(duì)系統(tǒng)的實(shí)現(xiàn)進(jìn)行具體的演示和打包安裝,最后還要對(duì)該軟件進(jìn)行測(cè)試和結(jié)果分析,總結(jié)該系統(tǒng)的功能和不足之處和未來(lái)的工作發(fā)展。1.4論文章節(jié)的安排第一章也就是本章對(duì)整個(gè)論文進(jìn)行了大體的歸納,闡明了課題的背景和意義。我們?cè)诘诙轮兄饕獙?duì)整個(gè)軟件進(jìn)行可行性分析:技術(shù)可行性分析,經(jīng)濟(jì)可行性分析,政策可行性分析。同時(shí)還要進(jìn)行需求分析:功能說明。第三章要介紹系統(tǒng)設(shè)計(jì):概念結(jié)構(gòu)設(shè)計(jì),各個(gè)功能的實(shí)現(xiàn)。第四章是對(duì)系統(tǒng)的實(shí)現(xiàn):算法,UI,關(guān)鍵代碼,打包安裝。第五章是整體的測(cè)試功能和結(jié)果分析,最后一章是結(jié)束語(yǔ)也就是課設(shè)的總結(jié)。第2章可行性分析和需求分析2.1可行性分析2.1.1技術(shù)可行性分析該軟件采用JAVA語(yǔ)言開發(fā),使用的開發(fā)工具的Eclipse,Eclipse是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JavaDevelopmentKit,JDK)。Eclipse是著名的跨平臺(tái)的自由集成開發(fā)環(huán)境(IDE)。最初主要用來(lái)Java語(yǔ)言開發(fā),通過安裝不同的插件Eclipse可以支持不同的計(jì)算機(jī)語(yǔ)言,比如C++和Python等開發(fā)工具。Eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持使得Eclipse擁有其他功能相對(duì)固定的IDE軟件很難具有的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。與傳統(tǒng)程序不同,Sun公司在推出Java之際就將其作為一種開放的技術(shù)。全球數(shù)以萬(wàn)計(jì)的Java開發(fā)公司被要求所設(shè)計(jì)的Java軟件必須相互\t"/subview/29/_blank"兼容?!癑ava語(yǔ)言靠群體的力量而非公司的力量”是Sun公司的口號(hào)之一,并獲得了廣大軟件開發(fā)商的認(rèn)同。這與\t"/subview/29/_blank"微軟公司所倡導(dǎo)的注重精英和封閉式的模式完全不同。Sun公司對(duì)Java編程語(yǔ)言的解釋是:Java編程語(yǔ)言是個(gè)簡(jiǎn)單、面向?qū)ο?、\t"/subview/29/_blank"分布式、解釋性、健壯、安全與系統(tǒng)無(wú)關(guān)、可移植、高性能、多線程和靜態(tài)的語(yǔ)言。Java平臺(tái)是基于Java語(yǔ)言的平臺(tái)。這樣的平臺(tái)非常流行。因此微軟公司推出了與之競(jìng)爭(zhēng)的\t"/subview/29/_blank".NET平臺(tái)以及模仿Java的\t"/subview/29/_blank"C#語(yǔ)言。Java是功能完善的通用程序設(shè)計(jì)語(yǔ)言,可以用來(lái)開發(fā)可靠的、要求嚴(yán)格的應(yīng)用程序。2.1.2經(jīng)濟(jì)可行性系統(tǒng)的經(jīng)濟(jì)方面的可行性應(yīng)該從項(xiàng)目開發(fā)的投入金額、收益、收益投資比、投資回收周期和敏感性分析來(lái)考慮。該軟件的開發(fā)工具使用的是Eclipse它是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。所有在開發(fā)軟件方面根本不需要經(jīng)濟(jì)的支撐,所有項(xiàng)目的開發(fā)投入金額為0,本系統(tǒng)是一個(gè)娛樂性軟件,會(huì)免費(fèi)為大眾提供使用。2.1.3政策的可行性六子棋屬于一種適應(yīng)于大眾的小型娛樂性游戲,不但操作簡(jiǎn)單成本低廉同時(shí)不涉及到國(guó)家的經(jīng)濟(jì)問題和政治問題。不傳播任何的不良思想只是簡(jiǎn)單的供給大眾娛樂消遣的小游戲。2.2用戶分類及功能說明該軟件屬于一個(gè)免費(fèi)行軟件,可供任何一個(gè)人免費(fèi)使用。該軟件實(shí)現(xiàn)了該游戲本應(yīng)該有的游戲方法同時(shí)也人性化的添加了初始界面的設(shè)定,讓整個(gè)軟件看起來(lái)更加的美觀。其功能有游戲功能其中包括人人對(duì)抗,重新開始和認(rèn)輸功能。游戲簡(jiǎn)介功能,讓用戶了解該游戲并且能夠快速的掌握游戲技巧和攻略。2.3系統(tǒng)層次方框圖圖2.1系統(tǒng)層次方框圖第3章系統(tǒng)實(shí)現(xiàn)3.1模塊實(shí)現(xiàn)3.1.1主界面UI設(shè)計(jì):主界面采用的是類似于手機(jī)游戲界面設(shè)計(jì)的,完美的融合了古代棋類游戲的那種古典的,優(yōu)美的畫風(fēng)。在搭配上古典音樂真有種和古代一起把酒言歡之感。背景圖畫采用水墨畫的形式更增添了韻味。如圖4.1所示:圖3.1UI(主界面)算法和代碼:因?yàn)槟K一主要是所涉及的界面的設(shè)計(jì)所以涉及的算法幾乎是沒有,那接下來(lái)我們就講講代碼部分,主要的代碼只有2個(gè)部分一個(gè)是音樂部分的代碼,另一個(gè)是背景圖片載入的代碼。代碼1:publicvoidPlay(Stringfileurl){ try{AudioInputStreamais=AudioSystem.getAudioInputStream(newFile(fileurl));AudioFormataif=ais.getFormat();System.out.println(aif);finalSourceDataLinesdl;DataLine.Infoinfo=newDataLine.Info(SourceDataLine.class,aif);sdl=(SourceDataLine)AudioSystem.getLine(info);sdl.open(aif);sdl.start();FloatControlfc=(FloatControl)sdl.getControl(FloatControl.Type.MASTER_GAIN);doublevalue=2;floatdB=(float)(Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);fc.setValue(dB);intnByte=0;intwriteByte=0;finalintSIZE=1024*64;byte[]buffer=newbyte[SIZE];while(nByte!=-1){nByte=ais.read(buffer,0,SIZE);sdl.write(buffer,0,nByte);}sdl.stop();}catch(Exceptione){e.printStackTrace();}代碼2:privatevoidsetBackgroundImage(){ ImageIconbackground=newImageIcon(getClass().getResource("c.png")); JLabellabel=newJLabel(background);//背景圖片顯示在一個(gè)標(biāo)簽里 //把標(biāo)簽的大小位置設(shè)置為圖片剛好填充 label.setBounds(0,0,background.getIconWidth(), background.getIconHeight()); //把內(nèi)容窗格轉(zhuǎn)化為JPanel,否則不能用方法setOpaque()來(lái)使內(nèi)容透明 JPanelimagePanel=(JPanel)this.getContentPane(); imagePanel.setOpaque(false); this.getLayeredPane().setLayout(null); this.getLayeredPane().add(label,newInteger(Integer.MIN_VALUE)); }游戲規(guī)則:為了讓用戶更加的了解六子棋小游戲,在主界面添加了游戲規(guī)則的按鈕。用戶只需要點(diǎn)擊按鍵就可以查看游戲規(guī)則和了解游戲的由來(lái)。圖3.1游戲規(guī)則界面代碼:importjavax.swing.*;importjava.awt.BorderLayout;importjava.awt.event.*;importjavax.swing.*;importjava.awt.*;importjava.io.*;publicclassReadextendsJFrame{ protectedStringmessage; JPanelPanel5=newJPanel(); JLabeljt=newJLabel(); JLabeljt1=newJLabel(); JTextAreatextarea; Strings; publicRead(){ this.setBackgroundImage(); textarea=newJTextArea(); add(textarea); textarea.setOpaque(false); this.setSize(700,600); read(); } privatevoidread(){ BufferedReaderbr=null; try{ br=newBufferedReader(newFileReader("game.txt")); Stringstr; while((str=br.readLine())!=null){ textarea.append(str+"\r\n"); } }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ if(br!=null) br.close(); }catch(IOExceptione){ e.printStackTrace(); } } } publicstaticvoidmain(String[]args){ Readr=newRead(); r.show();}}3.1.2游戲界面UI設(shè)計(jì):模塊二即游戲部分,游戲界面因?yàn)楸尘皥D畫里面的棋子是黑白的,所以為了區(qū)分此處的棋子我采用了顯眼的黃色和綠色棋子,藍(lán)色線行棋盤。界面上還會(huì)顯示黃綠雙方走棋的步數(shù)和所剩的棋子數(shù)。這樣更加有利于走棋。如圖4.2所示:圖4.2UI(游戲界面)算法設(shè)計(jì):EQ\o\ac(○,1)棋盤和棋子:棋盤是整個(gè)游戲最基礎(chǔ)的部分同時(shí)也是最重要的部分,本系統(tǒng)中采用的是JAVA語(yǔ)言中原有的Graphics類,用于繪圖方面特別簡(jiǎn)單易行。用Graphics2D的drawline()的方法畫出棋盤,然后再用raphics2D的fillOval()方法繪制棋子,用setColor()的方法置棋子的顏色。最后在使用paint()函數(shù)(自己編寫)繪制整個(gè)游戲界面EQ\o\ac(○,2)走棋和吃棋:走棋是比較重要的環(huán)節(jié)。首先,要判斷你要走的地方是否有棋子。其次,要判斷你要走的地方是否和原來(lái)的位置在同一條線上,是否相鄰。本系統(tǒng)采用用數(shù)組position代表棋盤上點(diǎn)的狀態(tài)其中不可以下棋的地方設(shè)置為0可以走棋的地方設(shè)置為1有棋子且顏色為綠色的2有棋子且顏色為橘黃色的3。State用1表示放置棋子(默認(rèn))用2表示吃棋子(點(diǎn)擊對(duì)方的棋子)用3表示走棋的第一步,即點(diǎn)擊自己的棋子用4表示走棋的第二步,即點(diǎn)擊相鄰的下棋空白點(diǎn)。吃棋在走棋的基礎(chǔ)上只采用了一個(gè)zouqitow()的函數(shù),設(shè)置了一個(gè)BOOL型的變量GREEN來(lái)控制是哪一方走棋。行棋一方若將兩顆棋子移至一起,且一頭挨著對(duì)方的一顆棋時(shí),則可吃對(duì)方該子。具體見代碼。EQ\o\ac(○,3)輸棋和認(rèn)輸:輸棋就是當(dāng)任何一方的所剩棋子數(shù)為0時(shí),則該方輸棋。認(rèn)輸這個(gè)功能沒有什么比較重要的代碼,就是如果任何一方選擇認(rèn)輸就把他的棋子數(shù)置為輸棋的狀態(tài),并且提示該方輸棋。代碼詳情:因?yàn)楸鞠到y(tǒng)的代碼比較多,所以只展示模塊二的重要的代碼部分:代碼一(paint()函數(shù)):publicvoidpaint(Graphicsg){ super.paintComponents(g);//清屏重繪 Graphics2Dg2d=(Graphics2D)g; g2d.setColor(Color.BLUE); drawchessboard(g2d,a,b,c); drawpieces(g2d); g2d.setColor(Color.BLACK); g2d.setFont(font); g2d.drawString(s,500,150); g2d.drawString(s1+greennum,550,300); g2d.drawString(s2+orangenum,550,350); g2d.drawString(s4+greeneat,550,400); g2d.drawString(s5+orangeeat,550,450); g2d.drawString("黑方時(shí)間:"+m,30,470); g2d.drawString("state="+state,80,500); g2d.drawString(GREEN+""+(greennum+orangenum),200,500); g2d.drawString(s0,80,550); if(s3!=null){ g2d.drawString(s3,500,50); } }代碼二:(走棋吃棋)publicvoidzouqione(intx,inty){ if(GREEN==true) { if(position[x][y]==2)//判斷點(diǎn)擊的是不是綠方棋子 { xx=x; yy=y; s="請(qǐng)綠方點(diǎn)擊要放置的位置"; state=4;//正進(jìn)入第二步 }else{ s="綠方走棋:請(qǐng)點(diǎn)擊自己的棋子"; } } else{ if(position[x][y]==3)//判斷點(diǎn)擊的是不是黃方棋子 { xx=x; yy=y; s="請(qǐng)黃方點(diǎn)擊要放置的位置"; state=4;//正點(diǎn)擊新的位置 } else{ s="請(qǐng)黃方走棋:點(diǎn)擊自己的棋子"; } } }publicvoidzouqitwo(intx,inty){ if(position[x][y]==1||position[x][y]==4) { if(isnext(xx,yy,x,y)){ position[xx][yy]=1; if(GREEN)//如果綠方走 {position[x][y]=2;//把點(diǎn)擊的位置變成綠點(diǎn) greennum=greennum+1; } if(!GREEN)//如果是黃方走 { position[x][y]=3;//把點(diǎn)擊的位置變成黃點(diǎn) orangenum=orangenum+1; } if(position[4][y]!=1&&position[4][y]==position[6][y]&&position[0][y]==1&&position[2][y]!=position[4][y]&&position[2][y]!=1) { if(position[2][y]!=position[x][y])//防自殺 position[2][y]=1; GREEN=false; orangeeat--; } else if(position[2][y]!=1&&position[2][y]==position[4][y]&&position[0][y]!=position[2][y]&&position[6][y]==1&&position[0][y]!=1) { if(position[0][y]!=position[x][y])//防自殺 position[0][y]=1; GREEN=false; orangeeat--; } else if(position[2][y]!=1&&position[2][y]==position[4][y]&&position[6][y]!=position[2][y]&&position[0][y]==1&&position[6][y]!=1) { if(position[6][y]!=position[x][y])//防自殺 position[6][y]=1; GREEN=false; orangeeat--; } else if(position[0][y]!=1&&position[0][y]==position[2][y]&&position[4][y]!=position[0][y]&&position[6][y]==1&&position[4][y]!=1) { if(position[4][y]!=position[x][y])//防自殺 position[4][y]=1; GREEN=false; orangeeat--; elseif(position[x][4]!=1&&position[x][4]==position[x][6]&&position[x][0]==1&&position[x][2]!=position[x][4]&&position[x][2]!=1) { if(position[x][2]!=position[x][y])//防自殺 position[x][2]=1; GREEN=false; orangeeat--; } elseif(position[x][2]!=1&&position[x][2]==position[x][4]&&position[x][0]!=position[x][2]&&position[x][6]==1&&position[x][0]!=1) { if(position[x][0]!=position[x][y])//防自殺 position[x][0]=1; GREEN=false; orangeeat--; } elseif(position[x][2]!=1&&position[x][2]==position[x][4]&&position[x][6]!=position[x][2]&&position[x][0]==1&&position[x][6]!=1) { if(position[x][6]!=position[x][y])//防自殺 position[x][6]=1; GREEN=false; orangeeat--; } elseif(position[x][0]!=1&&position[x][0]==position[x][2]&&position[x][4]!=position[x][0]&&position[x][6]==1&&position[x][4]!=1) { if(position[x][4]!=position[x][y])//防自殺 position[x][4]=1; GREEN=false; orangeeat--; } else{ s=GREEN?"請(qǐng)綠方點(diǎn)擊相鄰的下棋處!":"請(qǐng)黃方點(diǎn)擊相鄰的下棋處!"; } GREEN=GREEN?false:true;s=GREEN?"綠方走棋:請(qǐng)綠方點(diǎn)擊自己的棋子!":"黃方走棋:請(qǐng)綠方點(diǎn)擊自己的棋子!"; state=3; } else{ s=GREEN?"請(qǐng)綠方點(diǎn)擊相鄰的空位!":"請(qǐng)黃方點(diǎn)擊相鄰的空位"; } } else{ s=GREEN?"請(qǐng)綠方點(diǎn)擊可以放置的空位!":"請(qǐng)黃方點(diǎn)擊可以放置的空位";}}publicvoidmouseClicked(MouseEvente){Pointp=e.getPoint();if(p.x>a-c/4&&p.x<a+6*c+c/4&&p.y>b-c/4 &&p.y<b+6*c+c/4){ x=(p.x-a+c/4)*2/c; y=(p.y-b+c/4)*2/c; }if(p.x>a-c/4&&p.x<a+6*c+c/4&&p.y>b-c/4 &&p.y<b+6*c+c/4){ x=(p.x-a+c/4)*2/c; y=(p.y-b+c/4)*2/c; if(state==3) zouqione(x,y); if(state==4) zouqitwo(x,y); if(orangeeat<1){ s3="黃方輸了!"; s="比賽結(jié)束"; this.removeMouseListener(this); } if(greeneat<1){ s3="綠方輸了!"; s="比賽結(jié)束"; this.removeMouseListener(this); } repaint(); }else{ } }3.2打包與安裝下載并且安裝fatJar插件。然后右擊工程選擇buildfatjaar。選定MAINCLASS,將工程需要的JAR包的路徑填入CLASSPATH中,然后按提示操作,將工程需要的JAr包放在與FATJAR打包的目錄下,找到eclipse安裝目錄下的plugins目錄plugins子目錄下的org.eclipse.swt.win32.win32.x86_3.2.2.v3236,將其解壓,將swt-win32-3236.dll放在J
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年專業(yè)高級(jí)顧問聘任協(xié)議范例版B版
- 2025年江西貨運(yùn)從業(yè)資格試題答案大全
- 建筑工程鋁扣板施工合同
- 智能城市交通網(wǎng)絡(luò)部署合同
- 會(huì)計(jì)師事務(wù)所公關(guān)部聘用合同
- 2025年正規(guī)商品代銷合同書范文
- 港口物流船運(yùn)租賃合同
- 食品公司品控員招聘合同模板
- 河北省張家口市2024屆高三上學(xué)期期末考試數(shù)學(xué)試題(解析版)
- 圖書館建設(shè)拆遷施工合同
- 數(shù)據(jù)可視化技術(shù)智慧樹知到期末考試答案2024年
- MOOC 警察禮儀-江蘇警官學(xué)院 中國(guó)大學(xué)慕課答案
- 三基考試題庫(kù)與答案
- 2024年廣東省2024屆高三二模英語(yǔ)試卷(含標(biāo)準(zhǔn)答案)
- 全飛秒激光近視手術(shù)
- 2024年制鞋工專業(yè)知識(shí)考試(重點(diǎn))題庫(kù)(含答案)
- 2023-2024學(xué)年廣州大附屬中學(xué)中考一模物理試題含解析
- 綠化養(yǎng)護(hù)工作日記錄表
- 2024美的在線測(cè)評(píng)題庫(kù)答案
- 2024版高考數(shù)學(xué)二輪復(fù)習(xí):解析幾何問題的方法技巧
- 輿情監(jiān)測(cè)服務(wù)方案
評(píng)論
0/150
提交評(píng)論