王雪VB课程设计.docx
- 文档编号:9992776
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:28
- 大小:77.64KB
王雪VB课程设计.docx
《王雪VB课程设计.docx》由会员分享,可在线阅读,更多相关《王雪VB课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
王雪VB课程设计
摘要
我用VB制作这个程序的简单计算器,它包括一个标准的计算器和一个科学计算器。
它可以实现简单的加减乘除四则运算,数字的平方、平方根,正弦、余弦、正切,倒数、指数函数、对数函数,角度、弧度、梯度的转换,以及各进制的相互转换。
而且它的功能还有退格,清除当前数据,清除所有数据,复制数据,粘贴数据。
在这个计算器的程序中,我用到了单行选择语句If…Then…Else…,
块语句if…then…endif,If语句的嵌套,多条件选择语句SelectCase,而且还用到了按钮、文本框、框架、单选按钮控件,菜单的设计。
在此报告中我重点叙述了计算机的各个功能及用法。
特别是进制间的转换和数字与运算符之间的联系。
。
虽然描述的不太完整,但我会尽力使用系统结构图,划分多个模块,让大家明白我设计的运算器的功能的。
第一章、程序概述
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
EndIf
EndFunction
PublicFunctiontrandec$(ByValm%,ByValr%)
Dimstrdtor$
DimiB%,mr%
strdtor=""
DoWhilem<>0
mr=mModr
m=m\r
Ifmr>=10Then
strdtor=Chr(mr-10+65)&strdtor
Else
strdtor=mr&strdtor
EndIf
Loop
trandec=strdtor
EndFunction
PublicFunctionConvert(ByValSAsString,ByValNAsInteger)AsDouble
Dimr()AsString
DimiAsInteger
DimjAsInteger
L="0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z"
r=Split(L,"|")
Fori=1ToLen(S)
Forj=0ToUBound(r)
IfUCase(Mid(S,i,1))=r(j)Then
Convert=Convert*N+j
EndIf
Nextj
Nexti
EndFunction
PrivateFunctionTwo16(ByValXAsString)AsString
DoWhileLen(X)Mod4<>0
X="0"+X
Loop
DoWhileLen(X)>0
SelectCaseRight(X,4)
Case"0000"
Two16="0"+Two16
Case"0001"
Two16="1"+Two16
Case"0010"
Two16="2"+Two16
Case"0011"
Two16="3"+Two16
Case"0100"
Two16="4"+Two16
Case"0101"
Two16="5"+Two16
Case"0110"
Two16="6"+Two16
Case"0111"
Two16="7"+Two16
Case"1000"
Two16="8"+Two16
Case"1001"
Two16="9"+Two16
Case"1010"
Two16="A"+Two16
Case"1011"
Two16="B"+Two16
Case"1100"
Two16="C"+Two16
Case"1101"
Two16="D"+Two16
Case"1110"
Two16="E"+Two16
Case"1111"
Two16="F"+Two16
EndSelect
X=Left(X,Len(X)-4)
Loop
EndFunction
PublicFunctionHEX_to_BIN(ByValHexAsString)AsString
DimiAsLong
DimBAsString
Hex=UCase(Hex)
Fori=1ToLen(Hex)
SelectCaseMid(Hex,i,1)
Case"0":
B=B&"0000"
Case"1":
B=B&"0001"
Case"2":
B=B&"0010"
Case"3":
B=B&"0011"
Case"4":
B=B&"0100"
Case"5":
B=B&"0101"
Case"6":
B=B&"0110"
Case"7":
B=B&"0111"
Case"8":
B=B&"1000"
Case"9":
B=B&"1001"
Case"A":
B=B&"1010"
Case"B":
B=B&"1011"
Case"C":
B=B&"1100"
Case"D":
B=B&"1101"
Case"E":
B=B&"1110"
Case"F":
B=B&"1111"
EndSelect
Nexti
DoWhileLeft(B,1)="0"
B=Right(B,Len(B)-1)
Loop
HEX_to_BIN=B
EndFunction
PublicFunctionOCT_to_BIN(ByValOctAsString)AsString
DimiAsLong
DimBAsString
Fori=1ToLen(Oct)
SelectCaseMid(Oct,i,1)
Case"0":
B=B&"000"
Case"1":
B=B&"001"
Case"2":
B=B&"010"
Case"3":
B=B&"011"
Case"4":
B=B&"100"
Case"5":
B=B&"101"
Case"6":
B=B&"1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 王雪 VB 课程设计