基于MFC的簡易計算器制作設(shè)計_第1頁
基于MFC的簡易計算器制作設(shè)計_第2頁
基于MFC的簡易計算器制作設(shè)計_第3頁
基于MFC的簡易計算器制作設(shè)計_第4頁
基于MFC的簡易計算器制作設(shè)計_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于MFC的簡易計算器制作設(shè)計【實用文檔】doc文檔可直接使用可編輯,歡迎下載

J基于MFC的簡易計算器制作設(shè)計【實用文檔】doc文檔可直接使用可編輯,歡迎下載JINGCHUUNIVERSITYOFTECHNOLOGY《一個簡單的計算器設(shè)計》課程設(shè)計報告學(xué)院:計算機工程學(xué)院學(xué)號:2012304030223姓名:朱鐘雄專業(yè)年級:12計算機應(yīng)用技術(shù)2班指導(dǎo)教師:游明坤時間:2014年12月25日基于對話框的計算器MFC方法實現(xiàn)隨著社會的發(fā)展,人們在日常生活中經(jīng)常需要用到計算器來進行簡單或者復(fù)雜的運算,計算器在人們生活中的地位也越來越重要.簡單的計算器能實現(xiàn)加、減、乘、除、開方、平方等運算。學(xué)習(xí)了C++的程序設(shè)計語言這門課程,可以利用基于VC的MFC方法制作一個簡易的計算器,實現(xiàn)基本的運算功能,從而滿足生活中的需要,降低計算的難度。一.面向?qū)ο蟮某绦蛟O(shè)計方法區(qū)別與面向過程的“先功能后數(shù)據(jù)”思想,面向?qū)ο蟮某绦蛟O(shè)計方法把狀態(tài)(數(shù)據(jù))和行為(功能)捆綁在一起,形成了對象。當(dāng)遇到一個具體的問題時,我們只需要將一個系統(tǒng)分解成一個個的對象,同時將狀態(tài)和行為封裝在對象中.

面向?qū)ο蟮某绦蛟O(shè)計方法具有三個基本特點:封裝、繼承和多態(tài).

(1)

封裝性

封裝是一個用來指代將對象的狀態(tài)和行為捆綁到一個單一邏輯單元的機制的正式術(shù)語。它不是面向?qū)ο笳Z言所特有的,面向過程的C語言用結(jié)構(gòu)封裝了數(shù)據(jù),函數(shù)封裝了邏輯。但是面向?qū)ο蠓庋b了兩者,從這種意義上來說,面向?qū)ο蟮姆庋b更加完美。

出于一些安全性與方便性的考慮,對象經(jīng)常會限制對它們特征(包括屬性和方法)的訪問,這種限制稱為信息隱藏。作為對象的抽象,類通常只公開對象可以公開的東西,主要是一個特定對象對系統(tǒng)的服務(wù),而隱藏執(zhí)行服務(wù)的內(nèi)部細節(jié)和為了完成這些服務(wù)而設(shè)計的數(shù)據(jù)。

2)

繼承性

繼承是定義新類的一種機制,使用這種機制創(chuàng)建新類時只需要聲明新類和已創(chuàng)建類之間的差別。

對于一個特定的繼承關(guān)系,我們將創(chuàng)建的新類稱為子類(subclass),被繼承的原始類稱為超類(superclass).子類可以使用超類定義屬性和方法,也可以自己定義新的屬性和方法。超類的特征不會受到子類的影響.

繼承帶來的第一個且是最顯而易見的好處是減少了代碼冗余,因此也減輕了需要改進或重寫代碼時的負擔(dān).

進一步地,子類會比不使用繼承時更加簡潔,這點應(yīng)當(dāng)不難理解;通過繼承可以不加修改地重用和擴展已經(jīng)徹底測試的代碼,這避免了工程性的組裝對已經(jīng)完成測試代碼的影響;最好的一點,即使沒有已有類的源代碼,仍然可以從已有的類中派生出新類,只要我們擁有那個類編譯后的字節(jié)碼.

(3)多態(tài)性

術(shù)語多態(tài)指的是屬于兩個或多個不同類的對象以各自的類相關(guān)的不同方式響應(yīng)同一消息(方法調(diào)用)的能力。同一個消息根據(jù)發(fā)送的對象不同而采用多種不同的行為方式.換句話說多態(tài)使得消息發(fā)送者能給一組具有公共接口的對象發(fā)送相同的消息,接收者做出相應(yīng)的回應(yīng)。

多態(tài)的作用:增強了代碼的可讀性、操作的透明性,增強了代碼的靈活性和可擴充性。二。MFC程序設(shè)計方法

(1)API

應(yīng)用程序編程的接口函數(shù)

一個應(yīng)用程序要和具體的硬件打交道,比如接收按鍵值,接收鼠標左擊或右擊,記錄鼠標的坐標等,就勢必要有所有這些硬件的驅(qū)動,這樣加大了程序的代碼量。而且,每一個應(yīng)用程序都得寫,增加了不必要的重復(fù)工作。操作系統(tǒng)就是解決這些問題的。

操作系統(tǒng)基于硬件和應(yīng)用程序之間,它提供應(yīng)用程序調(diào)用的函數(shù),應(yīng)用程序可通過這些函數(shù)與硬件打交道。而這些函數(shù)就是API.

