C#学习记录——Windows计算器的制作【实例】

news2024/12/29 10:03:39

参考《C#从入门到项目实践》边学习,边练习实现。

Windows计算器的制作

此次练习的计算器应用软件在Visual Studio 2019编程环境中开发,是一个简单的窗体应用程序,实现简单的计算器功能。

1、系统功能描述

Windows计算器是利用C#程序设计编写一个简易计算器程序,可以进行简单的加、减、乘、除运算,还可以实现对三角函数、对数、指数等高级运算的功能。
整个系统的功能结构图如下:
系统功能结构图
用户可以在窗体程序中,添加计算器窗体,建立Windows应用程序的框架。因此,通过添加两个窗体控件Form1和Form2分别用来添加两个窗体控件Form1和Form2,分别用来表示科学计算器和普通计算器。然后添加Button控件建立程序的主要界面。最后在每个按钮的代码段中,分别添加事件触发的处理代码。控件textBox1,显示输入的信息和处理后的结果。

2、系统功能分析及实现

在C#中,基于Windows应用程序设计方法是事件驱动的。事件驱动不是由程序的顺序来控制,而是由事件的发生来控制的。事件驱动程序设计是围绕消息的产生与处理而展开的,消息就是关于发生的事件的信息。Windows程序员的工作就是对所开发的应用程序所要发出或者接收的消息进行排序和管理。

2.1、功能分析

控件表示用户和程序之间的图形化连接。控件可以提供或处理数据、接受用户输入、对事件作出响应或执行连接用户和应用程序的其他功能。窗体中的控件有很多,工具箱中的Windows窗体里包含所有的Windows标准控件。通过在属性窗口改变控件的属性可以改变控件的外观和特性。本项目需要用到以下控件。
(1)按钮(Button)控件:在Form1窗体中,添加30个Button控件,其中有10个数字按钮,16个运算按钮,1个用于计算的等号按钮,2个用于清空的按钮。在Form2窗体中,添加17个Button控件,其中10个数字按钮,4个运算按钮,1个用于计算的等号按钮,1个用于清空的按钮。
(2)文本框(TextBox)控件:Form1和Form2中分别添加一个TextBox控件,用于显示计算结果。
(3)菜单栏(MenuStrip)控件:在Form1和Form2中分别添加MenuStrip控件,并修改该控件中的ToolStripMenultem菜单项的Text属性为“机型转换”。该控件可以实现两个窗体之间的相互转换。
两个窗体如图所示:
阿雷科学计算器
阿雷普通计算器

2.2、功能实现

在窗体设计器中看到的是窗体及其中的控件,而要为控件添加事件处理程序就必须先切换到代码编辑器状态。下面分析计算器中各个控件到底该添加什么样的代码。
1、数字0-9的功能设计
对于计算器来说,当单击某个数字按钮后,结果显示区内应显示该按钮上的数字。因此,可以双击按钮1,切换到代码编辑器,此时光标就会停留在该按钮所对应的代码处,输入下列代码:

private void btNumber1_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "1";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }

注意:在代码中数字键0-9只需要将上述代码中的1改为相应的数字。
2、小数点功能的设计

private void BtComma_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.IndexOf(".") < 0)
                textBox1.Text += ((Button)sender).Text;
            else
            { }
        }

3、加减乘除的设计:加设计

private void BtAdd_Click(object sender, EventArgs e)
        {
            Op = "+";
            Op2 = Op1;
            textBox1.Text = "";
        }

4、三角函数的设计:sin设计

private void Btsin_Click(object sender, EventArgs e)
        {
            Convert.ToDouble(Op1);
            textBox1.Text = System.Convert.ToString(Op1 * Math.PI / 180);
        }

5、整体程序代码
(1)主窗体Form1.cs文件中的代码。

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

namespace A001_calculator
{
    public partial class Form1 : Form
    {
        private string Op;
        private double Op1;
        private double Op2;
        private double result;

