用C#窗体应用做一个简单的计算器

  • 初步想法:
    1.只进行两个数和三个数之间的运算,降低难度,用两个字符类型变量存储数字之间的运算符,用double类型数组存储数字,长度可设为3。
    2.然后就要考虑四个数字以上的运算,可以在写表达式时进行部分运算,让最后的运算始终是两个数字或者三个数字之间的运算。
    3.用label控件做计算器的显示屏,其余全部为button控件,控件的背景图,字体大小,格式,位置等可以自行调整。

  • 代码实现:
    1.全局变量

public double result;  //存储计算结果
public char operation_1='0';    //记录输入的第一个运算符
public char operation_2='0';     //记录输入的第二个运算符
bool b = true;//判断是第几次点击等于按钮

2.菜单输入举例

private void button1_Click(object sender, EventArgs e)        
         {            
            label1.Text += "1";        
         }

3.清空,删除,显示屏字体显示

private void button18_Click(object sender, EventArgs e)//清空按钮
        {
            b = true;
            operation_1 = '0';
            label1.Text = "";
        }
private void button19_Click(object sender, EventArgs e)//删除按钮        
        {            
           string str = label1.Text;            
           label1.Text = "";            
           char[] ch = new char[str.Length];                 
           for(int i=0;i<str.Length-1;i++)            
                {                
                    ch[i] = str[i];                
                    label1.Text += ch[i].ToString();            
                 }               
          }        
private void label1_TextChanged(object sender, EventArgs e)        
         {//根据输入字符的长度改变字体的大小            
            string str = label1.Text;            
            if (str.Length > 13 && str.Length<18)                    
                    label1.Font = new Font(label1.Font.FontFamily,25);            
            else if(str.Length>=18)                
                    label1.Font = new Font(label1.Font.FontFamily, 20);            
             else                
                    label1.Font = new Font(label1.Font.FontFamily, 36);        
          }

4.运算符按钮举例

//运算符按钮:保证不能同时输入两个运算符号,最开头不能是运算符        
private void button13_Click(object sender, EventArgs e)//加法按钮         
        {            
           string str = label1.Text;            
           int i = str.Length - 1;           
           if(str.Length != 0 && str[i] != '+' && str[i] != '-' && str[i] != 'x' && str[i] != '÷')            
                {                
                   if (operation_1 == '0')                
                        {                    
                          operation_1 = '+';                    
                          label1.Text += "+";                
                         }                
                    else if (operation_1 != '0' && operation_2 == '0')                
                         {                    
                           operation_2 = '+';                    
                           label1.Text += "+";                
                         }                
                    else                
                         {                    
                           string[] str1 = str.Split(new char[] { '+', '-', 'x', '÷' });                    
                           double[] number = new double[str1.Length]; //记录输入的数                    
                           for (int j = 0; j < str1.Length; j++)                        
                                   number[j] = Convert.ToDouble(str1[j]);                    
                                   if ((operation_1 == '+' || operation_1 == '-') && (operation_2 == 'x' || operation_2 == '÷'))                    
                                        {                        
                                          switch (operation_2)                        
                                                 {                            
                                                    case 'x': result = number[1] * number[2]; break;                            
                                                    case '÷': result = number[1] / number[2]; break;                        
                                                  }                        
                                           switch (operation_1)                        
                                                  {                            
                                                    case '+': label1.Text = number[0] + "+" + result; break;                            
                                                    case '-': label1.Text = number[0] + "-" + result; break;                            
                                                    case 'x': label1.Text = number[0] + "x" + result; break;                            
                                                    case '÷': label1.Text = number[0] + "÷" + result; break;                        
                                                  }                        
                                                  operation_2 = '0';                        
                                                  b = true;                    
                                         }                    
                                   else                    
                                         {                        
                                           switch (operation_1)                        
                                                  {                             
                                                    case '+': result = number[0] + number[1]; break;                            
                                                    case '-': result = number[0] - number[1]; break;                            
                                                    case 'x': result = number[0] * number[1]; break;                            
                                                    case '÷': result = number[0] / number[1]; break;                        
                                                  }                        
                                            switch (operation_2)                        
                                                   {                            
                                                     case '+': label1.Text = result + "+" + number[2]; break;                            
                                                     case '-': label1.Text = result + "-" + number[2]; break;                            
                                                     case 'x': label1.Text = result + "x" + number[2]; break;                            
                                                     case '÷': label1.Text = result + "÷" + number[2]; break;                        
                                                   }                        
                                                   operation_1 = operation_2;                        
                                                   operation_2 = '0';                        
                                                   b = true;                    
                                          }                
                             }           
                  }         
        }

5.等于按钮

