| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2459 人关注过本帖
标题:[求助]用VB做计算器问题
只看楼主 加入收藏
suzhou
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-28
收藏
 问题点数:0 回复次数:9 
[求助]用VB做计算器问题

做个东西:实现一个简单的计算器,具体要求如下

1.界面参照windows计算器,(计算器打开方式,开始菜单->运行->输入calc)
2.只能有一个文本框,即处理输入,也处理输出
3.能够处理四种进制的自由转换,使用单选框控件实现,并且用控件数组
4.所有的数字键按钮控件,使用对象数组。
5.要求加减乘除运算
6.控制用户输入范围,例如非16进制时不能输入ABCDEF(事实上,文本框,除了接受按钮操作外,也可以接受用户键盘输入,如果能够控制用户键盘输入范围,则可以进一步加分。例如,虽然在10进制时,ABCDEF按钮disable,但是用户仍然可以从键盘输入这些字母,因此有必要控制。控制方法可以考虑使用ascii函数)
7.除法不能以0为除数
具体实现算法,代码过程不做要求

搜索更多相关主题的帖子: 计算器 windows 进制 控件 按钮 
2006-05-28 14:24
maui2000
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:0
注 册:2006-5-23
收藏
得分:0 
代码会很长哦
我原先写了个~~
2006-05-28 14:46
suzhou
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-28
收藏
得分:0 
以下是引用maui2000在2006-5-28 14:46:00的发言:
代码会很长哦
我原先写了个~~

贴上学学?

2006-05-28 14:52
maui2000
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:0
注 册:2006-5-23
收藏
得分:0 

'程序

Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0 To 9 '如果点击了数字键
'***************************************
'*** Str函数是转换字符串 ***
'*** RTrim函数是去字符串右侧空格 ***
'*** LTrim函数是去字符串左侧空格 ***
'***************************************
If FirstNum = True Then
If Index = 0 Then
strnum1 = "0."
FirstNum = False
Else
strnum1 = Str(Index)
FirstNum = False
End If
Else
strnum1 = RTrim(strnum1) + LTrim(Str(Index))
End If
Text1.Text = strnum1
Case 10 '如果点击了小数点
'**********************************
'*** InStr函数是比较字符串 ***
'**********************************
If InStr(Text1.Text, ".") = 0 Then
If FirstNum = True Then
strnum1 = "0."
FirstNum = False
Else
strnum1 = strnum1 + "."
End If
End If
Text1.Text = strnum1
Case 11 To 14 '如果点击了算数运算符
FirstNum = True
'如果点击了等于号
If Epual = True Then
'调用自定义的reckon计算函数
Text1.Text = Reckon
'如果没点击等于号
Else
Epual = True
strnum2 = strnum1
strnum1 = ""
End If
RunFlag = Index - 10
Case 15 '如果点击了等号
If Epual = False Then
FirstNum = True
Text1.Text = myval(strnum1)
Else
Text1.Text = myval(Reckon)
Epual = False
End If
Case 16 '如果点击了清除
num1 = 0
num2 = 0
strnum1 = ""
strnum2 = ""
FirstNum = True
Epual = False
RunFlag = 0
Text1.Text = "0"
Case 17 '如果点击了正负号
'调用正、负号转换过程
SignInterconvert
Text1.Text = strnum1
Case 18
Unload Me
Case 19 '如果点击了退格
strnum1 = Text1.Text
'调用删除过程
Delect
Text1.Text = strnum1
End Select
End Sub


Private Sub Command1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
'Print KeyCode
Select Case KeyCode
Case 96 To 105 '如果点击了数字键
Call Command1_Click(KeyCode - 96)
Case 110 '如果点击了小数点
Call Command1_Click(10)
Case 107 '如果点击了"+"算数运算符
Call Command1_Click(11)
Case 109 '如果点击了"-"算数运算符
Call Command1_Click(12)
Case 106 '如果点击了"*"算数运算符
Call Command1_Click(13)
Case 111 '如果点击了"/"算数运算符
Call Command1_Click(14)
Case 187 '如果点击了等号
Call Command1_Click(15)
Case 8 '如果点击了清除
Call Command1_Click(19)
Case 27
Unload Me
Case 8 '如果点击了退格
Call Command1_Click(19)
End Select
End Sub

Private Sub Form_Load() '窗体激活
Picture1.Picture = LoadPicture(App.Path & "\CALC.ico")
num1 = 0
num2 = 0
strnum1 = ""
strnum2 = ""
FirstNum = True
Epual = False '等号为假
RunFlag = 0 '运算符为0
Text1.Text = "0"
End Sub