        public Form1()
        {
            InitializeComponent();
        }
        //数字键1
        private void btNumber1_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "1";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键2
        private void btNumber2_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "2";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }       
        //数字键3
        private void btNumber3_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "3";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键4
        private void btNumber4_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "4";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键5
        private void btNumber5_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "5";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键6
        private void btNumber6_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "6";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键7
        private void btNumber7_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "7";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键8
        private void btNumber8_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "8";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键9
        private void btNumber9_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "9";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键0
        private void btNumber0_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "0";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //加功能
        private void BtAdd_Click(object sender, EventArgs e)
        {
            Op = "+";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //减功能
        private void BtSubtract_Click(object sender, EventArgs e)
        {
            Op = "-";
            Op2 = Op1;
            textBox1.Text = "";
        }       
        //乘功能
        private void BtMult_Click(object sender, EventArgs e)
        {
            Op = "*";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //除功能
        private void BtDivision_Click(object sender, EventArgs e)
        {
            Op = "/";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //%功能
        private void BtRemedial_Click(object sender, EventArgs e)
        {
            Op = "%";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //Del功能
        private void BtDel_Click(object sender, EventArgs e)
        {
            if(textBox1.Text.Length>=1)
            {
                textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
            }
            if(textBox1.Text.Length==0)
            {
                textBox1.Text = "";
            }
        }
        //小数点功能
        private void BtComma_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.IndexOf(".") < 0)
                textBox1.Text += ((Button)sender).Text;
            else
            { }
        }
        //等于功能
        private void BtDebgyu_Click(object sender, EventArgs e)
        {
            switch (Op)
            {
                case "+":
                    result = Op2 + Op1;
                    break;
                case "-":
                    result = Op2 - Op1;
                    break;
                case "/":
                    if(Op2==0)
                    {
                        Console.WriteLine("错误,被除数不能为0!");
                    }
                    else
                    {
                        result = Op2 / Op1;
                    }
                    break;
                case "%":
                    result = Op2 % Op1;
                    break;
                case "^":
                    int m;double n;
                    m = 1;n = Op2;
                    while (m+1<=Op1)
                    {
                        n = n * Op2;
                        m++;
                    }
                    result = n;
                    break;
            }
            textBox1.Text = System.Convert.ToString(result);
        }
        //sin功能
        private void Btsin_Click(object sender, EventArgs e)
        {
            Convert.ToDouble(Op1);
            textBox1.Text = System.Convert.ToString(Math.Sin(Op1 * Math.PI / 180));
        }
        //cos功能
        private void Btcos_Click(object sender, EventArgs e)
        {
            Convert.ToDouble(Op1);
            textBox1.Text = System.Convert.ToString(Math.Cos(Op1 * Math.PI / 180));
        }
        //tan功能
        private void Bttan_Click(object sender, EventArgs e)
        {
            Convert.ToDouble(Op1);
            textBox1.Text = System.Convert.ToString(Math.Tan(Op1 * Math.PI / 180));
        }
        //阶乘功能
        private void BtFactorial_Click(object sender, EventArgs e)
        {
            int i, j;
            i = 1;j = 1;
            while (i<=Op1)
            {
                j *= i;
                i++;
            }
            textBox1.Text = System.Convert.ToString(j);
        }
        //平方功能
        private void BtSquare_Click(object sender, EventArgs e)
        {
            textBox1.Text = System.Convert.ToString(Op1 * Op1);
        }
        //立方功能
        private void BtCube_Click(object sender, EventArgs e)
        {
            textBox1.Text = System.Convert.ToString(Op1 * Op1 * Op1);
        }
        //π功能
        private void BtPI_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + Math.PI;
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //清屏功能
        private void BtClear_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            Op = "";
            Op1 = 0;
            Op2 = 0;
            result = 0;
        }
        //幂运算功能
        private void BtPower_Click(object sender, EventArgs e)
        {
            Op = "^";
            Op2 = Op1;
            textBox1.Text = "";
        }
        //10^x功能
        private void BtIndex_Click(object sender, EventArgs e)
        {
            int a = 1;
            int b = 1;
            while(a<=Op1)
            {
                b *= 10;
                a++;
            }
            textBox1.Text = System.Convert.ToString(b);
        }
        //Log功能
        private void Btlog_Click(object sender, EventArgs e)
        {
            textBox1.Text = System.Convert.ToString(Math.Log10(Op1));
        }
        //ln功能
        private void BtLn_Click(object sender, EventArgs e)
        {
            textBox1.Text = System.Convert.ToString(Math.Log(Op1));
        }

        private void 机型转换ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 stu = new Form2();
            this.Hide();
            stu.ShowDialog();
            this.Close();
        }
    }
}

(2)主窗体Form2.cs文件中的代码。

using System;
using System.Windows.Forms;