private void button17_Click(object sender, EventArgs e)//等于按钮        
         {            
            if (b)            
                {                
                   if (label1.Text.Length != 0)                
                      {                    
                        string str = label1.Text;                    
                        string[] str1 = str.Split(new char[] { '+', '-', 'x', '÷' });                    
                        double[] number = new double[str1.Length]; //记录输入的数                    
                        for (int i = 0; i < str1.Length; i++)                        
                                number[i] = Convert.ToDouble(str1[i]);                     
                        if (number.Length == 2)                    
                            {                        
                              switch (operation_1)                        
                                     {                            
                                       case '+':                                result = number[0] + number[1];                                label1.Text += "=" + result; break;                            
                                       case '-':                                result = number[0] - number[1];                                label1.Text += "=" + result; break;                            
                                       case 'x':                                result = number[0] * number[1];                                label1.Text += "=" + result; break;                            
                                       case '÷':                                result = number[0] / number[1];                            label1.Text += "=" + result; break;                        
                                     }                    
                             }                    
                       else if (number.Length == 3)                    
                              {                        
                                if ((operation_1 == '+' || operation_1 == '-') && (operation_2 == 'x' || operation_2 == '÷'))                        
                                  {                            
                                    switch (operation_2)                            
                                           {                                
                                             case 'x': result = number[1] * number[2]; break;                                
                                             case '÷': result = number[1] / number[2]; break;                            
                                           }                            
                                    switch (operation_1)                            
                                           {                                
                                             case '+': result += number[0]; break;                                
                                             case '-': result = number[0] - result; break;                            
                                           }                            
                                     label1.Text += "=" + result;                        
                                   }                        
                                else                        
                                   {                            
                                     switch (operation_1)                            
                                            {                                
                                              case '+': result = number[0] + number[1]; break;                                
                                              case '-': result = number[0] - number[1]; break;                                
                                              case 'x': result = number[0] * number[1]; break;                                
                                              case '÷': result = number[0] / number[1]; break;                            
                                            }                            
                                    switch (operation_2)                            
                                           {                                
                                             case '+': result += number[2]; break;                                
                                             case '-': result -= number[2]; break;                                
                                             case 'x': result *= number[2]; break;                                
                                             case '÷': result /= number[2]; break;                            
                                           }                            
                                      label1.Text += "=" + result;                        
                                   }                    
                              }                    
                       else if (number.Length > 3)                        
                                   label1.Text = "";                
                       }                
                       b = false;            
                 }            
                 else            
                 {                
                    operation_1 = operation_2 = '0';                
                    label1.Text = result.ToString();                
                    b = true;                          
                  }        
          }
  • 效果展示
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
一、实验题目:计算器实验 二、实验目的: 1)熟悉.NET的编程方法,掌握项目的创建与使用及安装; 2)熟悉C#编程语言,字符串使用、自定义类、自定义类库等; 3)熟悉Windows应用程序类编程、事件驱动编程; 三、实验内容: 1)参照Windows提供的计算器工具,设计一个与之类似的程序;另外可参考运行效果下载(计算器Demo程序); 2)基本要求实现“普通运算”功能,支持连续运算,如连续输入“2+3×5”后点击“等号”按钮进行运算其结果为25. 3)附要求: A,支持“科学运算”功能,即输入表达式时遵循运算符号的优先原则,连续输入“2+3×5”后点击“等号”按钮进行运算其结果为17; B,支持数字键盘(小键盘)输入功能(焦点不在文本框内时也支持键盘输入); 四、实验方法 经过用户的输入得到数学表达式后,可选择以下方法计算结果: 方法1)不定义"计算类",根据用户输入在程序中直接计算出结果。 方法2)在项目中设计一个计算类(CalculateClass),其中包含“普通计算”和“科学计算”功能,即输入数学运算表达式字符串,返回计算结果。直接在项目中调用该类,输出计算结果。 方法3)在解决方案中增一个类库(ClassLibrary)项目(在bin\debug下生成dll文件),其中包含计算类(CalculateClass),该类中包含两个方法(普通计算和科学计算),可以根据表达式计算结果。然后在计算器项目中“引用”该类库中的类,输出计算结果; 点评:方法1代码重用性差;方法2代码重用性好,在项目内可方便使用;方法3代码重用性较好,能在不同的项目内重用。 五、实验说明 1)认真分析总结每个“按钮”点击之后的动作(对应的代码); 默认的控件是Button按钮,其实可以用其他支持Click事件的控件替代也行,比如图片控件PictureBox; 2)代码的共享:如数字按钮可以共享一个事件代码; // 参考代码 private void button2_Click(object sender, EventArgs e) { Button objbutton = (Button)sender; label1.Text = "你按了第" + (sender as Button).Tag.ToString() + "个按钮"; } 3)考虑操作性或实用性,如支持退格键、异常输入处理等; 4)为突出实验重点,可以不考虑数制转换、复合运算、括号运算等功能; 5)支持数字小键盘输入时,留意理解窗口的KeyPreview属性,即是否窗口接收键盘事件。另外实现时会涉及到“焦点隐藏”问题,以及按钮的键盘事件等。 敲键盘时发生的事件当然是键盘事件,关键是“窗体”还是“控件”接收键盘事件。如果窗体的KeyPreview设为true,则敲键盘时发生的事件被窗体接收;否则就是控件接收键盘事件。 所谓“焦点隐藏” 是指界面上没有焦点,例如系统提供的计算器。方法一:界面上的控件不获取焦点或者没有焦点(如标签);方法二:将焦点藏在界面上不可见的控件上。 支持数字键盘输入的情形:当焦点在按钮1上时,按数字键2,其使用效果应相当于点击了按钮2。 6)键盘事件KeyPress和KeyDown中e参数包括键盘码; private void KeyBoardForm_KeyPress(object sender, KeyPressEventArgs e) { //KeyPress 不能识别组合键 label1.Text = "你按的键是:" + e.KeyChar; } 7)“麻雀虽小,五脏俱全”,程序很容易出Bug,请认真调试; 8)要想达到界面有特点,不亚于在功能上下功夫。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值