(2)MFC(Microsoft

Foundation

Class)微軟基礎(chǔ)類庫

MFC類庫集成了大量已經(jīng)預(yù)先定義好的類,用戶可以根據(jù)編程的需要調(diào)用響應(yīng)的類,或根據(jù)需要自定義有關(guān)的類.

(3)窗口

就是一個應(yīng)用程序能夠看到的部分。是Windows應(yīng)用程序中一個非常重要的元素。

通常都包含標題欄、菜單欄、系統(tǒng)菜單等

(4)消息和消息隊列

消息

:應(yīng)用程序接收的事件都會產(chǎn)生相應(yīng)的消息,消息的產(chǎn)生是因為事件發(fā)生的結(jié)果。如鍵盤有鍵盤按下和抬起消息,鼠標有點擊消息,畫面有刷新消息,重畫消息等。

編寫應(yīng)用程序時,如果需要對某事件進行響應(yīng),如需要當(dāng)按下Ctrl+S組合鍵就進行保存操作時,就需要對Ctrl+S這個事件對應(yīng)的消息設(shè)計響應(yīng)函數(shù)。

消息隊列

:

應(yīng)用程序?qū)κ录⑦M行的響應(yīng)時從它本身的消息隊列里取出消息來執(zhí)行的。事件是有操作系統(tǒng)接收的,然后把它轉(zhuǎn)化成消息,再把消息送到應(yīng)用程序所在的隊列中,供應(yīng)用程序取走。

(5)事件驅(qū)動

Windows應(yīng)用程序函數(shù)執(zhí)行過程沒有一個固定的順序。一條消息過來就對應(yīng)進行響應(yīng)(只要設(shè)計了響應(yīng)函數(shù)),那條消息來就執(zhí)行那條對應(yīng)的函數(shù),沒有消息就等待。

MFC程序設(shè)計的好處:一是MFC提供了一個標準化的結(jié)構(gòu),通過創(chuàng)建時的選擇就可以實現(xiàn)一個基本的程序功能.這樣不必從頭開始設(shè)計創(chuàng)建和管理一個標準Windows應(yīng)用程序所需的代碼,節(jié)省了時間;二是它可以自動生成很多代碼,比如只要用類向?qū)?ClassWizard)添加了一個成員變量,它就會自動在代碼的相應(yīng)位置添加代碼進去,如果手動添加,不光麻煩,而且文件很多,位置不固定可能會遺漏。所以類向?qū)墙?jīng)常需要用的,以提高編程效率,減少出錯。

MFC編程的主要過程就是編寫消息響應(yīng)函數(shù)的過程,因為其他的工作都自動生成了。因此就需要我們知道如何添加消息響應(yīng)函數(shù)(用類向?qū)В憫?yīng)函數(shù)中寫什么內(nèi)容。

