my计算器程序设计报告.docx

上传人:b****2 文档编号:17061300 上传时间:2023-07-21 格式:DOCX 页数:31 大小:40.35KB
下载 相关 举报
my计算器程序设计报告.docx_第1页
第1页 / 共31页
my计算器程序设计报告.docx_第2页
第2页 / 共31页
my计算器程序设计报告.docx_第3页
第3页 / 共31页
my计算器程序设计报告.docx_第4页
第4页 / 共31页
my计算器程序设计报告.docx_第5页
第5页 / 共31页
my计算器程序设计报告.docx_第6页
第6页 / 共31页
my计算器程序设计报告.docx_第7页
第7页 / 共31页
my计算器程序设计报告.docx_第8页
第8页 / 共31页
my计算器程序设计报告.docx_第9页
第9页 / 共31页
my计算器程序设计报告.docx_第10页
第10页 / 共31页
my计算器程序设计报告.docx_第11页
第11页 / 共31页
my计算器程序设计报告.docx_第12页
第12页 / 共31页
my计算器程序设计报告.docx_第13页
第13页 / 共31页
my计算器程序设计报告.docx_第14页
第14页 / 共31页
my计算器程序设计报告.docx_第15页
第15页 / 共31页
my计算器程序设计报告.docx_第16页
第16页 / 共31页
my计算器程序设计报告.docx_第17页
第17页 / 共31页
my计算器程序设计报告.docx_第18页
第18页 / 共31页
my计算器程序设计报告.docx_第19页
第19页 / 共31页
my计算器程序设计报告.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

my计算器程序设计报告.docx

《my计算器程序设计报告.docx》由会员分享,可在线阅读,更多相关《my计算器程序设计报告.docx(31页珍藏版)》请在冰点文库上搜索。

my计算器程序设计报告.docx

my计算器程序设计报告

计算器程序设计报告

计算器是一种在日常生活中很常用的计算工具,它在计算方面给了我们提供很大的方便。

本程序的功能包括:

(1)加,减,乘,除运算,正弦,余弦,正切,余切,反正切,反余切,反正弦,反余弦,自然对数,以10为底的对数还有阶乘等函数功能。

(2)还包括存储清,存储显示,存储相加。

“计算器”是一个关于多种控件,以及控件数组应用的程序,它包含许对字符串的处理,多模块程序设计,数学函数的使用。

它所需知识点较多,必须对各个方面都有所了解.

数学模型:

主界面

界面:

进制转化界面

数学函数代码

代码:

存储清代码

进制转化代码

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

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

比较简单,只是一些普通的控件.

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

Elsestr2=str

计算器的主要功能就是运算,但是任何一个数值的输入都是以字符串的形式进行的,而字符串是无法参与运算的,所以必须用CInt()转换成整形变量,而输出时必须用CStr()转化成字符串的形式输出,更为麻烦的是,在进行进制转换时,两种变量之间的转换更为频繁。

在编程过程中要时刻注意!

就拿一个简单的程序中的一部分来说吧:

Ifnotbooleanthenstr=str1

Elsestr=str2

Str=text1.text

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

…….

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

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

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

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

Ifnotbooleanstr1=strelsestr2=str

SelectCaseIndex

Case0

str1="",str2="",Text1.text="""C"键

Case1

str="""CE"键

Case2

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

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

Case0

n4=0:

Text1.text="0"

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

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

PrivateSubCommand2_Click(IndexAsInteger)

IfIndex<10Then

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

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

Text1.text=str"显示输入的数据"

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

EndSub

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

ElseIfOption4=TrueThen

t4=""

str=Text1.Text

DimpAsInteger,qAsLong

q=0

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+n*16^(p)

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

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

Loop

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

DoWhilem<>0

Form1=1To3

n=mMod2

m=m\2

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

int2=int2+int1

Next

t3=CStr(int2)

t4=t3+t4

t3=""

int1=0

int2=0

Loop

Text2.Text=t4

以下是用来判断输入的字符是否符合所选择进制的要求的,如果不符和就会出现一个对话框同时删除所输入的字符。

PrivateSubText1_Change()

str=Text1.Text

t=Right(str,1)

Ift<>""Then

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

Else:

ExitSub

EndIf

IfOption1=TrueThen

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

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

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

EndIf

ElseIfOption2=TrueThen

Ifn<48Orn>55Then

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

Text1.Text=Left(str,Len(str)-1)

EndIf

ElseIfOption3=TrueThen

Ifn<48Orn>57Then

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

Text1.Text=Left(str,Len(str)-1)

EndIf

ElseIfOption4=TrueThen

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

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

Text1.Text=Left(str,Len(str)-1)

EndIf

EndIf

EndSub

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

 

以下是代码

主窗体

OptionExplicit'强制申明变量

Dimstr,str1,str2,str3,str4AsString

Dimx1,x2,x3,x4,pAsDouble

Dimj,k,x,int1AsLong

DimwAsBoolean

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

EndSub

PrivateSubCommand2_Click(IndexAsInteger)'函数转换

IfNotwThenstr=str1Elsestr=str2

str=Text1.Text

x=str

SelectCaseIndex

Case0'sin函数

str=CStr(Sin(x))

Case1

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

Case2

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

Case3

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

Case4

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

Case5

k=1

Forj=1Tox'阶乘运算

k=j*k

Next

str=CStr(k)

Case6

p=3.1415926535898'边界限定

Ifx>1Orx<-1Then

MsgBox"数据超出反正弦的数值范围,请重新输入",0,"出错提醒"

