分?jǐn)?shù)類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)[共27頁(yè)]
《分?jǐn)?shù)類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)[共27頁(yè)]》由會(huì)員分享,可在線閱讀,更多相關(guān)《分?jǐn)?shù)類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)[共27頁(yè)](26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、課課 程程 設(shè)設(shè) 計(jì)計(jì) 任任 務(wù)務(wù) 書(shū)書(shū)學(xué)院學(xué)院信息科學(xué)與工程信息科學(xué)與工程專(zhuān)業(yè)專(zhuān)業(yè)電子信息科學(xué)與技術(shù)電子信息科學(xué)與技術(shù)學(xué)生姓名學(xué)生姓名學(xué)號(hào)學(xué)號(hào)設(shè)計(jì)題目設(shè)計(jì)題目1.1.分?jǐn)?shù)類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)分?jǐn)?shù)類(lèi)的設(shè)計(jì)與實(shí)現(xiàn) 2.2.生命游戲生命游戲 1.分?jǐn)?shù)類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)分?jǐn)?shù)類(lèi)的設(shè)計(jì)與實(shí)現(xiàn) 建立用于完成分?jǐn)?shù)形式運(yùn)算的類(lèi) RationalNumber。編寫(xiě)一個(gè)測(cè)試該類(lèi)的程序。用整數(shù)變量表示類(lèi)的私有數(shù)據(jù)(即分子和分母) 。給類(lèi)提供一個(gè)能夠?qū)λ暶鞯膶?duì)象初始化的構(gòu)造函數(shù)。為了能夠在不提供初始化值的情況下也能對(duì)對(duì)象初始化,構(gòu)造函數(shù)中應(yīng)該包含默認(rèn)的值。構(gòu)造函數(shù)還應(yīng)該以最簡(jiǎn)分?jǐn)?shù)的形式存儲(chǔ)數(shù)據(jù),即 2/4 應(yīng)該在對(duì)象中存儲(chǔ)成
2、分子為 1、分母為 2 的形式。公有成員函數(shù)應(yīng)該有以下功能: 1.兩個(gè)有理數(shù)相加,以最簡(jiǎn)形式保存結(jié)果; 2.兩個(gè)有理數(shù)相減,以最簡(jiǎn)形式保存結(jié)果; 3.兩個(gè)有理數(shù)相乘,以最簡(jiǎn)形式保存結(jié)果; 4.兩個(gè)有理數(shù)相除,以最簡(jiǎn)形式保存結(jié)果; 5.以 a/b 的形式輸出有理數(shù)(a 是分子,b 是分母) ; 6.以浮點(diǎn)形式輸出有理數(shù)。2.2.生命游戲生命游戲 生命游戲其實(shí)是一個(gè)零玩家游戲。它包括一個(gè)二維矩形世界,這個(gè)世界中的每個(gè)方格居住著一個(gè)活著的或死了的細(xì)胞。一個(gè)細(xì)胞在下一個(gè)時(shí)刻生死取決于相鄰八個(gè)方格中活著的或死了的細(xì)胞的數(shù)量。如果相鄰方格活著的細(xì)胞數(shù)量過(guò)多,這個(gè)細(xì)胞會(huì)因?yàn)橘Y源匱乏而在下一個(gè)時(shí)刻死去;相反,
3、如果周?chē)罴?xì)胞過(guò)少,這個(gè)細(xì)胞會(huì)因太孤單而死去。1.如果一個(gè)細(xì)胞周?chē)?3 個(gè)細(xì)胞為生(一個(gè)細(xì)胞周?chē)灿?8 個(gè)細(xì)胞) ,則該細(xì)胞為生(即該細(xì)胞若原先為死,則轉(zhuǎn)為生,若原先為生,則保持不變) 。 2.如果一個(gè)細(xì)胞周?chē)?2 個(gè)細(xì)胞為生,則該細(xì)胞的生死狀態(tài)保持不變; 3.其它情況下,該細(xì)胞為死(即該細(xì)胞若原先為生,則轉(zhuǎn)為死,若原先為死,則保持不變)進(jìn)度安排:第 17 周:分析題目,查閱課題相關(guān)資料,進(jìn)行類(lèi)設(shè)計(jì)、算法設(shè)計(jì);第 18 周:上機(jī)調(diào)試程序,程序測(cè)試與分析,撰寫(xiě)課程設(shè)計(jì)報(bào)告,準(zhǔn)備答辯。指導(dǎo)教師(簽字):指導(dǎo)教師(簽字):年年 月月 日日學(xué)院院長(zhǎng)(簽字)學(xué)院院長(zhǎng)(簽字)年年 月月 日日目目 錄
4、錄PART I.11 需求分析.12 算法基本原理.12.1 加法.12.2 減法.22.3 乘法.22.4 除法.23 類(lèi)設(shè)計(jì).24 詳細(xì)設(shè)計(jì).34.1 類(lèi)的接口設(shè)計(jì).34.2 類(lèi)的實(shí)現(xiàn).44.3 主函數(shù)設(shè)計(jì).95 運(yùn)行結(jié)果與分析.105.1 程序運(yùn)行結(jié)果.105.2 運(yùn)行結(jié)果分析 .12PART II.126 基于 MFC 的圖形界面程序開(kāi)發(fā).126.1 基于 MFC 的圖形界面程序設(shè)計(jì) .12(1)界面設(shè)計(jì).12(2)代碼設(shè)計(jì).146.2 測(cè)試程序.226.3 MFC 程序編寫(xiě)總結(jié).237 參考文獻(xiàn).24PART I1 需求分析需求分析(1) 有理數(shù)可分為整數(shù)和分?jǐn)?shù)也可分為三種,一;正數(shù)
5、,二;0,三;負(fù)數(shù)。除了無(wú)限不循環(huán)小數(shù)以外的實(shí)數(shù)統(tǒng)稱(chēng)有理數(shù)。在數(shù)學(xué)上有理數(shù)的運(yùn)用相當(dāng)廣泛,所以一款簡(jiǎn)易的有理數(shù)計(jì)算器可以大大節(jié)約時(shí)間,而且不會(huì)因?yàn)槿藶檎`差導(dǎo)致計(jì)算結(jié)果出錯(cuò)。(2) 依照它們的序列,有理數(shù)具有一個(gè)序拓?fù)?。有理?shù)是實(shí)數(shù)的(稠密)子集,因此它同時(shí)具有一個(gè)子空間拓?fù)?。采用度量,有理?shù)構(gòu)成一個(gè)度量空間,這是它的第三個(gè)拓?fù)?。幸運(yùn)的是,所有三個(gè)拓?fù)湟恢虏⒂欣頂?shù)轉(zhuǎn)化到一個(gè)拓?fù)溆颉S欣頂?shù)是非局部緊致空間的一個(gè)重要的實(shí)例。這個(gè)空間也是完全不連通的。有理數(shù)不構(gòu)成完備的度量空間;實(shí)數(shù)是它的完備集。(3)程序測(cè)試數(shù)據(jù)選擇若干種有代表性的數(shù)據(jù)來(lái)進(jìn)行測(cè)試,通過(guò)臨界數(shù)據(jù)的測(cè)試來(lái)判斷系統(tǒng)的正確性。2 算法基本
6、原理算法基本原理2.1 加法加法有理數(shù)的加法與小學(xué)的加法大有不同,小學(xué)的加法不涉及到符號(hào)的問(wèn)題,而有理數(shù)的加法運(yùn)算總是涉及到兩個(gè)問(wèn)題:一是確定結(jié)果的符號(hào);二是求結(jié)果的絕對(duì)值。 在進(jìn)行有理數(shù)加法運(yùn)算時(shí),首先判斷兩個(gè)加數(shù)的符號(hào):是同號(hào)還是異號(hào),是否有 0。從而確定用那一條法則。在應(yīng)用過(guò)程中,一定要牢記先符號(hào),后絕對(duì)值,熟練以后就不會(huì)出錯(cuò)了。 多個(gè)有理數(shù)的加法,可以從左向右計(jì)算,也可以用加法的運(yùn)算定律計(jì)算。法則1同號(hào)相加,取相同符號(hào),并把絕對(duì)值相加。2絕對(duì)值不等的異號(hào)加減,取絕對(duì)值較大的加數(shù)符號(hào),并用較大的絕對(duì)值減去較小的絕對(duì)值。互為相反數(shù)的兩個(gè)數(shù)相加得 0。3一個(gè)數(shù)同 0 相加,仍得這個(gè)數(shù)。定律.
7、同號(hào)相加,取相同符號(hào),并把絕對(duì)值相加。.絕對(duì)值不相等的異號(hào)兩數(shù)加減,取絕對(duì)值較大的符號(hào),并用較大的絕對(duì)值減去較小的絕對(duì)值?;橄喾磾?shù)的兩個(gè)數(shù)相加得 0。.一個(gè)數(shù)同 0 相加,仍得這個(gè)數(shù)。.相反數(shù)相加結(jié)果一定得 0。2.2 減法減法有理數(shù)減法法則:減去一個(gè)數(shù),等于加上這個(gè)數(shù)的相反數(shù)。其中:兩變:減法運(yùn)算變加法運(yùn)算,減數(shù)變成它的相反數(shù)。一不變:被減數(shù)不變??梢员硎境桑?ab=a+(b) 。2.3 乘法乘法1.兩數(shù)相乘,同號(hào)為正,異號(hào)為負(fù),并把絕對(duì)值相乘。例;(-5)(-3)=15 (-6)4=-242.任何數(shù)字同 0 相乘,都得 0. 例;01=03.幾個(gè)不等于 0 的數(shù)字相乘,積的符號(hào)由負(fù)因數(shù)的
8、個(gè)數(shù)決定。當(dāng)負(fù)因數(shù)有奇數(shù)個(gè)數(shù)時(shí),積為負(fù);當(dāng)負(fù)因數(shù)有偶數(shù)個(gè)數(shù)時(shí),積為正。并把其絕對(duì)值相乘。例;(-10)-5(-0.1)(-6)=積為正數(shù),而(-4)(-7)(-25)=積為負(fù)數(shù)4.幾個(gè)數(shù)相乘,有一個(gè)因數(shù)為 0 時(shí),積為 0. 例;3(-2)0=0 5.乘積為 1 的兩個(gè)有理數(shù)互為倒數(shù)(reciprocal) 。例如,3 與1/3,3/8 與8/3。2.4 除法除法1.除以一個(gè)數(shù)等于乘以這個(gè)數(shù)的倒數(shù)。 (注意:0 沒(méi)有倒數(shù))2.兩數(shù)相除,同號(hào)為正,異號(hào)為負(fù),并把絕對(duì)值相除。3.0 除以任何一個(gè)不等于 0 的數(shù),都等于 0。4.0 在任何條件下都不能做除數(shù)。3 類(lèi)設(shè)計(jì)類(lèi)設(shè)計(jì)從上面的算法分析可以看到
9、,本設(shè)計(jì)面臨的計(jì)算問(wèn)題的關(guān)鍵是設(shè)計(jì)一個(gè)有理數(shù)運(yùn)算類(lèi)。這個(gè)類(lèi)必須能將用戶(hù)給定的 2 個(gè)整數(shù)表達(dá)成有理數(shù),同時(shí)必須進(jìn)行合法性檢測(cè)。同時(shí)需要為類(lèi)設(shè)計(jì) 4 個(gè)方法,分別來(lái)運(yùn)算加法,減法,乘法和除法,為了使有理數(shù)運(yùn)算看起來(lái)更符合自然,所以必須利用 C+的重載技術(shù),來(lái)對(duì)相應(yīng)的 4 種運(yùn)算符進(jìn)行重載,并且還需要設(shè)計(jì)一個(gè)方法來(lái)滿(mǎn)足有理數(shù)分?jǐn)?shù)形式和小數(shù)形式的轉(zhuǎn)換。要從用戶(hù)輸入創(chuàng)建一個(gè)有理數(shù),為類(lèi)設(shè)計(jì)了一個(gè)帶有默認(rèn)參數(shù)的構(gòu)造函數(shù)來(lái)滿(mǎn)足需求。根據(jù)以上的分析,設(shè)計(jì)出CRationalNumber 類(lèi)。如圖 3.1 所示。圖 3.1 CRationalNumber 類(lèi)UML 圖形表示4 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)整個(gè)程序分為三個(gè)
10、獨(dú)立的文檔,RationalNumber.h 文件中為有理數(shù)類(lèi) CRationalNumber的申明,RationalNumber.cpp 文件中包括有理數(shù)類(lèi)的成員函數(shù)實(shí)現(xiàn)文件;main.cpp 文件包括程序的入口函數(shù)和測(cè)試數(shù)據(jù)。4.1 類(lèi)的接口設(shè)計(jì)類(lèi)的接口設(shè)計(jì)/RationalNumber.h 文件,實(shí)現(xiàn)類(lèi)的聲明class CRationalNumber public:CRationalNumber (int nt=0,int dt=1); /帶有默認(rèn)參數(shù)的構(gòu)造函數(shù)聲明virtual CRationalNumber();public:int numtor; /分子int dentor; /分
11、母CRationalNumber operator+(CRationalNumber &rn); /加號(hào)運(yùn)算符重載函數(shù)聲明CRationalNumber operator-(CRationalNumber &rn); /減號(hào)運(yùn)算符重載函數(shù)聲明CRationalNumber operator*(CRationalNumber &rn); /乘號(hào)運(yùn)算符重載函數(shù)聲明CRationalNumber operator/(CRationalNumber &rn); /除號(hào)運(yùn)算符重載函數(shù)聲明float ConvertFloat(); /將有理數(shù)轉(zhuǎn)換成浮點(diǎn)數(shù);ostream&a
12、mp; operator (ostream &,RationalNumber &); /重載流插入運(yùn)算符,使分?jǐn)?shù)以(a/b)形式輸出函數(shù)聲明類(lèi) CRationalNumber 設(shè)計(jì)了一個(gè)帶有默認(rèn)構(gòu)造參數(shù)的構(gòu)造函數(shù),方便用戶(hù)構(gòu)造有理數(shù)。同時(shí)設(shè)計(jì)了 4 個(gè)重載函數(shù),可以讓使用者像使用普通整數(shù)那樣對(duì)有理數(shù)運(yùn)算進(jìn)行操作,大大的提高了使用簡(jiǎn)潔性。4.2 類(lèi)的實(shí)現(xiàn)類(lèi)的實(shí)現(xiàn)/ RationalNumber.cpp 文件,類(lèi)實(shí)現(xiàn)#include stdafx.h#include RationalCompute.h#include RationalNumber.h/ Construction/D
13、estruction/CRationalNumber:CRationalNumber(int nt,int dt) /帶有默參數(shù)構(gòu)造函數(shù)的定義int temp,num,n,d;n=nt;d=dt;if(nnumtor*rn.dentor+rn.numtor*this-dentor;temp.dentor=this-dentor*rn.dentor;int temp1,num,n,d;n=temp.numtor;d=temp.dentor;if(nnumtor*rn.dentor-rn.numtor*this-dentor;temp.dentor=this-dentor*rn.dentor;in
14、t temp1,num,n,d;n=temp.numtor;d=temp.dentor;if(nnumtor*rn.numtor;temp.dentor=this-dentor*rn.dentor;int temp1,num,n,d;n=temp.numtor;d=temp.dentor;if(nnumtor*rn.dentor;temp.dentor=this-dentor*rn.numtor;int temp1,num,n,d;n=temp.numtor;d=temp.dentor;if(nnumtor)/float(this-dentor);return (temp);ostream&a
15、mp; operator (ostream &output,RationalNumber &rn) /重載流插入運(yùn)算符的定義,使分?jǐn)?shù)以(a/b)形式輸出if(rn.dentor=0) /分母是 0 輸出 errorcouterror!0 & rn.dentor0)output-rn.numtor/-rn.dentor;elseoutputrn.numtor/rn.dentor;return output;在類(lèi)的構(gòu)造函數(shù)中,對(duì)用戶(hù)輸入的數(shù)據(jù)進(jìn)行了求最大公約數(shù)處理,使輸入數(shù)據(jù)看起來(lái)最簡(jiǎn)潔化。而且在所有的運(yùn)算操作中都對(duì)錯(cuò)誤的數(shù)據(jù)(如分母為 0)的情況進(jìn)行了處理。由于運(yùn)算符比較
16、特殊,所以沒(méi)有將重載符放入類(lèi)的成員函數(shù)中,而是作為全局函數(shù)來(lái)處理,避免與 cout的沖突。4.3 主函數(shù)設(shè)計(jì)主函數(shù)設(shè)計(jì)/main.cpp 主函數(shù)#include RationalNumber. h int main()cout .oO 歡迎使用有理數(shù)計(jì)算器 Oo. 請(qǐng)根據(jù)提示輸入運(yùn)算數(shù)據(jù)! endl; int n1,n2,m1,m2; coutnn 請(qǐng)輸入第一個(gè)分?jǐn)?shù)的分子與分母:n1n2; cout請(qǐng)輸入第二個(gè)分?jǐn)?shù)的分子與分母:m1m2; RationalNumber rn1(n1,n2); /定義類(lèi)的對(duì)象 rn1 并指定分子與分母值 RationalNumber rn2(m1,m2); /定
17、義類(lèi)的對(duì)象 rn2 并指定分子與分母值RationalNumber rn3,rn4,rn5,rn6; /定義類(lèi)的對(duì)象 rn3,rn4,rn5,rn6 不指定分子與分母,用默認(rèn)參數(shù)對(duì)其初始化 /調(diào)用以浮點(diǎn)形式輸出分?jǐn)?shù)函數(shù)rn3=rn1+rn2; /調(diào)用加號(hào)重載函數(shù)rn4=rn1-rn2; /調(diào)用減號(hào)重載函數(shù)rn5=rn1*rn2; /調(diào)用乘號(hào)重載函數(shù)rn6=rn1/rn2; /調(diào)用除號(hào)重載函數(shù)coutrn1 加 rn2 等于: rn3 或者 ; /調(diào)用流插入運(yùn)算符,使分?jǐn)?shù)以(a/b)形式輸出rn3.showfloat(); /調(diào)用以浮點(diǎn)形式輸出分?jǐn)?shù)函數(shù)coutrn1 減 rn2 等于: rn4
18、或者 ; /調(diào)用流插入運(yùn)算符,使分?jǐn)?shù)以(a/b)形式輸出rn4.showfloat(); /調(diào)用以浮點(diǎn)形式輸出分?jǐn)?shù)函數(shù)coutrn1 乘 rn2 等于: rn5 或者 ; /調(diào)用流插入運(yùn)算符,使分?jǐn)?shù)以(a/b)形式輸出rn5.showfloat(); /調(diào)用以浮點(diǎn)形式輸出分?jǐn)?shù)函數(shù)coutrn1 除 rn2 等于: rn6 或者 ; /調(diào)用流插入運(yùn)算符,使分?jǐn)?shù)以(a/b)形式輸出rn6.showfloat(); /調(diào)用以浮點(diǎn)形式輸出分?jǐn)?shù)函數(shù)cout-計(jì)算完成,請(qǐng)按任意鍵退出系統(tǒng)!endl;getchar();getchar(); return 0;在程序的主函數(shù)部分,選擇了讓用戶(hù)輸入操作數(shù)據(jù)的方
19、式來(lái)互動(dòng),當(dāng)用戶(hù)根據(jù)提示來(lái)輸入相應(yīng)的數(shù)據(jù)后,程序會(huì)自動(dòng)運(yùn)算出每組數(shù)據(jù)的所有操作結(jié)果,如果用戶(hù)輸入數(shù)據(jù)有錯(cuò)誤,則會(huì)顯示出錯(cuò)誤信息。 5 運(yùn)行結(jié)果與分析運(yùn)行結(jié)果與分析5.1 程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果當(dāng)輸入正確無(wú)誤的數(shù)據(jù)后,程序運(yùn)行結(jié)果如圖 5.1 所示。圖圖 5.1 程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果從圖 2 中可以看出,當(dāng)輸入正確的數(shù)據(jù)后,系統(tǒng)能正確無(wú)誤的計(jì)算出有理數(shù)相加,相減,相乘,相除的結(jié)果,并能正確轉(zhuǎn)換成小數(shù)形式。 當(dāng)輸入有誤的數(shù)據(jù),如分母為 0 的時(shí)候,程序運(yùn)行結(jié)果如圖 5.2 所示。圖圖 5.2 程序運(yùn)行結(jié)果(錯(cuò)誤數(shù)據(jù)源)程序運(yùn)行結(jié)果(錯(cuò)誤數(shù)據(jù)源)從圖 5.2 中可以看出,當(dāng)輸入錯(cuò)誤的數(shù)據(jù)后,程
20、序會(huì)檢測(cè)出錯(cuò)誤數(shù)據(jù)源,證明了程序的健壯性。當(dāng)輸入的數(shù)據(jù)分子和分母最大公約數(shù)不為 1 的情況下,程序運(yùn)行結(jié)果如圖 5.3所示:圖圖 5.3 程序運(yùn)行結(jié)果(有公約數(shù))程序運(yùn)行結(jié)果(有公約數(shù))5.2 運(yùn)行結(jié)果分析運(yùn)行結(jié)果分析首先當(dāng)向程序輸入正確的數(shù)據(jù)源后,程序能準(zhǔn)確快速的計(jì)算出 4 則運(yùn)算的結(jié)果,當(dāng)向程序輸入分母為 0 的錯(cuò)誤的數(shù)據(jù)后,程序也同樣能夠識(shí)別。當(dāng)向程序中輸入的分子分母有最大公約數(shù),并且最大公約數(shù)不為 1 的情況下,說(shuō)明分?jǐn)?shù)可以化簡(jiǎn),程序也能很好的識(shí)別并給出正確的結(jié)果。從運(yùn)行結(jié)果來(lái)分析,設(shè)計(jì)的有理數(shù)類(lèi)完全滿(mǎn)足于需求PART II6 基于基于 MFC 的圖形界面程序開(kāi)發(fā)的圖形界面程序開(kāi)發(fā)6.
21、1 基于基于 MFC 的圖形界面程序設(shè)計(jì)的圖形界面程序設(shè)計(jì)MFC 的圖形界面程序設(shè)計(jì)可在上述類(lèi)設(shè)計(jì)的基礎(chǔ)上進(jìn)行改造,MFC 的圖形界面程序與 DOS 界面程序的主要不同點(diǎn)是:MFC 圖形界面程序與 DOS 界面程序的輸入輸出方式不同,DOS 界面程序采用字符交互式實(shí)現(xiàn)數(shù)據(jù)輸入輸出,主要通過(guò) cin,cout 等 I/O 流實(shí)現(xiàn),而 MFC 的圖形程序界面采用標(biāo)準(zhǔn) Windows 窗口和控件實(shí)現(xiàn)輸入輸出,因此必須在 MFC 類(lèi)的框架下加入上面所設(shè)計(jì)的矩陣和方程組類(lèi),并通過(guò)圖形界面的輸入輸出改造來(lái)完成。(1)界面設(shè)計(jì))界面設(shè)計(jì)首先在 VC 中建立 MFC AppWizard(exe)工程,名稱(chēng)為
22、RationalCompute,并在向?qū)У腟tep1 中選擇 Dialog based,即建立基于對(duì)話(huà)框的應(yīng)用程序,如下圖 6.1 所示圖圖 6.1 建立建立 MFC AppWizard(exe)工程工程在彈出的 MFC AppWizard 對(duì)話(huà)框中,選擇單文檔應(yīng)用程序,其他使用默認(rèn)值如圖 6.2,點(diǎn)擊完成。圖圖 6.2 選擇文檔類(lèi)型選擇文檔類(lèi)型建立應(yīng)用程序工程骨架,點(diǎn)擊確定。如圖 6.3圖圖 6.3 建立工程骨架建立工程骨架此程序已經(jīng)具備了常見(jiàn)的程序外觀,如標(biāo)題欄,菜單欄,工具欄,狀態(tài)欄和視圖區(qū),程序的框架已經(jīng)構(gòu)建起來(lái)了??梢栽?VC+環(huán)境中看到 App Wizard 已經(jīng)生成 5 個(gè)類(lèi),如
23、圖 6.4 圖圖 6.4,應(yīng)用程序類(lèi)視圖,應(yīng)用程序類(lèi)視圖(2)代碼設(shè)計(jì))代碼設(shè)計(jì)在 CMyView 類(lèi)視圖里添加畫(huà)筆,畫(huà)出生命游戲中的游戲界面,定義時(shí)間函數(shù),定義更新速度以及生命游戲的游戲規(guī)則,代碼如下:void CMyView:paint(CDC *p)int a,b,i,j;for(i=0;i20;i+)for(j=0;jEllipse(i*30,j*30,i*30+30,j*30+30);CBrush c;c.CreateSolidBrush(RGB(0,255,0); p-SelectObject(c);srand(int)time(NULL);for(int x=0;xEllipse
24、(a*30,b*30,a*30+30,b*30+30); float time2; char str20; time2=(float)(time1)/1000.0; sprintf(str,更新速度:%.2f 秒,time2); p-TextOut(20,630,str,strlen(str);DeleteObject(c);void CMyView:paint1(CDC *p) int i,j;for(i=0;i20;i+)for(j=0;j20;j+)int num=0;for(int i1=0;i13;i1+)for(int j1=0;j1SelectObject(c);p-Ellips
25、e(i*30,j*30,i*30+30,j*30+30);if(num1=1)m1i+1j+1=1;elsemi+1j+1=1;DeleteObject(c);else if(num=2)if(num1=1)m1i+1j+1=mi+1j+1;elsemi+1j+1=m1i+1j+1;/*HBRUSH c; if(mi+1j+1=1) c=CreateSolidBrush(RGB(0,255,0); :SelectObject(hdc,c);else c=CreateSolidBrush(RGB(255,255,255); :SelectObject(hdc,c); :Ellipse(hdc,i
26、*30,j*30,i*30+30,j*30+30); :DeleteObject(c);*/elseCBrush c; c.CreateSolidBrush(RGB(255,255,255); p-SelectObject(c);p-Ellipse(i*30,j*30,i*30+30,j*30+30);if(num1=1)m1i+1j+1=0;elsemi+1j+1=0;DeleteObject(c);if(num1=1)num1=0;elsenum1=1;void CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALI
27、D(pDoc);paint(pDC);/ TODO: add draw code for native data here/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCView:AssertValid();void CMyView:Dump(CDumpContext& dc) constCView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIM
28、E_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_DEBUG/ CMyView message handlersvoid CMyView:OnTimer(UINT nIDEvent) CDC *p;p=GetDC(); paint1(p);CView:OnTimer(nIDEvent);void CMyView:OnFileNew() SetTimer(1,time1,NULL);void CMyView:OnFileOpen() KillTimer(1);void CMyView:OnM1() CDC *p; p=GetDC(); Ki
29、llTimer(1); time1=time1/10; float time2; char str20; time2=(float)(time1)/1000.0; sprintf(str,更新速度:%.2f 秒,time2); p-TextOut(20,630,str,strlen(str); SetTimer(1,time1,NULL);void CMyView:OnM2() CDC *p; p=GetDC(); KillTimer(1); time1=time1*10; float time2; char str20; time2=(float)(time1)/1000.0; sprint
30、f(str,更新速度:%.2f 秒,time2); p-TextOut(20,630,str,strlen(str); SetTimer(1,time1,NULL); 6.2 測(cè)試程序測(cè)試程序游戲界面如下圖 6.5,此時(shí)游戲未開(kāi)始,點(diǎn)擊開(kāi)始游戲,則游戲開(kāi)始,玩家可通過(guò)暫停,加速,減速參與游戲,游戲界面上的細(xì)胞根據(jù)運(yùn)動(dòng)規(guī)律每秒更新一次,則形成了一幅時(shí)刻變化的圖。變化中的生命游戲圖如圖 6.6,6.7.圖圖 6.5 游戲開(kāi)始界面游戲開(kāi)始界面 圖圖 6.6 圖圖 6.76.3 MFC 程序編寫(xiě)總結(jié)程序編寫(xiě)總結(jié)MFC 程序與控制臺(tái)程序最大的區(qū)別就是界面,由于 MFC 是一個(gè)微軟公司提供的類(lèi)庫(kù)(clas
31、s libraries) ,以 C+類(lèi)的形式封裝了 Windows 的 API,并且包含一個(gè)應(yīng)用程序框架。其中包含的類(lèi)包含大量 Windows 句柄封裝類(lèi)和很多Windows 的內(nèi)建控件和組件的封裝類(lèi)。所以傳統(tǒng)的控制臺(tái)程序只需要學(xué)習(xí) C+就能編寫(xiě),但 MFC 程序必須要先熟悉 windows 編程,這也是初學(xué)者最大的挑戰(zhàn)。不熟悉 windows 編程可以說(shuō)是對(duì) MFC 程序無(wú)從下手,本系統(tǒng)采用的是MFC 的對(duì)話(huà)框架構(gòu),相比于文本文檔模式來(lái)講,要簡(jiǎn)單易懂些。MFC 提供的對(duì)話(huà)框模板大大提高了用戶(hù)體驗(yàn)的滿(mǎn)意度和友好度,所以 MFC 必將為 windows程序員必學(xué)的類(lèi)庫(kù)。通過(guò)本次課程設(shè)計(jì)的開(kāi)發(fā),使
32、我初步掌握了 windows 程序設(shè)計(jì)的竅門(mén),也了解了與傳統(tǒng)控制臺(tái)程序之前的差別,可以說(shuō) C+是基礎(chǔ),會(huì) windows 編程才能寫(xiě)出更友好實(shí)用的應(yīng)用軟件來(lái)。通過(guò)面向?qū)ο蟮姆庋b與設(shè)計(jì)實(shí)踐,是我更進(jìn)一步理解了什么是面向?qū)ο缶幊獭S捎诒菊n程設(shè)計(jì)要求的主要功能比較簡(jiǎn)單,所以我相信這只是我學(xué)習(xí)中的一個(gè)小臺(tái)階,我將以此為基石,在今后的學(xué)習(xí)過(guò)程中不斷總結(jié)和進(jìn)步,寫(xiě)希望老師能給予批評(píng)指正。7 參考文獻(xiàn)參考文獻(xiàn)1徐士良. C 常用算法程序集. 北京:清華大學(xué)出版社,19952鄭莉,董淵,張瑞豐. C+語(yǔ)言程序設(shè)計(jì)(第 3 版). 北京:清華大學(xué)出版社,20073錢(qián)能. C+程序設(shè)計(jì)教程(第二版). 北京:清華大學(xué)出版社,20074陳志泊,王春玲. 面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言C+. 北京:人民郵電出版社,20025李慶揚(yáng),王能超,易大義. 數(shù)值分析. 湖北:華中理工大學(xué)出版社,19866李?lèi)?ài)華,程磊 面向?qū)ο蟪绦蛟O(shè)計(jì) C+語(yǔ)言 清華大學(xué)出版社,20107馬秀麗,劉志嫵,李筠 C 語(yǔ)言程序設(shè)計(jì) 清華大學(xué)出版社,2008
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第7課時(shí)圖形的位置練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第1課時(shí)圖形的認(rèn)識(shí)與測(cè)量1平面圖形的認(rèn)識(shí)練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)1數(shù)與代數(shù)第10課時(shí)比和比例2作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)4比例1比例的意義和基本性質(zhì)第3課時(shí)解比例練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第7課時(shí)圓柱的體積3作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第1節(jié)圓柱的認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)2百分?jǐn)?shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)1負(fù)數(shù)第1課時(shí)負(fù)數(shù)的初步認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)考前模擬期末模擬訓(xùn)練二作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末豐收?qǐng)@作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單十二課件新人教版
- 標(biāo)準(zhǔn)工時(shí)講義
- 2021年一年級(jí)語(yǔ)文上冊(cè)第六單元知識(shí)要點(diǎn)習(xí)題課件新人教版
- 2022春一年級(jí)語(yǔ)文下冊(cè)課文5識(shí)字測(cè)評(píng)習(xí)題課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)4數(shù)學(xué)思考第1課時(shí)數(shù)學(xué)思考1練習(xí)課件新人教版