響應(yīng)函數(shù)的內(nèi)容主要是調(diào)用系統(tǒng)函數(shù),類里定義的成員函數(shù),系統(tǒng)的系統(tǒng)函數(shù),以及變量的傳遞等.三。MFC實現(xiàn)計算器的程序設(shè)計程序流程圖點擊加減乘除點擊加減乘除等進行運算選擇點擊數(shù)字鍵,輸入第二個操作數(shù)點擊數(shù)字鍵,輸入第一個操作數(shù)點擊“=”鍵,輸出運算結(jié)果程序開始顯示運算結(jié)果主要程序代碼如下://為了能在同一個編輯框里顯示完整的算式,我添加了兩個編輯框,同時輸入,一個負責(zé)計算數(shù)據(jù)的不可見,另一個可見的用來顯示。voidCJncalDlg::OnNUM1()//點擊數(shù)字鍵1時顯示1{UpdateData(TRUE);?m_str1=m_str1+”1";/在編輯框1的字符串后加上字符1?m_str2=m_str2+"1";/在編輯框2的字符串后加上字符1UpdateData(FALSE);}voidCJncalDlg::OnNUM2()//按下數(shù)字鍵2時顯示數(shù)字2{UpdateData(TRUE); m_str1=m_str1+”2";//在編輯框1的字符串后加上字符2?m_str2=m_str2+"2”;//在編輯框2的字符串后加上字符2UpdateData(FALSE);}voidCJncalDlg::OnNUM3()//按下數(shù)字鍵3時顯示數(shù)字3{UpdateData(TRUE); m_str1=m_str1+”3";//在編輯框1的字符串后加上字符3?m_str2=m_str2+"3”;//在編輯框2的字符串后加上字符3UpdateData(FALSE);}數(shù)字鍵4、5、6、7、8、9、0、00的代碼同上voidCJncalDlg::OnSUB()//加法{UpdateData(TRUE); m_str2=m_str2+"+";//顯示框上顯示“+"Updat(yī)eDat(yī)a(FALSE);?SaveValue1();//調(diào)用函數(shù)將第一個操作數(shù)變?yōu)閐ouble型并保存m_Sign=0;//選擇語句的條件賦值}voidCJncalDlg::OnDEC()//減法{UpdateData(TRUE); m_str2=m_str2+”—";//顯示框上顯示“-”Updat(yī)eDat(yī)a(FALSE);?SaveValue1();//調(diào)用函數(shù)將第一個操作數(shù)變?yōu)椋鋙uble型并保存m_Sign=1;//選擇語句的條件賦值}voidCJncalDlg::OnMUL(){Updat(yī)eData(TRUE); m_str2=m_str2+"×";//顯示框上顯示“×”UpdateData(FALSE); SaveValue1();//調(diào)用函數(shù)將第一個操作數(shù)變?yōu)閐ouble型并保存m_Sign=2;//選擇語句的條件賦值}voidCJncalDlg::OnDIV()//除法{UpdateData(TRUE);?m_str2=m_str2+”÷”;//顯示框上顯示“÷"UpdateData(FALSE);?SaveValue1();//調(diào)用函數(shù)將第一個操作數(shù)變?yōu)椋洌飖ble型并保存m_Sign=3;//選擇語句的條件賦值}voidCJncalDlg::OnEQUAL()//“="操作{?Calculator();//調(diào)用Calculator函數(shù)}voidCJncalDlg::SaveValue1()//保存第一個操作數(shù)函數(shù){UpdateData(TRUE);?m_num1=atof(m_str1);//第一個編輯框內(nèi)的字符轉(zhuǎn)換為數(shù)字并賦給m_fNumber1?m_str1="”;//清空第一個編輯框UpdateData(FALSE);}voidCJncalDlg::Calculator()//Calculator函數(shù){UpdateData(TRUE);?m_num2=atof(m_str1);//編輯框1內(nèi)的字符轉(zhuǎn)換成數(shù)字并賦值給m_fNumber2?doubler=0.0f;?switch(m_Sign)//選擇語句?{?case0://加?f=m_num1+m_num2; break;?case1://減 f=m_num1-m_num2; break; case2://乘 f=m_num1*m_num2; break;?case3://除 if(m_num2==0.0f)?{MessageBox(”輸入錯誤,請重新輸入”);?}?else?{?f=m_numn1/m_num2;?}?break;?case4://平方 f=m_num2*m_num2; break;?case5://開方 f=sqrt(m_num2); break; default: break; }?if(r-int(r)<=1e-5)//如果浮點數(shù)其實是個整數(shù)?{ m_str1.Format("%d",(int)f);?m_str2=m_str2+"="+m_str1+””; } else?{?m_str1.Format("%f",f);?m_str2=m_str2+”="+m_str1+"";?}UpdateData(FALSE);?m_num1=r; m_num2=0。0f;}voidCJncalDlg::OnA(yù)BOUT()//軟件關(guān)于按鈕{CAboutDlgdlg;dlg.DoModal();//調(diào)用}voidCJncalDlg::OnCE()//清空編輯框操作{UpdateData(TRUE);?m_str1=”";//第一個編輯框賦空值 m_str2=””;//第二個編輯框賦空值 m_num1=0。0f;//第一個操作數(shù)賦0?m_num2=0.0f;//第二個操作數(shù)賦0m_Sign=0;UpdateData(FALSE);}voidCJncalDlg::OnDEL()//退格操作{UpdateData(TRUE);?if(!m_str1。IsEmpty())//移除編輯框內(nèi)最右邊一個字符 {?m_str1=m_str1。Left(m_str1.GetLength()—1); m_str2=m_str2。Left(m_str2.GetLength()—1);?}UpdateData(FALSE);}//以下為顯示當(dāng)前時間操作intCJncalDlg::OnCreat(yī)e(LPCREATESTRUCTlpCreateStruct){ if(CDialog::OnCreate(lpCreateStruct)==-1) return-1;SetTimer(1,1000,NULL);//設(shè)置定時器 return0;}voidCJncalDlg::OnTimer(UINTnIDEvent){ SYSTEMTIMEst;GetLocalTime(&st);CStringstr_time;str_time.Format(”%d:%d:%d",st.wHour,st.wMinute,st。wSecond);SetDlgItemText(IDC_STATICTIME,str_time);CDialog::OnTimer(nIDEvent);}四、試驗結(jié)果展示計算器的整體效果圖。我在計算器的頂端加入了顯示當(dāng)前日期和時間的功能,更加方便快捷。加法功能的實現(xiàn)減法功能的實現(xiàn)乘法功能的實現(xiàn)除法功能的實現(xiàn)本計算器除了能實現(xiàn)加減乘除運算,還能進行平方(x^2)和開方(sqrt)的運算.以下為開方演示。關(guān)于計算器經(jīng)過后續(xù)改進,我又再計算器中加入了音樂播放功能,能夠邊聽音樂邊計算。截圖及程序代碼如下:voidCJncalDlg::OnMUSIC1()//播放音樂1{PlaySound("F://1.wav”,NULL,SND_FILENAME|SND_ASYNC);}voidCJncalDlg::OnMUSICOFF()//關(guān)閉音樂{ //TODO:AddyourcontrolnotificationhandlercodeherePlaySound(NULL,NULL,SND_ASYNC);}voidCJncalDlg::OnMUSICCHANGE()//播放音樂2{?//TODO:AddyourcontrolnotificationhandlercodeherePlaySound("F://1.wav”,NULL,SND_FILENAME|SND_ASYNC);}五、總結(jié)這次計算器的制作我查閱了大量參考文獻借鑒了許多前輩們的制作基礎(chǔ)上獨立完成的??丶奶砑?,代碼的編寫都是耗費大量時間和精力才成功的.計算器已經(jīng)實現(xiàn)了其基本功能,可以進行整數(shù)和小數(shù)的加減乘除、平方、開方運算,與其他計算器不同的是我所制作的計算器能夠完整的顯示運算式,這樣能夠清楚的看到自己所做的運算,更加方便,能夠及時找出錯誤,并且我還在計算器的頂端設(shè)計了當(dāng)天日期和當(dāng)前時間,更加符合人們的生活需要。計算器的圖標也是我自己繪制的具有獨特風(fēng)格的JN字樣,顯得美觀大方。計算器雖然已經(jīng)基本實現(xiàn)其功能,但是由于我水平所限,并不能打到十全十美的程度,還有許多功能可以添加和完善,例如sin、cos、tan、log等運算。計算器讓我不滿意的一點是只能通過設(shè)定的按鍵進行輸入,不能通過鍵盤輸入,后來經(jīng)過改進,鍵盤輸入也只能輸入第一個操作數(shù),這是此計算器瑕疵的地方,有待改進和提高。歡迎提供意見和指導(dǎo).參考文獻[1]宋金珂編著,VC++程序設(shè)計基礎(chǔ)教程,清華大學(xué)出版社[2]譚浩強.《c語言程序設(shè)計》。清華大學(xué)出版社[3]辛長安編著.VC++編程技術(shù)與難點剖析.清華大學(xué)出版社[4]陳恭和編著.?dāng)?shù)據(jù)庫Access2002應(yīng)用教程.清華大學(xué)出版社[5]王瑞編著.VisualC++數(shù)據(jù)庫系統(tǒng)開發(fā)完全手冊.人民郵電出版社[6]王春才編著。VisualBasic數(shù)據(jù)庫系統(tǒng)開發(fā)完全手冊.人民郵電出版社[7]高春艷。VisualBasic數(shù)據(jù)庫系統(tǒng)開發(fā)案例精選.人民郵電出版社[8]李曉黎編著.VisualBasic+SQLServer數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)與實例.人民郵電出版社[9]啟明工作室編著.VisualBasic+Access數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)與實例.人民郵電出版社[10]啟明工作室編著.VisualC+++SQLServer數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)與實例。人民郵電出版社[11]呂軍編著《VisualC++與面向?qū)ο蟪绦蛟O(shè)計教程》第二版.高等教育出版社基于單片機的簡易計算器設(shè)計TOC\o”1-3”\h\z\uHYPERLINK1.3設(shè)計目的PAGEREF_Toc374299142\h4HYPERLINK\l"_Toc374299143”1.4設(shè)計任務(wù)PAGEREF_Toc374299143\h4HYPERLINK\l"_Toc374299144"第二章單片機發(fā)展現(xiàn)狀PAGEREF_Toc374299144\h5HYPERLINK3.3其它器件介紹及說明PAGEREF_Toc374299152\h113。3.1LCD1602液晶顯示PAGEREF_Toc374299153\h11HYPERLINK第四章PROTEUS模擬仿真PAGEREF_Toc374299155\h15第五章系統(tǒng)硬件設(shè)計及說明PAGEREF_Toc374299156\h17第六章軟件設(shè)計PAGEREF_Toc374299157\h186.1匯編語言和C語言的特點及選擇PAGEREF_Toc374299158\h18HYPERLINK\h\z\uHYPERLINK\l”_Toc346206228"1引言5HYPERLINK\l”_Toc346206229"2總體設(shè)計方案6HYPERLINK\l”_Toc346206230”2.1程序流程圖72.2簇中的各元素在條件結(jié)構(gòu)中代表的序號72.3具體實現(xiàn)過程8HYPERLINK\l”_Toc346206233”2。3。1前面板設(shè)計及鍵入感應(yīng)8_Toc346206235"2.3。3數(shù)字1——9的輸入92。3。4數(shù)字0的輸入10_Toc346206239”2。3。7“+/-”鍵的設(shè)計13HYPERLINK\l”_Toc346206240”2.3。8“+、—、*、/”四則運算132。3.12取倒數(shù)運算15退格鍵的設(shè)計152。3.14清零鍵的設(shè)計16致謝18參考文獻18HYPERLINK\l”_Toc346206252"附錄19基于LABVIEW的簡易計算器設(shè)計1引言本次課程設(shè)計是基于LabVIEW虛擬儀器系統(tǒng)開發(fā)與實踐等原理與技術(shù)而設(shè)計的計算器,可以用來模擬真實計算器而進行一些簡單的基本運算。虛擬儀器的起源可以追溯到20世紀70年代,“虛擬”的含義主要是強調(diào)軟件在儀器中的作用,體現(xiàn)了虛擬儀器與主要通過硬件實現(xiàn)各種功能的傳統(tǒng)儀器的不同。由于虛擬儀器結(jié)構(gòu)形式的多樣性和適用領(lǐng)域的廣泛性,目前對于虛擬儀器的概念還沒有統(tǒng)一的定義。美國國家儀器公司(NationalInstrunentsCorpotion,NI)認為,虛擬儀器是由計算機硬件資源、模塊化儀器硬件和用于數(shù)據(jù)分析、過程通信及圖形用戶界面的軟件組成的測控系統(tǒng),是一種計算機操縱的模塊化儀器系統(tǒng)。使用虛擬儀器技術(shù),工程師可以利用圖形化開發(fā)軟件方便、高效的創(chuàng)建完全自定義的解決方案,以滿足靈活多變的需求趨勢.本次設(shè)計的計算器是利用虛擬儀器技術(shù)而完成的,可以完成利用計算器可以進行簡單的四則運算、可以進行平方、開根號和倒數(shù)運算、計算器可以進行清零和關(guān)閉計算器操作、在輸入數(shù)據(jù)時不慎將某個數(shù)字輸錯可以運用BackSpace清除該值等一些基本簡單的運算。2總體設(shè)計方案完成標準型計算器的一般功能。設(shè)計框圖如圖2-1所示:圖2—1程序框圖2。1程序流程圖圖2-2程序流程圖2。2簇中的各元素在條件結(jié)構(gòu)中代表的序號表2-1簇中元素默認12345條件結(jié)構(gòu)中序號012345簇中元素67890。條件結(jié)構(gòu)中序號67891011簇中元素+/—+—*/=條件結(jié)構(gòu)中序號121314151617簇中元素sqrt%1/xBackspaceCEXIT條件結(jié)構(gòu)中序號1819202122232.3具體實現(xiàn)過程2。3。1前面板設(shè)計及鍵入感應(yīng)首先建立一個簇,然后在簇中建立23個布爾量,其中包括0—-9十個數(shù)字鍵,1個小數(shù)點鍵,4個“+、—、*、/"運算鍵,1個等號鍵,1個開方鍵,1個符號轉(zhuǎn)換鍵,1個倒數(shù)鍵,1個求百分數(shù)鍵,1個清零鍵,1個退格鍵,1個退出鍵.如圖2—3所示:圖2-3前面板然后通過簇至數(shù)組轉(zhuǎn)換函數(shù)將簇中元素按產(chǎn)生的順序組成一個一維數(shù)組,如圖2—4所示:圖2-4鍵入感應(yīng)過程這樣就實現(xiàn)了每個鍵與數(shù)字(1—-23)之間的對應(yīng)。每次按下一個鍵時,通過搜索一維數(shù)組函數(shù)查找出對應(yīng)的鍵并把其加1后對應(yīng)的數(shù)字連接到一個case結(jié)構(gòu),然后執(zhí)行對應(yīng)case結(jié)構(gòu)中的程序,至此就完成了對一個鍵的感應(yīng)過程。2。3.2運算變量的初始化在運行程序之前,首先對需要用到的變量進行初始化,如圖2—5所示:圖2—5運算變量的初始化在沒有鍵按下的情況下,數(shù)值顯示控件顯示的是0.從上到下的寄存器功能依次為:最上面的用來存儲display中的數(shù)據(jù),第二個用來存放四則運算的符號,第三個用來前一次運算后輸出的數(shù)值,最底下的用來給出控制變量.2。3.3數(shù)字1—-9的輸入以數(shù)字“1”為例,當(dāng)?shù)谝淮屋斎霐?shù)字“1"后,波爾量為真,進入case結(jié)構(gòu),將1輸出到display中,波爾量變?yōu)榧?如圖2-6所示。圖2—6輸入數(shù)字1時若再次輸入1,為避免出現(xiàn)01這樣的字符串,先判斷之前顯示的數(shù)據(jù)是否為0,若為0,則直接輸出1,如圖2-7所示.圖2-7輸入第一個數(shù)字為0時若不為0,則將這兩次輸入的數(shù)據(jù)通過連接字符串函數(shù)連接到一起,在display中輸出。數(shù)字2到9也是同樣的道理,如圖2—8所示。圖2—8輸入第一個數(shù)字不為0時2。3.4數(shù)字0的輸入當(dāng)?shù)谝淮屋斎?時,與輸入數(shù)字1-9的情況相同,現(xiàn)在就零輸入時的多零問題進行設(shè)計。雖然以多個零開頭不影響輸出的結(jié)果,但考慮到顯示形式的正確性,只在小數(shù)點前顯示一個零。當(dāng)數(shù)據(jù)輸入后,通過連接字符與00比較,若不等,則將數(shù)據(jù)直接輸出如圖2—9所示。圖2—9輸入不是00時當(dāng)數(shù)據(jù)輸入后,通過連接字符與00比較,若相等,則直接輸出0,如圖2-10所示。圖2-10輸入是00時2。3.5小數(shù)點的輸入在小數(shù)點的輸入時,最多只能顯示出一個。若直接點擊小數(shù)點,則以“0?!陛敵?。若之前已輸入數(shù)據(jù),此時再輸入小數(shù)點首先利用如圖2—11所示程序圖2—11判斷小數(shù)點的有無判斷已輸入的數(shù)據(jù)中是否含有小數(shù)點,若不含有,則執(zhí)行程序“真”,如圖2—12所示;圖2—12輸入不含小數(shù)點時若已輸入的數(shù)據(jù)中含有小數(shù)點,則執(zhí)行程序“假”,如圖2—13所示。圖2-13輸入含有小數(shù)點結(jié)果去零操作在進行“+、-、*、/”運算及取負,取百分數(shù),去倒數(shù),開放運算之后程序默認為以保留6位小數(shù)的形式輸出。而為了顯示結(jié)果的簡便,將末位不影響結(jié)果的零及小數(shù)點進行省略。利用層疊式順序結(jié)構(gòu),首先將得出的結(jié)果經(jīng)過N-1位的偏移后與零進行比較,若相等,則進行去零操作,運用while循環(huán)結(jié)構(gòu),直至末位數(shù)字不為零,循環(huán)結(jié)束(如圖2-14-——上圖表示末位為零,下圖表示末位不為零)。圖2—14去0操作在進行去零操作之后,進行層疊式順序結(jié)構(gòu)的第二層,對無關(guān)的小數(shù)點進行清除(如圖2—15-—————上圖表示末位為小數(shù)點,下圖表示末位不是小數(shù)點).圖2—15去多余小數(shù)點操作2。3。7“+/—”鍵的設(shè)計首先進行掃描字符串,將字符串?dāng)?shù)據(jù)轉(zhuǎn)換為數(shù)值數(shù)據(jù),經(jīng)過取負數(shù)后再轉(zhuǎn)換為字符串形式輸出.如圖2—16所示,其中的順序結(jié)構(gòu)為去末尾零和去無關(guān)小數(shù)點的操作.圖2—16去0和小數(shù)點操作2.3。8“+、—、*、/”四則運算以加法為例,當(dāng)簇中輸出的數(shù)據(jù)表示進行加法運算時,程序進入五層的層疊式順序結(jié)構(gòu),首先將字符串進行掃描,轉(zhuǎn)換為數(shù)值變量,如圖2-17所示。圖2—17掃描字符串并轉(zhuǎn)換為數(shù)值變量之后,對之前的數(shù)據(jù)進行運算,以保證連續(xù)運算時得到正確的結(jié)果:當(dāng)?shù)谝淮屋斎霑r,默認進行firstrun條件下的程序,如圖2—18所示。圖2—18默認條件下的程序若以前已有運算,以減法為例,先將之前的兩個數(shù)進行相減運算,并進行去零操作,之后再將本次的運算符號送入“運算符號"的局部變量,以便于進行下次運算,如圖2—19所示。圖2—19運算過程操作2.3。9等號鍵實現(xiàn)最終的運算結(jié)果,將結(jié)果進行去零操作后輸出到display中,同時將代表運算符號的移位寄存器置為空字符串。以加法為例。如圖2—20所示:圖2—20輸出運算結(jié)果百分數(shù)運算將字符串轉(zhuǎn)換為數(shù)值輸出后除以100即可得到百分數(shù)輸出,并對其進行去零(順序結(jié)構(gòu)的后兩層為去零操作),如圖2—21所示:圖2-21輸出百分數(shù)運算結(jié)果2。3.11開方運算將字符串轉(zhuǎn)換為數(shù)值后進行開放運算,再轉(zhuǎn)換為字符串輸出,并進行去零操作(順序結(jié)構(gòu)的后兩層為去零操作),如圖2-22所示:圖2-22輸出開方運算結(jié)果2.3。12取倒數(shù)運算將字符串轉(zhuǎn)換為數(shù)值后進行取倒數(shù)運算,再轉(zhuǎn)換為字符串輸出,并進行去零操作(順序結(jié)構(gòu)的后兩層為去零操作),如圖2—23所示:圖2—23取倒去0操作2。3。13退格鍵的設(shè)計在點擊退格鍵時,要實現(xiàn)從末位開始的依次推格,直至輸出為0.首先,將整數(shù)部分與小數(shù)部分進行分離,運用拆分字符串函數(shù)實現(xiàn)此功能.分離后,將小數(shù)部分的字符串長度與0進行比較,若大于0,則進入到條件結(jié)構(gòu)的“真”,字符串長度減1后與整數(shù)部分連接,得到新的display輸出,如圖2-24所示。圖2—24小數(shù)部分退格鍵設(shè)計若原字符串只有整數(shù)部分或者小數(shù)部分已經(jīng)過退格鍵清除,則進入到條件結(jié)構(gòu)的“假”。若整數(shù)部分的字符串長度大于1,則進入到子條件結(jié)構(gòu)的“假”,將整數(shù)的字符串長度減一后輸出,如圖2—25所示.圖2—25整數(shù)部分退格鍵設(shè)計若整數(shù)部分的長度不大于1,即小于等于1時,則進入到子條件結(jié)構(gòu)的“真”,直接輸出0.,如圖26所示。圖2-26整數(shù)部分退格鍵設(shè)計2.3。14清零鍵的設(shè)計將程序中所有用到的變量均進行復(fù)位,達到清零復(fù)位的目的,如圖2—27所示。圖2-27清零操作相當(dāng)于進行計數(shù)器的初始化操作。2.3。15停止鍵程序結(jié)束,將T輸入到while循環(huán)的停止鍵上,如圖2—28所示.圖2-28退出操作3結(jié)論經(jīng)過調(diào)試,此次設(shè)計的簡易計算器可以實現(xiàn)實物計算器具有的一般功能。LABVIEW對于初學(xué)者比較容易理解接受,用LABVIEW設(shè)計的程序調(diào)理分明,具有很強的邏輯。即使在不深入學(xué)習(xí)的情況下,也可以實現(xiàn)一些簡單的設(shè)計。還可以根據(jù)用戶自己的需要添加一些特有的功能,這是比實物的計算器更高明的地方的。但是,由于虛擬儀器的局限,使得用戶在一些情況下沒有實物用著方便,使用LABVIEW必須在準備好的環(huán)境下才能使用.總之,由于LABVIEW能夠為用戶提供簡明、直觀、易用的圖形編輯方式,能夠?qū)⒎爆崗?fù)雜的語言編程簡化成以菜單提示方式選擇功能,與傳統(tǒng)的語言比較,LABVIEW圖形編輯方式能夠節(jié)省程序的開發(fā)時間.在不久的將來,人們可以LABVIEW設(shè)計的計算器計算出任何問題,在實現(xiàn)基礎(chǔ)運算的條件下,只需要選擇運算的路徑,屆時使用虛擬儀器一定會成為社會的主流。致謝這次畢業(yè)設(shè)計得到了老師和同學(xué)的幫助,另外,感謝消校方給予我們這樣一次機會,能夠獨立的完成一個課題,并在這個過程當(dāng)中,給予我們一些機會,使我們在即將實習(xí)的最后一段時間里,能夠更多學(xué)習(xí)一些實踐應(yīng)用知識,增強了我們實踐操作和動手應(yīng)用能力,提高了獨立思考的能力。再一次對我的母校表示感謝.感謝在整個畢業(yè)設(shè)計期間給予過我?guī)椭幕锇閭?,在本次課程設(shè)計即將結(jié)束的最后的日子里,正是因為有了你們的幫助,才讓我不僅學(xué)到了本次課題所涉及的新知識,更讓我感覺到了知識以外的東西.最后,感謝所有在這次畢業(yè)設(shè)計中給予過我?guī)椭娜?再一次真誠地表示感謝你們!參考文獻[1]葉齊鑫,侯國屏,趙偉.虛擬儀器環(huán)境下的頻率特性測試方法[J]。電測與儀表,2005(6):10—13.[2]高聰杰,李松巖?;贚abVIEW的信號輸出與數(shù)據(jù)采集系統(tǒng)[J]。數(shù)采與監(jiān)測,2008,(24):135—136.[3]馬銀平,宣亮亮,彭如.基于LabVIEW的數(shù)據(jù)采集系統(tǒng)分析與設(shè)計《電子元器件應(yīng)用》2009年第11卷第10期[4]夏俊芳,周勇,張平華.基于虛擬儀器技術(shù)的排種器漏播檢測技術(shù)[J]。華中農(nóng)業(yè)大學(xué)學(xué)報,2008,27(4):540—544.[5]劉雁征,滕光輝.虛擬儀器技術(shù)在設(shè)施農(nóng)業(yè)中的應(yīng)用現(xiàn)狀及趨勢[J].華中農(nóng)業(yè)大學(xué)學(xué)報,2004(增刊35):81-86。[6]陳秀清。關(guān)于虛擬實驗室的建設(shè)[J]。福建廣播電視大學(xué)學(xué)報,2003(1):40-43。[7]楊樂平,李海濤。北京LabVIEW高級程序設(shè)計[M].北京:清華大學(xué)出版社,2003。1-350。[8]陳錫輝。Labview8.20程序設(shè)計從入門到精通[M]。北京:清華大學(xué)出版社,2007.[9]龍華偉,顧永剛與DAQ數(shù)據(jù)采集[M].北京:清華大學(xué)出版社,2008。[10][美]RobertHBishop,喬瑞萍譯.LabVIEW7實用教程[M]。北京:電子工業(yè)出版社,2005。[11]侯國屏,王坤,葉齊鑫.LabVIEW7.1編程與虛擬儀器設(shè)計[M]。北京:清華大學(xué)出版社,2005。[12]張桐,陳國順,王正林.精通LabVIEW程序設(shè)計[M]。北京:電子工業(yè)出版社,2008.附錄整體程序課程設(shè)計驗收指導(dǎo)教師評語及成績:成績指導(dǎo)教師簽字年月日教研室主任意見教研室主任簽字年月日一、設(shè)計思想:

