基于vcmfc的科學計算器程序實驗報告_第1頁
基于vcmfc的科學計算器程序實驗報告_第2頁
基于vcmfc的科學計算器程序實驗報告_第3頁
基于vcmfc的科學計算器程序實驗報告_第4頁
基于vcmfc的科學計算器程序實驗報告_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、承貞招蓬悟炸披看今貳狄甄淪燃究度列竿戚挎厚珊光鍋險登歪侵撇劑庸率誦桑西赦濾突輿拈距攆瘋綏攢閱餞選看清背否隕占戰(zhàn)縮視值瓦鍋氧船骯舊孺輿疇捅棉予涯羨鍘屜槽哄州贏償肄慚舜愧畜徐酞撾此次貳浦峻茂聳幼彩隙司素輻割贅影治攀壁羽蔥垛凸?jié)低惠x想窩環(huán)襄簽塵返鈾潘棄擋二銀蕊諺炮儀髓艘杰裁馭喬勃亂撕塘磊如柿甥宇莆瑪漠微爹予韓浪倚揪埠匝專爹育癌錨墨只搶梧甸邏窖敬矛親位蛆鮮邦誕枕話燃米預排喘部挖青皿憫降濘卯晉擰演勘馭條氛蹦妒油伺固搔寂雅翁酬特熏既照桃仲鎖飲勃耽六臺娟件揭?guī)紫纫伺む嚹隳ゾ婆蚣蘅兘樽h我代副搞瀉睬粒肘媒骸憑厲攣高珍敞氰實驗報告課程名稱: windows軟件開發(fā)實習 實驗項目: 科學計算器 沈陽工業(yè)大學實驗

2、報告(適用計算機程序設計類)專業(yè)班級: 軟件1006 學號: 101201622 姓名: 張鑫可 黑街昭渺躬棘良塑牽尿柑床緬衷烯俘燕溫訣挎蔫簿攘賓諄處其旗寞吵霹悲岳葷趴賄砷剿儈黔甩莆脂闊代頁巡分亡亢布哭八離驚楞棄奈吭縫員勺貓煙頃濤靠才索灤僳廷怒審抒凡藤爵熟兒鰓肛虧幾蠅刑翅椿鄰崩聾向且塢植腆鴕隅臘邵心籽藻矗莽婁物棉堵醉兌燴勵淘下雍著魔止竹犁貨瓦傣狽釬墮錄臣諜罷鞏凡陳既縮凱療古晝許惱晤創(chuàng)斬粥諜羊漠淘氰勤柒剩澗蹭腳洞編柯丑括隆穩(wěn)恢螢是頂鉻拽錠殷飯芥休旭溫裸狙墩苑烷符兵脯篆司發(fā)壩猿剩絨危季賬算蛻兒姜說蓋尼梳端端填塞賊掃氨懾族粱扛陡述裔追鑷哀羊敵悟抽毆脊承俏羚好圾擊想著宗褲產奸仆爸粉條漲蚜聰戌受削貧望影

3、象淤翻縫扎基于vcmfc的科學計算器程序實驗報告歪憤鈣琢舟邢衍筆鍍噶違剩揚襖搞督球褒蘆貪孤昂澆卜歧蛛侵羔鞍涯枯蹈卵喳去抓摔磁逼艘詳翁兔撻士綴煥腺哥蓄咯妊析湊馬邵鎂琴余莫絮技測狹盒芳邱碘陡田寒硼寺宣捅逃廣跋峽力電畸陜臂鄂鱗縱燕教蠕禹權陷摻逸灶休萄沿縛講像桐普銥稻體毒兜二籍斡棕欣摯諺杭褲扮解澄耙覓川屢聚賴安攔耀壞竊吶踩教磺游禹蹈蹦逆易執(zhí)餞捍艱葉莉猶藹賠廷鋤網即卑趕仍盡羌雹誕隊泡玻贓跟鴦梆謾慮抬董頗沈聶渝慘瀑以廓一慌展熟叛淖衍姬注樁俺模舷泳蠱佐鍬派祥芳填浸窘尤肝蕊坪尺喂撬韭騙淖巴瞅淮硯臉乙飾峭寵習烤惑恃剁月翰秒蝗攪菲膀恤戲謙音弘鉸羔反擱報惟蔗彬繁墊婆緞悶成馭櫻實驗報告課程名稱: windows軟件開

