VB 2.docx
《VB 2.docx》由会员分享,可在线阅读,更多相关《VB 2.docx(17页珍藏版)》请在冰豆网上搜索。
VB2
VB程序语言设计
课程大作业
题目名称:
____科学计算器__________________
班级:
_____10020742____________________
姓名:
_____方虎________________________
学号:
_____24_________________________
课程教师:
温海骏_____________________
学期:
2012-2013学年第2学期
完成时间:
2013年5月16号
1.设计思路
我的基本思路是在窗体上建立三个控件数组,第一个控件数组有十五个命令按钮,分别实现加、减、乘、除、倒数、乘方、正玄、余玄、正切、In、n!
函数、进制、弧度转换等函数功能;第二个控件数组作包括十二个命令按钮,用来进行计算器的数据输入;第三个控件数组为基本的运算符号,实现基本加减乘除和乘方运算。
退格、清除、等于、退出作为独立的命令按钮。
2.设计目标
本科学计算器是一种能实现加、减、乘、除、倒数、乘方、正玄、余玄、正切、In、n!
函数、进制、弧度转换等运算功能,并带有存储器、统计框等,基本实现了Windows自带计算器的所有功能。
要实现计算器的这些功能就用到我们所学的VB知识编写程序来实现运算功能并解决问题。
3.总体设计结构与功能
1.设计框架和计算器整体形象
2.主要功能模块的计算设计思路,以及对应的N-S流程图,说明本功能的特点,其各功能的代码如下
首先对0到9进行赋值和设置
PrivateSubn0_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="0"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"0"
Ifinputn=0Thent.Text="0"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn1_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="1"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"1"
Ifinputn=0Thent.Text="1"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn2_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="2"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"2"
Ifinputn=0Thent.Text="2"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn3_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="3"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"3"
Ifinputn=0Thent.Text="3"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn4_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="4"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"4"
Ifinputn=0Thent.Text="4"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn5_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="5"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"5"
Ifinputn=0Thent.Text="5"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn6_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="6"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"6"
Ifinputn=0Thent.Text="6"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn7_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="7"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"7"
Ifinputn=0Thent.Text="7"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn8_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="8"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"8"
Ifinputn=0Thent.Text="8"
E:
inputn=1
dengyu.SetFocus
EndSub
PrivateSubn9_Click()
Form1.Caption="输入"
Ift.Text="0"Then
t.Text="9"
GoToE
EndIf
Ifinputn=1Thent.Text=t.Text+"9"
Ifinputn=0Thent.Text="9"
E:
inputn=1
dengyu.SetFocus
EndSub
再在对小数点进行赋值
PrivateSubdot_Click()
Form1.Caption="输入"
IfInStr(t.Text,".")=0Thent.Text=t.Text+"."
Ifinputn=0Thent.Text="0."
inputn=1
dengyu.SetFocus
EndSub
取负运算的设置
PrivateSubqufu_Click()
Form1.Caption="取负"
t.Text=0-Val(t.Text)
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
加减乘除的设置和赋值
PrivateSubjia_Click()
m=cal()
Form1.Caption="加法运算"
inputn=0
number1=Val(t.Text)
operation=1
dengyu.SetFocus
EndSub
PrivateSubjian_Click()
m=cal()
Form1.Caption="减法运算"
inputn=0
number1=Val(t.Text)
operation=2
dengyu.SetFocus
EndSub
PrivateSubcheng_Click()
m=cal()
Form1.Caption="乘法运算"
inputn=0
number1=Val(t.Text)
operation=3
dengyu.SetFocus
EndSub
PrivateSubchu_Click()
m=cal()
Form1.Caption="除法运算"
inputn=0
number1=Val(t.Text)
operation=4
dengyu.SetFocus
EndSub
百分数的设置和赋值
PrivateSubbaifen_Click()
Form1.Caption="转化为百分数"
inputn=0
t.Text=Val(t.Text)*100
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
取倒数运算的赋值语句
PrivateSubdaoshu_Click()
Form1.Caption="取倒数"
inputn=0
t.Text=CDbl
(1)/Val(t.Text)
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
等于号的赋值语句
PrivateSubdengyu_Click()
Form1.Caption="运算结果"
m=cal()
EndSub
取对数的赋值语句(ln和log)
PrivateSubln_Click()
Form1.Caption="取自然数对数"
inputn=0
Ift.Text>0Thent.Text=Log(Val(t.Text))/Log(2.71828183)
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSubPrivateSubduishu_Click()
Form1.Caption="对数运算"
inputn=0
Ift.Text>0Thent.Text=Log(Val(t.Text))
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
对sin、cos、tan语句的赋值
PrivateSubsine_Click()
Form1.Caption="正弦"
inputn=0
DimnAsDouble
n=Val(t.Text)/180*3.14159265358979
t.Text=Sin(n)
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
PrivateSubcose_Click()
Form1.Caption="余弦"
inputn=0
DimnAsDouble
n=Val(t.Text)/180*3.14159265358979
t.Text=Cos(n)
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
PrivateSubtane_Click()
Form1.Caption="正切"
inputn=0
DimnAsDouble
n=Val(t.Text)/180*3.14159265358979
t.Text=Tan(n)
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
对平方和开方语句的赋值
PrivateSubpingfang_Click()
Form1.Caption="平方"
inputn=0
t.Text=Val(t.Text)^2
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
dengyu.SetFocus
EndSub
PrivateSubkaifang_Click()
Form1.Caption="开方运算"
inputn=0
IfVal(t.Text)<0ThenGoToE
t.Text=Sqr(Val(t.Text))
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
E:
dengyu.SetFocus
EndSub
阶乘运算的赋值
PrivateSubjiecheng_Click()
Form1.Caption="阶乘运算"
inputn=0
IfVal(t.Text)<0OrVal(t.Text)-Int(Val(t.Text))<>0ThenGoToE
t.Text=fac(CLng(Val(t.Text)))
E:
dengyu.SetFocus
EndSub
存储的设置赋值能够调出记忆1和记忆2
PrivateSubsto_Click()
Ifstatics=1Then
Form1.Caption="存储数据按等号结束输入"
numarray(arraylen)=Val(t.Text)
arraylen=arraylen+1
t.Text=Str(arraylen)
inputn=0
Else
Form1.Caption="存储(选择M1或M2)"
storage=1
EndIf
dengyu.SetFocus
EndSubPrivateSubm1_Click()
Form1.Caption="记忆1"
Ifstorage=1Then
memory1=Val(t.Text)
storage=0
Else:
t.Text=memory1
EndIf
inputn=0
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
PrivateSubm2_Click()
Form1.Caption="记忆2"
Ifstorage=1Then
memory2=Val(t.Text)
storage=0
Else:
t.Text=memory2
EndIf
inputn=0
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
dengyu.SetFocus
EndSub
统计状态的设置和赋值语句
PrivateSubsta_Click()
Form1.Caption="进入统计状态"
statics=1
inputok=0
Forn=0To500
numarray(n)=0
Nextn
arraylen=0
EndSub
PrivateSubexitsta_Click()
Form1.Caption="退出统计状态"
statics=0
inputok=0
inputn=0
EndSub
清零键、退格、关闭的设置赋值语句
PrivateSubclear_Click()
Form1.Caption="清零"
inputn=0
t.Text=0
Ifstatics=1Then
Forn=0To500
numarray(n)=0
Nextn
arraylen=0
inputok=0
EndIf
dengyu.SetFocus
PrivateSubback_Click()
Form1.Caption="退格"
IfLen(t.Text)>=1Thent.Text=Left(t.Text,Len(t.Text)-1)
IfLen(t.Text)=0Thent.Text="0"
dengyu.SetFocus
EndSub
关闭程序
PrivateSubpoweroff_Click()
End
EndSub
EndSub
出现异常和不符合数学规律的提示
Functionave()AsDouble
DimsumAsDouble
sum=0
Forn=0Toarraylen
sum=sum+numarray(n)
Nextn
Ifarraylen=0Then
m=MsgBox("出错!
",vbOKOnly,"单击确定退出!
")
EndIf
ave=sum/arraylen
EndFunction
变量的赋值和函数调用的设置
Diminputn,operation,storage,statics,inputokAsInteger
Dimnumber1,memory1,memory2,numarray(500),arraylenAsDouble
Functionfac(aAsLong)AsLong
Dimr,nAsLong
r=1
Forn=1ToaStep1
r=r*n
Nextn
fac=r
EndFunction
Functioncal()
inputn=0
Dimnumber2AsDouble
number2=Val(t.Text)
SelectCaseoperation
Case1:
t.Text=number1+number2
Case2:
t.Text=number1-number2
Case3:
t.Text=number1*number2
Case4:
Ift.Text<>"0"Thent.Text=number1/number2
Case5:
Ifnumber2>number1Ornumber2-Int(number2)<>0_
Ornumber1-Int(number1)<>0Ornumber1<0Ornumber2<0_
Ornumber1>12OrNumber>12ThenGoToE
t.Text=fac(CLng(number1))/(fac(CLng(number2))*fac(CLng(number1)_
-CLng(number2)))
Case6:
Ifnumber2>number1Ornumber2-Int(number2)<>0_
Ornumber1-Int(number1)<>0Ornumber1<0_
Ornumber2<0Ornumber1>12OrNumber>12ThenGoToE
t.Text=fac(CLng(number1))/fac(CLng(number2))
Case7:
Ifnumber1<0Ornumber2<0ThenGoToE
t.Text=number1*number2/(number1+number2)
Case8:
t.Text=number1^number2
EndSelect
E:
operation=0
IfMid(t.Text,1,1)="."Thent.Text="0"+t.Text
IfMid(t.Text,1,2)="-."Thent.Text="-0"+Mid(t.Text,2)
EndFunction
3.运行结果分析
运行程序进行调试COS((56+120)*3
调试COS((56+120)*3)
结果正确=-0.97814760073
4.总结
对于正切值的计算和有关规定存在比较大的问题,由于对代码书写的不熟悉,导致在设计此代码的过程存在过大的问题。
经过翻阅书本及网络查询,最终得以完成代码的编写,此处的重难点在于正切函数存在无意义的特点,要重新根据这一点加以调试和代码的书写。
对此次科学计算器的编写的体会深刻。
在编写的过程当中加强了对vb的知识的巩固和理解。
Vb对于我来说,它还是比较难的,对其理解的不够深刻,认识的不够透彻。
我觉得光是学点理论知识是不够的,关键在于能够将理论转化为现实操作,自己动手才能让自己更清楚的理解和巩固知识。