北京电子科技学院计算机实习报告题目:计算器的制作系别通信工程班级0431学生学号043118学生姓名孙锦慧导师姓名汪永好起止时间2006年9月4日至2006年9月15日一、选题内容:做一个计算器满足以下要求:(1)能进行加、减、乘、除基本运算,还要能混合运算。
(2)能完成一些特殊的数学运算,如开方,倒数等。
(3)界面要和常见的计算器界面类似。
二、实习流程:第一天,我与汪老师当面交流了一下,他大致为我讲述了做计算器的基本思路和可能用到的知识,并建议我尽快查找有关计算器的资料。
VB、VC、C语言都可以实现实习的目的和要求。
既然为实习我就想学点新东西,于是选择了用VB做,而且老师说用VB是最简单的。
第二天,根据汪老师的提示和建议我开始从各路查找资料,包括在图书馆和网上查找有关VB的东西。
还好找到了而且程序差不多编好了,我只要再稍加修改就可以,我相信计算机语言都是相通的。
按照我的想法我又借了几本关于VB基本知识的书籍,先学习了解基本变量说明,控件的概述,公用属性、方法、事件以及常用的控件。
另外还看了控件数组的概念及使用方法和注意事项。
控件的事件是确定控件对外部条件的响应。
事件有控件识别,再有应用程序处理。
控件数组是一组具有共同名称和类型的控件。
它们的事件过程相同。
一个控件数组至少应有一个元素,同一控件数组中的元数有自己的属性设置值。
在工程设计中设计两个窗体,在窗体名FORM1的窗体上设计一个命令按纽控件,单击该控件,显示窗体名为FORM2的窗体。
命令按纽控件所在的窗体和它的代码窗口如图。
运行时单击命令按纽,即可显示窗体名为FORM2的窗体。
在设计时,使用控件数组添加所消耗的资源比直接向窗口添加多个相同类型的控件消耗的资源要少。
当希望若干控件共代码时,使用控件数组就显得特别方便。
计算器上的数字按纽和操作按纽都可以分别共享代码,因此就可以使用控件数组。
在使用控件数组设计计算器时,将相同名字赋予多个控件,例数字按纽1,2,3,4, 5,6,7,8,9,0和+、-、*、/分别使用一个名字,即复制现有的控件并将其粘贴到窗体上或控件的INDEX属性设置为非NULL 数值创建数组控件。
通过复制现存控件添加控件数组元数,步骤如下:(1)绘制控件数组中的控件。
(2)当控件获得焦点时,选择“编辑”菜单中的“复制”命令。
(3)在“编辑”菜单中选择“粘贴”命令,VB将显示一个对话框询问是否确认创建控件数组。
选择“确定”指定给控件的索引值为1,绘制的第一个控件具有索引值0。
三、本实习计算器的有关具体的设置项:在这个计算器的设计上,窗体上的控件及它们的属性和设置值如下:_______________________________________________________________________________ 对象属性设置值————————————————————————————————————――― Form name calculator Caption 计算器第一个commandbutton name cancelCaption C第二个 commandbutton name cancelentryCaption CE第三个commandbutton name decimalCaption .第四个commandbutton name operziteCaption ~第五个commandbutton name sqrCaption ^Lable name readoutCaption 0.第六个commandbutton name number第七个commandbutton name operator_________________________________________________________________________第六和第七个commandbutton 控件是控件数组,它们的INDEX属性值见下表:控件数组的INDEX属性数字控件数组(N)操作符控件数组(N)0= Number (0) +=operator(1)1= Number (1) -=operator(2)2= Number (2) *=operator(3)3= Number (3) /=operator(4)4= Number (4) ==operator(5)5= Number (5)6= Number (6)7= Number (7)8= Number (8)9= Number (9)四、主要的基本运算(+,- ,*,/)的算法:五、运行的最初结果界面:运行一种计算结果界面:六、实习感想:本次实习我觉得很有意义,对我来说是一次考验,也是学校给我的一个锻炼自己的机会,很难得,所以我很珍惜它。
它让我在两周时间内完成一个计算器的设计。
接触一个新的语言,刚开始会有一些胆怯和疑惑,但想着自己已经学过两种计算机语言就来了信心,语言都应该有相通的地方,都有变量的声明和设置等等,算法基本相同,思路应该是相通的。
我的问题分析能力、自学能力、实习操作能力都得到了很好的提高。
最令我觉得有收获的是查找资料、自学新知识、借鉴方案、描绘流程思想等各项能力的锻炼。
在这次实习过程中我查了很多资料,学会了灵活运用新东西,其实新的东西都是在原来知识的基础上深化,或换角度思考出来的新理解。
这将对我以后的学习和深造大有裨益。
七、具体详细的程序原代码如下:Option ExplicitDim op1, op2 ‘前面输入的操作数。
Dim decimalflag As Integer ‘小数点还存在吗?Dim numops As Integer ‘操作数个数。
Dim lastinput ‘指示上一次按键事件的类型。
Dim opflag ‘指示未完成的操作。
Dim temp'按纽的CLICK 事件过程,重新设置显示并初始化变量Private Sub Cancel_Click(Index As Integer)readout = Format(0, "0.")op1 = 0op2 = 0Form_LoadEnd Sub‘CE(取消输入)按纽的CLICK事件过程。
Private Sub cancelentry_Click(Index As Integer)readout = Format(0, "0.")Decimalflag = Falselastinput = "ce"End Sub‘小数点(.)按纽的CLICK事件过程,如果上一次按纽为运算符,初始化为”0.”;‘否则显示时追加一个小数点.Private Sub decimal_Click(Index As Integer)If lastinput = "neg" Thenreadout = Format(0, "-0.")ElseIf lastinput <> "nums" Thenreadout = Format(0, "0.")End Ifdecimalflag = Truelastinput = "nums"End Sub‘窗体的初始化过程,设置所有变量为初始值.Private Sub Form_Load()decimal flag = Falsenumops = 0lastinput = "none"opflag = " "readout = Format(0, "0.")End Sub‘开方按纽的CLICK事件过程.Private Sub sqr_Click(Index As Integer)readout = readout ^ (1 / 2)lastinput = "ops"opflag = "^"decimalflag = TrueEnd Sub‘数字键(0-9)的CLICK事件过程,向显示的数追加新数.Private Sub number_Click(Index As Integer)If lastinput <> "nums" Thenreadout = Format(0, ".")decimalflag = FalseEnd IfIf decimalflag Thenreadout = readout + number(Index).CaptionElsereadout = Left(readout, InStr(readout, Format(0, ".")) - 1) + number(Index).Caption + Format(0, ".")End IfIf readout = "neg" Then readout = "-" & readoutlastinput = "nums"End Sub‘运算符(+ 、-、*、/、=)的CLICK事件过程如果接下来的按键是数字键,增加NUMOPS。
‘如果有一个操作数,则设置为OP1,如果有两个操作数,则设置为OP1设置为OP1与当前‘字符串的运算结果,并显示结果。
Private Sub operator_Click(Index As Integer)temp = readoutIf lastinput = "nums" Thennumops = numops + 1End IfSelect Case numops ‘按操作数的个数分三种情况。
Case 0If operator(Index).Caption = "-" And lastinput <> "neg" Thenreadout = "-" & readoutlastinput = "neg"End IfCase 1op1 = readoutIf operator(Index).Caption = "-" And lastinput <> "nums" And opflag <> "=" Then readout = "-"lastinput = "neg"End IfCase 2op2 = tempSelect Case opflagCase "+"op1 = Val(op1) + Val(op2)Case "-"op1 = Val(op1) - Val(op2)Case "*"op1 = Val(op1) * Val(op2)Case "/"If op2 = 0 ThenMsgBox "除数不能为0“,48,”计算器“"Elseop1 = Val(op1) / Val(op2)End IfCase "="op1 = Val(op2)Case "%"op1 = Val(op1) * Val(op2)End Selectreadout = op1numops = 1End SelectIf lastinput <> "neg" Thenlastinput = "ops"opflag = operator(Index).CaptionEnd IfEnd Sub‘开方的CLICK事件过程。