C#-Windows计算器

系统功能描述

Windows计算器是利用C#程序设计编写一个简易计算器程序,可以进行简单的加、减、乘、除运算,还可以实现对三角函数,对数、指数等高级运算的功能。
整个系统的功能结构图如图所示:
在这里插入图片描述

根据功能结构图,用户可以在窗体应用程序中,添加计算器窗体,建立windows应用程序的框架。因此,通过添加两个窗体控件Form1和Form2,分别用来表示科学计算器和普通计算器。然后用户添加Button控件,建立程序的主要界面。最后在每个按钮的代码段中,分别添加事件触发的处理代码。控件textBox1,显示输入的信息和显示处理后的结果。

系统功能分析及实现

控件表示用户和程序之间的图形化连接。控件可以提供或处理数据、接受用户输入、对事件做出响应或执行连接用户和应用程序的其他功能。窗体中的控件有很多,工具箱中的Windows窗体里包含了所有的windows标准控件。通过在属性窗口改变控件的属性可以改变控件的外观和特性。本项目需要用到以下控件:
(1) 按钮控件(Button):在Form1窗体中,添加30个Button控件,其中有10个数字按钮,16个运算按钮,一个用于计算的等号按钮,2个用于清空的按钮。在Form2窗体中,添加17个Button控件,其中有10个数字按钮,4个运算按钮,一个用于计算的等号按钮,一个用于清空的按钮。
(2) 文本框控件(TextBox):Form1和Form2分别添加一个TextBox控件,用于显示计算结果。
(3) 菜单栏控件(MenuStrip):在Form1和Form2中分别添加MenuStrip控件,并修改该控件中的ToolStripMenuItem菜单项的Text属性为机型转换。该控件可以实现两个窗体之间的相互转换。
在这里插入图片描述
在这里插入图片描述

(1)主窗体Form1.cs文件中的代码

using System;
using System.Windows.Forms;
namespace Windows计算器
{
    public partial class Form1 : Form
    {
        private string Op;
        private double Op1;
        private double Op2;
        private double result;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        //数字键1
        private void BtNumber1_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "1";
            Op1 = System.Convert.ToDouble(textBox1.Text);            
        }
        //数字键2
        private void BtNumber2_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "2";
            Op1 = System.Convert.ToDouble(textBox1.Text);    
        }
        //数字键3
        private void BtNumber3_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "3";
            Op1 = System.Convert.ToDouble(textBox1.Text);   
        }
        //数字键4
        private void BtNumber4_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "4";
            Op1 = System.Convert.ToDouble(textBox1.Text);    
        }
        //数字键5
        private void BtNumber5_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "5";
            Op1 = System.Convert.ToDouble(textBox1.Text);    
        }
        //数字键6
        private void BtNumber6_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "6";
            Op1 = System.Convert.ToDouble(textBox1.Text);   
        }
        //数字键7
        private void BtNumber7_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "7";
            Op1 = System.Convert.ToDouble(textBox1.Text);   
        }
        //数字键8
        private void BtNumber8_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "8";
            Op1 = System.Convert.ToDouble(textBox1.Text);    
        }
        //数字键9
        private void BtNumber9_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "9";
            Op1 = System.Convert.ToDouble(textBox1.Text);    
        }
        //数字键0
        private void BtNumber0_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "0";
            Op1 = System.Convert.ToDouble(textBox1.Text);   
        }
        //加功能
        private void BtAdd_Click(object sender, EventArgs e)
        {
            Op = "+";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //减功能
        private void BtSubtract_Click(object sender, EventArgs e)
        {
            Op = "-";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //乘功能
        private void BtMult_Click(object sender, EventArgs e)
        {
            Op = "*";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //除功能
        private void BtDivision_Click(object sender, EventArgs e)
        {
            Op = "/";
            Op2 = Op1;
            textBox1.Text = "";
        }  
        //%
        private void BtRemedial_Click(object sender, EventArgs e)
        {
            Op = "%";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //Del功能
        private void BtDel_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Length >= 1)
            {
                textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
            }
            if (textBox1.Text.Length == 0)
            { 
                textBox1.Text = "";
            }             
        }
        //小数点功能
        private void BtComma_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.IndexOf(".") < 0)
                textBox1.Text += ((Button)sender).Text;
            else
            {
            }
        }
        //等于功能
        private void BtDebgyu_Click(object sender, EventArgs e)
        {
            switch (Op)
            {
                case "+":
                    result = Op2 + Op1;
                    break;
                case "-":
                    result = Op2 - Op1;
                    break;
                case "*":
                    result = Op2 * Op1;
                    break;
                case "/":

                    if (Op2 == 0)
                    {
                        
                        Console.WriteLine("错误,被除数不能为0!");
                    }
                    else
                    {
                        result = Op2 / Op1;
                    }


                    break;
                case "%":
                    result = Op2 % Op1;
                    break;
                case "^":
                    int m; double n;
                    m = 1; n = Op2;
                    while (m + 1 <= Op1)
                    {
                        n = n * Op2;
                        m++;
                    }
                    result = n;
                    break;
            }
            textBox1.Text = System.Convert.ToString(result);
        }
        //sin功能
        private void Btsin_Click(object sender, EventArgs e)
        {
            Convert.ToDouble(Op1);
            textBox1.Text = System.Convert.ToString(Math.Sin(Op1 * Math.PI / 180));
        }
        //con功能
        private void Btcos_Click(object sender, EventArgs e)
        {
            Convert.ToDouble(Op1);
            textBox1.Text = System.Convert.ToString(Math.Cos(Op1 * Math.PI / 180));
        }
        //tan功能
        private void Bttan_Click(object sender, EventArgs e)
        {
            Convert.ToDouble(Op1);
            textBox1.Text = System.Convert.ToString(Math.Tan(Op1 * Math.PI / 180));
        }
        //阶乘功能
        private void BtFactorial_Click(object sender, EventArgs e)
        {
            int i, j;
            i = 1; j = 1;
            while (i <= Op1)
            {
                j *= i;
                i++;
            }
            textBox1.Text = System.Convert.ToString(j);
        }
        //平方功能
        private void BtSquare_Click(object sender, EventArgs e)
        {
            textBox1.Text = System.Convert.ToString(Op1 * Op1);
        }
        //立方功能
        private void BtCube_Click(object sender, EventArgs e)
        {
            textBox1.Text = System.Convert.ToString(Op1 * Op1 * Op1);
        }
        //π
        private void BtPI_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + Math.PI;
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //清屏功能
        private void BtClear_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            Op = "";
            Op1 = 0;
            Op2 = 0;
            result = 0;
        }
        //幂运算
        private void BtPower_Click(object sender, EventArgs e)
        {
            Op = "^";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //10^x
        private void BtIndex_Click(object sender, EventArgs e)
        {
            int a, b;
            a = 1; b = 1;
            while (a <= Op1)
            {
                b *= 10;
                a++;
            }
            textBox1.Text = System.Convert.ToString(b);
        }
        //Log
        private void BtLog_Click(object sender, EventArgs e)
        {
            textBox1.Text = System.Convert.ToString(Math.Log10(Op1));
        }
        //ln
        private void BtLn_Click(object sender, EventArgs e)
        {
            textBox1.Text = System.Convert.ToString(Math.Log(Op1));
        }
        private void 机型转换ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 stu = new Form2();
            this.Hide();
            stu.ShowDialog();
            this.Close();
        }
    }
}

