练习——制作计算器

自制一个计算器,实现计算器的基本功能,按顺序依次计算,可进行拓展练习添加其他内容,尽可能完善

思路:1、界面布局 2、数字键功能 3、运算符功能 4、清屏键、退格键、小数点等功能 5、查缺补漏

代码文件:

 

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
    {
        public Form1()
        {
            InitializeComponent();
        }
        private bool isysf = false;//公共变量 判断上一步按的是否是运算符
        private decimal ys = 0;//记录上一步的运算结果
        private bool error = false;//记录运算指令是否有错(除数为0)
        //数字键点击事件
        private void button1_Click(object sender, EventArgs e)
        {
            if (error)//如果上一步运算指令有错 则先清空
            {
                button17_Click(button17,null);
            }
            Button btn = sender as Button;
            if (isysf)//如果上一步点击的是运算符 则清空label2
            {
                label2.Text = btn.Text;
                isysf = false;
            }
            else//上一步点击的不是运算符
            {
                if (label2.Text == "0")//如果label2中是0 则直接改值
                {
                    label2.Text = btn.Text;
                }
                else//label2中不是0 向后拼接
                {
                    if(label2.Text.Length<16)
                    label2.Text += btn.Text;
                }
            }
        }
        //小数点按钮点击事件
        private void button12_Click(object sender, EventArgs e)
        {
            if (!error)
            {
                if (isysf)//如果上一步点击的是运算符 则label2清零后加小数点
                {
                    label2.Text = "0.";
                    isysf = false;
                }
                else
                {
                    if (!label2.Text.Contains("."))
                    {
                        label2.Text += ".";
                    }
                }
            }
        }
        //C按钮点击事件 所有清零并初始化标记变量
        private void button17_Click(object sender, EventArgs e)
        {
            label1.Text = "";
            label2.Text = "0";
            isysf = false;
            error = false;
            ys = 0;
        }
        //正负号点击事件
        private void button10_Click(object sender, EventArgs e)
        {
            if (!error)
            {
                if (label2.Text != "0")
                {
                    if (!label2.Text.Contains("-"))
                    {
                        label2.Text = "-" + label2.Text;
                    }
                    else
                    {
                        label2.Text = label2.Text.Substring(1);
                    }
                }
            }
        }
        //退格键点击事件
        private void button18_Click(object sender, EventArgs e)
        {
            if (!error)
            {
                if (!isysf)
                {
                    if (label2.Text.Length > 1)
                        label2.Text = label2.Text.Substring(0, label2.Text.Length - 1);
                    else
                        label2.Text = "0";
                }
            }
            else
            { 
                button17_Click(button17,null);
            }
        }
        //加减乘除膜运算符
        private void button14_Click(object sender, EventArgs e)
        {
            if (!error)//上一步运算指令无错误才执行
            {
                Button btn = sender as Button;
                if (isysf&&label1.Text!="")//如果上一步点击的是运算符 只修改label1中的最后一个字符
                {
                    label1.Text = label1.Text.Substring(0, label1.Text.Length - 1) + btn.Text;
                    isysf = true;
                }
                else//上一步点击的不是运算符
                {
                    if (label1.Text == "")//如果是本次运算第一次点击运算符,给中间变量ys赋值并且将内容拼接到label1中
                    {
                        ys = Convert.ToDecimal(label2.Text);
                        label1.Text = " " + label2.Text + " " + btn.Text;
                        isysf = true;
                    }
                    else//如果不是第一次点击运算符(label1中有内容)则对上一步的运算结果进行继续计算并修改两个 label中的text
                    {
                        if (label1.Text.Substring(label1.Text.Length - 1) == "+")
                        {
                            ys += Convert.ToDecimal(label2.Text);
                            label1.Text = label1.Text + " " + label2.Text + " " + btn.Text;
                            label2.Text = ys.ToString();
                            isysf = true;
                        }
                        else if (label1.Text.Substring(label1.Text.Length - 1) == "-")
                        {
                            ys -= Convert.ToDecimal(label2.Text);
                            label1.Text = label1.Text + " " + label2.Text + " " + btn.Text;
                            label2.Text = ys.ToString();
                            isysf = true;
                        }
                        else if (label1.Text.Substring(label1.Text.Length - 1) == "*")
                        {
                            ys *= Convert.ToDecimal(label2.Text);
                            label1.Text = label1.Text + " " + label2.Text + " " + btn.Text;
                            label2.Text = ys.ToString();
                            isysf = true;
                        }
                        else if (label1.Text.Substring(label1.Text.Length - 1) == "/")
                        {
                            if (!label2.Text.Contains("1") && !label2.Text.Contains("2") && !label2.Text.Contains("3") && !label2.Text.Contains("4") && !label2.Text.Contains("5") && !label2.Text.Contains("6") && !label2.Text.Contains("7") && !label2.Text.Contains("8") && !label2.Text.Contains("9"))
                            {
                                label2.Text = "除数不能为零";
                                error = true;
                            }
                            else
                            {
                                ys /= Convert.ToDecimal(label2.Text);
                                label1.Text = label1.Text + " " + label2.Text + " " + btn.Text;
                                label2.Text = ys.ToString();
                                isysf = true;
                            }
                        }
                        else if (label1.Text.Substring(label1.Text.Length - 1) == "%")
                        {
                            if (!label2.Text.Contains("1") && !label2.Text.Contains("2") && !label2.Text.Contains("3") && !label2.Text.Contains("4") && !label2.Text.Contains("5") && !label2.Text.Contains("6") && !label2.Text.Contains("7") && !label2.Text.Contains("8") && !label2.Text.Contains("9"))
                            {
                                label2.Text = "除数不能为零";
                                error = true;
                            }
                            else
                            {
                                ys %= Convert.ToDecimal(label2.Text);
                                label1.Text = label1.Text + " " + label2.Text + " " + btn.Text;
                                label2.Text = ys.ToString();
                                isysf = true;
                            }
                        }
                    }
                }
            }
        }
        //label2的text改动事件,当字符串过长时调整字体大小
        private void label2_TextChanged(object sender, EventArgs e)
        {
            if(label2.Text.Length<=9)
                label2.Font = new Font(label2.Font.FontFamily.Name, 20, FontStyle.Bold);
            else if (label2.Text.Length > 9&&label2.Text.Length<=11)
                label2.Font = new Font(label2.Font.FontFamily.Name, 18, FontStyle.Bold);
            else if (label2.Text.Length > 11 && label2.Text.Length <= 13)
                label2.Font = new Font(label2.Font.FontFamily.Name, 16, FontStyle.Bold);
            else if (label2.Text.Length > 13 && label2.Text.Length <= 15)
                label2.Font = new Font(label2.Font.FontFamily.Name, 14, FontStyle.Bold);
            else if (label2.Text.Length > 15)
            {
                label2.Font = new Font(label2.Font.FontFamily.Name, 13, FontStyle.Bold);
                label2.Text = label2.Text.Substring(0,16);
            }
        }
        //label1的text改动事件,当字符串过长事 只显示后面的26个字符
        private void label1_TextChanged(object sender, EventArgs e)
        {
            if (label1.Text.Length > 26)
                label1.Text = label1.Text.Substring(label1.Text.Length-26);
        }
        //等号按钮点击事件
        private void button20_Click(object sender, EventArgs e)
        {
            if (!error)
            {
                if (label1.Text != "")
                {
                    if (label1.Text.Substring(label1.Text.Length - 1) == "+")
                    {
                        ys += Convert.ToDecimal(label2.Text);
                        label1.Text = "";
                        label2.Text = ys.ToString();
                    }
                    else if (label1.Text.Substring(label1.Text.Length - 1) == "-")
                    {
                        ys -= Convert.ToDecimal(label2.Text);
                        label1.Text = "";
                        label2.Text = ys.ToString();
                    }
                    else if (label1.Text.Substring(label1.Text.Length - 1) == "*")
                    {
                        ys *= Convert.ToDecimal(label2.Text);
                        label1.Text = "";
                        label2.Text = ys.ToString();
                    }
                    else if (label1.Text.Substring(label1.Text.Length - 1) == "/")
                    {
                        if (!label2.Text.Contains("1")&&!label2.Text.Contains("2")&&!label2.Text.Contains("3")&&!label2.Text.Contains("4")&&!label2.Text.Contains("5")&&!label2.Text.Contains("6")&&!label2.Text.Contains("7")&&!label2.Text.Contains("8")&&!label2.Text.Contains("9"))
                        {
                            label2.Text = "除数不能为零";
                            error = true;
                        }
                        else
                        {
                            ys /= Convert.ToDecimal(label2.Text);
                            label1.Text = "";
                            label2.Text = ys.ToString();
                        }
                    }
                    else
                    {
                        if (!label2.Text.Contains("1") && !label2.Text.Contains("2") && !label2.Text.Contains("3") && !label2.Text.Contains("4") && !label2.Text.Contains("5") && !label2.Text.Contains("6") && !label2.Text.Contains("7") && !label2.Text.Contains("8") && !label2.Text.Contains("9"))
                        {
                            label2.Text = "除数不能为零";
                            error = true;
                        }
                        else
                        {
                            ys %= Convert.ToDecimal(label2.Text);
                            label1.Text = "";
                            label2.Text = ys.ToString();
                        }
                    }
                    isysf = true;
                }
            }
        }
        //按键事件(键盘操作)
        private void button1_KeyDown(object sender, KeyEventArgs e)
        {
            string key = e.KeyData.ToString();
            if (key == "D1" || key == "NumPad1")
                button1_Click(button1,null);
            else if (key == "D2" || key == "NumPad2")
                button1_Click(button2, null);
            else if (key == "D3" || key == "NumPad3")
                button1_Click(button3, null);
            else if (key == "D4" || key == "NumPad4")
                button1_Click(button4, null);
            else if (key == "D5" || key == "NumPad5")
                button1_Click(button5, null);
            else if (key == "D6" || key == "NumPad6")
                button1_Click(button6, null);
            else if (key == "D7" || key == "NumPad7")
                button1_Click(button7, null);
            else if (key == "D8" || key == "NumPad8")
                button1_Click(button8, null);
            else if (key == "D9" || key == "NumPad9")
                button1_Click(button9, null);
            else if (key == "D0" || key == "NumPad0")
                button1_Click(button11, null);
            else if (key == "Add")
                button14_Click(button14, null);
            else if (key == "Subtract" || key == "OemMinus")
                button14_Click(button13, null);
            else if (key == "Multiply")
                button14_Click(button15, null);
            else if (key == "Divide")
                button14_Click(button16, null);
            else if (key == "Oemplus")
                button20_Click(button20, null);
        }
        //托盘菜单关闭按钮点击事件
        private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        //托盘菜单隐藏窗体点击事件
        private void 隐藏ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Normal)
            {
                this.WindowState = FormWindowState.Minimized;
                this.ShowInTaskbar = false;
                隐藏ToolStripMenuItem.Text = "恢复显示";
                string picPath = Application.StartupPath + "\\btn_restore_highlight.png";
                隐藏ToolStripMenuItem.Image = Image.FromFile(picPath);
            }
            else
            {
                this.WindowState = FormWindowState.Normal;
                this.ShowInTaskbar = true;
                隐藏ToolStripMenuItem.Text = "隐藏到托盘";
                string picPath = Application.StartupPath + "\\btn_mini_highlight.png";
                隐藏ToolStripMenuItem.Image = Image.FromFile(picPath);
            }
        }
    }
}
计算器CS文件代码

 

设计界面:

 

效果: 

转载于:https://www.cnblogs.com/wt627939556/p/6141750.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的校园二手书交易平台,源码+数据库+毕业论文+视频演示 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的校园二手书交易平台实现了图书信息查询。系统用到了关系型数据库中MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让校园二手书交易平台更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:信息管理,时效性,安全性,MySql;Spring Boot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值