还是做得不太好,多多指教啊,关注这方面的
初始化:显示屏数字【dataout.Caption】为0
1.第一个因数的提取
当是第一次点击数字时(程序初始化时,结果已经计算出准备下一次时,清零键按下时)
--【dataout.Caption】=””
--【dataout.Caption】=dataout.Caption& Index
解释:此处的目的是:点击后初始的显示屏数字变为点击的数字,之后点击的进行拼接
当不是第一次点击时
--【dataout.Caption】=dataout.Caption& Index
需要考虑的问题是:此处计算机工作标准resflag是未完成的
此出预先解释下,数字0-9,符号+-*/是两个数字数组按钮控制的,关于如何做出来,以数字0-9按钮为例:
这 10 个按钮使用的名称都是num,
只是 Index 属性不同,就好象一个数组,创立一组按钮的方法是,先在窗体上建
立一个按钮(num),然后在 num上击鼠标右键,选择复制(Copy),
然后在窗体上任意部位击右键,选择粘贴(Paste),系统会提示是否创建控件组,
选择“是”,重复上面步骤,直至创立 10个按钮为止。
2关于符号的提取
符号数组sign对应的每一个元素都有唯一的Index
当触发时,完成两件事:
1.情况:需考虑【dataout.Caption】的非法性,
行为:将【dataout.Caption】赋值给全局变量Num1,需要字符串到数值的转换,有 value,clng,cint各种。考虑到小数的计算,使用了value
办法:【dataout.Caption】!=“”
2.情况:需考虑当+-*/点击多次时
行为:将每个符号对应的index赋值给全局变量signope(rate)
办法:当点击多次时,直接不管他,使用exit sub
3.关于结果的结算
利用”=”按钮的点击操作
3.1对第二个因数的取值
首先解释为什么上图中为什么在将第一个因数提取后将【dataout.Caption】清空?
因为这个版本的计算器是利用显示屏的字符串来转换为浮点型数字来确定的,如果为了 效果将+-*/(其他符号如(),sin,con,tan等)显示在屏上的话,第二个因数很难提取, 迄今还未想好,(大神看到的话,提示下,谢啦)不得不用这种方法来提取
Eg: Num2=val(dataout.Caption);
3.2要考虑该操作是在计算状态下的操作,否则结果已经计算完成,当你不停点击”=” 按钮,内存中的因数:num1和Num2仍不停操作
解决办法:利用resflag标志位:
If not resflag then
计算
Else
显示屏显示上一个计算结果
3.2根据全局变量符号标志来确定+-*/操作
在符号按钮数组中,利用Index(是不是和上2类似)确定,使用VB中的select语句。
问题1:考虑分母为0的情况
办法:在是除法且分母为零时,特别输出为“无穷”
问题2:当只用一个因数,却按下一个符号时,令显示屏显示第一个因数
当直接按下=按钮,令显示屏显示上一个结果
注意的地方:结果计算完成后、清零按钮后,就要像程序刚启动时思考了:
计算完成后的状态改变标志位:计算完成标志resflag清0,小数点标志清0,第一个数标志清0
额外按钮,直接贴代码吧,晕了
Backspace按钮:
清零C按钮
小数点按钮.
避免多次出现小数点
原文地址:http://blog.csdn.net/u013457167/article/details/45418837