毕业设计论文:基于VB的计算器的设计与实现.doc
《毕业设计论文:基于VB的计算器的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计论文:基于VB的计算器的设计与实现.doc(33页珍藏版)》请在冰点文库上搜索。
摘要
我用VB制作这个程序的简单计算器,它包括一个标准的计算器和一个科学计算器。
它可以实现简单的加减乘除四则运算,数字的平方、平方根,正弦、余弦、正切,倒数、指数函数、对数函数,角度、弧度、梯度的转换,以及各进制的相互转换。
而且它的功能还有退格,清除当前数据,清除所有数据,复制数据,粘贴数据。
在这个计算器的程序中,我用到了单行选择语句If…Then…Else…,
块语句if…then…endif,If语句的嵌套,多条件选择语句SelectCase,而且还用到了按钮、文本框、框架、单选按钮控件,菜单的设计。
在此报告中我重点叙述了计算机的各个功能及用法。
特别是进制间的转换和数字与运算符之间的联系。
。
虽然描述的不太完整,但我会尽力使用系统结构图,划分多个模块,让大家明白我设计的运算器的功能的。
目录
第一章、程序概述 -3-
1.1、创作目的 -3-
1.2、基本功能 -3-
第二章、总体设计 -4-
2.1、程序轮廓图 -4-
第三章、程序代码 -6-
3.1、计算器界面 -6-
3.1.1、标准型计算器:
-6-
3.1.2、科学型计算器:
-7-
3.2、标准计算器代码 -8-
3.2.1、变量的定义及初始化 -8-
3.2.2、简单的运算 -8-
3.2.3、退格、清除、清空 -10-
3.2.4、复制、粘贴 -11-
3.2.5、两窗体的切换 -12-
3.3、科学型计算器的代码 -12-
3.3.1、变量的定义及初始化 -12-
3.3.2、简单的运算 -13-
3.3.3、正弦、余弦、正切 -15-
3.3.4、平方、立方、多次方 -15-
3.3.5、指数函数、对数函数 -16-
3.3.6、倒数、平方根 -16-
3.3.7、角度、弧度、梯度 -17-
3.3.8、各进制转换 -18-
3.3.9、退格、清除、清空 -27-
3.3.10、复制、粘贴 -28-
3.3.11、两窗体的切换 -29-
第四章、总结 -30-
4.1、对学习者知识的要求:
-30-
4.2、学习程序设计基本要求:
-30-
4.3、程序设计方法概述 -31-
4.4、如何学好VB -31-
4.5、不足之处 -32-
参考文献 -33-
第一章、程序概述
1.1、创作目的
本程序的目标是建立一套可以计算数的平方,平方根,倒数,正弦,余弦,正切,指数函数,对数函数,角度、弧度、梯度相互转换和数字的
进制转换的计算器系统,系统可以帮助我们更快的计算,更好的学习,更
好的节省时间。
还能避免出现一些不必要的计算错误。
1.2、基本功能
1)能够完成整型和实型常数的四则运算。
2)能够进行如下函数的求值运算,包括sin,cos,tan,exp,log,sqr,1/x,及和园周率π。
3)能够实现角度、弧度、梯度的相互转换。
4)能够实现的进制的相互转换。
5)输出时的格式:
结果为整数时不显示小数点,结果为1以下小数时要显示前导0。
6)分门别类采用控件数组,以减少事件处理的复杂程度,使程序简洁高效。
7)能够实现退格键、清除、清空功能。
8)出错处理:
操作数如果不符合数学上的定义,应该给出错误信息。
例:
0做除数,负数或0做真数等情况
第二章、总体设计
2.1、程序轮廓图
输入数字
平方根
平方
余弦
立方
正弦
选择转换的进制
转换
退格
清除说有数据
清除当前数据
正切
倒数
指数函数
对数函数
角度、弧度、梯度的转换
简单四则运算
结果
图一
第三章、程序代码
3.1、计算器界面
3.1.1、标准型计算器:
图二
3.1.2、科学型计算器:
图三
3.2、标准计算器代码
3.2.1、变量的定义及初始化
DimdflagAsInteger
DimiAsInteger
DimopnreAsInteger
DimprevAsDouble
DimoflagAsInteger
DimindAsInteger
DimXAsDouble
DimYAsDouble
PrivateSubForm_Load()
prev=0
oflag=0
ind=0
opnre=0
Clipboard.Clear
ang=3.14/180
EndSub
3.2.2、简单的运算
PrivateSubCommand1_Click(IndexAsInteger)
Ifind=4Then
prev=0
Text1.Text=""
ind=0
EndIf
opnre=0
Ifoflag=0Then
Text1.Text=""
EndIf
oflag=1
IfCommand1(Index).Caption<>"."Then
IfText1.Text<>"0"Then
Text1.Text=Text1.Text&Command1(Index).Caption
Else
Text1.Text=""&Command1(Index).Caption
EndIf
Else
Ifdflag=0Then
Text1.Text=Text1.Text&"."
dflag=1
Else
MsgBox("Error")
EndIf
EndIf
EndSub
PrivateSubCommand2_Click(IndexAsInteger)
Ifopnre=0OrIndex=4Then
Ifind=0Then
prev=prev+Val(Text1.Text)
ElseIfind=1Then
prev=prev-Val(Text1.Text)
ElseIfind=2Then
IfVal(Text1.Text)=0Then
MsgBox("SORRYDIVIDEZERO")
ExitSub
Else
prev=prev/Val(Text1.Text)
EndIf
ElseIfind=3Then
prev=prev*Val(Text1.Text)
EndIf
Text1.Text=Str(prev)
oflag=0
EndIf
opnre=1
ind=Index
dflag=0
EndSub
3.2.3、退格、清除、清空
PrivateSubCommand3_Click()
DimlengthAsInteger
length=Len(Text1.Text)
Iflength=1Then
IfText1.Text<>"0"Then
Text1.Text="0"
EndIf
Else
Text1.Text=Left(Text1.Text,length-1)
EndIf
flag=True
EndSub
PrivateSubCommand4_Click()
dflag=0
prev=0
oflag=0
ind=0
opnre=0
Text1.Text="0"
EndSub
PrivateSubCommand5_Click()
Text1.Text="0"
EndSub
3.2.4、复制、粘贴
PrivateSubfz_Click()
Clipboard.Clear
Clipboard.SetTextText1.Text
EndSub
PrivateSubzt_Click()
Text1.Text=""
Text1.Text=Clipboard.GetText()
EndSub
3.2.5、两窗体的切换
PrivateSubck_Click()
form1.Hide
Form2.Show
EndSub
PrivateSubckx_Click()
Form2.Hide
form1.Show
EndSub
3.3、科学型计算器的代码
3.3.1、变量的定义及初始化
DimdflagAsInteger
DimiAsInteger
DimopnreAsInteger
DimprevAsDouble
DimoflagAsInteger
DimindAsInteger
DimXAsDouble
DimYAsDouble
PrivateSubForm_Load()
prev=0
oflag=0
ind=0
opnre=0
Clipboard.Clear
ang=3.14/180
EndSub
3.3.2、简单的运算
PrivateSubCommand1_Click(IndexAsInteger)
Ifind=4Then
prev=0
Text1.Text=""
ind=0
EndIf
opnre=0
Ifoflag=0Then
Text1.Text=""
EndIf
oflag=1
IfCommand1(Index).Caption<>"."Then
IfText1.Text<>"0"Then
Text1.Text=Text1.Text&Command1(Index).Caption
Else
Text1.Text=""&Command1(Index).Caption
EndIf
Else
Ifdflag=0Then
Text1.Text=Text1.Text&"."
dflag=1
Else
MsgBox("Error")
EndIf
EndIf
EndSub
PrivateSubCommand2_Click(IndexAsInteger)
Ifopnre=0OrIndex=4Then
Ifind=0Then
prev=prev+Val(Text1.Text)
ElseIfind=1Then
prev=prev-Val(Text1.Text)
ElseIfind=2Then
IfVal(Text1.Text)=0Then
MsgBox("SORRYDIVIDEZERO")
ExitSub
Else
prev=prev/Val(Text1.Text)
EndIf
ElseIfind=3Then
prev=prev*Val(Text1.Text)
EndIf
Text1.Text=Str(prev)
oflag=0
EndIf
opnre=1
ind=Index
dflag=0
EndSub
3.3.3、正弦、余弦、正切
PrivateSubCommand5_Click()
Text1.Text=Str(Sin(ang*Val(Text1.Text)))
EndSub
PrivateSubCommand6_Click()
Text1.Text=Str(Cos(ang*Val(Text1.Text)))
EndSub
PrivateSubCommand7_Click()
If(Cos(Val(Text1.Text)))<>0Then
Text1.Text=Str(Sin(ang*Val(Text1.Text))/Cos(ang*Val(Text1.Text)))
Else
MsgBox("该数无正切值")
Text1.Text="0"
EndIf
EndSub
3.3.4、平方、立方、多次方
PrivateSubCommand8_Click()
X=Val(Text1.Text)
Text1.Text=X^2
EndSub
PrivateSubCommand9_Click()
X=Val(Text1.Text)
Text1.Text=X^3
EndSub
PrivateSubCommand10_Click()
If(Text1.Text=""Orprev=0)Then
MsgBox("不合法输入!
!
!
")
Text1.Text="0"
Else
prev=power(prev,Fix(Val(Text1.Text)))
EndIf
EndSub
3.3.5、指数函数、对数函数
PrivateSubCommand11_Click()
e=Val(Text1.Text)
Text1.Text=Exp(e)
EndSub
PrivateSubCommand12_Click()
L=Val(Text1.Text)
Text1.Text=Log(L)
EndSub
3.3.6、倒数、平方根
PrivateSubCommand13_Click()
X=Val(Text1.Text)
IfX=0Then
MsgBox("除数不能为零!
")
Else
Text1.Text=1/X
EndIf
EndSub
PrivateSubCommand14_Click()
IfText1.Text<0Then
MsgBox("负数不能开方")
Text1.Text="0"
Else
Text1.Text=Str(Sqr(Val(Text1.Text)))
EndIf
EndSub
3.3.7、角度、弧度、梯度
PrivateSubOption5_Click(IndexAsInteger)
DimjdAsDouble,huAsDouble,tdAsDouble
ju=Val(Text1.Text)
SelectCaseIndex
Case0
Text1.Text=ju
Case1
hu=3.141592654/180*ju
Text1.Text=hu
Case2
td=3.141592654/200
Text1.Text=td
EndSelect
ind=Index
EndSub
3.3.8、各进制转换
PrivateSubOption1_Click(IndexAsInteger)
Staticr
SelectCaseIndex
Case0
DimwAsInteger
Forw=2To9
Command1(w).Enabled=True
Nextw
Forw=0To5
Command3(w).Enabled=True
Nextw
Ifr=10Then
Text1.Text=trandec(Val(Text1.Text),16)
ElseIfr=2Then
Text1.Text=Two16(Text1.Text)
ElseIfr=8Then
Text1.Text=OCT_to_HEX(Text1.Text)
EndIf
r=16
Case1
DimXAsInteger
ForX=2To9
Command1(X).Enabled=True
NextX
ForX=0To5
Command3(X).Enabled=False
NextX
Text1.Text=Convert(Text1.Text,r)
Ifr=8ThenText1.Text=trandec(Val(Text1.Text),10)
r=10
Case2
DimYAsInteger
ForY=2To7
Command1(Y).Enabled=True
NextY
Command1(8).Enabled=False
Command1(9).Enabled=False
ForY=0To5
Command3(Y).Enabled=False
NextY
Ifr=10Then
Text1.Text=trandec(Val(Text1.Text),8)
ElseIfr=16Then
Text1.Text=HEX_to_OCT(Text1.Text)
ElseIfr=2Then
Text1.Text=BIN_to_OCT(Text1.Text)
EndIf
r=8
Case3
DimzAsInteger
Forz=2To9
Command1(z).Enabled=False
Nextz
Forz=0To5
Command3(z).Enabled=False
Nextz
Ifr=10Then
Text1.Text=trandec(Val(Text1.Text),2)
EndIf
Ifr=16Then
Text1.Text=HEX_to_BIN(Text1.Text)
ElseIfr=8Then
Text1.Text=OCT_to_BIN(Text1.Text)
EndIf
r=2
EndSelect
Y=N
EndSub
Functionfact(numAsLong)AsLong
If(num<0Ornum=0)Then
MsgBox("Error")
fact=num
Else
If(num>12)Then
MsgBox("指太大")
fact=num
Else
re=1
While(num>0)
re=re*num
num=num-1
Wend
fact=re
EndIf