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

【实验要求】

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

【计算器效果演示】

计算器演示

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

呵护地球不止一小时 食品行业如何为地球减负

“关爱地球,熄灯一小时”。作为全世界规模最大的应对气候变化行动之一,“地球一小时”自2007年进入中国以来,一直广受关注,社会各界竞相支持并参与。2024年,该活动以“为地球献出一小时”为主题,呼吁社会各界以实际行动为地球减负。 作为与大众日常生活息息相关的食品企业该如何…

【C++】堆区空间的申请和释放--- 2024.3.19

目录 C和C的区别(申请堆区空间)C中的new和delete结束语 C和C的区别(申请堆区空间) 在c语言中,在遇到需要申请一块堆区空间时,我们往往会使用malloc申请,使用free进行释放,但是为什么…

BUUCTF-Ezsql1

1.打开靶机 打开第一个链接 2.万能密码 使用万能密码:a or 1 # 密码为随意 第二个用kali打开 3.ssh连接靶机 ssh ctf284490d0-7600-4c65-9160-5ced02f45633.node5.buuoj.cn -p 28191 由题可知密码为123456 4.找到并修改index.php文件 找到index.php文件 #内容如…

Trait与生命周期

原文链接:(*∇`*) 咦,又好了~ Rust – xiaocr_bloghttp://www.xiaocr.fun/index.php/2024/03/18/trait%E4%B8%8E%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/ 目录 Trait 定义trait 默认实现 trait作为参数 Trait Bound语法 通过指定多个 trait bound …

【C++】内存管理和模板基础(new、delete、类及函数模板)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:http://t.csdnimg.cn/eCa5z 目录 内存分布 C内存管理方式 new/delete操作内置类型 new和delete操作自定义类型 operator new与operator d…

Cesium:绘制一个 3DTiles 对象的外包盒顶点

作者:CSDN @ _乐多_ 本文将介绍如何使用 Cesium 引擎根据模型的中心坐标,半轴信息,绘制一个 3DTiles 对象的外包盒顶点。 外包盒是一个定向包围盒(Oriented Bounding Box),它由一个中心点(center)和一个包含半轴(halfAxes)组成。半轴由一个3x3的矩阵表示,这个矩阵…

Apache Dolphinscheduler - 无需重启 Master-Server 停止疯狂刷日志解决方案

记录的是一个 3.0 比较难搞的问题,相信不少使用过 3.0 的用户都遇到过 Master 服务中存在一些工作流或者任务流一直不停的死循环的问题,导致疯狂刷日志。不过本人到现在也没找到最关键的触发原因,只是看到一些连锁反应带来的结果…… 影响因素…

qmldir的理解

目录结构: 文件内容 qmldir中: module QtLocaion plugin declarative_location classname QtLocationDeclarativeModule typeinfo plugins.qmltypes 其中: QtLocaion必须与qmldir所在的文件夹名字一样 plugin 后面的declarative_location 为…

SHELL——条件判断语句练习

目录 一、练习题目 二、解答过程 1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查次磁盘剩余空间。 安装邮件服务 配置邮件服务 编写脚本work1.sh 添加计划任务 2、判断web服务是否运行:…

项目中遇到的sql问题记录

有一张表,表结构及数据如下: INSERT INTO test.test_approve(approve_no, tra_date, tablename, part_dt) VALUES (approve001, 2021-02-18 00:00:00, tableA, 2024-03-18); INSERT INTO test.test_approve(approve_no, tra_date, tablename, part_dt) …

【Linux】日常使用命令(三)

文章目录 **cal 命令****date 命令****bc 命令****Linux下玩小游戏**: cal 命令 功能描述: cal 命令用于显示日历。 常用选项: -3:显示前一个月、当前月和下一个月的日历。-y:显示整年的日历。 常用示例: # 示例 1: 显示当前月的日历 cal# …

Easy Connect下载(Windows版)

文章目录 1. 下载连接2. 安装 1. 下载连接 百度网盘链接:https://pan.baidu.com/s/13r4wxz-Df3S_IMruZIDucw  提取码:mmcc 2. 安装 1. 下载安装包解压后,双击.exe文件就可以安装软件。 2. 耐心等待Easy Connect安装…

Android 开发环境搭建(Android Studio 安装图文详细教程)

Android Studio 下载 https://developer.android.google.cn/studio?hlzh-cn Android Studio 安装 检查电脑是否启用虚拟化 如果没有开启虚拟化,则需要进入电脑的 BIOS 中开启 直接 next选择安装的组件,Android Studio 和 Android 虚拟设备&#xff…

Gitlab-runner注册与配置

文章目录 概要操作流程获取HTTPS证书上传证书修改gitlab-runner dns配置文件gitlab-runner 注册 概要 本文主要介绍了Gitlab-runner在内网环境注册到gitlab的操作方式。内网环境如下: 1、gitlab-runner由docker镜像部署; 2、gitlab部署与内网&#xff0…

Linux的背景介绍

1.Linux的发展史 Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹&#xff08…

Android studio开发中Virtual Device模拟器的设置和屏幕错位等问题

Android SDK开发中Virtual Device模拟器的设置和使用 本文介绍android studio2023 3.1.13版本中模拟器的设置和在cordova开发中的运行方法 对于老版android studioAVD模拟器的使用,参见:Android SDK手机应用开发中第三方模拟器、真机运行方法以及AVD模拟…

安卓RecyclerView简单用法

废话不多说上代码 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schem…

60+款VSCode插件,构建超舒适开发环境

本文不做任何编辑器的比较&#xff0c;只是我本人日常使用 vscode 进行开发&#xff0c;并且比较喜欢折腾 vscode &#xff0c;会到处找这一些好玩的插件&#xff0c;于是越攒越多&#xff0c;今天给大家推荐一下我收藏的 60 多个 vscode 插件&#xff0c;据说插件装太多&#…

qt+ffmpeg 实现音视频播放(二)之音频播放

一、音频播放流程 1、打开音频文件 通过 avformat_open_input() 打开媒体文件并分配和初始化 AVFormatContext 结构体。 函数原型如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options); 参数说…

Python统计初步

文章目录 基本统计特征区间统计PandaspandasGUI Python科学计算&#xff1a;数组&#x1f4af;数据生成&#x1f4af;数据交互&#x1f4af;微积分&#x1f4af;插值&#x1f4af;拟合&#x1f4af;FFT&#x1f4af;卷积&#x1f4af;滤波 基本统计特征 分析统计特征是数据分…