回 帖 发 新 帖 刷新版面

主题:用C#写的计算器

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Calculator.cs
{
    public partial class Form1 : Form
    {
        Expression exp;
        public Form1()
        {
            InitializeComponent();
            exp = new Expression();
        }
        private void btn_Click(object sender, EventArgs e)
        {
            if (txtValue.Text == "0")
            {
                txtValue.Text = "";
            }
            Button o = sender as Button;
            if (o != null)
            {
                txtValue.Text += o.Text;
            }
        }
        private void Oper_Click(object sender, EventArgs e)
        {
            Button b = sender as Button;
            if (b != null)
            {
                exp.x=double.Parse(txtValue.Text);
                exp.flag = b.Text;

                txtValue.Text = "0";
            }
        }
        private void GetValue(object sender, EventArgs e)
        {
            exp.y = double.Parse(txtValue.Text);

            txtValue.Text = exp.Value.ToString();
        }

        private void button19_Click(object sender, EventArgs e)
        {
            txtValue.Text = "0";
        }

        private void button20_Click(object sender, EventArgs e)
        {
请各位高手够指点
            this.Close();
        }
    }
    public class Expression
    {
        public double x=0.0;
        public double y=0.0;
        public string flag="";
        public double Value
        {
            get
            {
                double r=0.0;
                switch (flag)
                {
                    case "+":r=x+y;break;
                    case "-":r=x-y;break;
                    case "*":r=x*y;break;
                    case "/":r=x/y;break;
                }
                return r;
            }
        }
    }
}

回复列表 (共6个回复)

沙发

??贴代码来着??
说实在的,编码风格不好,代码也写得不怎么样!
Expression 代表的是一个简单的二元表达式,不应该把 switch 放到他里面,应该对表达式进行抽象,然后让具体类去进行具体的计算(如相加表达式等),而具体类的创建可以通过简单工厂模式来实现。另外值的计算应该显示的通过方法调用来进行计算,而不应该隐含在属性中。通过显示调用让用户注意到更多的东西,比如计算可能有异常抛出。

板凳


恩,看来真的要好好的研究一下算法了哦!
的确很重要的哦,
熟练的实际应用所学的知识,加上wanderful的算法,附加完美的风格设计.简直就是绝配!---编程的思想

3 楼

呵呵,哥们也写过一个.还可以:)

4 楼


为什么不用控件写计算器的程序呢……这样更简单在数字BUTTON控扭中,建一个公用的事件代码如下   
          btn=(Button)sender
          if(ClearDisplay)
             {
                txtDisplay.Text="";
                ClearDisplay=False;
             }
           txtDisplay.Text=txtDisplay.Text+btn.Text;
然后在按扭“+”添加控件,用一个公用的事件,把将其他运算符号按扭邦定起。
最后在“=”添写代码,里面用到SWITCH
一个像WINDOWS的计算器就编写成功了……

5 楼


为什么不用控件写计算器的程序呢……这样更简单在数字BUTTON控扭中,建一个公用的事件代码如下   
          btn=(Button)sender
          if(ClearDisplay)
             {
                txtDisplay.Text="";
                ClearDisplay=False;
             }
           txtDisplay.Text=txtDisplay.Text+btn.Text;
然后在按扭“+”添加控件,用一个公用的事件,把将其他运算符号按扭邦定起。
最后在“=”添写代码,里面用到SWITCH
一个像WINDOWS的计算器就编写成功了……

6 楼

楼上的那位,能不能讲明白一点,我也在写计算器,
就和WIN自带的那个一样,
但是我的写的好麻烦,一些功能都胡实现,
现在就是在考虑算法,而我得到的数字是每一个按扭一个事件CLICK
看到你说的,虽然明白其中道理,但是还是不能完理解,所以,还请指教。

我来回复

您尚未登录,请登录后再回复。点此登录或注册