C#实现计算器
以下是我用c#写的一个图形化的计算器,这是关键代码
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.Collections;namespaceCalculator{publicpartialclassCalCulator:Form{privateenumOptrNum//枚举类型定义,方便比较运算符的大小{LessThan,//小于Equal,//等于GreaterThan,//大于Error//错误};privatestringtemp_textBoxView;//数据存储区privateCalCulatorStackOptrStack;//运算符栈privateCalCulatorStackNumStack;//运算数栈privateArrayListtemp_List;//分离数据临时变量存储区privatestringStrOptr="+-*/()#";//计算支持的运算符privateint[,]OptrReation=newint[7,7]{//存储操作数关系{1,1,-1,-1,-1,1,1},//+{1,1,-1,-1,-1,1,1},//-{1,1,1,1,-1,1,1},//*{1,1,1,1,-1,1,1},///{-1,-1,-1,-1,-1,0,2},//({1,1,1,1,2,1,1},//){-1,-1,-1,-1,-1,2,0}};//#publicCalCulator(){this.StartPosition=FormStartPosition.CenterScreen;OptrStack=newCalCulatorStack();NumStack=newCalCulatorStack();temp_List=newArrayList();InitializeComponent();temp_textBoxView=string.Empty;}///<summary>///ButtonOne点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonOneClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="1";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonTwo点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonTwoClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="2";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonThree点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonThreeClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="3";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonFour点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonFourClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="4";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonFive点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonFiveClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="5";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonSix点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonSixClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="6";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonSeven点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonSevenClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="7";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonEight点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonEightClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="8";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonNine点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonNineClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="9";textBoxView.Text=temp_textBoxView;}///<summary>///ButtonZero点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidButtonZeroClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="0";textBoxView.Text=temp_textBoxView;}///<summary>///PriorBracketButton点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidPriorBracketButtonClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="(";textBoxView.Text=temp_textBoxView;}///<summary>///NextBracketButton点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidNextBracketButtonClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+=")";textBoxView.Text=temp_textBoxView;}///<summary>///加号点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidAddButtonClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="+";textBoxView.Text=temp_textBoxView;}///<summary>///减号点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidSubButtonClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="-";textBoxView.Text=temp_textBoxView;}///<summary>///乘号点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidMulButtonClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="*";textBoxView.Text=temp_textBoxView;}///<summary>///除号点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidDivButtonClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView+="/";textBoxView.Text=temp_textBoxView;}///<summary>///清除点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidClrButtonClick(objectsender,EventArgse){textBoxView.Text=string.Empty;temp_textBoxView=string.Empty;}///<summary>///退格点击事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidDelButtonClick(objectsender,EventArgse){if(temp_textBoxView==string.Empty)return;else{stringtemp;temp=temp_textBoxView.Substring(0,temp_textBoxView.Length-1);temp_textBoxView=temp;textBoxView.Text=temp_textBoxView;}}///<summary>///求值事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidEuqButtonClick(objectsender,EventArgse){if(temp_textBoxView==string.Empty)return;else{InitTempList();OptrStack.Push(temp_List[0]);temp_List.RemoveAt(0);objecttemp;temp=temp_List[0];temp_List.RemoveAt(0);while(Convert.ToChar(Convert.ToInt32(temp))!='#'||Convert.ToChar(OptrStack.GetTop())!='#'){if(IsOptr(Convert.ToChar(Convert.ToInt32(temp)))==false){NumStack.Push(Convert.ToDouble(temp));temp=temp_List[0];temp_List.RemoveAt(0);}else{switch(Precede(Convert.ToChar(OptrStack.GetTop()),Convert.ToChar(temp))){caseOptrNum.LessThan:OptrStack.Push(Convert.ToChar(temp));temp=temp_List[0];temp_List.RemoveAt(0);break;caseOptrNum.Equal:OptrStack.Pop();temp=temp_List[0];temp_List.RemoveAt(0);break;caseOptrNum.GreaterThan:chartemp_optr;doublea,b,c;temp_optr=Convert.ToChar(OptrStack.Pop());b=Convert.ToDouble(NumStack.Pop());a=Convert.ToDouble((NumStack.Pop()));c=Operate(a,temp_optr,b);NumStack.Push(c);break;caseOptrNum.Error:MessageBox.Show(this,"运算错误,请检查输入是否正确!");break;}}}textBoxView.Text=Convert.ToString(NumStack.Pop());temp_textBoxView=string.Empty;temp_List.Clear();OptrStack.Clear();NumStack.Clear();}}///<summary>///加载事件///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidFrmLoad(objectsender,EventArgse){buttonOne.Click+=newEventHandler(ButtonOneClick);buttonTwo.Click+=newEventHandler(ButtonTwoClick);buttonThree.Click+=newEventHandler(ButtonThreeClick);buttonFour.Click+=newEventHandler(ButtonFourClick);buttonFive.Click+=newEventHandler(ButtonFiveClick);buttonSix.Click+=newEventHandler(ButtonSixClick);buttonSeven.Click+=newEventHandler(ButtonSevenClick);buttonEight.Click+=newEventHandler(ButtonEightClick);buttonNine.Click+=newEventHandler(ButtonNineClick);buttonZero.Click+=newEventHandler(ButtonZeroClick);PriorBracketButton.Click+=newEventHandler(PriorBracketButtonClick);NextBracketButton.Click+=newEventHandler(NextBracketButtonClick);AddButton.Click+=newEventHandler(AddButtonClick);SubButton.Click+=newEventHandler(SubButtonClick);MulButton.Click+=newEventHandler(MulButtonClick);DivButton.Click+=newEventHandler(DivButtonClick);ClrButton.Click+=newEventHandler(ClrButtonClick);DelButton.Click+=newEventHandler(DelButtonClick);EuqButton.Click+=newEventHandler(EuqButtonClick);}///<summary>///分离数据存储区的运算数与运算符,///并将其插入到temp_list等待下一步计算///</summary>privatevoidInitTempList(){temp_textBoxView+="#";char[]Temp=temp_textBoxView.ToCharArray();doubleNum=0,COUNT=10;inti;temp_List.Add('#');for(i=0;i<Temp.Length;i++){if(IsOptr(Temp[i])==true){if(Num!=0){temp_List.Add(Num);Num=0;}temp_List.Add(Temp[i]);}else{Num=ConvertToInt32(Temp[i])+Num*COUNT;}}}///<summary>///判断元素是否为操作符///</summary>///<paramname="temp"></param>///<returns></returns>privateboolIsOptr(chartemp){if(temp=='+'||temp=='-'||temp=='*'||temp=='/'||temp=='('||temp==')'||temp=='#')returntrue;elsereturnfalse;}///<summary>///比较两个运算符的大小///</summary>///<paramname="prior_Optr"></param>///<paramname="next_Optr"></param>///<returns></returns>privateOptrNumPrecede(charprior_Optr,charnext_Optr){OptrNumoptr_num=OptrNum.Error;inti=StrOptr.IndexOf(prior_Optr);intj=StrOptr.IndexOf(next_Optr);if(OptrReation[i,j]==1)optr_num=OptrNum.GreaterThan;if(OptrReation[i,j]==-1)optr_num=OptrNum.LessThan;if(OptrReation[i,j]==0)optr_num=OptrNum.Equal;if(OptrReation[i,j]==2)optr_num=OptrNum.Error;returnoptr_num;}///<summary>///运算函数///</summary>///<paramname="a"></param>///<paramname="Optr"></param>///<paramname="b"></param>privatedoubleOperate(doublea,charOptr,doubleb){if(Optr=='+')returna+b;if(Optr=='-')returna-b;if(Optr=='*')returna*b;if(Optr=='/')returna/b;elsereturn0;}///<summary>///将字符转换为数字///</summary>///<paramname="temp"></param>///<returns></returns>privateintConvertToInt32(chartemp){if(temp=='0')return0;if(temp=='1')return1;if(temp=='2')return2;if(temp=='3')return3;if(temp=='4')return4;if(temp=='5')return5;if(temp=='6')return6;if(temp=='7')return7;if(temp=='8')return8;if(temp=='9')return9;elsereturn0;}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。