这是一个计算器的简单实现

  1using System;
  2using System.Drawing;
  3using System.Collections;
  4using System.ComponentModel;
  5using System.Windows.Forms;
  6using System.Data;
  7
  8namespace Calc
  9{
 10    /// <summary>
 11    /// 这是一个计算器的简单实现。
 12    /// </summary>

 13    public class CalcForm : System.Windows.Forms.Form
 14    {
 15        private System.Windows.Forms.Button btn_0;
 16        private System.Windows.Forms.Button btn_1;
 17        private System.Windows.Forms.Button btn_2;
 18        private System.Windows.Forms.Button btn_3;
 19        private System.Windows.Forms.Button btn_4;
 20        private System.Windows.Forms.Button btn_5;
 21        private System.Windows.Forms.Button btn_6;
 22        private System.Windows.Forms.Button btn_7;
 23        private System.Windows.Forms.Button btn_8;
 24        private System.Windows.Forms.Button btn_9;
 25        private System.Windows.Forms.Button btn_add;
 26        private System.Windows.Forms.Button btn_sub;
 27        private System.Windows.Forms.Button btn_mul;
 28        private System.Windows.Forms.Button btn_div;
 29        private System.Windows.Forms.Button btn_sqrt;
 30        private System.Windows.Forms.Button btn_sign;
 31        private System.Windows.Forms.Button btn_equ;
 32        private System.Windows.Forms.Button btn_dot;
 33        private System.Windows.Forms.Button btn_rev;
 34        private System.Windows.Forms.TextBox txtShow;
 35        private System.Windows.Forms.Button btn_sqr;
 36        /// <summary>
 37        /// 必需的设计器变量。
 38        /// </summary>

 39        private System.ComponentModel.Container components = null;
 40
 41        public CalcForm()
 42        {
 43            //
 44            // Windows 窗体设计器支持所必需的
 45            //
 46            InitializeComponent();
 47
 48            //
 49            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
 50            //
 51        }

 52
 53        /// <summary>
 54        /// 清理所有正在使用的资源。
 55        /// </summary>

 56        protected override void Dispose( bool disposing )
 57        {
 58            if( disposing )
 59            {
 60                if (components != null
 61                {
 62                    components.Dispose();
 63                }

 64            }

 65            base.Dispose( disposing );
 66        }

 67
 68        Windows Form Designer generated code
333
334        public const int NULL = 0;    // 定义操作码
335        public const int ADD = 1;
336        public const int SUB = 2;
337        public const int MUL = 3;
338        public const int DIV = 4;
339        public const int SQR = 5;
340        public const int SQRT = 6;
341        public const int NODOT  = 0;    // 定义是否点击了小数点
342        public const int HASDOT = 1;
343        private double res = 0;        // 记录结果数
344        private double tmp = 0;        // 当前输入的操作数
345        private int opt = NULL;        // 记录操作码
346        private int dot = NODOT;    // 记录是否点击了小数点
347        private int num = 0;        // 记录输入操作数的个数
348        private int dotnum = 0;        // 记录小数点部分的个数
349        /// <summary>
350        /// 应用程序的主入口点。
351        /// </summary>

352        [STAThread]
353        static void Main() 
354        {
355            Application.Run(new CalcForm());
356        }

357
358        /// <summary>
359        /// 当点击一个数字按钮的时候,需要进行判断,如果没有点击
360        /// 小数点,那么就把原来的数值扩大10倍后再加上当前的数值,
361        /// 如果点击了小数点,那么就将当前的数值除以一个权数,再
362        /// 加上原来的数值,得到新的数值。
363        /// </summary>
364        /// <param name="sender"></param>
365        /// <param name="e"></param>

366        private void btn_0_Click(object sender, System.EventArgs e)
367        {
368            System.Windows.Forms.Button btnTmp;
369            double i;
370
371            btnTmp = sender as System.Windows.Forms.Button;
372            if (btnTmp != null)
373            {
374                if (dot == NODOT)
375                {
376                    // 没有点击小数点
377                    i = double.Parse(btnTmp.Tag.ToString());
378                    tmp = tmp * 10 + i;
379                    txtShow.Text = tmp.ToString();
380                }

381                else
382                {
383                    // 点击了小数点
384                    dotnum++;
385                    // 生成小数部分的新的数值
386                    i = double.Parse(btnTmp.Tag.ToString()) / System.Math.Pow(10,dotnum);
387                    tmp = tmp + i;
388                    txtShow.Text = tmp.ToString();
389                }

390            }

391        }

392
393        private void btn_equ_Click(object sender, System.EventArgs e)
394        {
395            // 生成结果
396            if (num == 0)
397            {
398                res = 0;
399                tmp = 0;
400                txtShow.Text = res.ToString();
401                return;
402            }

403            switch (opt)
404            {
405                    // 加法
406                case ADD:
407                    res = res + tmp;
408                    break;
409                    // 减法
410                case SUB:
411                    res = res - tmp;
412                    break;
413                    // 乘法
414                case MUL:
415                    res = res * tmp;
416                    break;
417                    // 除法
418                case DIV:
419                    res = res / tmp;
420                    break;
421                    // 平方
422                case SQR:
423                    res = tmp * tmp;
424                    break;
425                    // 平方根
426                case SQRT:
427                    res = System.Math.Sqrt(tmp);
428                    break;
429                default:
430                    return;
431            }

432            txtShow.Text = res.ToString();
433            opt = NULL;
434            res = 0;
435            num = 0;
436        }

437
438        private void btn_div_Click(object sender, System.EventArgs e)
439        {
440            // 除法运算
441            opt = DIV;
442            if (num != 0)
443            {
444                if (tmp != 0)
445                    res = res / tmp;
446            }

447            else
448                res = tmp;
449            num++;
450            tmp = 0;
451            txtShow.Text = res.ToString();
452        }

453
454        private void btn_mul_Click(object sender, System.EventArgs e)
455        {
456            // 乘法运算
457            opt = MUL;
458            if (num != 0)
459                res = res * tmp;
460            else
461                res = tmp;
462            num++;
463            tmp = 0;
464            txtShow.Text = res.ToString();
465        }

466
467        private void btn_sub_Click(object sender, System.EventArgs e)
468        {
469            // 减法运算
470            opt = SUB;
471            if (num != 0)
472                res = res - tmp;
473            else
474                res = tmp;
475            num++;
476            tmp = 0;
477            txtShow.Text = res.ToString();
478        }

479
480        private void btn_add_Click(object sender, System.EventArgs e)
481        {
482            // 加法运算
483            opt = ADD;
484            if (num != 0)
485                res = res + tmp;
486            else
487                res = tmp;
488            num++;
489            tmp = 0;
490            txtShow.Text = res.ToString();
491        }

492
493        private void btn_sqrt_Click(object sender, System.EventArgs e)
494        {
495            // 开方运算
496            if (tmp > 0)
497            {
498                tmp = Math.Sqrt(tmp);
499                txtShow.Text = tmp.ToString();
500            }

501        }

502
503        private void btn_sqr_Click(object sender, System.EventArgs e)
504        {
505            // 平方运算
506            tmp = tmp * tmp;
507            txtShow.Text = tmp.ToString();
508        }

509
510        private void btn_rev_Click(object sender, System.EventArgs e)
511        {
512            // 求倒数运算
513            tmp = 1 / tmp;
514            txtShow.Text = tmp.ToString();
515        }

516
517        private void btn_dot_Click(object sender, System.EventArgs e)
518        {
519            // 点击了小数点
520            dot = HASDOT;
521            dotnum = 0;
522        }

523
524        private void btn_sign_Click(object sender, System.EventArgs e)
525        {
526            // 点击了符号运算
527            tmp = -tmp;
528            txtShow.Text = tmp.ToString();
529        }

530    }

531}

532
posted on 2007-08-21 14:57  Gofficer  阅读(183)  评论(0)    收藏  举报