【实验01 扩展实验】C#桌面项目:简易计算器

news2024/9/22 11:42:12

【实验要求】

(1)新建一个C#桌面项目Calc,实现简易计算器功能,界面如图1所示。

(2)计算方式:通过点击对应的按钮,输入第1个数(可以是整数或实数),输入运算符(+、-、*或/),再输入第2个数,点击“=”按钮,完成计算。

(3)(选做)改进程序的设计,要求输入一个算术表达式,点击“=”按钮完成输入表达式的计算并输出(可以利用数据结构中的表达式计算原理,实现表达式的计算)。

【实验步骤】

红色为每个按钮的方法名

【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 Calc
{
    public partial class frmMain : Form
    {
        private double num1;//左操作数
        private double num2;//右操作数
        private string flag;//flag为当前所操作的运算符
        private double res;//计算结果
        private bool isCalc;//判断是否计算
        public frmMain()
        {
            InitializeComponent();
        }

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

        private void Button1_Click(object sender, EventArgs e)
        {
            //次方运算
            num1 = Convert.ToDouble(txtNum.Text);
            flag = "sqr";
            txtNum.Text = "";
        }

        private void btnC_Click(object sender, EventArgs e)
        {
            //按钮“C”,清空
            txtNum.Text = "";
        }

        private void btnBack_Click(object sender, EventArgs e)
        {
            //回退键
            if(txtNum.Text.Length > 0)
            {
                txtNum.Text = txtNum.Text.Substring(0, txtNum.Text.Length - 1);
            }
        }

        private void btnDiv_Click(object sender, EventArgs e)
        {
            //除法按钮
            num1 = Convert.ToDouble(txtNum.Text);
            flag = "/";
            txtNum.Text = "";
        }

        private void btn7_Click(object sender, EventArgs e)
        {
            txtNum.Text += "7";
        }

        private void btn8_Click(object sender, EventArgs e)
        {
            txtNum.Text += "8";
        }

        private void btn9_Click(object sender, EventArgs e)
        {
            txtNum.Text += "9";
        }

        private void btnMul_Click(object sender, EventArgs e)
        {
            //乘法按钮
            num1 = Convert.ToDouble(txtNum.Text);
            flag = "*";
            txtNum.Text = "";
        }

        private void btn4_Click(object sender, EventArgs e)
        {
            txtNum.Text += "4";
        }

        private void btn5_Click(object sender, EventArgs e)
        {
            txtNum.Text += "5";
        }

        private void btn6_Click(object sender, EventArgs e)
        {
            txtNum.Text += "6";
        }

        private void btnSub_Click(object sender, EventArgs e)
        {
            //减法按钮
            num1 = Convert.ToDouble(txtNum.Text);
            flag = "-";
            txtNum.Text = "";
        }

        private void btn1_Click(object sender, EventArgs e)
        {
            txtNum.Text += "1";
        }

        private void btn2_Click(object sender, EventArgs e)
        {
            txtNum.Text += "2";
        }

        private void btn3_Click(object sender, EventArgs e)
        {
            txtNum.Text += "3";
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //加法按钮
            num1 = Convert.ToDouble(txtNum.Text);
            flag = "+";
            txtNum.Text = "";
        }

        private void btnOr_Click(object sender, EventArgs e)
        {
            //正负号按钮
            if(txtNum.Text == "0")
            {
                return;
            }
            if (txtNum.Text.Contains("-"))
            {
                txtNum.Text = txtNum.Text.Substring(1);
            }
            else
            {
                txtNum.Text = "-" + txtNum.Text;
            }
        }

        private void btn0_Click(object sender, EventArgs e)
        {
            txtNum.Text += "0";
        }

        private void btnPoint_Click(object sender, EventArgs e)
        {
            txtNum.Text +=  ".";
        }

        private void btnEqual_Click(object sender, EventArgs e)
        {
            int f = 1;
            num2 = Convert.ToDouble(txtNum.Text);
            if(flag == "+")//加法运算
            {
                res = num1 + num2;
            }else if(flag == "-")//减法运算
            {
                res = num1 - num2;
            }else if(flag == "*")//乘法运算
            {
                res = num1 * num2;
            }else if(flag == "/")//除法运算
            {
                if(num2 == 0)
                {
                    txtNum.Text = "除数不能为0";
                    f = 0;
                }
                else
                {
                    res = num1 / num2;
                }
            }
            else 
            {
                //n次方运算
                res = Math.Pow(num1,num2);              
            }
            if(f == 1)
            {
                txtNum.Text = res.ToString();
            }
        }
    }
}

【计算器效果演示】

计算器演示

不知道为什么录屏没给我录到头顶,将就看看。

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

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

相关文章

配置LVS NAT模式

配置LVS NAT模式 环境准备 client1:eth0->192.168.88.10,网关192.168.88.5lvs1: eth0 -> 192.168.88.5;eth1->192.168.99.5web1:eth1->192.168.99.100;网关192.168.99.5web2:eth1->192.168…

【推荐】免费AI论文写作-「智元兔 AI」

还在为写论文焦虑?免费AI写作大师来帮你三步搞定! 智元兔AI是ChatGPT的人工智能助手,并且具有出色的论文写作能力。它能够根据用户提供的题目或要求,自动生成高质量的论文。 不论是论文、毕业论文、散文、科普文章、新闻稿件&…

内置泵电源,热保护电路等功能的场扫描电路D78040,偏转电流可达1.7Ap-p,可用于中小型显示器。

D78040是一款场扫描电路,偏转电流可达1.7Ap-p,可用于中小型显示器。 二 特 点 1、有内置泵电源 2、垂直输出电路 3、热保护电路 4、偏转电流可达1.7Ap-p 三 基本参数 四 应用电路图 1、应用线路 2、PIN5脚输出波形如下:

