上位机—制作一个简易计算器

C#简介:

        C#是一种现代的、面向对象的高级编程语言,由微软公司开发,它是.NET框架的一部分。C#结合了C语言的语法风格和Java的面向对象特性,旨在提供一种简单、现代、通用的编程方式。以下是从多个维度对C#进行具体介绍:

1. 发展历程:C#作为一种编程语言,自2000年由微软发布以来,经历了多个版本的迭代更新。每一次更新都带来了新的特性和改进,例如泛型、匿名方法、LINQ等。这些更新使得C#能够适应不断变化的技术需求和市场趋势。
2. 设计目标:C#的设计目标是将Visual Basic的快速开发能力和C++的强大功能结合起来,同时提供类似于Java的垃圾回收机制来管理内存。它支持面向对象的编程,包括继承、封装和多态等基本特性。
3. 语言特点:C#是一种类型安全的语言,这意味着它能够在编译时检查类型错误,从而减少运行时错误的可能性。它还提供了自动的内存管理,通过垃圾回收机制来自动回收不再使用的对象所占用的内存空间。
4. 应用场景:C#被广泛应用于Windows应用程序的开发,以及Web服务和Web应用程序的开发。随着.NET Core的推出,C#也成为了跨平台应用程序开发的热门选择。
5. 学习曲线:对于有其他编程语言基础的学习者来说,C#相对容易上手。它的语法清晰,结构良好,拥有丰富的文档资源和社区支持。然而,要想精通C#并有效利用其高级特性,仍然需要系统学习和实践。
6. 与其他语言的比较:C#与Java在很多方面相似,包括面向对象的编程范式和自动内存管理。但是,C#与C++相比,提供了更多的安全性和垃圾回收机制,但牺牲了一定的性能和底层控制能力。
7. 未来发展:随着.NET 6的推出和即将到来的.NET 7,C#持续在性能优化、云服务集成和跨平台支持方面进行创新。微软也在积极推动开源,使得C#和.NET框架更加开放和包容。

总的来说,C#是一个功能强大且灵活的编程语言,适用于从小型个人项目到大型企业级应用的开发。它凭借强大的语言特性、广泛的应用场景以及良好的发展前景,成为了当今最流行的编程语言之一。

一、新建项目

建Windows窗体应用(C#)

二、配置新项目

保存至自己新建的文件夹,命名为计算机模板

三、打开设计框架

建设基础计算器框架

四、添加计算器器件

显示框、0-9数字、+ - * ()等一系列内容

例如以下图片

五、更改数据

通过属性text填写数据内容

 六、源代码

注意:代码主题无需手敲,按下对应数据框即弹出

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 计算器
{
    public partial class Form2 : Form
    {
        #region 方法二:对表达式分析
        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 "?";
        }

        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;
        }

        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();
        }
        #endregion
        public Form2()
        {
            InitializeComponent();
        }

        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        private void button20_Click(object sender, EventArgs e)
        {
            string str = this.textBox1.Text;
            double result = (double)Eval_2(str);
            this.textBox1.Text = result.ToString();
        }

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

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

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

七、启动运行结果

编译成功且项目美观(文字颜色可在属性自调)

八、进行简单计算

可操作普通计数计算,进行简单的加减乘除以及括号运算

运行结果正确,代码编写无误,可以正常进行运算

九、代码模板

可根据需要进行查看

using System;

namespace SimpleCalculator
{
    class Program
    {
        static void Main(string[] args)
        {
            double num1, num2, result;
            char operation;

            Console.WriteLine("请输入第一个数字:");
            num1 = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("请输入操作符(+、-、*、/):");
            operation = Convert.ToChar(Console.ReadLine());

            Console.WriteLine("请输入第二个数字:");
            num2 = Convert.ToDouble(Console.ReadLine());

            switch (operation)
            {
                case '+':
                    result = num1 + num2;
                    Console.WriteLine("结果是: " + result);
                    break;
                case '-':
                    result = num1 - num2;
                    Console.WriteLine("结果是: " + result);
                    break;
                case '*':
                    result = num1 * num2;
                    Console.WriteLine("结果是: " + result);
                    break;
                case '/':
                    if (num2 != 0)
                    {
                        result = num1 / num2;
                        Console.WriteLine("结果是: " + result);
                    }
                    else
                    {
                        Console.WriteLine("除数不能为0");
                    }
                    break;
                default:
                    Console.WriteLine("无效的操作符");
                    break;
            }

            Console.ReadKey();
        }
    }
}

控件的属性及含义:

十、总结

1. 确定需求:明确计算器需要支持哪些功能,例如基本的加、减、乘、除运算,以及可能的错误处理和输入验证。

2. 设计界面:即使是控制台应用程序,也需要考虑用户交互的流畅性和清晰性。设计简洁的提示语和用户操作指引。

3. 编写代码:使用C#或其他编程语言编写计算器的逻辑。确保代码结构清晰,易于理解和维护。

4. 实现运算逻辑:根据用户输入的操作符执行相应的数学运算。注意处理特殊情况,如除数为零。

5. 处理用户输入:接收并验证用户输入的数字和操作符,确保它们是有效的。

6. 输出结果:将计算结果显示给用户,格式要清晰易读。

7. 错误处理:对可能出现的错误情况进行处理,例如非法的操作符、除数为零等。

8. 测试:在多种情况下测试计算器,确保其在不同输入下都能正常工作。

9. 优化和重构:根据测试结果和用户反馈,对代码进行优化和重构,提高计算器的健壮性和用户体验。

10. 文档和说明:为用户提供计算器的使用说明,如果有必要,为代码编写文档,方便他人理解和使用你的代码。

通过以上步骤,你可以制作出一个简易但功能完整的计算器。随着编程技能的提高,你还可以考虑为其添加更多高级功能,如支持括号、科学计算等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值