C++課設(shè)報(bào)告書復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
C++課設(shè)報(bào)告書復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
C++課設(shè)報(bào)告書復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
C++課設(shè)報(bào)告書復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
C++課設(shè)報(bào)告書復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

成績評定表學(xué)生姓名李勇強(qiáng)班級學(xué)號1103060215專業(yè)通信工程課程設(shè)計(jì)題目復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)評語組長簽字:成績?nèi)掌?0年月日

課程設(shè)計(jì)任務(wù)書學(xué)院信息科學(xué)與工程學(xué)院專業(yè)通信工程學(xué)生姓名李勇強(qiáng)班級學(xué)號1103060215課程設(shè)計(jì)題目復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)實(shí)踐教學(xué)要求與任務(wù)設(shè)計(jì)一個復(fù)數(shù)類,復(fù)數(shù)類的數(shù)據(jù)成員是real和imag,它們的數(shù)據(jù)類型是double,分別表示復(fù)數(shù)的實(shí)部和虛部,要求如下:(1)編寫一個帶有缺省參數(shù)的構(gòu)造函數(shù),默認(rèn)值為(0,0),實(shí)現(xiàn)一個復(fù)數(shù)的構(gòu)造。(2)編寫一個拷貝構(gòu)造函數(shù),實(shí)現(xiàn)一個復(fù)數(shù)的拷貝構(gòu)造。(3)編寫一個析構(gòu)函數(shù),在函數(shù)中輸出(real,imag)被析構(gòu),例如:如果復(fù)數(shù)的實(shí)部為1,虛部為2,則被析構(gòu)時(shí)程序輸出:“(1,2)被析構(gòu)”。(4)重載運(yùn)算符“+”為復(fù)數(shù)類的成員函數(shù),其功能是返回兩個復(fù)數(shù)的相加的結(jié)果。(5)重載運(yùn)算符“-”為復(fù)數(shù)類的成員函數(shù),其功能是返回兩個復(fù)數(shù)的相減的結(jié)果。(6)重載運(yùn)算符“*”為復(fù)數(shù)類的友元函數(shù),其功能是返回兩個復(fù)數(shù)的相乘的結(jié)果。(7)重載運(yùn)算符“/”為復(fù)數(shù)類的友元函數(shù),其功能是返回兩個復(fù)數(shù)的相除的結(jié)果。(8)重載單目運(yùn)算符“-”為復(fù)數(shù)類的友元函數(shù),其功能是返回當(dāng)前復(fù)數(shù)的相反數(shù)。(9)重載運(yùn)算符“>>”為復(fù)數(shù)類的友元函數(shù),其功能是按照以格式(real,imag)。(10)輸入復(fù)數(shù)。例如:如果復(fù)數(shù)的實(shí)部為1,虛部為2,則輸入的格式是“(1,2)”。(11)重載運(yùn)算符“<<”為復(fù)數(shù)類的友元函數(shù),其功能是按照以格式(real,imag)(12)輸出復(fù)數(shù)。例如:如果復(fù)數(shù)的實(shí)部為1,虛部為2,則輸出的結(jié)果是“(1,2)”。(13)以上函數(shù)在類的內(nèi)部寫出函數(shù)原型,在類的外部寫出函數(shù)實(shí)現(xiàn)代碼,最后編寫一個主函數(shù)main測試以上的函數(shù)功能。工作計(jì)劃與進(jìn)度安排第17周:分析題目,查閱課題相關(guān)資料,進(jìn)行類設(shè)計(jì)、算法設(shè)計(jì);第18周:程序的設(shè)計(jì)、調(diào)試與實(shí)現(xiàn);第19周:程序測試與分析,撰寫課程設(shè)計(jì)報(bào)告,進(jìn)行答辯驗(yàn)收。指導(dǎo)教師:201年月日專業(yè)負(fù)責(zé)人:201年月日學(xué)院教學(xué)副院長:201年月日摘要本文采用了C++語言來完成復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)。首先設(shè)計(jì)了復(fù)數(shù)類,在類中定義了復(fù)數(shù)的實(shí)部和虛部,然后在類中設(shè)計(jì)構(gòu)造函數(shù)和析構(gòu)函數(shù)用于對象的初始化和清理,類中的重載運(yùn)算符函數(shù)用于實(shí)現(xiàn)對復(fù)數(shù)的一些基本運(yùn)算和輸入輸出。程序分別采用VisualC++6.0的控制臺工程和MFC工程來運(yùn)行。最終,通過對兩種程序的測試結(jié)果表明:復(fù)數(shù)類的方法函數(shù)設(shè)計(jì)正確,兩種程序均能正確實(shí)現(xiàn)復(fù)數(shù)類方法函數(shù)的功能。關(guān)鍵詞:復(fù)數(shù);復(fù)數(shù)類;控制臺工程;MFC工程

