四、主要技术问题的描述:
① 连续输入新操作数的若干个数字时,应采用
txtDisplay.Text =txtDisplay.Text & Format$(Index)
txtDisplay.Text = txtDisplay.Text & cmdNumber(Index).Caption
txtDisplay.Text = txtDisplay.Text & Index
② 对于正整数运算单击操作符会结束本操作数的输入,需设置一个逻辑变量,使其逻辑值为true ,准备新操作数的输入。
③ 当一个对象(本题指文本框)具有焦点时,在键盘上按键操作触发下面事件过程:
Private Sub Form_KeyPress(KeyAscii As Integer),在该过程中调用
txtDisplay_KeyPress KeyAscii
根据KeyAscii对应的字符,调用相应过程。
④ 当用户在拥有焦点的对象上释放键时触发下面事件过程:
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)在该过程中调用txtDisplay_KeyUp KeyCode, Shift
KeyUp 事件可应用于大多数键,但最经常地还是应用于功能键、组合键、区别数字小键盘和常规数字键等。
根据KeyCode代码对应的常数调用对应过程。 KeyCode代码常数可以在vb帮助系统或vb对象浏览器中的对象库中查到。
① 在窗体上分别创建用于0-9个操作数字和+、-、*、/运算符号的控件数组,并创建用于显示操作数、运算结果的文本框及其它控件。
② 单击数字控件数组元素时,先判断参加运算的数是否是新的操作数,用以确定单击数字键后数字在文本框中的显示方式,如果是新的操作数如234,那么连续单击2,3,4数字键,在文本框中会显示234 。
③ 单击操作符,结束第一个操作数的输入,同时把第一个操作数存储到一个全局变量中(如:StoredValue),记下操作符的index值,并做好开始输入下一个操作数的准备。
④ 单击等号(=),结束第二个操作数的输入并存储,根据上面记下的index值选择操作符计算。
⑤ 如果用键盘操作运算,应根据所按键对应的KeyAscii值转换成对应的字符来判断执行什么操作,确定调用哪个事件过程。最后完成运算。
基本要求达到后,进行创新设计:实现小数、负数的①要求用Visual Basic对象的思想来完成程序的设计。
②在设计程序的过程中,要求会使用Command 命令按钮、命令按钮控件数组、TextBox文本框等基本控件。
③要求在程序中能够运用结构化程序的基本结构,如if-elseif、Select Case- End Select、for– next、do -loop等)。
④要求在程序中即能用鼠标单击相应的控件数组元素进行正整数的加、减、乘、除运算,又可以在键盘上输入相应数字和运算符号实现运算。
⑤程序界面布局合理、美观。
计算。
三、设计方法和基本原理:
1. 问题描述:
① 在窗体上单击标有数字、运算符号、等号的控件元素会在文本框显示出计算结果。
② 输入键盘上的数字、运算符号、等号同样也会计算出运算结果。
Command1
Index 0――16
Index 0――9 Caption=“0”-“9”
Index 10 Caption=“.”
Index 11Caption=“=”
Index 12 Caption=“+”
Index 13 Caption=“-”
Index 14 Caption=“×”
Index 15 Caption=“÷”
Index 16 Caption=“清除”
先在General里声明窗体级全局变量:
Dim Num1, Num2 As Single
Dim StrNum1, StrNum2 As String
Dim FirstNum As Boolean '判断是否是数字开头
在Form_Load事件里给变量初赋值:
Num1 = 0
Num2 = 0
StrNum1 = ""
StrNum2 = ""
FirstNum = True
因为17个按钮使用的是同一事件,所以我们用一个Select Case语句区分各个按钮,双击任意按钮输入代码:
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0 To 9
If FirstNum Then
StrNum1 = Str(Index)’实型转字符型
FirstNum = False’初赋值为假
Else’非初赋值
StrNum1 = StrNum1 + Str(Index)
End If
Text1.Text = StrNum1’显示
<还有其他语句,等待插入>
End Select
End Sub
在General里声明新的变量:
Dim PointFlag As Boolean '判断是否已有小数点
我们知道小数点只能输入一次,一个数据中不能有多个小数点存在,所以需要一个布尔变量做判断。
在Form_Load里进行初赋值:
PointFlag = False
在Command的单击事件里接着上面输入新的代码:
Case 10
If Not PointFlag Then’如果没有小数点
If FirstNum Then’如果是第一个字符
StrNum1 = "0."
FirstNum = False
Else
StrNum1 = StrNum1 + "."
End If
Else’已有小数点
Exit Sub’则退出单击事件
End If
PointFlag = True
Text1.Text = StrNum1
第四章 按钮(二)
下面会复杂一些,我们先跳过等号,而来处理四则运算:
先在General里声明新变量:
Dim Runsign As Integer '储存运算符号
Dim SignFlag As Boolean '判断是否已有运算符号
然后在Form_Load中进行初赋值:
Runsign = 0
SignFlag = False
在接下的Command1_Click中继续输入代码:
Case 12 To 15
FirstNum = True’使下一次可以输入新数据
PointFlag = False
'还原标记值
If SignFlag Then’前面已有运算符未运算
Call Run
Else
SignFlag = True
StrNum2 = StrNum1’把字符串1复制给字符串2
StrNum1 = ""’字符串1清空
End If
Runsign = Index - 11 ‘储存键入的运算符
里面运算的部分我用了一个过程,是因为在按下等号时还会调用到运算过程,这样可以减少代码的输入,也使程序便于浏览。建立过程(Procedure),可以在General部分直接输入,也可以通过菜单里的“Add Procedure”添加。Run的代码如下:
Sub Run()
Num1 = Val(StrNum2)
Num2 = Val(StrNum1)
Select Case Runsign
Case 1’加
equal = Num1 + Num2
Case 2’减
equal = Num1 - Num2
Case 3’乘
equal = Num1 * Num2
Case 4’除
equal = Num1 / Num2
End Select
StrNum2 = Str(equal)
StrNum1 = StrNum2
Text1.Text = StrNum2
End Sub
下面是其余的代码:(在Command1_Click事件里,接着写)
Case 11
If Not SignFlag Then
Text1.Text = StrNum1
equal = Val(StrNum1)
FirstNum = True
PointFlag = False
Else
Call Run
SignFlag = False
End If
Case Else’清除按钮
Call ClearData
里面又用到了一个ClearData过程,实际上就是Form_Load里的变量初赋值,代码如下:
Sub ClearData()
Num1 = 0
Num2 = 0
StrNum1 = ""
StrNum2 = ""
FirstNum = True
PointFlag = False
Runsign = 0
SignFlag = False
Text1.Text = "0."
End Sub