注册 登录
编程论坛 C# 论坛

小白:请问如何在C#计算器程序中加入历史功能?

con2008 发布于 2020-03-02 21:31, 2243 次点击
我是按照网上的示范做的。
程序代码:
using System;
using System.Windows.Forms;

namespace MyCounter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            //将第一个TextBox控件里用户输入的数据(string类型),转换成浮点类型,并赋值给变量num1
            float num1 = Convert.ToSingle(maskedTextBox4.Text);
            //将第二个TextBox控件里用户输入的数据(string类型),转换成浮点类型,并赋值给变量num2
            float num2 = Convert.ToSingle(maskedTextBox5.Text);
            //计算两个数字相加,并赋值给变量jieguo
            float jieguo = num1 + num2;
            //将结果的值,赋值给第三个TextBox控件(需要将float类型的数据先转换成string类型再赋值)
            maskedTextBox6.Text = Convert.ToString(jieguo);
           
        }

        private void button7_Click(object sender, EventArgs e)
        {
            //将第一个TextBox控件里用户输入的数据(string类型),转换成浮点类型,并赋值给变量num1
            float num1 = Convert.ToSingle(maskedTextBox4.Text);
            //将第二个TextBox控件里用户输入的数据(string类型),转换成浮点类型,并赋值给变量num2
            float num2 = Convert.ToSingle(maskedTextBox5.Text);
            //计算两个数字相减,并赋值给变量jieguo
            float jieguo = num1 - num2;
            //将结果的值,赋值给第三个TextBox控件(需要将float类型的数据先转换成string类型再赋值)
            maskedTextBox6.Text = Convert.ToString(jieguo);
        }

        private void button8_Click(object sender, EventArgs e)
        {
            //将第一个TextBox控件里用户输入的数据(string类型),转换成浮点类型,并赋值给变量num1
            float num1 = Convert.ToSingle(maskedTextBox4.Text);
            //将第二个TextBox控件里用户输入的数据(string类型),转换成浮点类型,并赋值给变量num2
            float num2 = Convert.ToSingle(maskedTextBox5.Text);
            //计算两个数字相乘,并赋值给变量jieguo
            float jieguo = num1 * num2;
            //将结果的值,赋值给第三个TextBox控件(需要将float类型的数据先转换成string类型再赋值)
            maskedTextBox6.Text = Convert.ToString(jieguo);
        }

        private void button9_Click(object sender, EventArgs e)
        {
            //将第一个TextBox控件里用户输入的数据(string类型),转换成浮点类型,并赋值给变量num1
            float num1 = Convert.ToSingle(maskedTextBox4.Text);
            //将第二个TextBox控件里用户输入的数据(string类型),转换成浮点类型,并赋值给变量num2
            float num2 = Convert.ToSingle(maskedTextBox5.Text);
            //计算两个数字相除,并赋值给变量jieguo
            float jieguo = num1 / num2;
            //将结果的值,赋值给第三个TextBox控件(需要将float类型的数据先转换成string类型再赋值)
            maskedTextBox6.Text = Convert.ToString(jieguo);
        }

        private void button10_Click(object sender, EventArgs e)
        {
            maskedTextBox4.Text = null;
            maskedTextBox5.Text = null;
            maskedTextBox6.Text = null;
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
         
        }

        private void button11_Click(object sender, EventArgs e)
        {

        }
    }
}

(listBox1是我不小心加进去的)
button11就是“历史”按钮。
只有本站会员才能查看附件,请 登录
2 回复
#2
xianfajushi2020-03-03 06:21
怎么显示出历史?当点击任何按钮时就合成字符串,可为历史。
#3
tzjtzj182020-03-17 13:29
这是个啥计算器啊
程序代码:
using System;
using System.Collections.Generic;


namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string expression;
            Console.Write("输入算式:");
            expression = Console.ReadLine();
            Console.WriteLine(new Calculator().Calculate(expression));
        }


        public class Calculator
        {
            public Calculator()
            {
                _OptStack = new Stack<char>();
                _SuffixStack = new Stack<float>();
            }
            private Stack<char> _OptStack;
            private Stack<float> _SuffixStack;
            public float Calculate(string expression)
            {
                string lastNum = string.Empty;
                for (int i = 0; i < expression.Length; i++)
                {
                    if (char.IsNumber(expression[i]) || expression[i].Equals('.'))
                    {
                        lastNum += expression[i];
                    }
                    else
                    {
                        if (lastNum != string.Empty)
                        {
                            Merger(float.Parse(lastNum));
                            lastNum = string.Empty;
                        }
                        AddOpt(expression[i]);
                    }
                }
                if (lastNum != string.Empty)
                {
                    Merger(float.Parse(lastNum));
                }
                while (_OptStack.Count > 0)
                {
                    Merger(_OptStack.Pop());
                }
                return _SuffixStack.Pop();
            }
            private void AddOpt(char opt)
            {
                if (_OptStack.Count == 0)
                {
                    _OptStack.Push(opt);
                    return;
                }
                if (opt.Equals(')'))
                {
                    while (!_OptStack.Peek().Equals('('))
                    {
                        Merger(_OptStack.Pop());
                    }
                    _OptStack.Pop();
                    return;
                }
                char tempOpt = _OptStack.Peek();
                if ((opt.Equals('-') || opt.Equals('+')) &&
                    (tempOpt.Equals('*') || tempOpt.Equals('/')))
                {
                    while (_OptStack.Count > 0)
                    {
                        Merger(_OptStack.Pop());
                    }
                }
                _OptStack.Push(opt);
            }
            private void Merger(float exp)
            {
                _SuffixStack.Push(exp);
            }
            private void Merger(char exp)
            {
                float num1 = _SuffixStack.Pop();
                float num2 = _SuffixStack.Pop();
                float result = 0;
                switch (exp)
                {
                    case '+':
                        result = num2 + num1;
                        break;
                    case '-':
                        result = num2 - num1;
                        break;
                    case '*':
                        result = num2 * num1;
                        break;
                    case '/':
                        result = num2 / num1;
                        break;
                }
                _SuffixStack.Push(result);
            }
        }
    }
}

1