目錄1需求分析 12算法基本原理 13類設(shè)計(jì) 24基于控制臺的應(yīng)用程序 34.1類的接口設(shè)計(jì) 34.2類的實(shí)現(xiàn) 44.3主函數(shù)設(shè)計(jì) 64.4基于控制臺的應(yīng)用程序測試 75基于MFC的應(yīng)用程序 85.1基于MFC的應(yīng)用程序設(shè)計(jì) 95.1.1MFC程序界面設(shè)計(jì) 95.1.2MFC程序代碼設(shè)計(jì) 125.2基于MFC的應(yīng)用程序測試 15結(jié)論 19參考文獻(xiàn) 201需求分析(1)構(gòu)造函數(shù)可以用于給對象賦初值;析構(gòu)函數(shù)可以用于對象的生命期結(jié)束時(shí),做一些清理工作;拷貝構(gòu)造函數(shù)可以用于復(fù)制對象。(2)類中重載運(yùn)算符“+”、“-”、“*”、“/”的函數(shù),可以依據(jù)復(fù)數(shù)的四則運(yùn)算法則設(shè)計(jì)函數(shù)內(nèi)部代碼。(3)復(fù)數(shù)的相反數(shù)為復(fù)數(shù)的實(shí)部與虛部分別取相反數(shù)。(4)整個程序可以通過構(gòu)建復(fù)數(shù)類,類中定義數(shù)據(jù)成員(復(fù)數(shù)的實(shí)部、虛部),設(shè)計(jì)方法,實(shí)現(xiàn)復(fù)數(shù)類對象的構(gòu)造、析構(gòu),復(fù)數(shù)的加減乘除、取相反數(shù)的運(yùn)算。并通過重載流提取運(yùn)算符和流插入運(yùn)算符,來進(jìn)行復(fù)數(shù)的輸入和輸出。(5)要求類的聲明與實(shí)現(xiàn)相分離,可以將其保存在不同的文件中,并在類的實(shí)現(xiàn)文件中包含類的聲明頭文件。算法基本原理(1)構(gòu)造函數(shù)是一種特殊的成員函數(shù),在建立對象時(shí)自動執(zhí)行。其名字與類名同名,不具有任何類型,不返回任何值。構(gòu)造函數(shù)中參數(shù)的值可以指定為默認(rèn)值??截悩?gòu)造函數(shù)只有一個參數(shù),這個參數(shù)是本類的對象(一般約定加const聲明)。(2)析構(gòu)函數(shù)也是一個特殊的成員函數(shù),其名字是類名前加一個“~”符號。構(gòu)造函數(shù)不返回任何值,無函數(shù)類型和函數(shù)參數(shù)。當(dāng)對象的生命期結(jié)束時(shí),自動執(zhí)行析構(gòu)函數(shù)。(3)運(yùn)算符重載的方法是定義一個重載運(yùn)算符的函數(shù),在需要執(zhí)行被重載的運(yùn)算符時(shí),系統(tǒng)就自動調(diào)用該函數(shù)。(4)復(fù)數(shù)的加法法則:設(shè)z1=a+bi,z2=c+di是任意兩個復(fù)數(shù),則它們的和為(a+bi)+(c+di)=(a+c)+(b+d)i。兩個復(fù)數(shù)的和依然是復(fù)數(shù),它的實(shí)部是原來兩個復(fù)數(shù)實(shí)部的和,它的虛部是原來兩個虛部。(5)復(fù)數(shù)的減法法則:設(shè)z1=a+bi,z2=c+di是任意兩個復(fù)數(shù),則它們的差是(a+bi)-(c+di)=(a-c)+(b-d)i。兩個復(fù)數(shù)的差依然是復(fù)數(shù),它的實(shí)部是原來兩個復(fù)數(shù)實(shí)部的差,它的虛部是原來兩個虛部的差。(6)復(fù)數(shù)的乘法法則:設(shè)z1=a+bi,z2=c+di是任意兩個復(fù)數(shù),那么它們的積(a+bi)(c+di)=(ac-bd)+(bc+ad)i。把兩個復(fù)數(shù)相乘,類似兩個多項(xiàng)式相乘,結(jié)果中i^2=?1,把實(shí)部與虛部分別合并。兩個復(fù)數(shù)的積依然是一個復(fù)數(shù)。(7)復(fù)數(shù)的除法法則:設(shè)z1=a+bi,z2=c+di是任意兩個復(fù)數(shù),滿足(c+di)(x+yi)=(a+bi)的復(fù)數(shù)x+yi(x,y∈R)叫復(fù)數(shù)a+bi除以復(fù)數(shù)c+di的商。其具體運(yùn)算方法為:將分子和分母同時(shí)乘以分母的共軛復(fù)數(shù),再分別對分子和分母應(yīng)用乘法法則運(yùn)算,即(a+bi)/(c+di)=[(a+bi)(c-di)]/[(c+di)(c-di)]=[(ac+bd)+(bc-ad)i]/(c^2+d^2)。兩個復(fù)數(shù)的商依然是一個復(fù)數(shù)。(8)復(fù)數(shù)取相反數(shù)法則:設(shè)z1=a+bi是任意復(fù)數(shù),則其相反數(shù)為-a-bi,即復(fù)數(shù)的實(shí)部與虛部分別取相反數(shù)。3類設(shè)計(jì)從上面的算法分析可以看到,本設(shè)計(jì)的關(guān)鍵是復(fù)數(shù)類的方法函數(shù)的設(shè)計(jì)??梢远x一個復(fù)數(shù)類Complex,類中定義私有數(shù)據(jù)成員real和imag,它們的數(shù)據(jù)類型是double,分別表示復(fù)數(shù)的實(shí)部和虛部。類中應(yīng)包括的成員函數(shù)有帶有缺省參數(shù)的構(gòu)造函數(shù)Complex(doubler=0,doublei=0),拷貝構(gòu)造函數(shù)Complex(constComplex&),析構(gòu)函數(shù)~Complex(),重載運(yùn)算符“+”的函數(shù)Complexoperator+(Complex&),重載運(yùn)算符“-”的函數(shù)Complexoperator-(Complex&)。類中應(yīng)包括的友元函數(shù)有重載運(yùn)算符“*”的函數(shù)friendComplexoperator*(Complex&,Complex&),重載運(yùn)算符“/”的函數(shù)friendComplexoperator/(Complex&,Complex&),重載單目運(yùn)算符“-”的函數(shù)friendComplexoperator-(Complex&),重載流提取運(yùn)算符“>>”的函數(shù)friendistream&operator>>(istream&,Complex&),重載流插入運(yùn)算符“<<”的函數(shù)friendostream&operator<<(ostream&,Complex&)。以上各函數(shù)的訪問屬性都設(shè)置為公用類型。并且在類的內(nèi)部寫出函數(shù)原型,在類的外部寫出函數(shù)實(shí)現(xiàn)代碼。4基于控制臺的應(yīng)用程序整個程序分為三個獨(dú)立的文檔。Fushu.h文件中包括復(fù)數(shù)類Complex的聲明;Fushu.cpp文件中包括這個類的成員函數(shù)和友元函數(shù)實(shí)現(xiàn)文件;main.cpp文件包括程序的主函數(shù)。主函數(shù)中定義類Complex的對象,通過對象測試類的各函數(shù)的功能。4.1類的接口設(shè)計(jì)//Fushu.h文件,實(shí)現(xiàn)類的聲明#include<iostream.h>classComplex//復(fù)數(shù)類Complex聲明{private:doublereal;//復(fù)數(shù)的實(shí)部 doubleimag;//復(fù)數(shù)的虛部public://外部接口 Complex(doubler=0,doublei=0);//聲明帶有缺省參數(shù)的構(gòu)造函數(shù),默認(rèn)值//為(0,0) Complex(constComplex&cop);//聲明拷貝構(gòu)造函數(shù) ~Complex();//聲明析構(gòu)函數(shù) Complexoperator+(Complex&c2);//聲明重載運(yùn)算符“+”的函數(shù)Complexoperator-(Complex&c2);//聲明重載運(yùn)算符“-”的函數(shù)friendComplexoperator*(Complex&c1,Complex&c2);//聲明重載運(yùn)算符“*”//為復(fù)數(shù)類的友元函數(shù)friendComplexoperator/(Complex&c1,Complex&c2);//聲明重載運(yùn)算符“/”//為復(fù)數(shù)類的友元函數(shù)friendComplexoperator-(Complex&c);//聲明重載單目運(yùn)算符“-”為復(fù)數(shù)類的//友元函數(shù)friendistream&operator>>(istream&,Complex&);//聲明重載運(yùn)算符“>>”為復(fù)//數(shù)類的友元函數(shù) friendostream&operator<<(ostream&,Complex&);//聲明重載運(yùn)算符“<<”為//復(fù)數(shù)類的友元函數(shù)};類中定義私有數(shù)據(jù)成員real和imag,它們的數(shù)據(jù)類型是double,分別表示復(fù)數(shù)的實(shí)部和虛部。類中聲明了各成員函數(shù)和友元函數(shù),且訪問屬性都設(shè)置為公用類型。4.2類的實(shí)現(xiàn)//Fushu.cpp文件,類實(shí)現(xiàn)#include"Fushu.h" //包含類的聲明頭文件Complex::Complex(doubler,doublei)//定義帶有缺省參數(shù)的構(gòu)造函數(shù){real=r;//給復(fù)數(shù)實(shí)部賦初值imag=i;//給復(fù)數(shù)虛部賦初值}Complex::Complex(constComplex&cop)//定義拷貝構(gòu)造函數(shù){real=cop.real;//實(shí)現(xiàn)復(fù)數(shù)實(shí)部的拷貝imag=cop.imag;//實(shí)現(xiàn)復(fù)數(shù)虛部的拷貝}Complex::~Complex()//定義析構(gòu)函數(shù){cout<<"("<<real<<","<<imag<<")"<<"被析構(gòu)"<<endl;//在函數(shù)中輸出(real,//imag)被析構(gòu)}ComplexComplex::operator+(Complex&c2)//定義重載運(yùn)算符“+”的函數(shù){returnComplex(real+c2.real,imag+c2.imag);//建立一個臨時(shí)的無名對象。在建立//臨時(shí)對象過程中將兩個復(fù)數(shù)相加的結(jié)果作為實(shí)參調(diào)用//構(gòu)造函數(shù)。return語句將此臨時(shí)對象作為函數(shù)返回值。}ComplexComplex::operator-(Complex&c2)//定義重載運(yùn)算符“-”的函數(shù){returnComplex(real-c2.real,imag-c2.imag);//建立一個臨時(shí)的無名對象。在建立臨時(shí)//對象過程中將兩個復(fù)數(shù)相減的結(jié)果作為實(shí)參調(diào)用構(gòu)造//函數(shù)。return語句將此臨時(shí)對象作為函數(shù)返回值。}Complexoperator*(Complex&c1,Complex&c2)//定義重載運(yùn)算符“*”為復(fù)數(shù)類//的友元函數(shù){doublex,y;//定義兩個變量,分別表示兩個復(fù)數(shù)積的實(shí)部和虛部x=c1.real*c2.real-c1.imag*c2.imag;//兩個復(fù)數(shù)積的實(shí)部y=c1.real*c2.imag+c1.imag*c2.real;//兩個復(fù)數(shù)積的虛部returnComplex(x,y);//建立一個臨時(shí)的無名對象。在建立臨時(shí)對象過程調(diào)用構(gòu)造//函數(shù)。return語句將此臨時(shí)對象作為函數(shù)返回值。}Complexoperator/(Complex&c1,Complex&c2)//定義重載運(yùn)算符“/”為復(fù)數(shù)類的//友元函數(shù){doublex,y;//定義兩個變量,分別表示兩個復(fù)數(shù)商的實(shí)部和虛部x=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);//兩個復(fù)數(shù)//商的實(shí)部y=(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);///兩個復(fù)數(shù)//商的虛部returnComplex(x,y);}Complexoperator-(Complex&c)//定義重載單目運(yùn)算符“-”為復(fù)數(shù)類的友元函數(shù){returnComplex(-c.real,-c.imag);}istream&operator>>(istream&input,Complex&c)//定義重載運(yùn)算符“>>”為復(fù)數(shù)類//的友元函數(shù){input.ignore();//調(diào)用istream類的成員函數(shù)ignore函數(shù),跳過輸入流中//一個字符input>>c.real;input.ignore();input>>c.imag;input.ignore(3,'\n');//跳過輸入流中'\n'之前(包括'\n')的字符returninput;}ostream&operator<<(ostream&output,Complex&c)//定義重載運(yùn)算符“<<”為復(fù)數(shù)//類的友元函數(shù){output<<"("<<c.real<<","<<c.imag<<")";//以格式(real,imag)輸出復(fù)數(shù)returnoutput;}在重載運(yùn)算符“>>”的函數(shù)中,由于要按照以格式(real,imag)輸入復(fù)數(shù),所以在提取輸入流中的字符時(shí),必須先跳過字符“(”,再將輸入流中第1個數(shù)據(jù)賦值給復(fù)數(shù)的實(shí)部,然后跳過字符“,”,再將輸入流中第2個數(shù)據(jù)賦值給復(fù)數(shù)的虛部,此時(shí),輸入流中還剩有字符“)”和結(jié)束符“\n”,為了下次能成功為復(fù)數(shù)的實(shí)部和虛部賦值,必須將它們跳過,所以調(diào)用函數(shù)ignore(3,'\n')。另外,在重載運(yùn)算符“+”、“-”、“*”、“/”、和單目運(yùn)算符“-”的函數(shù)中,為了在最終測試時(shí),每調(diào)用完一次重載運(yùn)算符只執(zhí)行一次析構(gòu)函數(shù),所以在函數(shù)中都沒有定義有名的對象,而是建立一個臨時(shí)的無名對象。在建立臨時(shí)對象過程中將兩個復(fù)數(shù)運(yùn)算的結(jié)果作為實(shí)參調(diào)用構(gòu)造函數(shù)。return語句將此臨時(shí)對象作為函數(shù)返回值。4.3主函數(shù)設(shè)計(jì)//main.cpp主函數(shù)#include"Fushu.h"intmain()//主函數(shù){Complexc0;//建立Complex類對象c0,沒有給定實(shí)參cout<<"c0="<<c0<<endl;//輸出對象c0的值,測試重載運(yùn)算符“<<”的函數(shù)Complexc1(11,44);//建立對象c1,給定2個實(shí)參cout<<"c1="<<c1<<endl;//輸出對象c1的值cout<<"inputcomplexnumberc1:";cin>>c1;為c1重新賦值,測試重載運(yùn)算符“>>”的函數(shù)cout<<"c1="<<c1<<endl;Complexc2(c1);建立對象c2,用c1初始化c2,測試拷貝構(gòu)造函數(shù)cout<<"c2="<<c2<<endl;cout<<"-c2="<<-c2<<endl;//輸出c2的相反數(shù),測試重載單目運(yùn)算符“-”的函數(shù)cout<<"inputcomplexnumberc2:";cin>>c2;//為c2重新賦值cout<<"c1+c2="<<c1+c2<<endl;//輸出c1+c2的和cout<<"c1-c2="<<c1-c2<<endl;//輸出c1-c2的差cout<<"c1*c2="<<c1*c2<<endl;//輸出c1*c2的積cout<<"c1/c2="<<c1/c2<<endl;//輸出c1/c2的商return0;}在程序的主函數(shù)部分,首先建立了對象c0,沒有給定實(shí)參,測試缺省參數(shù)的構(gòu)造函數(shù),默認(rèn)值為(0,0),通過輸出c0的值來觀察正確性;同時(shí),通過輸出c0的值也測試了重載運(yùn)算符“<<”的函數(shù)的正確性。然后新建立了對象c1,給定了2個實(shí)參,再次調(diào)用缺省參數(shù)的構(gòu)造函數(shù),而這次復(fù)數(shù)實(shí)部和虛部的值都通過實(shí)參給定,輸出c1的值以觀察正確性。再輸入c1的值,為c1重新賦值,測試重載運(yùn)算符“>>”的函數(shù)。新建立對象c2,用c1初始化c2,測試拷貝構(gòu)造函數(shù)。輸出c2的相反數(shù),測試重載單目運(yùn)算符“-”的函數(shù),在輸出c2的相反數(shù)后,執(zhí)行-c2的析構(gòu)函數(shù)。再次輸入c2的值,為c2重新賦值。然后,分別依次輸出c1、c2的和、差、積、商,測試重載運(yùn)算符“+”、“-”、“*”、“/”的函數(shù),每輸出一次結(jié)果,就執(zhí)行一次各自的析構(gòu)函數(shù)。最后,分別執(zhí)行對象c2、c1、c0的析構(gòu)函數(shù)。4.4基于控制臺的應(yīng)用程序測試程序運(yùn)行結(jié)果如圖1所示。圖1程序運(yùn)行結(jié)果通過程序的運(yùn)行結(jié)果可以看出,在main函數(shù)中,通過對象c0(不給定實(shí)參)、c1(給定兩個實(shí)參)測試了缺省參數(shù)的構(gòu)造函數(shù);直接用運(yùn)算符“<<”、“>>”輸出、輸入對象的值,測試了重載運(yùn)算符“<<”、“>>”函數(shù);通過對象c2,測試了拷貝構(gòu)造函數(shù);又通過輸出c2的相反數(shù),測試了重載單目運(yùn)算符“-”的函數(shù);分別輸出c1、c2的和、差、積、商,依次測試了重載運(yùn)算符“+”、“-”、“*”、“/”函數(shù),并且,從“-c2”開始每輸出一次運(yùn)行結(jié)果,就調(diào)用一次各自的析構(gòu)函數(shù),在程序的最后,分別執(zhí)行對象c2、c1、c0的析構(gòu)函數(shù),測試了析構(gòu)函數(shù)的功能。最終,通過主函數(shù)main的測試,證明了類中各函數(shù)功能的正確性。5基于MFC的應(yīng)用程序隨著應(yīng)用程序復(fù)雜性的增加,Win32應(yīng)用程序代碼也必然越復(fù)雜。為了幫助用戶處理那些經(jīng)常使用且復(fù)雜繁瑣的各種Windows操作,VisualC++設(shè)計(jì)了一套基礎(chǔ)類庫MFC,把傳統(tǒng)的Windows編程規(guī)范中的大多數(shù)內(nèi)容封裝成為各種類。MFC圖形界面程序與DOS界面程序的輸入輸出方式不同,DOS界面程序采用字符交互式實(shí)現(xiàn)數(shù)據(jù)輸入輸出,MFC的圖形程序界面采用標(biāo)準(zhǔn)Windows窗口和控件實(shí)現(xiàn)輸入輸出。因此應(yīng)先在MFC類的框架下加入所設(shè)計(jì)的復(fù)數(shù)類,再通過圖形界面的輸入輸出改造來完成。5.1基于MFC的圖形界面程序設(shè)計(jì)5.1.1MFC程序界面設(shè)計(jì)首先在VC中建立MFCAppWizard(exe)工程,名稱為FS_Jisuanqi,并在向?qū)У腟tep1中選擇Dialogbased,即建立基于對話框的應(yīng)用程序,如下圖2~3所示。圖2建立MFCAppWizard(exe)工程圖3建立基于對話框的應(yīng)用程序在對話框模板處右擊鼠標(biāo),從彈出的快捷菜單中選擇“屬性”菜單項(xiàng),出現(xiàn)如圖4所示的對話框?qū)傩源翱?。將對話框?biāo)題改為“復(fù)數(shù)計(jì)算器”。圖4對話框?qū)傩源翱趯υ捒蛸Y源中的默認(rèn)對話框利用工具箱改造成如下界面,如圖5所示。圖5復(fù)數(shù)計(jì)算器界面設(shè)計(jì)圖5所示的界面中包含了10個StaticText控件,2個GroupBox控件,2個Picture控件,7個Button控件,和6個EditBox控件,控件的基本信息列表如下表1所示。表1控件基本信息控件類別控件ID控件Caption說明StaticTextIDC_STATIC實(shí)部虛部復(fù)數(shù)1:,復(fù)數(shù)2:,實(shí)部虛部運(yùn)算結(jié)果:,GroupBoxIDC_STATIC數(shù)據(jù)輸入?yún)^(qū)基本運(yùn)算PictureIDC_STATIC一條水平線一條水平線BottonIDC_BUTTON_fuzhi復(fù)制將復(fù)數(shù)1中的數(shù)據(jù)復(fù)制到復(fù)數(shù)2中IDC_BUTTON_jia+計(jì)算兩個復(fù)數(shù)和IDC_BUTTON_jian-計(jì)算兩個復(fù)數(shù)差I(lǐng)DC_BUTTON_cheng*計(jì)算兩個復(fù)數(shù)積IDC_BUTTON_chu/計(jì)算兩個復(fù)數(shù)商IDC_BUTTON_fanshu1:相反數(shù)計(jì)算復(fù)數(shù)1的相反數(shù)IDC_BUTTON_Exit退出EditBoxIDC_EDIT_r1復(fù)數(shù)1的實(shí)部IDC_EDIT_i1復(fù)數(shù)1的虛部IDC_EDIT_r2復(fù)數(shù)2的實(shí)部IDC_EDIT_i2復(fù)數(shù)2的虛部IDC_EDIT_R運(yùn)算結(jié)果的實(shí)部IDC_EDIT_I運(yùn)算結(jié)果的虛部5.1.2MFC程序代碼設(shè)計(jì)為了能夠?qū)υ捒蚪缑嫔系目丶c代碼聯(lián)系起來,需要為6個EditBox控件建立MemberVariables,按Ctrl+w鍵進(jìn)入MFCClassWizard界面,選擇MemberVariables選項(xiàng)卡,可顯示成員變量設(shè)置界面,如圖6所示。圖6成員變量設(shè)置界面通過該界面設(shè)置與6個EditBox控件對應(yīng)的成員變量,具體如表2所示。表2控件基本信息控件ID成員變量類型成員變量名稱IDC_EDIT_r1doublem_real1IDC_EDIT_i1doublem_imag1IDC_EDIT_r2doublem_real2IDC_EDIT_i2doublem_imag2IDC_EDIT_Rdoublem_RrealIDC_EDIT_Idoublem_Rimag下面是編寫代碼的重要階段,可以借鑒在設(shè)計(jì)基于DOS界面的控制臺應(yīng)用程序的代碼,并將其作必要的改寫,具體改寫的步驟與內(nèi)容如下。①將Fushu.h文件和Fushu.cpp文件合并成一個文件,重新命名為Fushu.h,并將其加入MFC工程。②修改Fushu.h文件具體包括:將析構(gòu)函數(shù)的函數(shù)聲明和定義注釋掉,因?yàn)樵趫D形界面的程序上已經(jīng)不能用cout流輸出了;將重載運(yùn)算符“>>”、“<<”的函數(shù)聲明和定義注釋掉,同樣,在圖形界面的程序上已經(jīng)不能用cin流和cout流來輸入輸出;由于Complex類中的數(shù)據(jù)成員為私有類型,所以,添加兩個Complex類成員函數(shù),分別用于返回Complex類對象的實(shí)部和虛部。這樣便能在按鈕的消息映射函數(shù)中輸出復(fù)數(shù)的值。其具體代碼如下:doubleComplex::display_real(){ returnreal;}doubleComplex::display_imag(){ returnimag;}以上兩個函數(shù)在類的內(nèi)部寫出函數(shù)原型,在類的外部寫出函數(shù)實(shí)現(xiàn)代碼。③在對話框類的實(shí)現(xiàn)文件FS_JisuanqiDlg.cpp中加入#include"Fushu.h",以實(shí)現(xiàn)在該文件中可使用Complex類。④添加按鈕的消息映射函數(shù),按快捷鍵Ctrl+W,打開MFCClassWizard界面,選擇MessageMaps選項(xiàng)卡,可顯示成員函數(shù)設(shè)置界面,如圖7所示。圖7成員函數(shù)設(shè)置界面⑤編寫復(fù)制按鈕的消息處理函數(shù),實(shí)現(xiàn)將復(fù)數(shù)1中的數(shù)據(jù)復(fù)制到復(fù)數(shù)2中,具體代碼如下voidCFS_JisuanqiDlg::OnBUTTONfuzhi(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData();//調(diào)用函數(shù),使數(shù)據(jù)由控件向相關(guān)聯(lián)的成員變量復(fù)制 Complexc1(m_real1,m_imag1);//建立Complex類對象,用輸入的復(fù)數(shù)//1的值初始化 Complexc2(c1);//建立對象c2,調(diào)用拷貝構(gòu)造函數(shù),用c1初始化c2 m_real2=c2.display_real();//將對象c2的實(shí)部賦值給成員變量m_real2 m_imag2=c2.display_imag();//將對象c2的虛部賦值給成員變量m_imag2 UpdateData(FALSE);//調(diào)用函數(shù),使數(shù)據(jù)由控件相關(guān)聯(lián)的成員變量向控件復(fù)制}⑥與編寫復(fù)制按鈕的消息處理函數(shù)類似,分別編寫加、減、乘、除按鈕的消息處理函數(shù)。下面是“加”按鈕的消息處理函數(shù)代碼,減、乘、除以此類推,只是將代碼中“+”分別換成“-”、“*”、“/”。voidCFS_JisuanqiDlg::OnBUTTONjia(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); Complexc1(m_real1,m_imag1); Complexc2(m_real2,m_imag2); Complexc3; c3=c1+c2;//調(diào)用重載運(yùn)算符“+”函數(shù),實(shí)現(xiàn)求兩個復(fù)數(shù)的和 m_Rreal=c3.display_real(); m_Rimag=c3.display_imag(); UpdateData(FALSE);}編寫求復(fù)數(shù)1的相反數(shù)按鈕的消息處理函數(shù)代碼如下:voidCFS_JisuanqiDlg::OnBUTTONfanshu(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); Complexc1(m_real1,m_imag1); Complexc2; c2=-c1;//調(diào)用重載單目運(yùn)算符“-”函數(shù),實(shí)現(xiàn)求復(fù)數(shù)的相反數(shù) m_Rreal=c2.display_real(); m_Rimag=c2.display_imag(); UpdateData(FALSE);}⑦編寫退出按鈕的消息處理函數(shù),具體代碼如下:voidCFS_JisuanqiDlg::OnBUTTONExit(){ //TODO:Addyourcontrolnotificationhandlercodehere DestroyWindow();//DestroyWindow是對話框基類CWnd的一個成員函數(shù),用//來終止窗口。}5.2基于MFC的應(yīng)用程序測試運(yùn)行程序后,首先出現(xiàn)的界面如圖8所示。圖8程序初始運(yùn)行界面在復(fù)數(shù)1中輸入數(shù)據(jù),按“復(fù)制”按鈕,將復(fù)數(shù)1中的數(shù)據(jù)復(fù)制到復(fù)數(shù)2中,結(jié)果如圖9所示。圖9單擊“復(fù)制”按鈕后的界面在復(fù)數(shù)2中輸入數(shù)據(jù),單擊“+”按鈕,實(shí)現(xiàn)求解并將結(jié)果顯示出來,如圖10所示。圖10單擊“+”按鈕后的界面分別單擊“-”、“*”、“/”按鈕,結(jié)果如圖11、圖12、圖13所示。圖11單擊“-”按鈕后的界面圖12單擊“*”按鈕后的界面圖13單擊“/”按鈕后的界面單擊“1:相反數(shù)”按鈕后,結(jié)果如圖14所示

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論