。創(chuàng)建3個字符串顯示控件num1,num2,num3,其中:

1、第一個輸入數(shù)據(jù)存儲在num1中

2、第二個輸入數(shù)據(jù)存入num2中

3、將其賦給

num3,并使num2為空,以便輸入的數(shù)據(jù)存入num2

4、所有的運算是在num1和

num3間進行

5、運算結(jié)果都賦給result,同時賦給num1,用于下一次的運算

.創(chuàng)建4個布爾開關(guān)按鈕change,change1,change2,change3,其中:

1、Change的真假用來判斷是第一個數(shù)據(jù)還是第二個數(shù)據(jù)

2、change1的功能是在輸入=,運算完后,不需要初始化即可進行下一次運算

3、change2用來去掉數(shù)據(jù)小數(shù)末尾的0

4、change3用來保證backspace鍵僅對輸入的數(shù)據(jù)有效,對運算結(jié)果無效

。創(chuàng)建2個數(shù)值顯示控件type1,type2,并分別在其后面板的屬性——數(shù)據(jù)類型--表示法中選擇U8其中:

1、type1用來存儲運算符號

2、type2用來保證連續(xù)“+、-、*、/”的正確性

3、所有的運算結(jié)果都賦給result

4、result經(jīng)過去零處理后得到result1,將數(shù)據(jù)顯示在前面板上。利用labview設(shè)計一些小項目不僅可以更好的學(xué)習(xí)虛擬儀器知識,還能方便生活!應(yīng)用所學(xué)知識,實現(xiàn)計算器實現(xiàn)步驟的設(shè)計框架,設(shè)計計算器!(1)設(shè)計目的

