用C#写简单计算器程序(C#考试作业)_早起的虫m_新浪博客

终于完成了老师布置的作业,可以说这就是交给老师考试的xx吧。虽然离交作业期限还有很常一段时间,呵,

 

不过下次上机课就可以躲在后面玩 WARIII 了,或者是不去上课,继续我的复习。这几天反复地看课本,查资料

 

总算是做得想像了,不想做复杂的计算器,就交个简单的混个60分了,不然时间做太浪费时间了,效果图如下,

 

感觉还不错。

 

 

回忆下设计思路吧。       //部分程序网上修改所得。算得上是半个原创吧。

 

一、设计思路

  用C#写的比较基础的windows Form 程序,该计算器实现了基础的数学运算,如加,减,乘,除等任务.主要是通

 

过该程序学习vs.net的

  编程环境,以及Microsoft Visual Studio 2005程序.


  分两部份来实现程序,

{dy}部份.程序界面:

   在窗口里添加以下控件表并修改和Text标签
   

    Button1---------数字键1    Button2---------数字键2   Button3---------数字键3

    Button4---------数字键4    Button5---------数字键5   Button6---------数字键6

    Button7---------数字键7    Button8---------数字键8   Button9---------数字键9

    Button10--------数字键0   Button11---------数字键.  。。。。。。。。。。。

    Button12--18    对应符号 + - * = / C CE

    textBox1--------显示数字

 