顶顶通呼叫中心中间件-群集配置方法讲解(mod_cti基于FreeSWITCH)

群集介绍 比较多的外呼或呼入系统,假如整个系统需要1万并发,单机最高就3000-5000并发,这时就需要多机群集了。顶顶通呼叫中心中间件使用redis数据库,多个FreeSWITHC(mod_cti)连接同一个redis就可以很容易的配置成群集系统。 想了…

java Flink(四十二)Flink的序列化以及TypeInformation介绍(源码分析)

Flink的TypeInformation以及序列化 TypeInformation主要作用是为了在 Flink系统内有效地对数据结构类型进行管理,能够在分布式计算过程中对数据的类型进行管理和推断。同时基于对数据的类型信息管理,Flink内部对数据存储也进行了相应的性能优化。 Flin…

【DL经典回顾】激活函数大汇总(二十一)(BReLU附代码和详细公式)

激活函数大汇总(二十一)(BReLU附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的角色…

深度学习面经-part3(RNN、LSTM)

3.RNN 核心思想:像人一样拥有记忆能力。用以往的记忆和当前的输入,生成输出。 RNN 和 传统神经网络 最大的区别:在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。 RNN应用场景: 1.文本生成 2.语音识别 3.机器翻…

【DataWhale学习笔记-蝴蝶书共读】大语言模型背后

从图灵测试到ChatGPT 1950年,艾伦•图灵(Alan Turing)发表论文《计算机器与智能》( Computing Machinery and Intelligence),提出并尝试回答“机器能否思考”这一关键问题。在论文中,图灵提出了“模仿游戏”&#xff…

RabbitMQ介绍及搭建

架构 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,使用erlang语言编写,依赖Erlang环境运行。 Broker:运行消息队列服务进程的节点,包含Exchange、Queue; Producer:消…

自学Python第二十九天-feapder框架创建爬虫

自学Python第二十九天-feapder框架创建爬虫 安装feapder 的设计架构feapder 框架的简单使用简单创建爬虫简单爬取数据简单的数据保存 中间件校验浏览器渲染使用浏览器渲染获取接口数据 feapder是一款上手简单,功能强大的 Python爬虫框架,内置 AirSpide…

Games101笔记-模型、视图、投影

在旋转点,旋转矩阵的逆等于矩阵的转置 视图变换和投影变换 三维变换 左边3*3是线性变换,右边一列是仿射变换(平移) 先线性再平移 缩放、旋转、平移 x叉乘y得到z,y叉乘z得到x, xyz给任何两个可以得到另一个 (循环对称) z叉乘x得…

EDI在汽车主机厂配送流程中的应用

汽车主机厂的汽车配送流程始于汽车 “生产结束 ” ,止于 “交付给经销商 ” 。在这个流程中,企业作为主机厂的下游供应商,与主机厂的物流服务供应商之间的信息交换将会变得十分重要。 配送流程:运输订单以及报告 汽车主机厂提供预…

6-高维空间:机器如何面对越来越复杂的问题

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除 目录 一、知识引入 (一)二维输入数据 (二)数据特征维度 …

Java-JVM 虚拟机原理调优实战

一、基础 栈帧(Stack Frame)栈空间的 基本元素,用于 方法的调用和方法的执行的数据结构 堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后&#xff0c…

小白向-使用git实现不同服务器改动的同步

背景 深度学习项目,已有可运行的backbone,已将此项目在github建库。 需要使用不同分支进行不同改动的测试;有两台服务器可供程序运行; 项目需求 以github云端仓库为媒介,实现不同服务器改动无痛关联。维护项目代码…

MS14_064 漏洞利用与安全加固

文章目录 环境说明1 MS14_064 简介2 MS14_064 复现过程3 MS14_064 安全加固 环境说明 渗透机操作系统:kali-linux-2024.1-installer-amd64漏洞复现操作系统: sc_winxp_pro_with_sp2 1 MS14_064 简介 要利用此漏洞则需要进行用户交互。通过发送电子邮件信息给本地登…

【云开发笔记No.4】DevOps的起源,定义和基本原则

DevOps,作为一组过程、方法与系统的统称,它的出现并不是偶然的,而是源于软件开发与运维领域长期以来所面临的挑战和痛点。其诞生背景可以追溯到敏捷开发模式的兴起以及持续开发所带来的运维问题。随着软件行业的飞速发展,传统的软…

Godot 学习笔记(3):IOC容器注入,以NlogServices为例

文章目录 前言环境注意事项Ioc注入文件夹设置Service服务搭建Nlog.configNlogService配置ButtonTest1Service控制反转Program主入口ButtonTest1从Ioc中获取服务 输出生命周期问题 总结 前言 Godot.Net中使用IOC之后,Godot的代码将会被极大的解耦。这里不不展开说明…

【大模型】直接在VS Code(Visual Studio Code)上安装CodeGeeX插件的过程

文章目录 一、什么是CodeGeeX(一)我理解的CodeGeeX(二)优缺点 二、CodeGeex下载、安装、注册(一)安装VS Code(Visual Studio Code)(二)下载安装CodeGeeX(三)注…

SpringBoot中使用验证码easy-captcha

easy-captcha使用的大概逻辑: 当一个请求发送到后端服务器请求验证,服务器使用easy-captcha生成一个验证码图片,并通过session将验证信息保存在服务器,当用户登录校验时候,会从ession中取出对比是否一致 但是前后端分离之后 由于跨域问题 以上就无法实现了 下面这种情况没…