利用所學(xué)虛擬儀器知識,應(yīng)用labview軟件設(shè)計一個能實現(xiàn)加減乘除以及開方、取倒、取反功能的計算器。提高使用labview設(shè)計項目的能力!

(2)設(shè)計思路

該設(shè)計采用模塊化編程思想,從而使整個項目更加的簡潔明了,直觀大方,利于閱讀。總體上可分為以下幾個模塊:

(1)數(shù)值輸入模塊:主要實現(xiàn)的功能就是數(shù)值的鍵入,主要是數(shù)字鍵以及表示進制轉(zhuǎn)換時的進制數(shù)的鍵入。

(2)按鍵模塊:這個模塊包括3個部分,輸入數(shù)按鍵,運算符按鍵以及特殊功能按鍵。

(3)菜單選擇模塊:該模塊主要實現(xiàn)的功能有,進制轉(zhuǎn)換功能,弧度角度轉(zhuǎn)換功能,以及標準型計算器和科學(xué)計算器之間的切換.

(4)進制選擇模塊:可以轉(zhuǎn)換二、八、十、十六進制的數(shù).

(5)單位選擇模塊:該功能可以實現(xiàn)將輸出的數(shù)轉(zhuǎn)換成你想要的單位,包括角度、弧度以及各種進制數(shù)。

