WEB开发网
开发学院软件开发C++ 设计的一个计算器类的源代码,很简陋哦,请各位高手... 阅读

设计的一个计算器类的源代码,很简陋哦,请各位高手不要见笑!

 2008-03-08 12:55:45 来源:WEB开发网   
核心提示://名字空间MyCalClass//类名: CalClass//无参的构造函数CalClass()//6个用到的私有变量//void PointClick() 按小数点//string CE() 是计算器复位用的,clear函数//string BackSpace(string Txt) 倒退键,参数是计算过程中
//名字空间MyCalClass
//类名: CalClass
//无参的构造函数CalClass()
//6个用到的私有变量
//void PointClick()  按小数点
//string CE()  是计算器复位用的,clear函数
//string BackSpace(string Txt)  倒退键,参数是计算过程中现在显示的计算结果
//string NumClick(string Txt,int NumKey)  0-9数字键按下的响应,Txt是计算的当前结果,NumKey是按下的数字值
//string OpClick(string Txt,int OpKey) +,-,*,/,=几个键按下时的处理,Txt是计算的当前结果,OpKey是按下操作键的数字IDnamespace MyCalClass
{
   public class CalClass
   {
     PRivate string ResultTxt;   //Get and Show The Result of the TextBox in application
     private bool PointIsDown;   //If the radix point was clicked;
     private double MidResult;   //To Store middle results
     private double Results;   //To store finally result
     private int LastClick;   //To sign last clicking button class,is number(1) or Operator(2)
     private int LastOperator;   //To sign last clicked button of operator is who?0 is Null,1 is +,2 is - ,3 is *,4 is /,5 is =; 

    public CalClass()
     {
       ResultTxt = "0.";
       PointIsDown = false;
       MidResult = 0;
       Results = 0;
       LastClick = 0;
       LastOperator = 0;
     }     public void PointClick()  //按下小数点后的函数处理
     {

       PointIsDown = true;
       return;
     }     public string CE()  //按下CE键,清理计算器
     {
       ResultTxt = "0.";
       MidResult = 0;
       Results = 0;
       PointIsDown = false;
       LastClick = 0;
       LastOperator = 0;
       return ResultTxt;
     }
     public string BackSpace(string Txt)   //后退键按下后的处理函数
     {
       if(LastClick == 2)return Txt;    //假如上次的按键是操作,不是数字,直接返回,不能再退回       if (Txt[Txt.Length - 1] == '.')    //计算器文本里最后一位是小数点时的情况:
       {
         if (PointIsDown == true) { PointIsDown = false; return Txt; }   //假如小数点按下了,则退去小数点
         else
         {
           if (Txt.Length == 2 && Txt[0] != '0') return "0.";   //假如现在只有一位整数,"X."的情况,直接返回"0."
           if (Txt.Length > 2) { ResultTxt = Txt.Remove(Txt.Length - 2, 2) + "."; return ResultTxt; }//否则,把最后一位去掉;
         }
       }
       else//假如最后一们不是小数点,很简单,直接把最后一们去掉就行了!
       {
         ResultTxt = Txt.Remove(Txt.Length - 1, 1);
         return ResultTxt;
       }
       return ResultTxt;//最后还要返回一个东西,程序里要求的,虽然根本运行不到这里!
     }     public string NumClick(string Txt, int NumKey)//按下数字键(0-9)后的处理函数
     {
       //ResultTxt=Txt;
       LastClick = 1;//先标志一下,最后一次按键是"数字键"
       if (Txt[Txt.Length - 1] == '.')//最后一位是小数点的情况:
       {
         if (PointIsDown == true)//小数点已经被按下
         {
           ResultTxt = Txt + NumKey.ToString();//直接把按下的数字加到计算结果字符串上
         }
         else//小数点没被按下的话
         {
           if (Txt.Length == 2 && Txt[0] == '0')//假如现在的数值是0.的话,则把现在的数值直接变成按下的数字
           {
             ResultTxt = Txt.Replace("0", NumKey.ToString());
           }
           else
           {
             ResultTxt = Txt.Insert(Txt.Length - 2, NumKey.ToString());否则,就在小数点前加上当前按下的数字
           }
         }
       }
       else//最后一位不是小数点的情况:直接把数字加到最后
       {
         ResultTxt = Txt + NumKey.ToString();
       }
       return ResultTxt;
     }
     public string OpClick(string Txt, int OpKey)//运算操作键按下的处理
     {
       bool Haspoint=false;//用来标志已有的运算结果中,是否有小数点

       PointIsDown = false;//按下任意运算键,小数点都设为未按下状态
       if (LastClick == 2 && LastOperator != 5)//假如上一次按下的是操作运算键,并且不是等于号,则把上一次按下的内容覆盖,然后直接返回
       {
         LastClick = 2;
         LastOperator = OpKey;
         return Txt;
       }
       Results=double.Parse(Txt);//把现有的计算结果从string转为double型       switch (LastOperator)//根据上一次按下的操作按键来确定这次要做的运算
       {
         case 0:
           MidResult=Results;//假如从未按过运算符键,则把当前的数值做为第一操作数
           break;
         //以下1-4是计算加,减,乘,除运算
         case 1:
           Results += MidResult;
           break;
         case 2:
           Results = MidResult - Results;
           break;
         case 3:
           Results *= MidResult;
           break;
         case 4:
           if (Results == 0.0) { throw new System.Exception("Can Div with 0!"); }//除数为零的异常
           Results = MidResult / Results;
           break;
         case 5:
          MidResult=Results;//假如上一次按下等于号,同样要把当前的数值做为第一操作数
           break;
       }
       ResultTxt=Results.ToString();
       for(int i=0;i<ResultTxt.Length;i++)//整数计算时,最后结尾会没有小数点,这里要加上计算结果里有没有小数点的标志
       {
         if(ResultTxt[i]=='.'){HasPoint=true;break;}
       }
       if (HasPoint) return ResultTxt;
       else return ResultTxt + ".";
     }
   }
}

Tags:设计 一个 计算器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接