C#WinForm制作简单计算机

前言

计算机是近代人发明的可以进行数字运算的机器。

在古代,人们发明了许多计算工具,如算筹、算盘计算尺等,随着社会的发展和科技的进步,计算工具也经历了由简单到复杂,由低级向高级的发展变化。进入20世纪后,人们发明了计算器。计算器的出现解决了很多比较复杂的计算问题。计算器的使用非常简单,它的运算规则是从左往右算,输入数据后可以一眨眼就得出结果。

现代的电子计算机能进行数学运算的手持电子机器,拥有集成电路芯片,但结构比电脑简单得多,可以说是第一代的电子计算机(电脑),且功能也较弱,但较为方便与廉价,可广泛运用于商业交易中,是必备的办公用品之一。除显示计算结果外,还常有溢出指示、错误指示等。计算器电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。为节省电能,计算器都采用CMOS工艺制作的大规模集成电路

从某种角度而言,广义的“计算机”是包括“电子计算器”的。电子计算器中也有集成电路,但计算器的功能简便,价格更加便宜,利于携带与稳定性好

目录

一、模拟简单计算机的基本步骤 

二、示例:一个简单的C#桌面计算器应用程序

三、优化和扩展(可选):添加更多功能,如历史记录、清除按钮、更复杂的数学函数等。

一、模拟简单计算机的基本步骤 

使用C#编程语言来开发一个计算机应用程序或模拟程序,而不是实际制造一个物理计算机硬件。以下是一个简单的概述,说明如何使用C#来创建一个基本的“计算机模拟器”或桌面计算器应用程序:

1. 定义目标和需求

  • 确定你的“计算机”应该具备哪些功能。例如,基本的算术运算、存储变量、执行条件语句等。

2. 设置开发环境

  • 安装Visual Studio(或其他支持C#的IDE)。
  • 创建一个新的C#项目(例如,一个Windows Forms应用程序或WPF应用程序)。

3. 设计用户界面(如果需要)

  • 对于Windows Forms或WPF应用程序,使用设计器或代码来创建用户界面。这可能包括文本框用于输入和显示数据、按钮用于执行操作等。

4. 编写代码

  • 实现基本的数学运算功能(如加、减、乘、除)。
  • 添加变量存储功能(例如,使用C#中的变量和数据类型)。
  • 如果需要,实现条件语句和循环结构。
  • 对于更复杂的“计算机”模拟,你可以添加内存管理、寄存器、指令集等概念的模拟。

5. 测试和调试

  • 运行你的程序并测试其功能。
  • 使用Visual Studio的调试工具来查找和修复错误。

6. 优化和扩展

  • 根据需要优化你的代码以提高性能。
  • 添加更多功能或改进用户界面。

二、示例:一个简单的C#桌面计算器应用程序

可以使用Visual Studio2013、Visual Studio2019、Visual Studio2022(建议Windows11系统)

以下是一个使用Windows Forms创建简单桌面计算器应用程序的基本步骤

1.创建Windows Forms应用程序:在Visual Studio中创建一个新的Windows Forms应用程序项目。

2.设计用户界面:使用设计器添加必要的控件,如文本框用于显示结果、按钮用于输入数字和运算符等。(注:CE是清楚按钮,把所有的字段初始化成默认值)

3.编写事件处理程序:为每个按钮编写Click事件处理程序。在事件处理程序中,根据用户点击的按钮更新文本框中的显示内容或执行相应的计算。

4.测试应用程序:运行应用程序并测试其功能。确保所有按钮都按预期工作,并且计算结果正确。

例如:1234+529=1763

5.以下是Form2.cs的代码:

(1)符号“+”、“-”、“*”、“/”、“(”、“)”、“#”
namespace 计算器1
{
    public partial class Form2 : Form
    {
        string Precede(string p, string q)
        {
            switch (p)
            {
                case "+":
                case "-":
                    return ("*/(".IndexOf(q) != -1) ? "<" : ">";
                case "*":
                case "/":
                    return (q == "(") ? "<" : ">";
                case "(":
                    return (q == ")") ? "=" : "<";
                case ")":
                    return (q == "(") ? "?" : ">";
                case "#":
                    return (q == "#") ? "=" : "<";
            }
            return "?";
        }
 (2)执行相应符号运算逻辑
Double Operate(Double a, char o, Double b)
        {
            switch (o)
            {
                case '+':
                    return a + b;
                case '-':
                    return a - b;
                case '*':
                    return a * b;
                case '/':
                    return a / b;
            }
            return 0;
        }
 (3)除数不能为零
public Object Eval_2(string Expression)
        {
            Stack nArr = new Stack(), oArr = new Stack();
            int j = 0;
            Double a = 0, b = 0;
            string w = "";
            char o;
            MatchCollection arr = Regex.Matches(Expression.Replace(" ", "") + "#", @"(((?<=(^|\())-)?\d+(\.\d+)?|\D)");
            oArr.Push('#');
            w = Convert.ToString(arr[j++]);
            while (!(w == "#" && Convert.ToString(oArr.Peek()) == "#"))
            {
                if ("+-*/()#".IndexOf(w) != -1)
                {
                    switch (Precede(oArr.Peek().ToString(), w))
                    {
                        case "<":
                            oArr.Push(w);
                            w = Convert.ToString(arr[j++]);
                            break;
                        case "=":
                            oArr.Pop();
                            w = Convert.ToString(arr[j++]);
                            break;
                        case ">":
                            o = Convert.ToChar(oArr.Pop());
                            b = Convert.ToDouble(nArr.Pop());
                            a = Convert.ToDouble(nArr.Pop());
                            nArr.Push(Operate(a, o, b));
                            break;
                        default:
                            return "Error";
                    }
                }
                else
                {
                    nArr.Push(w);
                    w = Convert.ToString(arr[j++]);
                }
            }
            return nArr.Pop();
        }
 (4)以下代码是按钮的Text设置为0-9数字和符号“+”、“-”、“*”、“/”
 public Form2()
        {
            InitializeComponent();
            this.MaximizeBox = false;
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

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

        private void button2_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "2";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "3";
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "4";
        }

        private void button5_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "5";
        }

        private void button6_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "6";
        }

        private void button7_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "7";
        }

        private void button8_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "8";
        }

        private void button9_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "9";
        }

        private void button10_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "0";
        }

        private void button11_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "+";
        }

        private void button12_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "-";
        }

        private void button13_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "*";
        }

        private void button14_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "/";
        }

        private void button15_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += ".";
        }

        private void button16_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += "(";
        }

        private void button17_Click(object sender, EventArgs e)
        {
            this.textBox1.Text += ")";
        }

        private void button18_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = "";
        }

        private void button19_Click(object sender, EventArgs e)
        {
            string str = this.textBox1.Text;

            this.textBox1.Text = Eval_2(str).ToString();
        }
    }
}

三、优化和扩展(可选):添加更多功能,如历史记录、清除按钮、更复杂的数学函数等。

请注意,这只是一个非常基本的示例,用于说明如何使用C#创建一个简单的桌面应用程序。如果你想要创建一个更复杂的“计算机模拟器”,你将需要更深入地了解计算机体系结构、编程语言理论和相关算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值