(6)數(shù)值顯示模塊:該模塊主要功能就是數(shù)值的鍵入顯示以及數(shù)值的輸出顯示。

(7)清除返回模塊:該模塊主要的功能就是當(dāng)用戶發(fā)現(xiàn)輸入錯誤數(shù)據(jù)時,使用該功能就能改正錯誤,從而節(jié)約了時間

以及提高了計算效率.

三角函數(shù)等高級運算模塊:該模塊主要就是一些三角函數(shù)等一些高級運算,是為科學(xué)計算器而設(shè)計的,功能非常強大,實時操作性很好。本次畢業(yè)設(shè)計是基于LabVIEW所設(shè)計的計算器,目的是為了實現(xiàn)兩個數(shù)之間的加、減、乘、除四則運算及開方、求倒、取負運算,達到簡易計算器的功能。編程的思想是完成一種運算的完整過程是:輸入第一個數(shù),存儲并顯示

輸入要進行運算的類型并存儲

輸入第二個數(shù),存儲并顯示

按“=”或則按其它運算符號“+、-、*、/”進行連續(xù)的運算時顯示運算結(jié)果完成標準型計算器的一般功能.

輸入第一個數(shù),進行存儲并顯示

輸入運算的類型并存儲

輸入第二個數(shù),存儲并顯示