(2)主窗体Form2.cs文件中的代码

using System;
using System.Windows.Forms;
namespace Windows计算器
{
    public partial class Form2 : Form
    {
        private string Op;
        private double Op1;
        private double Op2;
        private double result;
        public Form2()
        {
            InitializeComponent();
        }
        private void Form2_Load(object sender, EventArgs e)
        {
        }
        private void BtNumber1_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "1";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber2_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "2";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber3_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "3";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber4_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "4";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber5_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "5";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber6_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "6";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber7_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "7";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber8_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "8";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber9_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "9";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtNumber0_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "0";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        private void BtComma_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.IndexOf(".") < 0)
                textBox1.Text += ((Button)sender).Text;
            else
            {
            }
        }
        private void BtDebgyu_Click(object sender, EventArgs e)
        {
            switch (Op)
            {
                case "+":
                    result = Op2 + Op1;
                    break;
                case "-":
                    result = Op2 - Op1;
                    break;
                case "*":
                    result = Op2 * Op1;
                    break;
                case "/":
                    result = Op2 / Op1;
                    break;               
            }
            textBox1.Text = System.Convert.ToString(result);
        }
        private void BtAdd_Click(object sender, EventArgs e)
        {
            Op = "+";
            Op2 = Op1;
            textBox1.Text = "";
        }
        private void BtSubtract_Click(object sender, EventArgs e)
        {
            Op = "-";
            Op2 = Op1;
            textBox1.Text = "";
        }
        private void BtMult_Click(object sender, EventArgs e)
        {
            Op = "*";
            Op2 = Op1;
            textBox1.Text = "";
        }
        private void BtDivision_Click(object sender, EventArgs e)
        {
            Op = "/";
            Op2 = Op1;
            textBox1.Text = "";
        }
        private void BtClear_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            Op = "";
            Op1 = 0;
            Op2 = 0;
            result = 0;
        }
        private void 机型转换ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form1 stu = new Form1();
            this.Hide();
            stu.ShowDialog();
            this.Close();
        }
    }
}

(3)Program.cs代码

using System;
using System.Windows.Forms;
namespace Windows计算器
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
一、实验题目:计算器实验 二、实验目的: 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)要想达到界面有特点,不亚于在功能上下功夫。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值