ElseIfx=1Then

str=CStr(p/2)

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

str=CStr(-p/2)

Else

str=CStr(Atn(x/Sqr(1-x*x)))

EndIf

Case7

p=3.1415926535898'边界限定

Ifx>1Orx<-1Then

MsgBox"数据超出反余弦的数值范围,请重新输入",0,"出错提醒"

ElseIfx=1Then

str=CStr(0)

ElseIfx=-1Then

str=CStr(p)

Else

str=CStr(Atn(-x/Sqr(1-x*x)))+2*Atn

(1)

EndIf

Case8

str=CStr(Atn(x))

Case9

str=(Atn(x)+2*Atn

(1))

Case10

Ifx<=0Then

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

Else

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

EndIf

Case11

Ifx<=0Then

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

Else'Ln函数

str=CStr(Log(x))

EndIf

EndSelect

Text1.Text=str

str1=str

str=""

EndSub

PrivateSubCommand3_Click(IndexAsInteger)'关于小数点的使用

Text1.Text=""'"输入数字"

IfIndex<10Then

str=str+CStr(Index)

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

Text1.Text=str

IfNotwThenstr1=strElsestr2=str

EndSub

PrivateSubCommand4_Click(IndexAsInteger)

Ifstr2<>""Then

x1=Val(str1):

x2=Val(str2)

SelectCaseint1

Case0

Ifx2=0Then

MsgBox"除数不能为0!

",16,"计算器"

ExitSub

EndIf

x3=x1/x2

Case1

x3=x1*x2

Case2

x3=x1+x2'加减乘除运算

Case3

x3=x1-x2

EndSelect

str1=CStr(x3)

str2="":

Text1.Text="":

w=True:

int1=Index

str=""

Else

str2="":

Text1.Text="":

w=True:

int1=Index

str=""

EndIf

EndSub

PrivateSubCommand5_Click(IndexAsInteger)

SelectCaseIndex'“M+”按钮

Case0

x4=0:

Text1.Text="0"'“0->M”按钮

Case1

Text1.Text=CStr(x4)'“RM”按钮

Case2

x4=x4+Val(Text1.Text)

Text1.Text="0"

EndSelect

str=""

EndSub

PrivateSubCommand6_Click()

str=Text1.Text

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

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

Else

str="-"&str

EndIf

Text1.Text=str

IfNotwThenstr=str1Elsestr=str2

str=""

EndSub

PrivateSubCommand8_Click()'“C”按钮

Text1.Text="0":

str1="":

w=False

str2=""

EndSub

PrivateSubCommand9_Click()'“CE"按钮

Text1.Text=str1:

str2=""

EndSub

PrivateSubCommand1_Click()'OFF按钮

Unloadfrmcal

EndSub

PrivateSubCommand10_Click()'->按钮

str3=Text1.Text

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

Ifstr3=""Then

Text1.Text="0"

Else

Text1.Text=str3

EndIf

str=str3

EndSub

PrivateSubCommand11_Click()'=按钮

IfLen(Trim(str1))=0OrLen(Trim(str2))=0Then

w=False

ExitSub

EndIf

x1=Val(str1):

x2=Val(str2)

SelectCaseint1

Case0

Ifx2=0Then

MsgBox"除数不能为0!

",16,"计算器"

ExitSub'防止除数为零

EndIf

x3=x1/x2

Case1

x3=x1*x2

Case2

x3=x1+x2

Case3

x3=x1-x2

EndSelect

Text1.Text=CStr(x3)

str1=Text1.Text

str2=""

str=""

w=False

EndSub

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

formjdzh.Show

EndSub

 

进制转化窗体

OptionExplicit

Dimstr,t,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11AsString

Dimn,n1,n2,n3,m,m1,m2,int1,int2,int3AsLong

PrivateSubCommand1_Click()'转换成二进制

str=Text1.Text

IfOption1=TrueThen'输入二进制数

Text2.Text=Text1.Text'结果不变

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

t4=""

DoWhilestr<>""

t=Right(str,1)

n=CInt(t)

Form=1To3

t2=CStr(nMod2)

n=n\2

t3=t2+t3

Next

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)

EndIf

Text2.Text=t4

ElseIfOption3=TrueThen'十进制转换成二进制

t2=""

m=CInt(str)

DoWhilem<>0

n=mMod2

m=m\2

t1=CStr(n)

t2=t1+t2

Loop

Text2.Text=t2

ElseIfOption4=TrueThen'十六进制转换成二进制

t4=""

str=Text1.Text

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=n\2

t3=t2+t3

Next

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

Text2.Text=t4

EndIf

EndSub

PrivateSubCommand2_Click()'转换成八进制

str=Text1.Text

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=n*2^(m-1)

int2=int2+int1

t2=""

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

Next

t3=CStr(int2)

t4=t3+t4

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

t3=""

int1=0

int2=0

Loop

Text2.Text=t4

ElseIfOption2=TrueThen'八进制转换成八进制,结果不变

Text2.Text=Text1.Text

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

t4=""

m=CInt(str)

DoWhilem<>0

Form1=1To3

n=mMod2

m=m\2

int1=n*2^(m1-1)

int2=int2+int1

Next

t3=CStr(int2)

t4=t3+t4

t3=""

int1=0

int2=0

Loop

Text2.Text=t4

ElseIfOption4=TrueThen'十六进制转换成八进制

t4=""

str=Text1.Text

DimpAsInteger,qAsLong

q=0

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+n*16^(p)

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

p=p+1

Loop

m=q

Do

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2