[原始碼和文件分享]基於C#語言的計算器的設計與實現
一 需求分析
利用c#語言實現一個計算器程式,包括普通計算器模式、科學計算器模式;實現實數(包括正數、負數、0)的加、減、乘、除、平方等基本遠算,並實現非負數的開方運算。
二 程式設計與實現
首先設計主窗體,包括兩個TextBox用來顯示資料,使用資料繫結實現,在Model中實現INotifyPropertyChanged介面,以起到資料更改通知的功能。一個Button和Panel作為選單來切換計算器模式。最後一個Panel用來顯示不同模式的計算器輸入面板;
其次是標準計算器輸入面板。包括常用的數字和運算子以及Delete,CE和清除按鈕。科學計算模式也只是多了幾個運算子而已。在後置程式碼中獲取被單擊的按鈕的名稱,呼叫Model中的Print方法在TextBox中顯示資料。
Model中宣告兩個字串變數作為兩個TextBox中的資料,還包括Print方法,一方面得到按鈕的名稱,另一方面呼叫此程式中最重要的邏輯處理方法PrintText方法。傳進去兩個值,即當前TextBox中顯示的資料,輸出兩個值作為TextBox在一系列處理之後應顯示的資料。
PrintAndExpression類主要負責處理TextBox的顯示和生成算術表示式。GetValue方法根據名字返回應顯示的字串。IsOpreation方法判斷字串是數字,一元操作符還是二元操作符及其他符號。PrintText處理顯示格式。大致為當輸入數字的時候在textBox1中,每按下一個操作符即將textBox1中的數字連線上操作符顯示在textBox2中,同時處理簡單的一元運算子的運算,生成表示式。最終將表示式傳遞給AnalyExpressions。將解析表示式運算之後的結果返回。
AnalyExpressions解析表示式,利用堆疊來實現,將中綴表示式分解之後儲存在字串陣列中,即所謂的“字尾表示式”。大致規則為:
-
將中綴表示式翻譯成字尾表示式
-
輸入中綴表示式: A+B*(C+D)-E/F
-
中綴表示式翻譯成字尾表示式的方法如下:
-
從左向右依次取得資料ch
-
如果ch是運算元,直接輸出
-
如果ch是運算子(含左右括號),則:
-
如果ch = “(“,放入堆疊
-
如果ch = “)”,依次輸出堆疊中的運算子, 直到遇到”(“為止
-
如果ch不是”)”或者”(“,那麼就和堆疊頂點位置的運算子top做優先順序比較
-
如果ch優先順序比top高,那麼 將ch放入堆疊
-
如果ch優先順序低於或者等於 top,那麼輸出top,然後將ch放入堆疊
-
- 如果表示式已經讀取完成,而堆疊中還有運算子時,依次由頂端輸出
-
-
參考文件和完整的文件和原始碼下載地址: