您好,欢迎来到钮旅网。
搜索
您的当前位置:首页my计算器程序设计报告

my计算器程序设计报告

来源:钮旅网

计算器是一种在日常生活中很常用的计算工具,它在计算方面给了我们提供很大的方便。本程序的功能包括:(1)加,减,乘,除运算,正弦,余弦,正切,余切,反正切,反余切,反正弦,反余弦,自然对数,以10为底的对数还有阶乘等函数功能。(2)还包括存储清,存储显示,存储相加。

“计算器”是一个关于多种控件,以及控件数组应用的程序,它包含许对字符串的处理,多模块程序设计,数学函数的使用。它所需知识点较多,必须对各个方面都有所了解.

数学模型:主界面

界面:进制转化界面

数学函数代码

代码:存储清代码

进制转化代码

第一步,要编辑计算器界面,如右图

,对于界面上的按钮较多,我们可以分成四组,这就是控件数组的使用,而且每个按钮的属性都一一设置,而且要调入图片.第二个界面如右图比较简单,只是一些普通的控件.

计算器是一个输入原始数据,运算中间数据和结果数据都显示在窗口顶部的同一个文本框的工具,这就要求我们可以把文本框的内容付给两个不同的变量,对于这一点我们就可以用一个逻辑变量来实现.比如,Ifnotbooleanstr1=str

Elsestr2=str

计算器的主要功能就是运算,但是任何一个数值的输入都是以字符串的形式进行的,而字符串是无法参与运算的,所以必须用CInt()转换成整形变量,而输出时必须用CStr()转化成字符串的形式输出,更为麻烦的是,在进行进制转换时,两种变量之间的转换更为频繁。在编程过程中要时刻注意!就拿一个简单的程序中的一部分来说吧:

Ifnotbooleanthenstr=str1

Elsestr=str2

Str=te_t1.te_t

n=CInt(str)‘“将其转换成整形变量"

t4=str()‘“将返回值转换成字符串"

计算器的功能程序简单易懂,但编制过程极为烦琐,我在编程的过程中,体会最深的就是其过程有重复,但又不得再编,在这里尤其要注意,有些过程虽然相似,但它们却存在着质的区别,就拿删除按扭来说吧,

"C","0->M","CE","->"按扭都有删除的功能,在这里我就它们的区别作一下详细介绍:

将"C","CE","->"作为一个控件数组,其程序如下:

Ifnotbooleanstr1=strelsestr2=str

SelectCaseInde_

Case0

str1="",str2="",Te_t1.te_t="""C"键

Case1

str="""CE"键

Case2

str=Left(str,len(str)-1)"->"键

而"0->M"在另一个数组控件中,其程序的一部分如下:

Case0

n4=0:Te_t1.te_t="0"

可见它们的代码是存在区别的,这就要求在编程时弄清楚它们的区别,不可想当然把同一种代码复制过来.

这里我再介绍一下小数点的使用

PrivateSubCommand2_Click(Inde_AsInteger)

IfInde_<10Then

str=str+CStr(Inde_)"输入数字"

Else

IfInStr(str,".")=0Thenstr=str+".""输入小数点"

EndIf

IfLen(str)>1AndLeft(str,1)="0"AndMid(str,2,1)<>"."Then

str=Right(str,Len(str)-1)"删除前面多余的0"

EndIf

Te_t1.te_t=str"显示输入的数据"

IfnotbooleanThenstr1=strElsestr2=str"用两个字符串变量存放"EndSub

计算器虽复杂,但大部分还是比较简单的,最难的地方就是进制转换器的编码了,要编好这一部分必须对各进制之间的转换关系了如指掌.其中各个进制都和二进制有着直接的转换关系.而其他三个之间都不可直接进行转换.对于不能直接转化的,可以间接转化,例如,可以将十六进制先转化成十进制然后再转化成八进制.

ElseIfOption4=TrueThen

t4=""

str=Te_t1.Te_t

DimpAsInteger,qAsLong

DoWhilestr<>""‘把输入的字母先转化为对应的数

t=Right(str,1)

Ift="a"Then

n=10

ElseIft="b"Then

n=11

ElseIft="c"Then

n=12

ElseIft="d"Then

n=13

ElseIft="e"Then

n=14

ElseIft="f"Then

n=15

Else:n=CInt(t)

EndIf

q=q+n16^(p)

str=Left(str,Len(str)-1)’从后逐步取出每个字符

p=p+1’指数从后依次加一

Loop

m=q’十六进制转成了十进制

DoWhilem<>0

Form1=1To3

n=mMod2

m=m2

int1=n2^(m1-1)十进制再转化为八进制

int2=int2+int1

Ne_t

t3=CStr(int2)

t4=t3+t4

t3=""

int1=0

int2=0

Loop

Te_t2.Te_t=t4

PrivateSubTe_t1_Change()

str=Te_t1.Te_t

t=Right(str,1)

Ift<>""Then

n=Asc(s)找出所输入数字的ASCII码

Else:E_itSub

EndIf

IfOption1=TrueThen

Ifn<48Orn>49Then与符合要求的比较,排除符合的

MsgBo_"输入的数据不符和进制要求,请重新输入.数据输入

Te_t1.Te_t=Left(str,Len(str)-1)删除最后一位

EndIf

ElseIfOption2=TrueThen

Ifn<48Orn>55Then

MsgBo_"输入的数据不符和进制要求,请重新输入.数据输入

Te_t1.Te_t=Left(str,Len(str)-1)

EndIf

ElseIfOption3=TrueThen

Ifn<48Orn>57Then

MsgBo_"输入的数据不符和进制要求,请重新输入.数据输入

Te_t1.Te_t=Left(str,Len(str)-1)

EndIf

ElseIfOption4=TrueThen

Ifn<48Or(n>57Andn<97)Orn>102Then

MsgBo_"输入的数据不符和进制要求,请重新输入.数据输入

Te_t1.Te_t=Left(str,Len(str)-1)

EndIf

EndIf

EndSub

通过此次编程,我知道了它的难处,我在参考了前人的基础上加以摸索,并对前人的不足加以改善,但是并没有做到十分完美,还是有一些不足之处,这也是将来要努力的地方。

OptionE_plicit'强制申明变量

Dimstr,str1,str2,str3,str4AsString

Dim_1,_2,_3,_4,pAsDouble

Dimj,k,_,int1AsLong

DimwAsBoolean

PrivateSubTe_t1_Change()'调节输入的内容和输出的结果

EndSub

PrivateSubCommand2_Click(Inde_AsInteger)'函数转换

IfNotwThenstr=str1Elsestr=str2

str=Te_t1.Te_t

Case0'sin函数

str=CStr(Sin(_))

Case1

str=CStr(Cos(_))'cos函数

Case2

str=CStr(Tan(_))'tan函数

Case3

str=CStr(1/Tan(_))'ctg函数

Case4

str=CStr(1/Cos(_))'sec函数

Case5

Forj=1To_'阶乘运算

k=jk

Ne_t

str=CStr(k)

Case6

p=3.5358'边界限定

If_>1Or_<-1Then

MsgBo_"数据超出反正弦的数值范围,请重新输入",0,"出错提醒"ElseIf_=1Then

str=CStr(p/2)

ElseIf_=-1Then'限定反三角的范围

str=CStr(-p/2)

Else

str=CStr(Atn(_/Sqr(1-__)))

EndIf

Case7

p=3.5358'边界限定

If_>1Or_<-1Then

MsgBo_"数据超出反余弦的数值范围,请重新输入",0,"出错提醒"ElseIf_=1Then

str=CStr(0)

ElseIf_=-1Then

str=CStr(p)

Else

str=CStr(Atn(-_/Sqr(1-__)))+2Atn(1)

EndIf

Case8

str=CStr(Atn(_))

Case9

str=(Atn(_)+2Atn(1))

Case10

If_<=0Then

MsgBo_"请重新输入一个正数",0,"出错提醒"'Log函数Else

str=CStr(Log(_)/Log(10))

EndIf

Case11

If_<=0Then

MsgBo_"请重新输入一个正数",0,"出错提醒"

Else'Ln函数str=CStr(Log(_))

EndIf

EndSelect

Te_t1.Te_t=str

str1=str

str=""

EndSub

PrivateSubCommand3_Click(Inde_AsInteger)'关于小数点的使用Te_t1.Te_t=""'"输入数字"

IfInde_<10Then

str=str+CStr(Inde_)

Else

IfInStr(str,".")=0Thenstr=str+"."'"输入小数点"EndIf

IfLen(str)>1AndLeft(str,1)="0"AndMid(str,2,1)<>"."Thenstr=Right(str,Len(str)-1)'"删除前面多余的0"

EndIf

Te_t1.Te_t=str

IfNotwThenstr1=strElsestr2=str

EndSub

PrivateSubCommand4_Click(Inde_AsInteger)

Ifstr2<>""Then

str=""

Else

str2="":Te_t1.Te_t="":w=True:int1=Inde_

str=""

EndIf

EndSub

PrivateSubCommand5_Click(Inde_AsInteger)

SelectCaseInde_'“M+”按钮

Case0

_4=0:Te_t1.Te_t="0"'“0->M”按钮

Case1

Te_t1.Te_t=CStr(_4)'“RM”按钮

Case2

_4=_4+Val(Te_t1.Te_t)

Te_t1.Te_t="0"

EndSelect

str=""

EndSub

PrivateSubCommand6_Click()

str=Te_t1.Te_t

IfLen(str)>0AndLeft(str,1)="-"Then'负号的使用str=Right(str,Len(str)-1)

Else

str="-"str

EndIf

Te_t1.Te_t=str

IfNotwThenstr=str1Elsestr=str2

str=""

EndSub

PrivateSubCommand8_Click()'“C”按钮

Te_t1.Te_t="0":str1="":w=False

str2=""

EndSub

PrivateSubCommand9_Click()'“CE"按钮

Te_t1.Te_t=str1:str2=""

EndSub

PrivateSubCommand1_Click()'OFF按钮

Unloadfrmcal

EndSub

PrivateSubCommand10_Click()'->按钮

str3=Te_t1.Te_t

str3=Left(str3,Len(str3)-1)

Ifstr3=""Then

Te_t1.Te_t="0"

Else

Te_t1.Te_t=str3

EndIf

str=str3

EndSub

PrivateSubCommand11_Click()'=按钮

IfLen(Trim(str1))=0OrLen(Trim(str2))=0Thenw=False

E_itSub

EndIf

_1=Val(str1):_2=Val(str2)

SelectCaseint1

Case0

If_2=0Then

MsgBo_"除数不能为0!",16,"计算器"

E_itSub'防止除数为零

EndIf

_3=_1/_2

Case1

_3=_1_2

Case2

_3=_1+_2

Case3

_3=_1-_2

EndSelect

Te_t1.Te_t=CStr(_3)

str1=Te_t1.Te_t

str2=""

str=""

w=False

EndSub

PrivateSubCommand12_Click()'显示进制转换窗口

formjdzh.Show

EndSub

进制转化窗体

OptionE_plicit

Dimstr,t,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11AsStringDimn,n1,n2,n3,m,m1,m2,int1,int2,int3AsLong

PrivateSubCommand1_Click()'转换成二进制

str=Te_t1.Te_t

IfOption1=TrueThen'输入二进制数Te_t2.Te_t=Te_t1.Te_t'结果不变

ElseIfOption2=TrueThen'八进制转换成二进制t4=""

DoWhilestr<>""

t=Right(str,1)

n=CInt(t)

Form=1To3

t2=CStr(nMod2)

n=n2

t3=t2+t3

Ne_t

t4=t3+t4

str=Left(str,Len(str)-1)

t3=""

Loop

IfLeft(t4,1)="0"AndLeft(t4,2)<>"00"Thent4=Right(t4,Len(t4)-1)

ElseIfLeft(t4,2)="00"AndLeft(t4,3)<>"000"Thent4=Right(t4,Len(t4)-2)

EndIf

Te_t2.Te_t=t4

ElseIfOption3=TrueThen'

t2=""

m=CInt(str)

DoWhilem<>0

n=mMod2

m=m2

t1=CStr(n)

t2=t1+t2

Loop

Te_t2.Te_t=t2

ElseIfOption4=TrueThen'

t4=""

str=Te_t1.Te_t

DoWhilestr<>""

t=Right(str,1)

Ift="a"Then

n=10

ElseIft="b"Then

n=11

ElseIft="c"Then

n=12

ElseIft="d"Then

n=13

ElseIft="e"Then

n=14

ElseIft="f"Then

n=15

Else:n=CInt(t)

EndIf

Form=1To4

t2=CStr(nMod2)

n=n2

t3=t2+t3十进制转换成二进制十六进制转换成二进制

Ne_t

t4=t3+t4

str=Left(str,Len(str)-1)

t3=""

Loop

IfLeft(t4,1)="0"AndLeft(t4,2)<>"00"Then

t4=Right(t4,Len(t4)-1)

ElseIfLeft(t4,2)="00"AndLeft(t4,3)<>"000"Then

t4=Right(t4,Len(t4)-2)

ElseIfLeft(t4,3)="000"AndLeft(t4,4)<>"0000"Then

t4=Right(t4,Len(t4)-3)

EndIf

Te_t2.Te_t=t4

EndIf

EndSub

PrivateSubCommand2_Click()'转换成八进制

str=Te_t1.Te_t

IfOption1=TrueThen'二进制转换成八进制t4=""

DoWhilestr<>""

IfLen(str)=1Then

str="00"+str

ElseIfLen(str)=2Then

str="0"+str

EndIf

t=Right(str,3)

Form=1To3

t2=Right(t,1)

n=CInt(t2)

int1=n2^(m-1)

int2=int2+int1

t2=""

t=Left(t,Len(t)-1)

Ne_t

t3=CStr(int2)

t4=t3+t4

str=Left(str,Len(str)-3)

t3=""

int1=0

int2=0

Loop

Te_t2.Te_t=t4

ElseIfOption2=TrueThen'八进制转换成八进制,结果不变Te_t2.Te_t=Te_t1.Te_t

ElseIfOption3=TrueThen'十进制转换成八进制t4=""

m=CInt(str)

DoWhilem<>0

Form1=1To3

n=mMod2

m=m2

int1=n2^(m1-1)

int2=int2+int1

Ne_t

t3=CStr(int2)

t4=t3+t4

t3=""

int1=0

int2=0

Loop

Te_t2.Te_t=t4

ElseIfOption4=TrueThen'

t4=""

str=Te_t1.Te_t

DimpAsInteger,qAsLong

DoWhilestr<>""

t=Right(str,1)

Ift="a"Then

n=10

ElseIft="b"Then

n=11

ElseIft="c"Then

n=12

ElseIft="d"Then

n=13

ElseIft="e"Then

n=14

ElseIft="f"Then

n=15

Else:n=CInt(t)

EndIf

q=q+n16^(p)

str=Left(str,Len(str)-1)

p=p+1

Loop

DoWhilem<>0十六进制转换成八进制

Form1=1To3

n=mMod2

m=m2

int1=n2^(m1-1)

int2=int2+int1

Ne_t

t3=CStr(int2)

t4=t3+t4

t3=""

int1=0

int2=0

Loop