第二部份.程序代码:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace jisuanqi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       

        String Op1, Op2;
        //预先输入操作数
        Boolean DecimaFlag;
        //小数点存在吗?
        int NumOps;
        //操作数个数
        String LastInput;
        //指示上一次按键事件的类型
        int OpFlag;
        //指示未完成的操作
        String TempReadout;

        //下面在窗体装载的时候初始化设计的参变量,例如将操作数的个数清空等。
        private void Form1_Load(object sender, EventArgs e)
        {
            DecimaFlag = false;
            //将小数点标志设置为假
            NumOps = 0;
            //将输入操作数个数设置为0
            LastInput = "NONE";
            //将{zh1}一次输入标记设置为None
            OpFlag = 0;
            //将未完成的操作设置为空
            Txtread.Text = "0.";
            //格式化文本框的输出
        }

       
        //数字键0-9的click事件过程
        //向显示中的数追加新数
        public void calculate(int MyNumber)
        {
            int Index = MyNumber;
            //取得单击的按钮对应的数字
            if (LastInput != "NUMS")
            {
                Txtread.Text = "0.";
                //格式化输入
                DecimaFlag = false;
                //设置小数点标志
            }
            if (DecimaFlag)
            {
                //表明已经单击过小数点按钮
                Txtread.Text = Txtread.Text + MyNumber;
                //则直接在文本框文本后面增加字符
            }
            else
            {
                //如果小数点标记为假
                if (Txtread.Text == "0.")
                {
                    //如果文本框中没有文本
                    Txtread.Text = MyNumber + ".";
                    //则将文本框中的字符设置为数字和点
                }
                else
                {
                     //如果文本框中已经存在了字符
                    Txtread.Text = Txtread.Text.Substring(0, Txtread.Text.Length - 1) + MyNumber + ".";
                    //则将文本插入到整数部分的结尾处
                }
            }
            if (LastInput == "NEG")
            {
                //如果上一次输入为负数
                Txtread.Text = "-" + Txtread.Text;
            }
            LastInput = "NUMS";
            //设置本次输入标记为正数
        }

        //给小数点增加操作代码,设置小数点标志
        //小数点按钮的click事件过程
        //如果上一次按键为运算符,初始化txtread为“0.”
        //否则在显示时追加一个小数点
        private void button10_Click(object sender, EventArgs e)
        {
            if (LastInput == "NEG")
            {
                //如果输入的负数
                Txtread.Text = "-0.";
                //按照负数格式输出
            }
            else if (LastInput != "NUMS")
            {
                //如果上一次输出的是正数
                Txtread.Text = "0.";
                //则按照整数格式输出
            }
            DecimaFlag=true;
            //设置小数点标记为真
            LastInput="NUMS";
            //设置输入标志为正数

        }

        //在单击各个按钮时调用上面设计的输入函数来设置输入的操作数,在调用输入函数时,加入相应的参数,
        //因为这个参数是与要输入的数字相一致的,所以只要根据按钮上的Text属性中的数字来填写参数即可。
        private void Number1_Click(object sender, EventArgs e)
        {
            calculate(1);
        }

        private void Number2_Click(object sender, EventArgs e)
        {
            calculate(2);
        }

        private void Number3_Click(object sender, EventArgs e)
        {
            calculate(3);
        }

        private void Number4_Click(object sender, EventArgs e)
        {
            calculate(4);
        }

        private void Number5_Click(object sender, EventArgs e)
        {
            calculate(5);
        }

        private void Number6_Click(object sender, EventArgs e)
        {
            calculate(6);
        }

        private void Number7_Click(object sender, EventArgs e)
        {
            calculate(7);
        }

        private void Number8_Click(object sender, EventArgs e)
        {
            calculate(8);
        }

        private void Number9_Click(object sender, EventArgs e)
        {
            calculate(9);
        }

        private void Number0_Click(object sender, EventArgs e)
        {
            calculate(0);
        }

        //定义一个计算函数来实现各种计算操作,该计算函数有一个参数,这个参数用来标志是哪一种计算
        //并且根据操作数的个数和菜做符号的种类,分别进行操作,{zh1}将操作结果返回文本框,显示给用户

        //运算符(+、-、*、/、=)的click事件过程
        //如果接下来的按键是数字键,增加NumOps
        //如果有一个操作数,则设置Op1;
        //如果有两个操作数,则将Op1设置为Op1与当前输入字符串的运算结果,并显示结果
        public void OperatorCal(int MyOperator)
        {
            //取得操作代号
            int Index = MyOperator;
            //取得文本框文本
            TempReadout = Txtread.Text;
            //设置文本框{zh1}一次输入类型
            if (LastInput == "NUMS")
            {
                NumOps = NumOps + 1;
                //将操作数加一
            }
            String Myop;
            Myop = NumOps.ToString();
            switch (NumOps)
            {
                case 0:
                    if (MyOperator == 3 && LastInput != "NEG")
                    {
                        Txtread.Text = "-" + Txtread.Text;
                        LastInput = "NEG";
                    }
                    //如果有一个操作数
                    break;
                case 1:
                    Op1 = Txtread.Text;
                    if(MyOperator == 3 && LastInput != "NUMS"&&OpFlag!=4)
                    {
                        Txtread.Text = "-";
                        LastInput = "NEG";
                    }
                    //如果有两个操作数
                    break;
                case 2:
                    //取得第二个操作数
                    Op2 = TempReadout;
                    //根据操作标记进行不同的操作
                    switch (OpFlag)
                    {
                        //如果是加法操作
                        case 1:
                            Op1 = (Double.Parse(Op1) + Double.Parse(Op2)).ToString();
                            //将两个操作数相加然后复制给操作数1
                            //如果是减法
                            break;
                        case 3:
                            Op1 = (Double.Parse(Op1) - Double.Parse(Op2)).ToString();
                            //将两个操作数相减然后复制给操作数1
                            //如果是乘法
                            break;
                        case 2:
                            Op1 = (Double.Parse(Op1) * Double.Parse(Op2)).ToString();
                            //将两个操作数相乘然后复制给操作数1
                            //如果是除法
                            break;
                        case 0:
                            //首先判断出书是否为0
                            if (Double.Parse(Op2) == 0)
                            {
                                //如果为0则显示除数不能为0的提示框
                                MessageBox.Show("除数不能为0", "计算器");
                            }
                            else
                            {
                                Op1 = (Double.Parse(Op1) / Double.Parse(Op2)).ToString();
                                //将两个操作数相除然后复制给操作数1
                            }
                            break;
                            //如果是等号操作
                        case 4:
                            //取得当前值
                            Op1 = Op2;
                            break;
                    }
                    Txtread.Text = Op1;
                    //则显示计算结果
                    NumOps = 1;
                    //将操作数个数设置为一个
                    break;
            }
            if (LastInput != "NEG")
            {
                //如果{zh1}一次输入是负数
                LastInput = "OPS";
                //设置输入类型
                OpFlag = MyOperator;
                //设置输入操作类型
            }
        }
        //在各个操作按钮中调用上面函数,实现各种操作
        private void Btnjian_Click(object sender, EventArgs e)
        {
            OperatorCal(3);//减法
        }

        private void Btnchu_Click(object sender, EventArgs e)
        {
            OperatorCal(0);//除法
        }

        private void Btncheng_Click(object sender, EventArgs e)
        {
            OperatorCal(2);//乘法
        }

        private void Btnjia_Click(object sender, EventArgs e)
        {
            OperatorCal(1);//加法
        }

        private void Btndy_Click(object sender, EventArgs e)
        {
            OperatorCal(4);//等号
        }

        //给百分号按钮增加操作代码,如果调用了百分号操作,只要将操作数缩小100即可
        private void Btnbf_Click(object sender, EventArgs e)
        {
            //百分比键的click事件过程如下
            //计算并显示{dy}个操作数的百分数
            Txtread.Text = (Double.Parse(Txtread.Text) / 100).ToString();
            LastInput = "Ops";
            NumOps = NumOps + 1;
            DecimaFlag = true;
        }

        //给c按钮增加实现代码,该按钮是用来清空左右操作的
        //该操作的主要任务是初始化运算中用到的各个参数
       
        //c按钮的click事件过程
        //重新设置显示并初始化变量
        private void Btnc_Click(object sender, EventArgs e)
        {
            Txtread.Text = "0.";
            //格式化输出
            Op1 = "";
            //将操作数一清零
            Op2 = "";
            //将操作数二清零
            Form1_Load(this, new System.EventArgs());
            //调用窗体载入时的操作
        }

        //给ce按钮增加操作代码,该按钮左右用来清空错误输入用的
        //与c的不同之处在于本按钮的操作是要保留原来的计算结果,只是清空本次输入而已
        //ce按钮的click事件
        private void Btnce_Click(object sender, EventArgs e)
        {
            //格式化文本框的输出
            Txtread.Text = "0.";
            //设置小数标记为假
            DecimaFlag=false;
            //指示上一次输入的类型
            LastInput="CE";
        }
    }
}

第三部份.修改界面

    在面像对象操作里修改一些Button的属性。

 

大体就这样。 算是个纪念吧。

已投稿到:
郑重声明:资讯 【用C#写简单计算器程序(C#考试作业)_早起的虫m_新浪博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——