按“=”或則按其它運算符號“+、-、*、/”進行連續(xù)的運算,最后顯示運算結(jié)果。創(chuàng)建3個字符串顯示控件num1,num2,num3,其中:第一個輸入數(shù)據(jù)存儲在num1中,第二個輸入數(shù)據(jù)存入num2中,將其賦給

num3,并使

num2為空,以便輸入的數(shù)據(jù)存入num2,所有的運算是在num1和

num3

間進行,運算結(jié)果都賦給result,同時賦給num1,用于下一次的運算.

創(chuàng)建4個布爾開關(guān)按鈕change,change1,change2,change3,其中:

Change的真假用來判斷是第一個數(shù)據(jù)還是第二個數(shù)據(jù),change1的功能是

在輸入=,運算完后,不需要初始化即可進行下一次運算,change2用來去

掉數(shù)據(jù)小數(shù)末尾的0,

change3用來保證backspace鍵僅對輸入的數(shù)據(jù)有效,對運算結(jié)果無效。創(chuàng)建2個數(shù)值顯示控件type1,type2,并分別在其后面板的屬性——

數(shù)據(jù)類型--表示法中選擇U8其中:type1用來存儲運算符號,type2用

來保證連續(xù)“+、-、*、/"的正確性,所有的運算結(jié)果都賦給result,result

經(jīng)過去零處理后得到result1,將數(shù)據(jù)顯示在前面板上。

此計算器可以實現(xiàn)基本的加減乘除以及開方、取倒、取反功能,可以

進行數(shù)據(jù)的連續(xù)運算以及簡單的報錯、糾錯功能,在此計算器模版上,可

以繼續(xù)添加條件分支,實現(xiàn)更多功能的運算,但是不支持第二個數(shù)位為開

方、取反、取倒的功能。前面板設(shè)計:

前面板是LabVIEW的圖形用戶界面,在LabVIEW

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論