Te_t2.Te_t=t4

EndIf

EndSub

PrivateSubCommand3_Click()'

str=Te_t1.Te_t

Te_t2.Te_t=""

IfOption1=TrueThen't4=""

DoWhilestr<>""

t=Right(str,1)

m=CInt(t)

n=m2^(int1)

int1=int1+1

int2=int2+n

str=Left(str,Len(str)-1)

Loop

t4=CStr(int2)

Te_t2.Te_t=t4

int2=0

int1=0

ElseIfOption2=TrueThen't4=""

DoWhilestr<>""

t=Right(str,1)

n=CInt(t)

Form=1To3

m1=nMod2

n=n2

int1=m12^n2

int2=int2+int1

n2=n2+1

Ne_t转换成十进制二进制转换成十进制八进制转换成十进制

int3=int2+int3

int2=0

int1=0

t4=CStr(int3)

str=Left(str,Len(str)-1)Loop

Te_t2.Te_t=t4

n2=0

int3=0

ElseIfOption3=TrueThen'Te_t2.Te_t=Te_t1.Te_t

ElseIfOption4=TrueThen'int2=0

DimsAsInteger

DoWhilestr<>""

t=Right(str,1)

Ift="a"Then

n=10

ElseIft="b"Then

n=11

ElseIft="c"Then

n=12

ElseIft="d"Then

n=13

ElseIft="e"Then

n=14

ElseIft="f"Then

n=15

Else:n=CInt(t)

EndIf

int2=int2+n16^(s)

str=Left(str,Len(str)-1)s=s+1

Loop

Te_t2.Te_t=int2

n2=0

int3=0

EndIf

EndSub

PrivateSubCommand4_Click()'str=Te_t1.Te_t

Te_t2.Te_t=""

IfOption1=TrueThen'十进制转换成十进制,结果不变十六进制转换成十进制转换成十六进制二进制转换成十六进制

t4=""

DoWhilestr<>""

IfLen(str)=2Then

str="00"+str

ElseIfLen(str)=3Then

str="0"+str

ElseIfLen(str)=1Then

str="000"+str

EndIf

t=Right(str,4)

Form=1To4

t2=Right(t,1)

n=CInt(t2)

int1=n2^(m-1)int2=int2+int1

t2=""

t=Left(t,Len(t)-1)Ne_t

Ifint2=10Then

t3="a"

ElseIfint2=11Then

t3="b"

ElseIfint2=12Then

t3="c"

ElseIfint2=13Then

t3="d"

ElseIfint2=14Then

t3="e"

ElseIfint2=15Then

t3="f"

Else

t3=CStr(int2)

EndIf

t4=t3+t4

int1=0

int2=0

t3=""

str=Left(str,Len(str)-4)t=""

Loop

Te_t2.Te_t=t4

ElseIfOption3=TrueThen'n=CInt(str)

t7=""十进制转换成十六进制

DoWhilen<>0

Form=1To4

m1=nMod2

n=n2

int1=m12^(m-1)

int2=int2+int1

Ne_t

Ifint2=10Then

t6="a"

ElseIfint2=11Then

t6="b"

ElseIfint2=12Then

t6="c"

ElseIfint2=13Then

t6="d"

ElseIfint2=14Then

t6="e"

ElseIfint2=15Then

t6="f"

Else:t6=CStr(int2)

EndIf

t7=t6+t7

t6=""

int1=0

int2=0

str=Left(str,Len(str)-1)

Loop

Te_t2.Te_t=t7

ElseIfOption2=TrueThen'八进制转换成十六进制t7=""

t4=""

DoWhilestr<>""

t=Right(str,1)

n=CInt(t)

Form=1To3

t2=CStr(nMod2)

n=n2

t3=t2+t3

Ne_t

t4=t3+t4

str=Left(str,Len(str)-1)

t3=""

Loop

IfLeft(t4,1)="0"AndLeft(t4,2)<>"00"Then

