C#简易版计算器

计算器需求分析

1.界面分析

做一个显示屏

17个按钮(0~9 +-*/% =ce)

2.需要实现的功能

选择第一个数字

选择运算符

选择第二个数字

按下等号进行计算,结果显示在显示屏中

3.实现步骤

1)先做界面

a.显示屏:textbox,listbox,label

b.使用17个button ,button上的文本对应数字符号

2)

补充:申请两个int类型变量,第一个num1装第一个数字,  第二个num2装第二个数字,再申请一个变量string用来装

          运算符

a.输入第一个数字,点一个数字按钮,屏幕上显示一个,之前显示的数字在前面待着

a1. 添加按钮的click事件

a2,事件触发,将按钮代表的数字显示在textbox中

b.当输入符号的时候,清除屏幕,但是后台必须记录第一个数字

b1. 添加符号按钮的click事件

b2. 当点击任何一个符号按钮用一个变量装刚才的textbox中的数字

c.输入第二个数字

d.按下等号按钮,显示屏上的文本改变成两个数字的运算结果

小技巧:将textbox中的tabstop设置为false,可以使光标失去焦点;

效果图:

代码:

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 _1228计算器_复杂版_
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

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

        }
        //2
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "2";
        }
        //3
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "3";
        }
        //4
        private void button4_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text +"4";
        }
        //5
        private void button5_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "5";
        }
        //6
        private void button6_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "6";
        }
        //7
        private void button7_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "7";
        }
        //8
        private void button8_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "8";
        }
        //9
        private void button9_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "9";
        }
        //0
        private void button10_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "0";
        }
        //这是装第一个数字的变量盒子
        int num1;
        //这是装第二个数字的变量盒子
        int num2;
        //这个盒子装运算符号
        string fun;

        //+
        private void button11_Click(object sender, EventArgs e)
        {
            jisuan();
            fun = "+";

        }
        //提取方法,方法是一个代码模块,(右击,选择快速操作和重构,点击“提取方法”,自由取名,调用该方法)
        private void jisuan()
        {
            num1 = Convert.ToInt32(textBox1.Text);
            textBox1.Text = "";
        }

        //-
        private void button12_Click(object sender, EventArgs e)
        {
            jisuan();
            fun = "-";
        }
        //*
        private void button13_Click(object sender, EventArgs e)
        {
            jisuan();
            fun = "*";
        }
        //÷
        private void button14_Click(object sender, EventArgs e)
        {
            jisuan();
            fun = "/";
        }
        //%
        private void button15_Click(object sender, EventArgs e)
        {
            jisuan();
            fun = "%";
        }
        //=
        private void button16_Click(object sender, EventArgs e)
        {
            
            num2 = int.Parse(textBox1.Text);
            textBox1.Text = "";
            if (fun=="+")
            {
                textBox1.Text = num1+"+"+ num2+"="+(num1 + num2).ToString();
            }
            if (fun=="-")
            {
                textBox1.Text = num1 + "-" + num2 + "=" + (num1 - num2).ToString();
            }
            if (fun=="*")
            {
                textBox1.Text = num1 + "×" + num2 + "=" + (num1 * num2).ToString();
            }
            if (fun=="/")
            {
                textBox1.Text = num1 + "÷" + num2 + "=" + (num1 / num2).ToString();
            }
            if (fun=="%")
            {
                textBox1.Text = num1 + "%" + num2 + "=" + (num1 % num2).ToString();
            }
        }
        //ce
        private void button17_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
        }
    }
}

 