'模块
Public FirstNum As Boolean '判断是否以数字开头
Public Epual As Boolean '判断是否点击了运算符
Public RunFlag As Double '存放运算符索引
Public sum As Double


Sub Delect() '自定义退格过程
If Len(Trim(strnum1)) = 4 And InStr(strnum1, "-0.") = 1 Then
strnum1 = "0"
FirstNum = True
ElseIf Len(Trim(strnum1)) = 3 And InStr(strnum1, "0.") = 1 Then
strnum1 = "0"
FirstNum = True
ElseIf Len(Trim(strnum1)) = 2 And InStr(strnum1, "-") = 1 Then
strnum1 = "0"
FirstNum = True
End If
If Len(Trim(strnum1)) > 1 Then
'如果退格遇到右起第二位是小数点时退两格
If Mid(strnum1, Len(strnum1) - 1, 1) = "." Then
strnum1 = Left(strnum1, Len(strnum1) - 2)
Else
'Left函数返回从左边取指定个数的字符
strnum1 = Left(strnum1, Len(strnum1) - 1)
End If
Else
strnum1 = "0"
FirstNum = True
End If
End Sub


'自定义正、负号互换过程
Sub SignInterconvert()
'***********************************************
'*** Len函数返回字符串的长度 ***
'*** Sgn函数返回一个数的符号值 ***
'*** Right函数返回从右边取指定个数的字符 ***
'***********************************************
If Sgn(Val(strnum1)) = 1 Then
strnum1 = myval(0 - LTrim(strnum1))
ElseIf Sgn(Val(strnum1)) = -1 Then
strnum1 = Right(strnum1, Len(strnum1) - 1)
Else
strnum1 = "0"
End If
End Sub


'自定义计算结果的函数
Function Reckon()

Dim strnum As String
num1 = myval(strnum2)
num2 = myval(strnum1)
Select Case RunFlag
Case 1
sum = num1 + num2
Verdict
Case 2
sum = num1 - num2
Verdict
Case 3
On Error GoTo err1
sum = num1 * num2
Verdict
Case 4
On Error GoTo err1
If num1 / num2 < 1 And num1 / num2 > 0 Then
'If Left(LTrim(Str(num1 / num2)), 1) = "." Then
strnum = "0" & num1 / num2
sum = myval(Trim(strnum))
ElseIf num1 / num2 = 0 Then
sum = 0
FirstNum = True
Else
sum = num1 / num2
End If
End Select
strnum2 = Str(sum)
strnum1 = strnum2
Reckon = strnum1
err1:
If Err.Number = 11 Then
sum = 0
FirstNum = True
End If
'Resume Next
End Function


Sub Verdict()
If sum = 0 Then
FirstNum = True
End If
End Sub

'数字转换文本函数
Public Function myval(ByVal tt11 As Double) As String
Dim tt As String
tt = Trim(Str(tt11))

If InStr(1, tt, ".") > 0 Then
If Left(tt, 1) = "." Then
tt = "0" & tt
End If
End If
If InStr(1, tt, "-.") > 0 Then
tt = "-0." & Right(tt, Len(tt) - 2)
End If
myval = tt
End Function

2006-05-28 15:04
maui2000
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:0
注 册:2006-5-23
收藏
得分:0 

不好意思
忘记了,这个程序写的太早了
当时偷懒,只写了加减乘除

2006-05-28 15:05
suzhou
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-28
收藏
得分:0 
还是麻烦你再想想加入进制转换怎么做,我是VB盲啊,
2006-05-28 15:29
maui2000
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:0
注 册:2006-5-23
收藏
得分:0 

这个只是涉及到算法问题吧?
和VB没太大关系`~~

我整个框架都有了
你只加几个算法的运算问题而已
不难了吧?

[此贴子已经被作者于2006-5-28 21:10:17编辑过]

2006-05-28 20:59
suzhou
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-28
收藏
得分:0 
我正是不明白那算法之类的东西啊
2006-05-29 23:19
maui2000
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:0
注 册:2006-5-23
收藏
得分:0 

进制转换用VB的函数啊


VB中涉及到的数据进制之间的转换函数主要有如下几个:
Hex 函数: 返回代表十六进制数值的 String;
Oct 函数: 返回代表一数值的八进制值的Variant (String);
Cint函数: 强制将一个表达式转换成-32,768 至 32,767的整型;
CLng函数: 强制将一个表达式转换成-2,147,483,648 至 2,147,483,647的长整型;
Cdec函数: 强制将一个表达式转换成Decimal 数据类型;
CDbl函数: 强制将一个表达式转换成Double 数据类型;

2006-05-30 10:06
IOLY
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-12-16
收藏
得分:0 
不错呢
2006-06-21 00:13
快速回复:[求助]用VB做计算器问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047335 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved