当前位置:首页 > Windows程序 > 正文

C#实现计算器

2021-03-27 Windows程序

以下是我用c#写的一个图形化的计算器,这是关键代码

using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Linq;  using System.Text;  using System.Threading.Tasks;  using System.Windows.Forms;  using System.Collections;    namespace Calculator  {      public partial class CalCulator : Form      {          private enum OptrNum                    //枚举类型定义,方便比较运算符的大小          {              LessThan,     //小于              Equal,        //等于              GreaterThan,  //大于              Error         //错误          };            private string temp_textBoxView;                       //数据存储区            private CalCulatorStack OptrStack;                     //运算符栈            private CalCulatorStack NumStack;                      //运算数栈            private ArrayList temp_List;                           //分离数据临时变量存储区            private string StrOptr = "+-*/()#";                    //计算支持的运算符            private int[,] OptrReation = new int[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}};     // #            public CalCulator()          {              this.StartPosition = FormStartPosition.CenterScreen;              OptrStack = new CalCulatorStack();              NumStack = new CalCulatorStack();              temp_List = new ArrayList();              InitializeComponent();              temp_textBoxView = string.Empty;          }          /// <summary>          /// ButtonOne点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonOneClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "1";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// ButtonTwo点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonTwoClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "2";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// ButtonThree点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonThreeClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "3";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// ButtonFour点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonFourClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "4";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// ButtonFive点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonFiveClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "5";              textBoxView.Text = temp_textBoxView;                     }            /// <summary>          /// ButtonSix点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonSixClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "6";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// ButtonSeven点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonSevenClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "7";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// ButtonEight点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonEightClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "8";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// ButtonNine点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonNineClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "9";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// ButtonZero点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ButtonZeroClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "0";              textBoxView.Text = temp_textBoxView;                      }            /// <summary>          /// PriorBracketButton点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void PriorBracketButtonClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "(";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// NextBracketButton点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void NextBracketButtonClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += ")";              textBoxView.Text = temp_textBoxView;          }            /// <summary>          /// 加号点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void AddButtonClick(object sender,EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "+";              textBoxView.Text = temp_textBoxView;                     }            /// <summary>          /// 减号点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void SubButtonClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "-";              textBoxView.Text = temp_textBoxView;                    }            /// <summary>          /// 乘号点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void MulButtonClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "*";              textBoxView.Text = temp_textBoxView;                     }            /// <summary>          /// 除号点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void DivButtonClick(object sender, EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView += "http://www.mamicode.com/";              textBoxView.Text = temp_textBoxView;          }          /// <summary>          /// 清除点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void ClrButtonClick(object sender,EventArgs e)          {              textBoxView.Text = string.Empty;              temp_textBoxView = string.Empty;          }          /// <summary>          /// 退格点击事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void DelButtonClick(object sender,EventArgs e)          {              if (temp_textBoxView == string.Empty)                  return;              else              {                  string temp;                  temp = temp_textBoxView.Substring(0, temp_textBoxView.Length - 1);                  temp_textBoxView = temp;                  textBoxView.Text = temp_textBoxView;              }          }          /// <summary>          /// 求值事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void EuqButtonClick(object sender, EventArgs e)          {              if (temp_textBoxView == string.Empty)                  return;              else              {                  InitTempList();                  OptrStack.Push(temp_List[0]);                  temp_List.RemoveAt(0);                  object temp;                  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)))                          {                              case OptrNum.LessThan:                                  OptrStack.Push(Convert.ToChar(temp));                                  temp = temp_List[0];                                  temp_List.RemoveAt(0);                                  break;                              case OptrNum.Equal:                                  OptrStack.Pop();                                  temp = temp_List[0];                                  temp_List.RemoveAt(0);                                  break;                              case OptrNum.GreaterThan:                                  char temp_optr;                                  double a, 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;                              case OptrNum.Error:                                  MessageBox.Show(this, "运算错误,请检查输入是否正确!");                                  break;                          }                      }                  }                  textBoxView.Text = Convert.ToString(NumStack.Pop());                  temp_textBoxView = string.Empty;                  temp_List.Clear();                  OptrStack.Clear();                  NumStack.Clear();              }          }          /// <summary>          /// 加载事件          /// </summary>          /// <param name="sender"></param>          /// <param name="e"></param>          private void FrmLoad(object sender, EventArgs e)          {              buttonOne.Click += new EventHandler(ButtonOneClick);              buttonTwo.Click += new EventHandler(ButtonTwoClick);              buttonThree.Click += new EventHandler(ButtonThreeClick);              buttonFour.Click += new EventHandler(ButtonFourClick);              buttonFive.Click += new EventHandler(ButtonFiveClick);              buttonSix.Click += new EventHandler(ButtonSixClick);              buttonSeven.Click += new EventHandler(ButtonSevenClick);              buttonEight.Click += new EventHandler(ButtonEightClick);              buttonNine.Click += new EventHandler(ButtonNineClick);              buttonZero.Click += new EventHandler(ButtonZeroClick);              PriorBracketButton.Click += new EventHandler(PriorBracketButtonClick);              NextBracketButton.Click += new EventHandler(NextBracketButtonClick);              AddButton.Click += new EventHandler(AddButtonClick);              SubButton.Click += new EventHandler(SubButtonClick);              MulButton.Click += new EventHandler(MulButtonClick);              DivButton.Click += new EventHandler(DivButtonClick);              ClrButton.Click += new EventHandler(ClrButtonClick);              DelButton.Click += new EventHandler(DelButtonClick);              EuqButton.Click += new EventHandler(EuqButtonClick);          }          /// <summary>          /// 分离数据存储区的运算数与运算符,          /// 并将其插入到temp_list等待下一步计算          /// </summary>          private void InitTempList()          {              temp_textBoxView += "#";              char[] Temp = temp_textBoxView.ToCharArray();              double Num = 0, COUNT = 10;              int i;              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>          /// <param name="temp"></param>          /// <returns></returns>          private bool IsOptr(char temp)          {              if (temp == ‘+‘ || temp == ‘-‘ || temp == ‘*‘ || temp == ‘/‘ ||                  temp == ‘(‘ || temp == ‘)‘||temp==‘#‘)                  return true;              else                  return false;          }          /// <summary>          /// 比较两个运算符的大小          /// </summary>          /// <param name="prior_Optr"></param>          /// <param name="next_Optr"></param>          /// <returns></returns>          private OptrNum Precede(char prior_Optr,char next_Optr)          {              OptrNum optr_num=OptrNum.Error;              int i = StrOptr.IndexOf(prior_Optr);              int j = 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;              return optr_num;          }          /// <summary>          /// 运算函数          /// </summary>          /// <param name="a"></param>          /// <param name="Optr"></param>          /// <param name="b"></param>          private double  Operate(double a,char Optr,double b)          {                        if (Optr == ‘+‘)                  return a + b;              if (Optr == ‘-‘)                  return a - b;              if (Optr == ‘*‘)                  return a * b;              if (Optr == ‘/‘)                  return a / b;              else                  return 0;          }          /// <summary>          /// 将字符转换为数字          /// </summary>          /// <param name="temp"></param>          /// <returns></returns>          private int ConvertToInt32(char temp)          {              if (temp == ‘0‘)                  return 0;              if (temp == ‘1‘)                  return 1;              if (temp == ‘2‘)                  return 2;              if (temp == ‘3‘)                  return 3;              if (temp == ‘4‘)                  return 4;              if (temp == ‘5‘)                  return 5;              if (temp == ‘6‘)                  return 6;              if (temp == ‘7‘)                  return 7;              if (temp == ‘8‘)                  return 8;              if (temp == ‘9‘)                  return 9;              else                  return 0;          }      }  }


温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68311.html