实现功能:模拟微软计算器界面,实现四则混合运算1.键盘输入(KeyUp事件)2.无焦点(按钮失去焦点)3.实现优先级运算。比如直接输入1-2*3=-5,而不是微软计算器的-34.使用操作工厂,使用接口5.实现菜单里的复制粘贴功能6.可视化文本框7.实现中间操作结果显示8.正则表达式验证输入是否为数字9.小数点个数校验10.使用发消息_Flag实现操作符状态的判定及转换部分注释预览:失去焦点: private void text_display_GotFocus(object sender, EventArgs e) { /* * 文本框的“获取焦点”事件发生时执行的方法。每次获得焦点时,就会执行此方法,使之马上失去焦点。 * * 当某控件的Enable属性变为False的时候,它的焦点将转移到TabIndex属性值比它大1的控件上。 * 这时,如果有多个控件的TabIndex属性值同时比它大1,鼠标点击按钮或敲击键盘时候会发出“咚”的一声。 * 故在本程序中,将label_m控件的TabIndex设为1,其它的全部设为0,因此所有的控件在不可用时焦点都会转移到label_m上, * 因为label_m没有Click和KeyUp事件,所以不会出错。 * 这样就实现了全局无焦点的功能。 * */ text_display.Enabled = false; //先使文本框不可用,这时焦点转移到TabIndex比文本框大的下一个控件上 text_display.Enabled = true; //再使文本框可用,这时焦点不会返回。 }KeyUp事件: else if (e.KeyCode == Keys.NumPad1 || e.KeyCode == Keys.D1) { /* 当窗体的某个控件触发了其本身的KeyUp事件之后, * 将会调用keyUp()方法,并判断是哪个按键 * 如果是大键盘或者是小键盘的1时,便调用num_Click()方法。 * 参数是no_1和e。 * 在这里的no_1指的是按钮no_1,e是KeyUp事件 * no_1是按钮,参数格式正确;而e是KeyUp事件,也是事件的一种。KeyEventHandler当然也是EventHandler的一部分。 * 所以调用了之num_Click()后一切按照no_1按钮事件的操作执行 * 所以no_1按钮的这一句 * this.no_1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.num_Click); * 可以不写 */ num_Click(no_1, e); }小数点点击的校验: private void dot_Click(object sender, EventArgs e) { if (!dotFlag) //没点击的情况下 { if (operFlag) //如果点击了运算符,就将文本换为"0.",并将小数点设为已点击 { text_display.Text = "0."; dotFlag = true; } else if (text_display.Text.Equals("0.")) //如果没有点击运算符,切当前文本是"0.",便保持现状但将小数点设为已点击 { dotFlag = true; } else if (text_display.Text.Equals("0") || text_display.Text.Equals("")) { text_display.Text = "0."; dotFlag = true; } else //其他情况直接添加并将小数点设为已点击 { text_display.Text = text_display.Text + "."; dotFlag = true; } } else //如果已点击则什么也不做 { } enterFlag = false; label_m.Focus(); //键盘按键之后焦点由下面的各个_GotFocus()方法控制;鼠标点击之后的焦点有这条语句控制,同样使焦点转移到label_m上。 }
简单的四则运算 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 简单计算机 { public partial class Form1 : Form { string st = ""; double a=0, b=0; int i = 1; int flag,flag2;//初次执行算法的代号与再次执行算法的代号 bool format = false;//flag=true无需按清除,在执行下一次算法时候自动初始化 public Form1() { InitializeComponent(); textBox1.Text = Convert.ToString(0);//初始化,无操作时候,屏幕显示“0” } private void button1_Click(object sender, EventArgs e)//数字“1” { if (flag!=0)//以“=”的结果执行下一次加减乘除的初始化 { format = false; i = 1; } if (format == true)//执行下一次算法的初始化 { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button1.Text; textBox1.Text = st; } private void button2_Click(object sender, EventArgs e)//数字“2” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button2.Text; textBox1.Text = st; } private void button3_Click(object sender, EventArgs e)//数字“3” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button3.Text; textBox1.Text = st; } private void button4_Click(object sender, EventArgs e)//数字“4” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button4.Text; textBox1.Text = st; } private void button5_Click(object sender, EventArgs e)//数字“5” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button5.Text; textBox1.Text = st; } private void button6_Click(object sender, EventArgs e)//数字“6” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button6.Text; textBox1.Text = st; } private void button7_Click(object sender, EventArgs e)//数字“7” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button7.Text; textBox1.Text = st; } private void button8_Click(object sender, EventArgs e)//数字“8” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button8.Text; textBox1.Text = st; } private void button9_Click(object sender, EventArgs e)//数字“9” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button9.Text; textBox1.Text = st; } private void button10_Click(object sender, EventArgs e)//数字“0” { if (flag != 0) { format = false; i = 1; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; i = 1; } if (a != 0) textBox1.Text = ""; st = st + button10.Text; textBox1.Text = st; } private void button18_Click(object sender, EventArgs e)//数字“.” { if (flag != 0) { format = false; } if (format == true) { a = b = 0; flag = flag2 = 0; format = false; } if (a != 0) textBox1.Text = ""; if (st == "")//第一个数字是小数时候无需按“0”,直接显示“0” st = Convert.ToString(0); if (i == 1) { st = st + button18.Text; i++; } textBox1.Text = st; } private void button11_Click(object sender, EventArgs e)//初始化 { st = ""; a = b = 0; i = 1; flag = flag2 = 0; format = false; textBox1.Text = Convert.ToString(0); } private void button13_Click(object sender, EventArgs e)//相加 { flag = 1; if (a == 0) { if (st == "") st = "0"; a = Convert.ToDouble(st); } else if (st != "" && a != 0) b = Convert.ToDouble(st); if (Convert.ToString(b)!="") { textBox1.Text = ""; if (flag2 == 5) { a = a + b; } if (flag2 == 6) { a = a - b; } if (flag2 == 7) { a = a * b; } if (flag2 == 8) { if (b == 0) MessageBox.Show("被除数不能为0", "警告", MessageBoxButtons.RetryCancel); else { a = a / b; } } textBox1.Text = Convert.ToString(a); b = 0; st = ""; } flag2 = 5; } private void button14_Click(object sender, EventArgs e)//相减 { flag = 2; if (a == 0) { if (st == "") st = "0"; a = Convert.ToDouble(st); } else if (st != "" && a != 0) b = Convert.ToDouble(st); if (Convert.ToString(b) != "") { textBox1.Text = ""; if (flag2 == 5) { a = a + b; } if (flag2 == 6) { a = a - b; } if (flag2 == 7) { a = a * b; } if (flag2 == 8) { if (b == 0) MessageBox.Show("被除数不能为0", "警告", MessageBoxButtons.RetryCancel); else { a = a / b; } } textBox1.Text = Convert.ToString(a); b = 0; st = ""; } flag2 = 6; } private void button15_Click(object sender, EventArgs e)//相乘 { flag = 3; if (a == 0) { if (st == "") st = "0"; a = Convert.ToDouble(st); } else if (st != "" && a != 0) b = Convert.ToDouble(st); if (Convert.ToString(b) != "") { textBox1.Text = ""; if (flag2 == 5) { a = a + b; } if (flag2 == 6) { a = a - b; } if (flag2 == 7) { a = a * b; } if (flag2 == 8) { if (b == 0) MessageBox.Show("被除数不能为0", "警告", MessageBoxButtons.RetryCancel); else { a = a / b; } } textBox1.Text = Convert.ToString(a); b = 0; st = ""; } flag2 = 7; } private void button16_Click(object sender, EventArgs e)//相除 { flag = 4; if (a == 0) { if (st == "") st = "0"; a = Convert.ToDouble(st); } else if (st != "" && a != 0) b = Convert.ToDouble(st); if (Convert.ToString(b) != "") { textBox1.Text = ""; if (flag2 == 5) { a = a + b; } if (flag2 == 6) { a = a - b; } if (flag2 == 7) { a = a * b; } if (flag2 == 8) { if (b == 0) MessageBox.Show("被除数不能为0", "警告", MessageBoxButtons.RetryCancel); else { a = a / b; } } textBox1.Text = Convert.ToString(a); b = 0; st = ""; } flag2 = 8; } private void button17_Click(object sender, EventArgs e)//等于 { format = true; textBox1.Text = ""; if(st!="") b = Convert.ToDouble(st); if (flag == 1) { a = a + b; } if (flag == 2) { a =a - b; } if (flag == 3) { a = a * b; } if (flag == 4) { if (b == 0) MessageBox.Show("被除数不能为0","警告",MessageBoxButtons.RetryCancel); else { a = a / b; } } textBox1.Text = Convert.ToString(a); b = 0; flag = flag2 = 0; st = ""; } private void button12_Click(object sender, EventArgs e) { Application.Exit(); } } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值