我的第一个winform程序:简单的计算器(4)

接上篇
  在编写运算符按钮事件时,我很头痛什么时候把前面计算的数转到temp里,后来就列了个表,把各种情况对应的temp,left,right是否为empty罗列出来就很清楚了。
 
  下面是等号按钮事件
  等号其实和加减号差不多,就是要把所有的结果都计算出来。

 1
 2        public static void EqualClick()                                //等号按钮事件
 3        {
 4            if(left==string.Empty)
 5            {
 6                left=sign+right;
 7                right=string.Empty;
 8                n=0;
 9            }

10            else
11            {
12                left=Calculate(tempNum,Calculate(left,sign+right,operators),tempOperator);
13                tempNum=string.Empty;
14                tempOperator=string.Empty;
15                right=string.Empty;
16                n=0;
17            }

18            if(left.Length>MaxLength)
19                throw new CalculationExcption("计算结果越界",true);
20        }


  至此,计算器主要的组件就完成了,下面处理异常。
  我自定义了一个异常类MyExcption然后从中派生出2个异常类,一个用来处理由计算器本身设置产生的异常,比如计算结果的位数超过了所允许的范围,这个异常类是CalculationExcption;另一个是由数学运算所导致的异常,比如被除数是0,这个异常类是MathExcption,这样,在捕获异常时,只要使用MyExcption就可以利用动态捆绑来灵活处理各种情况。
 1    public abstract class MyExcption:ApplicationException            //自定义异常基类,因为两派生异常类及其相似
 2    {                                                                //故添加一抽象基类以使用动态捆绑,且层次更分明
 3        bool temp;
 4
 5        public bool Temp
 6        {
 7            get
 8            {return temp;}
 9        }

10        public MyExcption():base("抱歉,程序出现未知问题")
11        {
12            temp=true;
13        }

14        public MyExcption(string message,bool temp):base(message)
15        {
16            this.temp=temp;
17        }

18        public abstract void Information();
19    }

20
21
22    public class CalculationExcption:MyExcption                        //由计算器设置所导致的异常
23    {
24        public CalculationExcption():base()
25        {}
26        public CalculationExcption(string message,bool temp):base(message,temp)
27        {}
28        public override void Information()
29        {
30            if(this.Temp)
31                MessageBox.Show(this.Message+"\n已输入的内容将全部清空","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);
32            else
33                MessageBox.Show(this.Message,"警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);
34        }

35    }

36
37
38    public class MathExcption:MyExcption                            //由运算符的性质所导致的异常,注意,没有定义默认构造函数
39    {
40        public MathExcption(string message):base(message,true)
41        {}
42        public MathExcption(string message,bool temp):base(message,temp)
43        {}
44        public override void Information()
45        {
46            if(this.Temp)
47                MessageBox.Show(this.Message+",已输入的内容将全部清空!","非法的函数参数",MessageBoxButtons.OK,MessageBoxIcon.Error);
48            else
49                MessageBox.Show(this.Message,"非法的函数参数",MessageBoxButtons.OK,MessageBoxIcon.Error);
50        }

51    }


这样,计算器就差不多完成了。这只能实现最基本的功能,随着以后的学习,我将逐渐把它完善。

完。
posted on 2005-05-06 23:16  天蓝  阅读(2809)  评论(1编辑  收藏  举报