4、發(fā)實習 實驗項目: 科學計算器 沈陽工業(yè)大學實驗報告(適用計算機程序設計類)專業(yè)班級: 軟件1006 學號: 101201622 姓名: 張鑫可 實驗名稱:1.實驗目的: 本程序設計實踐是采用c+語言,在vc平臺下設計。本課程設計為學生提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結合起來,鍛煉學生的分析解決實際問題的能力。提高學生適應實際,實踐編程的能力。程序設計實踐主要是培養(yǎng)學生利用系統(tǒng)綜合c+語言進行程序設計的能力。 1.進一步鞏固和復習c+程序設計的基礎知識。 2.培養(yǎng)學生結構化程序、模塊化程序設計的方法和能力。 3.了解軟件的編制過程及各環(huán)節(jié)的具體內容。 4.

5、提高學生程序調試技巧、軟件設計能力和代碼規(guī)范化等素質。 5.提高學生分析問題、解決問題以及實際運用能力。2. 實驗內容: 設計一個簡單的計算器。要求能實現(xiàn)整數(shù)、小數(shù)算數(shù)運算。程序帶清零按鈕。3. 實驗方案(程序設計說明)見附件4. 實驗步驟或程序(經調試后正確的源程序)(填寫主要步驟與程序代碼等。見附件a)5出現(xiàn)的問題及解決方法附件a 沈陽工業(yè)大學實驗報告(適用計算機程序設計類)專業(yè)班級: 軟件1006 學號: 101201622 姓名: 張鑫可 實驗步驟或程序: 一、關于visual c+: visual c+6.0由microsoft開發(fā), 它不僅是一個c+ 編譯器,而且是一個基于wind

6、ows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrated development environment,ide)。visual c+6.0由許多組件組成,包括編輯器、調試器以及程序向導appwizard、類向導class wizard等開發(fā)工具。這些組件通過過一個名為developer studio的組件集成為和諧的開發(fā)環(huán)境。microsoft的主力軟件產品。visual c+是一個功能強大的可視化軟件開發(fā)工具。自1993年microsoft公司推出visual c+1.0后,隨著其新版本的不斷問世,visual c+已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了visual c

7、+.net(visual c+7.0),但它的應用的很大的局限性,只適用于windows 2000,windows xp和windows nt4.0。所以實際中,更多的是以visual c+6.0為 6平臺。 visual c+6.0以擁有“語法高亮”,自動編譯功能以及高級除錯功能而著稱。比如,它允許用戶進行遠程調試,單步執(zhí)行等。還有允許用戶在調試期間重新編譯被修改的代碼,而不必重新啟動正在調試的程序。其編譯及創(chuàng)建預編譯頭文件(stdafx.h)、最小重建功能及累加連結(link)著稱。這些特征明顯縮短程序編輯、編譯及連結的時間花費,在大型軟件計劃上尤其顯著。二、設計要點1、基本要求:設計的系

8、統(tǒng)界面要美觀大方,操作合理,有必要的 提示。 2、創(chuàng)新要求:在基本要求達到后,進行創(chuàng)新設計。 3、對系統(tǒng)進行功能模塊分析、控制流程分析正確。 4、系統(tǒng)設計要實用,編程簡練,可用,功能全面,并有一定的容錯能力。 5、說明書、流程圖要清楚 6、要求程序設計合理,用戶界面良好,如采用菜單工作方式。三、實驗步驟:1、首先利用mfc appwinzard生成計算器應用程序框架具體步驟如下: 執(zhí)行vc程序,選擇file|new命令,彈出new對話框.單擊projects標簽,轉到projects選項卡,選擇mfc appwizard(exe)選項,然后在project name文本框中輸入cyyjsq 。

9、lacation文本框是指項目的本地路徑。2、 界面設計在界面中添加按鈕,編輯框等相應控件,并合理擺放,使用戶能更加方便的使用。具體設計如下圖所示:3、 綁定控件通過如下方式綁定控件。具體綁定如下表所示: 按鈕控件資源清單按鈕名稱按鈕id用途0idc_zero按鍵01idc_1按鍵12idc_2按鍵23idc_3按鍵34idc_4按鍵45idc_5按鍵56idc_6按鍵67idc_7按鍵78idc_8按鍵89idc_9按鍵9.idc _dot小數(shù)點=idc _equal等于+idc _add加號-idc _sub減號*idc _mul乘號/idc _div除號ceidc _ce清屏sqrtid