t4=Right(t4,Len(t4)-1)

ElseIfLeft(t4,2)="00"AndLeft(t4,3)<>"000"Thent4=Right(t4,Len(t4)-2)

EndIf

DoWhilet4<>""

IfLen(t4)=2Then

t4="00"+t4

ElseIfLen(t4)=3Then

t4="0"+t4

ElseIfLen(t4)=1Then

t4="000"+t4

EndIf

t1=Right(t4,4)

Form=1To4

t5=Right(t1,1)

n1=CInt(t5)

int1=n12^(m-1)

int2=int2+int1

t5=""

t1=Left(t1,Len(t1)-1)

Ne_t

Ifint2=10Then

t6="a"

ElseIfint2=11Then

t6="b"

ElseIfint2=12Then

t6="c"

ElseIfint2=13Then

t6="d"

ElseIfint2=14Then

t6="e"

ElseIfint2=15Then

t6="f"

Else

t6=CStr(int2)

EndIf

t7=t6+t7

int1=0

int2=0

t4=Left(t4,Len(t4)-4)

t1=""

Loop

Te_t2.Te_t=t7

ElseIfOption4=TrueThen'十六进制转换成十六进制结果不变

Te_t2.Te_t=Te_t1.Te_t

EndIf

EndSub

PrivateSubTe_t1_Change()

str=Te_t1.Te_t

t=Right(str,1)

Ift<>""Then

n=Asc(t)

Else:E_itSub

EndIf

IfOption1=TrueThen'输入二进制数

Ifn<48Orn>49Then'输入的数不是0或1时,报错

MsgBo_"输入的数据不符合所选择的进制要求,请重新输入",16,"数据输入"Te_t1.Te_t=Left(str,Len(str)-1)

EndIf

ElseIfOption2=TrueThen'输入八进制数

Ifn<48Orn>55Then'不在0-7之间时

MsgBo_"输入的数据不符合所选择的进制要求,请重新输入",16,"数据输入"Te_t1.Te_t=Left(str,Len(str)-1)

EndIf

ElseIfOption3=TrueThen'输入十进制数

Ifn<48Orn>57Then'不在0-9之间时

MsgBo_"输入的数据不符合所选择的进制要求,请重新输入",16,"数据输入"Te_t1.Te_t=Left(str,Len(str)-1)

EndIf

ElseIfOption4=TrueThen'输入十六进制数

Ifn<48Or(n>57Andn<97)Orn>102Then'不在0-9或不在a-f之间时

MsgBo_"输入的数据不符合所选择的进制要求,请重新输入",16,"数据输入"Te_t1.Te_t=Left(str,Len(str)-1)

EndIf

EndIf

EndSub

PrivateFunctionse(aAsString)AsString

DimsAsString,dAsDouble,fAsString,qAsString

d=Val(a)

f=fdMod2

d=d2

LoopUntild=0

Ford=Len(f)To1Step-1

q=Mid(f,d,1)

s=sq

Ne_t

se=s

EndFunction

PrivateFunctionbe(strAsString)AsString

t4=""

DoWhilestr<>""

t=Right(str,1)

n=CInt(s)

Form=1To3

t2=CStr(nMod2)

n=n2

t3=t2+t3

Ne_t

t4=t3+t4

str=Left(str,Len(str)-1)

t3=""

Loop

IfLeft(t4,1)="0"AndLeft(t4,2)<>"00"Thent4=Right(t4,Len(t4)-1)

ElseIfLeft(s4,2)="00"AndLeft(t4,3)<>"000"Thent4=Right(t4,Len(t4)-2)

EndIf

be=t4

EndFunction

PrivateFunctioni(aAsString)AsString

t2=""

m=CInt(str)

DoWhilem<>0

n=mMod2

m=m2

t1=CStr(n)

t2=t1+t2

Loop

Te_t2.Te_t=t2

EndFunction

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务