namespace A001_calculator
{
    public partial class Form2 : Form
    {
        private string Op;
        private double Op1;
        private double Op2;
        private double result;
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }
        //数字键1
        private void btNumber1_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "1";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键2
        private void btNumber2_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "2";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键3
        private void btNumber3_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "3";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键4
        private void btNumber4_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "4";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键5
        private void btNumber5_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "5";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键6
        private void btNumber6_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "6";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键7
        private void btNumber7_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "7";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键8
        private void btNumber8_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "8";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键9
        private void btNumber9_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "9";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }
        //数字键0
        private void btNumber0_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "0";
            Op1 = System.Convert.ToDouble(textBox1.Text);
        }

        private void BtComma_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.IndexOf(".") < 0)
                textBox1.Text += ((Button)sender).Text;
            else
            { }
        }

        private void BtDebgyu_Click(object sender, EventArgs e)
        {
            switch (Op)
            {
                case "+":
                    result = Op2 + Op1;
                    break;
                case "-":
                    result = Op2 - Op1;
                    break;
                case "/":
                    if (Op2 == 0)
                    {
                        Console.WriteLine("错误,被除数不能为0!");
                    }
                    else
                    {
                        result = Op2 / Op1;
                    }
                    break;
                case "%":
                    result = Op2 % Op1;
                    break;
                case "^":
                    int m; double n;
                    m = 1; n = Op2;
                    while (m + 1 <= Op1)
                    {
                        n = n * Op2;
                        m++;
                    }
                    result = n;
                    break;
            }
            textBox1.Text = System.Convert.ToString(result);
        }

        private void BtAdd_Click(object sender, EventArgs e)
        {
            Op = "+";
            Op2 = Op1;
            textBox1.Text = "";
        }

        private void BtSubtract_Click(object sender, EventArgs e)
        {
            Op = "-";
            Op2 = Op1;
            textBox1.Text = "";
        }

        private void BtMult_Click(object sender, EventArgs e)
        {
            Op = "*";
            Op2 = Op1;
            textBox1.Text = "";
        }

        private void BtDivision_Click(object sender, EventArgs e)
        {
            Op = "/";
            Op2 = Op1;
            textBox1.Text = "";
        }

        private void BtClear_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            Op = "";
            Op1 = 0;
            Op2 = 0;
            result = 0;
        }

        private void 机型转换ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form1 stu = new Form1();
            this.Hide();
            stu.ShowDialog();
            this.Close();
        }
    }
}

3、运行程序

运行程序,在科学计算器界面。首先输入6,然后单击计算阶乘的按钮,便会得到6!为720。
在这里插入图片描述

在科学计算器界面左上角单击“机型转换”后转换成普通计算器界面,这个机型转换键可以实现科学计算器与普通计算器之间的转换。

在这里插入图片描述

4、源码下载

有感兴趣的同学可以点击下载源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InputStreamReader构造函数的四种方式实现

InputStreamReader类的构造函数 InputStreamReader(InputStream in) //创建InputStreamReader对象&#xff0c;构造方法中传递输入流&#xff0c;使用默认字符集InputStreamReader(InputStream in, String charsetName) //创建InputStreamReader对象&#xff0c;构造方法中传递…

国考省考行测:主体分析法,高频词往往是主体,没有主体也能说语意主旨,故事型材料对比分析法,积极引申大道理

国考省考行测&#xff1a;主体分析法&#xff0c;高频词往往是主体&#xff0c;没有主体也能说语意主旨&#xff0c;故事型材料对比分析法&#xff0c;积极引申大道理 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#…

Redis主从复制,哨兵模式和集群模式

主从复制 什么是主从复制 主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a;故障恢复无法自动化&#xff1b;写操作无法负载均…

JSP ssh网上家具店系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh网上家具店系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模 式开发。开发环境为TOMCAT7.0,M…

shell编程(三)--awk

本以为只是个命令&#xff0c;学起来这就是语言么&#xff0c;参看man手册多试吧 格式 awk pattern{action} <file> ​ A pattern can be: ​ BEGIN ​ END ​ expression 示例&#xff1a; ​ awk {print $0} awk.txt ​ print是打印命令&#xff0c;awk.txt是我们为…

JavaScript—实现手风琴画册

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;前端案例分…

EM算法——投硬币样例实现

理论参考 【机器学习】EM——期望最大&#xff08;非常详细&#xff09; 样例介绍 有c个硬币&#xff0c;每次随机选一个投掷n次&#xff0c;重复执行m次并记录结果。 根据投掷结果计算出每个硬币正面的概率。 每次选择的硬币未知。 过程介绍 随机初始化硬币为正的概率 he…

阿里P8终于整理出:Nginx+jvm+MySQL+Docker+Spring实战技术文档

前言 都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升…