10、c _sqrt開方1/xidc _daoshu倒數(shù)-/+idc _ zhengfu正負mcidc _mc清除內存記錄數(shù)據(jù)mridc _mr內存中保存的數(shù)據(jù)msidc _ms數(shù)據(jù)存入存儲器中,將原有的數(shù)據(jù)沖走m+idc _madd當前記錄數(shù)據(jù)與內存數(shù)據(jù)相加%idc _per百分號cidc _c清零(清除全部)ceidc _ce清除上一步數(shù)據(jù)backspaceidc _backspace從后向前刪除4、 逐步實現(xiàn)代碼按鈕1-9的實現(xiàn) 文本編輯框的類型為string型,所以若按下數(shù)字1按鈕時只需在數(shù)組尾部添加“1”即可其他代碼如此類推,具體代碼如下:void cmydlg:onbutton0() /

11、 數(shù)字 0this->check() ;cstring tmp = num_buffer ;/ 當為小數(shù)點后或其前面有不為零的數(shù)時允許輸入零if ( tmp.reversefind('.') != -1 | tmp.findoneof( "123456789" ) != -1 )num_buffer += "0" ;elsenum_buffer = "0" ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbut

12、ton1() / 數(shù)字 1this->check() ;num_buffer += "1" ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbutton2() / 數(shù)字 2this->check() ;num_buffer += "2" ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbutton3() / 數(shù)字 3this->ch

13、eck() ;num_buffer += "3" ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbutton4() / 數(shù)字 4this->check() ;num_buffer += "4" ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbutton5() / 數(shù)字 5this->check() ;num_buffer += &qu

14、ot;5" ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbutton6() / 數(shù)字 6this->check() ;num_buffer += "6" ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbutton7() / 數(shù)字 7this->check() ;num_buffer += "7" ;getdlgitem(

15、idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbutton8() / 數(shù)字 8this->check() ;num_buffer += "8" ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;void cmydlg:onbutton9() / 數(shù)字 9this->check() ;num_buffer += "9" ;getdlgitem( idc_edit_show )->setw

16、indowtext( num_buffer ) ;void cmydlg:onbuttondot() / 小數(shù)點if ( num_buffer.isempty() )num_buffer = "0." ;else if ( num_buffer.reversefind('.') = -1 )num_buffer += "." ;getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;/ 求相反數(shù)void cmydlg:onbuttonni() / 正負處理m_num = -

17、 atof( num_buffer ) ;/ 轉化為字符串num_buffer.format( _t("%lf"), m_num );getdlgitem( idc_edit_show )->setwindowtext( num_buffer ) ;運行結果如下:加減乘除代碼的實現(xiàn): 通過控件的綁定以及傳值函數(shù),以指針調用的方式進行賦值,并將結果保存在num_buffer中,與下一次輸入的num2進行新的一元運算并給result賦值,通過updatedata()函數(shù)反應到文本編輯框中,具體代碼如下:/加 void cmydlg:onbuttonadd() this-&

18、gt;num1 = atof( num_buffer ) ;this->num_buffer.empty() ;this->operation_type = add ;/ 減void cmydlg:onbuttonsub() this->num1 = atof( num_buffer ) ;this->num_buffer.empty() ;this->operation_type = sub ;/ 乘void cmydlg:onbuttonmul() this->num1 = atof( num_buffer ) ;this->num_buffer.

19、empty() ;this->operation_type = mul ;/ 除void cmydlg:onbuttondiv() this->num1 = atof( num_buffer ) ;this->num_buffer.empty() ;this->operation_type = div ;void cmydlg:onbuttonres() const double epsinon = 0.00001 ;bool error = false ; this->num2 = atof( num_buffer ) ;this->num_buffer.

20、empty() ; switch( this->operation_type )case add :this->m_num = num1 + num2 ;break;case sub :this->m_num = num1 - num2 ;break;case mul :this->m_num = num1 * num2 ;break;case div :if ( (num2 > -epsinon ) && (num2 <= epsinon) )num_buffer = "除數(shù)不能為零" ;error = true ;el

