Apr 9

C# 系统计算器的制作(.net) 不指定

piikee , 00:25 , 计算机相关 » 我的开发 , 评论(0) , 阅读(760) , 本站原创 | |

实验要求

参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能完成数据的加减乘除的基本功能。
控件的焦点以及Tab键的设置和使用。
多个控件(按钮)事件的共享。
实现键盘输入。
设计思路
创建主体框架:建立程序的主要界面后,系统自动生成界面的主要窗口生成代码。对于每个按钮的的代码段中,分别添加事件触发的处理代码。控件textBox1,显示输入的信息和显示处理后的结果。
数字1-9的按键的事件处理都是在textBox1中分别添加相对应的数字字符,每按一次就在字符后面继续加入数字的字符,把数字当成是字符串处理。对于加减乘除四则运算按键,事件触发后的处理是判断是否numa与numb都有值,没有的话就先赋值,不做运算,直到numa与numb都有值才进行运算。
程序0-9这十个数字按钮直接用托管实现,所有执行代码置于数字键1的onclick事件中,其他按钮用托管实现。
加减乘除四个按钮实现比较复杂的判断与运算。运算是都是调用相同的计算类Computer进行计算的。
小数点和正负号按钮的实现,主要是用字符检索与字符插入删除操作,判断字符串中是否已经存在此字符。存在小数点的话就不再增加小数点,存在负号就把负号去掉。
核心代码
按钮1的代码
    private void button15_Click(object sender, EventArgs e)
        {//这是按钮1,其他按钮用托管实现
            Button clickBtn;
            clickBtn = (Button)sender;
                textBox1.Text += clickBtn.Text;
                num += clickBtn.Text;
        }
除号按钮代码
   //除号
        private void button4_Click(object sender, EventArgs e)
        {
            SendNumber(num);
            if (sign == null || numb == 10241024)
            {
                sign = "/";
                textBox1.Text = null;
                num = null;
                return;
            }
            if (numb!= 10241024)
            {
                //开始进行计算
                Computer ComPro = new Computer(sign,numa,numb);
                this.textBox1.Text = ComPro.Comt(out numa).ToString();

            
                //开始初始化数据
                sign = "/";
                textBox1.Text = null;
                numb = 10241024;
                num = null;
                return;
            }
计算类
   //计算类
    public class Computer
    {
        private string sign;
        private double numa;
        private double numb;

        public Computer(string str, double first, double second)
        {
            sign = str;
            numa = first;
            numb = second;
        }

        //进行运算
        public double Comt(out double  first)
        {
      
            if (sign == "+")
            {
                first = numa + numb;
                return numa + numb;

            }
            else if (sign == "-")
            {
                first = numa - numb;
                return numa - numb;

            }
            else if (sign == "*")
            {
                first = numa * numb;
                return numa * numb;

            }
            else if (sign == "/")
            {
                if (numb == 0)
                {
                    first = 1024.1024;
                    return first;
                }
                else
                {
                    first = numa/numb;
                    return first;

                }
            }
            else
            {
                first = 1024.1024;
                return first ;
            }
        }

  }
  

键盘事件(注意要在FORM1里面把键盘注册即keyPreview设置为true,还有事件里面KEY事件选KeyDown)

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.NumPad0: button20.PerformClick(); break;
                case Keys.NumPad1: button15.PerformClick(); break;
                case Keys.NumPad2: button14.PerformClick(); break;
                case Keys.NumPad3: button13.PerformClick(); break;
                case Keys.NumPad4: button10.PerformClick(); break;
                case Keys.NumPad5: button9.PerformClick(); break;
                case Keys.NumPad6: button8.PerformClick(); break;
                case Keys.NumPad7: button1.PerformClick(); break;
                case Keys.NumPad8: button2.PerformClick(); break;
                case Keys.NumPad9: button3.PerformClick(); break;
                case Keys.Add: button17.PerformClick(); break;
                case Keys.Subtract: button12.PerformClick(); break;
                case Keys.Multiply: button7.PerformClick(); break;
                case Keys.Divide: button4.PerformClick(); break;
                case Keys.Decimal: button19.PerformClick(); break;
                case Keys.Delete: button18.PerformClick(); break;
                case Keys.Enter: button16.PerformClick(); break;
                default: MessageBox.Show(" 输入错误."); break;
            }

        }
  
程序运行效果
点击在新窗口中浏览此图片
点击按钮3、+、3、=
显示6
点击按钮 9.0、/、3、=
显示3
实验总结
  通过此次实验,更好地掌握了课本学到的知识,理解面向对象的思想。其中一些按钮的实现功能需要很多判断,很好的锻炼了思维的严谨。就如等于号,要判断前后两个数字是否有输入,还有运算符。

程序源码下载:
下载文件 (已下载 372 次)


版权所有,严禁用于商业用途。
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]