0面向对象程序设计课程设计报告——简易计算器学生姓名:******学号:********、********专业班级:****************指导教师:*****1目录一.课程设计目的………………………………………………………2二.课程设计内容………………………………………………………2A.题目及要求…………………………………………………………2(一)设计题目:简易计算器…………………………………………2(二)内容介绍…………………………………………………………2(三)基本要求…………………………………………………………2B.课题分析及设计思路………………………………………………2(一)分析………………………………………………………………3(二)基本设计思路……………………………………………………3C.各部分程序设计……………………………………………………31.“0~9”以及“.”……………………………………………………32“+、-、*、/”………………………………………………………33.“=”…………………………………………………………………34.“Del、AC”…………………………………………………………35.“Save”键的功能以及介绍…………………………………………6.误差分析………………………………………………………………4D.难点及调试过程……………………………………………………5E.成果展示……………………………………………………………5三.实验心得……………………………………………………………82一.课程设计目的1、通过对课程所学知识的延伸和扩展,结合VB各类知识及代码与C++各类知识及代码对比来加深对VB与C++的综合理解。2、掌握基本的面向对象的程序设计的思路和方法。3、能够灵活运用所学知识解决实际问题.。二.课程设计内容A.题目及要求(一)设计题目:简易计算器(二)内容介绍:1、具有加减乘除功能。2、当被除数为零是会自动报错。3、有删减单字符功能(Del),也有全清功能(AC)。4、有保存运算结果功能(save),并且能将结果保存到E盘并以程序运行保存结果的时间作为文档名保存。3(三)基本要求:支持基本的功能示例如下:1、可进行简单计算2、有异常处理3、能显示结果,并将运算结果保存到TXT文档中B.课题分析及设计思路(一)分析根据题目要求,设计出一个简易的计算器,要求能进行简易计算,并且将计算结果保存为.txt格式。所以我们小组采用了VB的方式来完成本课题。4VB的优势在于VB是一种可视化编程语言,可以用于开发Windows环境下的各类应用程序,本课题通过VB可以更快更好的的完成本课题的要求。(二)基本设计思路类的设计在VB6.0精简版中,我们可以通过Command按钮以及Text显示框来进行显示以及操作。为了界面的美观,我们特意将Command按钮一级Text显示框嵌入在Frame框架中,以便于更好的将每个模块差分开。如图为程序的源程序界面:下图为本程序的操作界面5我们通过使用中间参数来简化程序的运行,最后的程序将中间参数框体隐藏已获得更好的使用体验,中间参数框内的内容是用来计算刚刚键入的值,从而通过“=”来将结果投射到计算器的显示框。6C.各部分程序设计1.“0~9”以及“.”的功能实现代码如上图所示,我们使用了Case语句来集成了0~9十个按键,相比传统的来设置0~9每个按键的键位以及功能,使用Case语句则会让键位一体化,省去了很多的时间与精力,并且可以更加直观的显示键位的功能。72.“+、-、*、/”功能的实现与0~9同样,我们集成了“+、-、*、/”四个按键的一体化,使用Case语句让每个符号能按照自己的正常功能来计算。83.“=”功能的实现详细的说明可以通过代码栏中绿色的备注来查看值得一提的是,本程序可以进行连等运算,以下是连等运算的代码9PrivateSubCommand_dy_Click()'等号'等号按下逻辑,执行上一个运算。Text1.Text=F_js(Text2.Text,Text_y.Text)'等号的运算Text2.Text=Text1.Text'相当于代数式左边的数字存起来,连等会用到这个Text_ysan.Text=0'初始运算按钮状态Text_lxs.Text=F'连续算,假CXSRzt=1'重新输入状态,1打开,-1关闭Dian='初始小数点状态EndSub4.“CE”清屏功能10由代码不难看出,我们将所有的文本显示框都进行了初始化,即归零(包括中间参数栏)PrivateSubCommand_CE_Click()'初始。。。CXSRzt=-1'重新输入状态Text1.Text=0Text2.Text=0'上一个数Text3.Text='上一个运算符号Dian=Text_ysan=0'运算按钮按键次数Text_lxs.Text=F'连续算,初始假EndSub5.“Save”键的功能以及介绍在Save键中,我们使用了不同于其他小组的保存方式。我们发现,其他小组的保存结果均为Result.txt,本程序中我们采用了使用当前时间作为.txt的文件名,这样做的好处是,可以进行多次的保存,而不用替换.txt文件中的内容。11PrivateSubCommandSave_Click()DimLJAsStringDimSJAsStringSJ=Format(Now,YYYYMMDDHHMMSS)LJ=E:\&SJ&.TXTOpenLJForOutputAs#1Print#1,Text1.TextClose#1EndSub代码中可知,我们的输出目录为E:\,6.异常处理机制代码中我们特意规范了0不可以作为除数的函数,并且镶嵌在了整个的计算函数当中。12FunctionF_js(ByValstrZAsString,ByValstrYAsString)AsDouble'计算函数。OnErrorGoToccc:F_js=Val(Text1.Text)IfText3.Text=+ThenF_js=Val(strZ)+Val(strY)EndIfIfText3.Text=-ThenF_js=Val(strZ)-Val(strY)EndIfIfText3.Text=*ThenF_js=Val(strZ)*Val(strY)EndIfIfText3.Text=/ThenF_js=Val(strZ)/Val(strY)EndIfExitFunctionccc:F_js=0'计算出错返回0,如除数为0的计算。MsgBox出错的计算!EndFunctionD.难点及调试过程本程序难点在于Case语句的正确使用以及连等运算的实现调试过程中,我们测试了1)小数点之间的加减乘除2)整数之间的加减乘除3)小数点与整数之间的加减乘除4)Save功能5)CE功能调试发现,当计算结果的值为0=x=1之间时,显示框只能显示“.X”,不能如愿显示“0.x”。对此,我们给计算结果显示框增加了If判断语句,当显示框中的值在零到一之间时,自动在“.”的前面增加一个“0”,从而实现了该bug的修复E.成果展示运行Calc.exe以后,弹出操作界面我们做一些简单的运算,为了显示的更加清楚,我在此处将中间参数显出来,以便更加清楚地显示计算过程。13141516三.实验心得经过一学期的学习与编制等一系列的过程,完成了如题所示的简易计算器,包括数字0—9,+,-,*,/,=等按键,可实现基本+,-,*,/,平方等的运算,符合计算器的基本要求。调试过程中不可避免的出现不少错误,经过查阅资料,询问同学,修改后,基本解决加减乘除等的一些问题。基本完成学习和实践的要求和目的。课程设计,使我提高了实际操作能力,从以前的理论上升到实践,从感性认识上升到理性认识,真正做到学有所用,懂得先要发现问题,分析问题,解决问题,虽然在设计过程中我也遇到一些困难,但在同学的帮助和自己的努力下,我都认真克服了,但由于时间紧触,我并不能做到尽善尽美,应该说这是一大遗憾吧,我相信这对以后会有别开生会的体验。附录:以下为本程序的全部代码'********'姓名:阿伦斯'学号:021300801'姓名:王亦昆'学号:111300642'和系统自带的calc运算逻辑是一样的。可以测试一下。'***********DimCXSRztAsInteger'重新输入状态,是否重新输入。非-1的都为重新输入。DimDianAsString'小数点PrivateSubCommand_CE_Click()'初始。。。CXSRzt=-1'重新输入状态Text1.Text=0Text2.Text=0'上一个数Text3.Text='上一个运算符号Dian=Text_ysan=0'运算按钮按键次数Text_lxs.Text=F'连续算,初始假EndSub17PrivateSubCommand_sz_Click(IndexAsInteger)'这个是数字按钮被按下事件。'1.最左边0处理逻辑,如果右边是点,可以保留,如果是数字则删除。'2.点的处理逻辑,仅可以出现1次。或0次'3,其他的往右边连接。'4.小数点右边的零要留着。'如果有运算按钮被按下了,再次按数字按钮,清空了再输出新的。IfCXSRzt-1ThenText1.Text=0CXSRzt=-1EndIfDimstrAsStringSelectCaseIndexCase0,1,2,3,4,5,6,7,8,9'0-9按钮被按下了,Text1.Text=Text1.Text&IndexIfDian=Then'点没有被按下,就需要规范数字。Text1.Text=Val(Text1.Text)EndIfCase10'这个是点IfDian=ThenDian=.'点被按下了。Text1.Text=Text1.Text&DianEndIfEndSelectText1.Text=Left(Text1.Text,10)'这里暂定最多是10位Text_y=Text1.TextText_ysan.Text=0EndSubPrivateSubCommand_dy_Click()'等号'等号按下逻辑,执行上一个运算。Text1.Text=F_js(Text2.Text,Text_y.Text)'等号的运算Text2.Text=Text1.Text'相当于代数式左边的数字存起来,连等会用到这个Text_ysan.Text=0'初始运算按钮状态18Text_lxs.Text=F'连续算,假CXSRzt=1'重新输入状态,1打开,-1关闭Dian='初始小数点状态EndSub'有2个等号运算,一个是按等号,一个是按运算符号的。'这2个是有区别的,按运算符号的可以连续算,按等号的就结束连续算了。PrivateSubCommand_ys_Click(IndexAsInteger)'执行运算之前,先执行一下等号运算。这样才可以实现连续加减'按完等号之后再按运算按钮则不执行等号运算了'只有第一次按运算符号才执行等号运算,其他次的不执行。Text_ysan.Text=CInt(Text_ysan.Text)+1'连续算是真的,且是第一次按运算按键,则计算结果。IfText_lxs.Text=TThen'执行等号运算IfText_ysan.Text=1ThenText1.Text=F_js(Text2.Text,Text_y.Text)'等号的运算EndIfEndIfText2.Text=Val(Text1.Text)'上一个数SelectCaseIndexCase0'+Text3.Text=+Case1'-Text3.Text=-Case2'*Text3.Text=*Case3'/Text3.Text=/19EndSelectCXSRzt=1'重新输入状态,1打开,-1关闭'DQYS=Index'当前运算符号Dian=Text_lxs.Text=T'连续算,真EndSubPrivateSubCommandSave_Click()DimLJAsStrin