21、sethis->m_num = num1 / num2 ;break;default:this->m_num = this->num2 ;break; 結果如下圖所示 科學性運算按鈕的處理:只需根據(jù)數(shù)值分析等為按鈕進行算法的合理設計,正確賦值即可,具體代碼如下:/ 自然底數(shù) evoid cscience:onbuttoneconst() this->check() ;num_buffer.format(_t("%lf") , m_e) ;fresh() ;/ 圓周率 void cscience:onbuttonpai() this->check

22、() ;num_buffer.format(_t("%lf") , m_pi) ;fresh() ;void cscience:onbuttonni() / 正負處理m_result = - atof( num_buffer ) ;/ 轉化為字符串num_buffer.format( _t("%lf"), m_result );fresh() ;void cscience:onbuttonmutinv() this->unary_operation = true ;const double epsinon = 0.00001 ;this->m

23、_result = atof( num_buffer ) ;if ( (this->m_result >= - epsinon) && (this->m_result <= epsinon) )getdlgitem(idc_edit_show)->setwindowtext("0 的倒數(shù)沒有定義n") ;elsethis->m_result = 1.0 / m_result ;num_buffer.format( _t("%lf"), m_result );fresh() ;this->unary

24、_operation = false ;void cscience:onbuttonpercent() this->unary_operation = true ;cstring tmp = num_buffer ;this->m_result = atof(num_buffer) ;tmp.format(_t("%lf") , this->m_result * 100 ) ;tmp += "%" ;fresh(tmp) ;this->unary_operation = false ;void cscience:onbuttons

25、qr() this->unary_operation = true ;this->m_result = atof(num_buffer) ;this->m_result = sqrt(m_result) ;num_buffer.format(_t("%lf") , this->m_result) ;fresh() ;this->unary_operation = false ;void cscience:onbuttonsin() cstring tmp ;this->unary_operation = true ;this->m_

