1. 程式人生 > >[原始碼和文件分享]基於C#語言的計算器的設計與實現

[原始碼和文件分享]基於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放入堆疊

      • 如果表示式已經讀取完成,而堆疊中還有運算子時,依次由頂端輸出

 

參考文件和完整的文件和原始碼下載地址:

https://www.write-bug.com/article/105.html