C#winform实现计算器

一、第一步创建一个winform空项目,自己绘制了一个简单的计算器界面,如下图:
   
    文本框添加label,按钮添加button,设置好按钮属性,双击按钮添加点击事件。
    二、代码实现计算器的难点分析
    1.对于没有运算逻辑的表达式的处理。例如5++3*+、23/...12等。
    2.运算符的优先级判断。这里只涉及到简单的加减乘除,没有设置括号,也不涉及负数,相对比较简单。
    三、具体实现
    1.表达式处理
    对于没有运算逻辑的表达式的处理可以有两种方式:第一种方法是对表达式的输入进行规范,尽可能避免掉表达式无法计算的情况,保证点击等号之后获取的表达式可以直接进行运算。第二种方法是在点击等号之后,在运算之前先对表达式逻辑进行判断,如果无法计算,可以显示报错信息,合规再计算结果。两种思路的最大区别是,第一种方式是人为的判断好之后,直接告诉计算器哪些情况允许,哪些不被允许,第二种方式是通过代码来让计算器自行判断。显然,第一种方式更为简单。以下是此计算器的一些输入规则(一切输入规则的作用都是在保障计算功能的前提下尽可能排除干扰):
    (1)首位输入不可以是除了“-”和“.”以外的其余符号,“-”和“.”出现在首位,在前补零即可。
    (2)表达式不可以出现连续的符号,会有歧义,例如“+-”,“/-”,可以理解为加负数和除以负数,但是如果是“+/”,“+--”等,再去纠结其意义就没必要了,所以为了方便,统一不允许连续符号的输入即可,如果连续输入符号,直接用后输入的符号替换掉前一个符号。
    (3)表达式最后一位是符号时点击等号的情况,这种情况无法避免,在点击等号之后判断出最后最后一位是符号的话将其忽略掉即可。
    下面是定义的输入的方法:

public void AppendNummber(string num)
{


    if (labelShow.Text == "0")
    {
        labelShow.Text = "";
    }

    string vaildstr = "1234567890";

    //如果当前输入的是数字
    if (vaildstr.IndexOf(num) > -1)      
    {
        labelShow.Text += num;
    }
    //如果当前输入的是符号
    else{
        //如果输入框不为空
        if(!string.IsNullOrEmpty(labelShow.Text))
        {                         
            //定义上一个字符,如果是符号,不可以继续输入符号
            string endstr = labelShow.Text.Substring(labelShow.Text.Length-1,1);                                     
            //上一个输入的字符是符号,新输入的符号将替换掉上一个符号

            //如果上一个字符是符号&#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值