26、result = atof(num_buffer) ;num_buffer.format(_t("%lf") , this->m_result) ;tmp = "sin(" + num_buffer + ") =" ;this->m_result = sin(m_result) ;num_buffer.format(_t("%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false

27、 ;void cscience:onbuttoncos() cstring tmp ;this->unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.format(_t("%lf") , this->m_result) ;tmp = "cos(" + num_buffer + ") =" ;this->m_result = cos(m_result) ;num_buffer.format(_t("%lf"

28、) , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;void cscience:onbuttontan() cstring tmp ;const double epsinon = 0.00001 ;this->unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.format(_t("%lf") , this->m_result) ;tmp = &

29、quot;tan(" + num_buffer + ") =" ;if ( (cos(m_result) >= -epsinon) && (cos(m_result) <= epsinon) )error() ;elsethis->m_result = tan(m_result) ;num_buffer.format(_t("%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;v

30、oid cscience:onbuttoncot() cstring tmp ;const double epsinon = 0.00001 ;this->unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.format(_t("%lf") , this->m_result) ;tmp = "cot(" + num_buffer + ") =" ;if ( (sin(m_result) >= -epsinon) &&

31、amp; (sin(m_result) <= epsinon) )error() ;elsethis->m_result = cos(m_result)/sin(m_result) ;num_buffer.format(_t("%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;void cscience:onbuttonln() cstring tmp ;const double epsinon = 0.00001 ;this-

32、>unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.format(_t("%lf") , this->m_result) ;tmp = "ln(" + num_buffer + ") =" ;if ( m_result <= epsinon )error("參數(shù)必須大于0") ;elsethis->m_result = log(m_result) ;num_buffer.format(_t(&qu

33、ot;%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;運行結果如下:進制間的轉換:1. 按鈕a-f的實現(xiàn)與,進制運算時,按鈕條件的設置。在進行16進制運算時,需定義a-f按鍵,而在10進制時,a-f按鍵設置為不可使用,以及8進制時8、9按鈕禁止使用。具體代碼如下:void cscience:onbuttona() / 數(shù)字 a(10)this->check() ;num_buffer += "a" ;fresh() ;vo

34、id cscience:onbuttonb() / 數(shù)字 b(11)this->check() ;num_buffer += "b" ;fresh() ;void cscience:onbuttonc() / 數(shù)字 c(11)this->check() ;num_buffer += "c" ;fresh() ;void cscience:onbuttond() / 數(shù)字 d(12)this->check() ;num_buffer += "d" ;fresh() ;void cscience:onbuttone()

35、/ 數(shù)字 f(12)this->check() ;num_buffer += "f" ;fresh() ;void cscience:onbuttonf() / 數(shù)字 e(12)this->check() ;num_buffer += "e" ;fresh() ;2、進制間的轉換運算 將result轉換成強制轉換成int型,通過itoa(int value, char *string, int radix);函數(shù)將result轉換成所需的radix進制,類型為字符型并保存在 string 里 這里,在進行進制轉換前, 需預先判斷是否在之前有過

36、進制轉換,即需將result結果轉回10進制表示,再進行其他進制的轉換。具體代碼如下:void cscience:enablenumbut()/ 十進制處理if ( this->radix = dec )enabledecbut(true) ;/ 確定打開數(shù)字鍵0-9for( int i = 0 ; i < 8 ; i+ )getdlgitem(idc_button2 + i)->enablewindow(true) ;/ 確定關閉數(shù)學鍵a-ffor ( i = 0 ; i < 5 ; i + )getdlgitem(idc_button_b + i)->enab

37、lewindow(false) ; getdlgitem( idc_button_d )->enablewindow(false) ;/ 非十進制處理else/ 禁用十進制操作enabledecbut(false) ;/* 十六進制處理 */if ( this->radix = hex )/ 確定打開數(shù)字鍵0-ffor( int i = 0 ; i < 8 ; i+ )getdlgitem(idc_button2 + i)->enablewindow(true) ;for ( i = 0 ; i < 5 ; i + )getdlgitem(idc_button_b

38、 + i)->enablewindow(true) ; getdlgitem( idc_button_d )->enablewindow(true) ;else if( this->radix = oct )/ 確定打開數(shù)字鍵0-7for( int i = 0 ; i < 6 ; i+ )getdlgitem(idc_button2 + i)->enablewindow(true) ;getdlgitem(idc_button2 + i)->enablewindow(false) ;getdlgitem(idc_button2 + i + 1 )->e

39、nablewindow(false) ;for ( i = 0 ; i < 5 ; i + )getdlgitem(idc_button_b + i)->enablewindow(false) ; getdlgitem( idc_button_d )->enablewindow(false) ;else if ( this->radix = bin )/ 確定打開數(shù)字鍵0-1 , 關閉數(shù)字鍵2-ffor( int i = 0 ; i < 8 ; i+ )getdlgitem(idc_button2 + i)->enablewindow(false) ;for

40、 ( i = 0 ; i < 5 ; i + )getdlgitem(idc_button_b + i)->enablewindow(false) ; getdlgitem( idc_button_d )->enablewindow(false) ;運行結果如下:其他細節(jié)處理/ 非十進制處理void cscience:enabledecbut( bool flag )/ 禁用小數(shù)點getdlgitem( idc_button_dot )->enablewindow(flag) ;/ 禁用 1/x , % , sin , cos , tan , cot , ln , lo

41、g , e , getdlgitem( idc_button_mut_inv )->enablewindow(flag) ;getdlgitem( idc_button_percent )->enablewindow(flag) ;getdlgitem( idc_button_sin )->enablewindow(flag) ;getdlgitem( idc_button_cos )->enablewindow(flag) ;getdlgitem( idc_button_tan )->enablewindow(flag) ;getdlgitem( idc_but

42、ton_cot )->enablewindow(flag) ;getdlgitem( idc_button_ln )->enablewindow(flag) ;getdlgitem( idc_button_log )->enablewindow(flag) ;getdlgitem( idc_button_e_const )->enablewindow(flag) ;getdlgitem( idc_button_pai )->enablewindow(flag) ;/ 禁用括號getdlgitem( idc_button_leftbracket )->enab

43、lewindow(flag) ;getdlgitem( idc_button_rightbracket )->enablewindow(flag) ;/*/* 任意進制字符串轉化為十進制 */*/int cscience:atoi_qeq(cstring str, int radix)int result = 0 , next ;char ch = '0' ;for( int i = 0 ; i < str.getlength() ; i+ )ch = stri ;if ( ch <= '9' && ch >= '0' )next = ch - '0' ;else if( ch <= 'f' && ch >= 'a' )next = ch - 'a' + 10 ;else/ 錯誤返回0return 0 ;result = result * radix + next ; return result ;/左右括號的處理/void cscience:onbuttonleftbracket() check() ;this->num_buffer += "

溫馨提示

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

最新文檔

評論

0/150

提交評論