注册 登录
编程论坛 VB6论坛

新手求教!关于VB制作计算器的问题

肇励影 发布于 2016-09-05 12:50, 3141 次点击
怎么实现累加(减),累乘(除)的功能?
11 回复
#2
风吹过b2016-09-05 13:31
按下等号时,根据第一次的符号 进行累加(减)或 累乘(除)
累乘(除) 这个真没见过这个功能是怎么样的。

这样需要有一个按钮显示累加值。
AC 负责清当前数据和累加值。
C 负责清当前数据,但不清累加值。
复杂多了。。。。。。

#3
陌上过客2016-09-05 13:48
用循环实现
#4
xiangyue05102016-09-05 16:14
建立几个变脸,分别存放 第一操作数、第二操作数、操作符号。每次点击=,更新一下就好了
#5
肇励影2016-09-05 21:14
回复 4楼 xiangyue0510
能否讲详细一点呢?我刚学VB,不太懂你的意思。
#6
xiangyue05102016-09-06 10:50
下面是一段例子,我现在电脑上没有VB,凭空写的,可能不完善有bug,请自行调试。主要是给你讲思路
另外,我用了控件数组。控件数组请自行百度,其实很简单。要是不会用的话,把对应的代码拆开用就可以
程序代码:

Dim num1, num2 as string   '第一和第二运算数
Dim operater as integer    '运算符
Dim opr as boolean         '存放是否刚按过运算符
Dim cal as boolean         '存放是否已经执行完计算

Sub CommandCE_Click ()

 num1=""

 num2=""

 operater =-1 '初始化,0~3留给运算符,取0~3之外的就可以
opr =false

 cal =false
End sub

'当按下数字键:Index与数字从0到9一一对应
sub CommandNum_Click(Index As Integer)    '若非控件数组,这个函数拆开到各数组键对应的Click事件中
  if opr then   '如果刚按过运算符,输入的应该是新数字,将文本框textnum清空
   textnum.text=""   
   opr =false   '修改变量
  End if


 nums=textnum.text

 textnum.text=cdbl(nums & Index)  '输入的数直接在原数字后
'可能显示或者其他的,还需要一些代码。 酌情增加
End sub

'按下小数点
sub CommandDot_Click()
  if opr or cal  then   '如果刚按过运算符或者=,输入的应该是新数字,将文本框textnum清空
   textnum.text=""   
   opr =false   '修改变量
   cal=false
  End if


 if instr(textnum.text,".") then exit sub  ’ 数字中已经有“.”

 textnum.text=cdbl(nums & ".")  '直接在原数字后加 “.”
'可能显示或者其他的,还需要一些代码。 酌情增加
End sub

'按下运算符: 同样是控件数组,0~3 分别对应+、-、*、/
Sub CommandOpr_click(Index As Integer)

 if not cal And num1<>"" and num2<>"" and (operater >=0 and operater <=3then
    CommandEq_Click   '当前面的运算未完成时, 例如: 1+3  (没有按等号) +2, 先计算1+3
End if

 

 num1=Getnum(text1.text)

 operater =index

 opr =ture

 cal=false   
End sub

'按下=
Sub CommandEQ_Click()

 if operater <0 and operater >3 then exit sub  '没有按下运算符时,不执行


 if opr then exit sub  '按下运算符时,但是未输入第二个运算数字时,不执行

  
  if cal then   '当连续点=时,textnum.text取出的放在num1, 保留原来的num2。 例: 3+1=====  相当于3+1+1+1+1
    num1= getnum(textnum.text)
  else  如果不是连续的点击=, textnum.text取出的放在num2(num1在点击运算符的时候已经读入了)
     num1= getnum(textnum.text)  
  End if
  
  ’执行运算
  if num1<>"" and num2<>"" then
    Select case operater
     case 0
      text.num1=cdbl(num1)+cdbl(num2)
    case 1
      text.num1=cdbl(num1)-cdbl(num2)
    case 2
      text.num1=cdbl(num1)*cdbl(num2)
    case 3
      on error resume next
      text.num1=cdbl(num1)/cdbl(num2)  
      if err then
        err.clear
        msgbox "除数为零,强制重置"
        CommandCE_Click   '强制重置
      End if
   End Select

 End if

 

 cal=true

 
End Sub

Function Getnum(a as string) as String

 if a="" Or a="."then   '将无法转换为数值型的进行处理一下
   Getnum="0"

 Else
   Getnum=a

 End if  
End Function



[此贴子已经被作者于2016-9-6 10:54编辑过]

#7
xiangyue05102016-09-06 10:56
回复 5楼 肇励影
其实这种关系有点乱的情况,你可以按照预计的操作,画一张流程图出来,每一步的操作有什么结果,你本身可以预计的。
画好了之后,就可以把流程图编程if……End if或者 for…… next这些了
#8
肇励影2016-09-06 14:16
回复 6楼 xiangyue0510
谢谢了。
#9
niyongjun2016-09-06 18:25
我也不会,帮楼主顶顶。希望楼主能解决问题。
#10
pengzhanggui2016-09-10 10:00
回复 6楼 xiangyue0510
赞一个,尽心尽责。
#11
yangfrancis2016-09-10 21:29
回复 6楼 xiangyue0510
这个计算器代码很健全呢。很多非法操作都作处理了。
#12
hhy73732016-09-12 20:48
1