Java搭建实战毕设项目springboot停车位管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的毕设项目springboot停车位管理系统源码&#xff0c;适合拿来做毕业设计的同学。可以下载来研究学习一下&#xff0c;本期把这套系统分享给大家。 技术架构 技术框架&#xff1a;jQu…

报表控件ActiveReports帮助高校实现办公、财务管理数字化

国内某知名高校教务处 陈主任&#xff1a; “我们教务处有十分多的文件、文档需要归纳整理&#xff0c;包括整个学校的文件通知公告、一些教务资源、职工工作日志记录、职工考勤记录等&#xff0c;同时还涉及一部分财务信息&#xff0c;职工的工资核算、学生续费的收纳等&…

初始python国度

print()函数 我里面有一个你可以直接使用的函数叫print()&#xff0c;可以将你想展示的东东在IDLE或标准的控制台上显示 print()函数可以输出哪些内容? (1)print()函数输出的内容可以是数字 (2)print()函数输出的内容可以是字符串 (3)print()函数输出的内容可以是含有运算符…

模拟电子技术(八)功率放大电路

&#xff08;四&#xff09;放大电路的频率响应电路基础复习功率放大电路的特点功率放大电路的分类互补功率放大电路&#xff08;OCL&#xff09;OCL的计算分析电路基础复习 功率放大电路的特点 以共射放大电路为例 电源功率消耗在了输出回路中&#xff08;Rb上的忽略&#…

智慧天气系统 - 可视化大屏(Echarts)管理系统(HTTP(S)协议)物联网平台(MQTT协议)

一. 智慧天气系统功能定义 天气数据实时监控&#xff0c;实时视频监控&#xff0c;历史数据分析&#xff1b;电子地图&#xff0c;设备地理位置精确定位&#xff1b;多级组织结构管理&#xff0c;满足集团大客户需求&#xff1b;可视化大屏展示&#xff0c;数据指标一目了然&am…

前端小技能:Chrome DevTools中的操作技巧

文章目录 前言I 操作技巧1.1 编辑页面上的任何文本 ✍1.2 清空缓存并硬性重新加载1.3 Command 菜单see aslo前言 Mac 使用 command+option+I 即可打开DevTools I 操作技巧 1.1 编辑页面上的任何文本 ✍ 在控制台输入document.body.contentEditable="true"开启文本…

计算机视觉 神经网络基础理论

1.感受野 输出featuremap上的一个像素点在输入图上的映射区域的大小。 计算公式&#xff1a; lk1lk[(fk1−1)∗∏i1ksi] , 为前层的步长之积∏i1ksi为前k层的步长之积第层对应的感受野大小&#xff0c;第层的卷积核的大小&#xff0c;或为池化尺寸大小lk第k层对应的感受野大小…

【C++】特殊类相关设计

前言 在实际的应用场景中&#xff0c;不免会有一些特殊的设计要求存在。在C中&#xff0c;由于三种不同的域&#xff0c;以及地址空间的大小或者申请方式不同&#xff0c;就衍生出了一些特殊的设计类方法。 何为特殊呢&#xff1f;即区别于普通类的设计。 上一篇C笔记传送门~ 【…

[附源码]计算机毕业设计的高校资源共享平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

第二证券|抗原检测板块暴涨,又是20CM涨停!

抗原检测概念起飞&#xff0c;组织以为&#xff0c;抗原检测在国内疫情防控中的重要性有望逐渐提高&#xff0c;主张重视板块潜在的市场需求。 抗原检测板块掀涨停潮 9日&#xff0c;抗原检测概念开盘冲高&#xff0c;到午间收盘&#xff0c;天瑞仪器、英诺特20CM涨停&#xf…

期权量化策略:如何利用期权捕捉期现套利机会?

做期权的朋友请看过来&#xff01;当前与掘金量化合作的特定券商已经能够支持期权数据和交易接口啦~如需开展期权量化&#xff0c;请联系我了解更多详情。 本期我们将和大家分享一个策略&#xff0c;介绍如何利用期权进行自动化套利。 期现套利是指某种期货合约&#xff0c;当…

浅谈linux 内核网络 sk_buff 之克隆与复制

【推荐阅读】 需要多久才能看完linux内核源码&#xff1f; 概述Linux内核驱动之GPIO子系统API接口 一文了解Linux内核的Oops 一篇长文叙述Linux内核虚拟地址空间的基本概括 纯干货&#xff0c;linux内存管理——内存管理架构&#xff08;建议收藏&#xff09; 1 skb_clone() 函…