基于C#語言的計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)
一 需求分析
利用c#語言實(shí)現(xiàn)一個(gè)計(jì)算器程序,包括普通計(jì)算器模式、科學(xué)計(jì)算器模式;實(shí)現(xiàn)實(shí)數(shù)(包括正數(shù)、負(fù)數(shù)、0)的加、減、乘、除、平方等基本遠(yuǎn)算,并實(shí)現(xiàn)非負(fù)數(shù)的開方運(yùn)算。
二 程序設(shè)計(jì)與實(shí)現(xiàn)
首先設(shè)計(jì)主窗體,包括兩個(gè)TextBox用來顯示數(shù)據(jù),使用數(shù)據(jù)綁定實(shí)現(xiàn),在Model中實(shí)現(xiàn)INotifyPropertyChanged接口,以起到數(shù)據(jù)更改通知的功能。一個(gè)Button和Panel作為菜單來切換計(jì)算器模式。最后一個(gè)Panel用來顯示不同模式的計(jì)算器輸入面板;
其次是標(biāo)準(zhǔn)計(jì)算器輸入面板。包括常用的數(shù)字和運(yùn)算符以及Delete,CE和清除按鈕??茖W(xué)計(jì)算模式也只是多了幾個(gè)運(yùn)算符而已。在后置代碼中獲取被單擊的按鈕的名稱,調(diào)用Model中的Print方法在TextBox中顯示數(shù)據(jù)。
Model中聲明兩個(gè)字符串變量作為兩個(gè)TextBox中的數(shù)據(jù),還包括Print方法,一方面得到按鈕的名稱,另一方面調(diào)用此程序中最重要的邏輯處理方法PrintText方法。傳進(jìn)去兩個(gè)值,即當(dāng)前TextBox中顯示的數(shù)據(jù),輸出兩個(gè)值作為TextBox在一系列處理之后應(yīng)顯示的數(shù)據(jù)。
PrintAndExpression類主要負(fù)責(zé)處理TextBox的顯示和生成算術(shù)表達(dá)式。GetValue方法根據(jù)名字返回應(yīng)顯示的字符串。IsOpreation方法判斷字符串是數(shù)字,一元操作符還是二元操作符及其他符號。PrintText處理顯示格式。大致為當(dāng)輸入數(shù)字的時(shí)候在textBox1中,每按下一個(gè)操作符即將textBox1中的數(shù)字連接上操作符顯示在textBox2中,同時(shí)處理簡單的一元運(yùn)算符的運(yùn)算,生成表達(dá)式。最終將表達(dá)式傳遞給AnalyExpressions。將解析表達(dá)式運(yùn)算之后的結(jié)果返回。
AnalyExpressions解析表達(dá)式,利用堆棧來實(shí)現(xiàn),將中綴表達(dá)式分解之后保存在字符串?dāng)?shù)組中,即所謂的“后綴表達(dá)式”。大致規(guī)則為:
將中綴表達(dá)式翻譯成后綴表達(dá)式
輸入中綴表達(dá)式: A+B*(C+D)-E/F
中綴表達(dá)式翻譯成后綴表達(dá)式的方法如下:
如果ch = "(",放入堆棧
如果ch = ")",依次輸出堆棧中的運(yùn)算符, 直到遇到"("為止
如果ch不是")"或者"(",那么就和堆棧頂點(diǎn)位置的運(yùn)算符top做優(yōu)先級比較
如果ch優(yōu)先級比top高,那么 將ch放入堆棧
如果ch優(yōu)先級低于或者等于 top,那么輸出top,然后將ch放入堆棧
如果表達(dá)式已經(jīng)讀取完成,而堆棧中還有運(yùn)算符時(shí),依次由頂端輸出
從左向右依次取得數(shù)據(jù)ch
如果ch是操作數(shù),直接輸出
如果ch是運(yùn)算符(含左右括號)
WRITE-BUG研發(fā)團(tuán)隊(duì)衷心希望【W(wǎng)RITE-BUG數(shù)字空間】可以給每位同學(xué)一個(gè)屬于自己的秘密空間,同時(shí)祝愿大家在“公開圈子”世界里,遇見志同道合的伙伴們,因?yàn)槲覀兣c大家一樣,都曾孤獨(dú)前行著。

