基于vcmfc的科学计算器程序实验报告_第1页
基于vcmfc的科学计算器程序实验报告_第2页
基于vcmfc的科学计算器程序实验报告_第3页
基于vcmfc的科学计算器程序实验报告_第4页
基于vcmfc的科学计算器程序实验报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告课程名称: windows软件开发实习 实验项目: 科学计算器 沈阳工业大学实验报告(适用计算机程序设计类)专业班级: 软件1006 学号: 101201622 姓名: 张鑫可 实验名称:1.实验目的: 本程序设计实践是采用c+语言,在vc平台下设计。本课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。程序设计实践主要是培养学生利用系统综合c+语言进行程序设计的能力。 1.进一步巩固和复习c+程序设计的基础知识。 2.培养学生结构化程序、模块化程序设计的方法和能力。 3.了解

2、软件的编制过程及各环节的具体内容。 4.提高学生程序调试技巧、软件设计能力和代码规范化等素质。 5.提高学生分析问题、解决问题以及实际运用能力。2. 实验内容: 设计一个简单的计算器。要求能实现整数、小数算数运算。程序带清零按钮。3. 实验方案(程序设计说明)见附件4. 实验步骤或程序(经调试后正确的源程序)(填写主要步骤与程序代码等。见附件a)5出现的问题及解决方法附件a 沈阳工业大学实验报告(适用计算机程序设计类)专业班级: 软件1006 学号: 101201622 姓名: 张鑫可 实验步骤或程序: 一、关于visual c+: visual c+6.0由microsoft开发, 它不仅是

3、一个c+ 编译器,而且是一个基于windows操作系统的可视化集成开发环境(integrated development environment,ide)。visual c+6.0由许多组件组成,包括编辑器、调试器以及程序向导appwizard、类向导class wizard等开发工具。这些组件通过过一个名为developer studio的组件集成为和谐的开发环境。microsoft的主力软件产品。visual c+是一个功能强大的可视化软件开发工具。自1993年microsoft公司推出visual c+1.0后,随着其新版本的不断问世,visual c+已成为专业程序员进行软件开发的首选

4、工具。虽然微软公司推出了visual c+.net(visual c+7.0),但它的应用的很大的局限性,只适用于windows 2000,windows xp和windows nt4.0。所以实际中,更多的是以visual c+6.0为 6平台。 visual c+6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其

5、显著。二、设计要点1、基本要求:设计的系统界面要美观大方,操作合理,有必要的 提示。 2、创新要求:在基本要求达到后,进行创新设计。 3、对系统进行功能模块分析、控制流程分析正确。 4、系统设计要实用,编程简练,可用,功能全面,并有一定的容错能力。 5、说明书、流程图要清楚 6、要求程序设计合理,用户界面良好,如采用菜单工作方式。三、实验步骤:1、首先利用mfc appwinzard生成计算器应用程序框架具体步骤如下: 执行vc程序,选择file|new命令,弹出new对话框.单击projects标签,转到projects选项卡,选择mfc appwizard(exe)选项,然后在projec

6、t name文本框中输入cyyjsq 。lacation文本框是指项目的本地路径。2、 界面设计在界面中添加按钮,编辑框等相应控件,并合理摆放,使用户能更加方便的使用。具体设计如下图所示:3、 绑定控件通过如下方式绑定控件。具体绑定如下表所示: 按钮控件资源清单按钮名称按钮id用途0idc_zero按键01idc_1按键12idc_2按键23idc_3按键34idc_4按键45idc_5按键56idc_6按键67idc_7按键78idc_8按键89idc_9按键9.idc _dot小数点=idc _equal等于+idc _add加号-idc _sub减号*idc _mul乘号/idc _di

7、v除号ceidc _ce清屏sqrtidc _sqrt开方1/xidc _daoshu倒数-/+idc _ zhengfu正负mcidc _mc清除内存记录数据mridc _mr内存中保存的数据msidc _ms数据存入存储器中,将原有的数据冲走m+idc _madd当前记录数据与内存数据相加%idc _per百分号cidc _c清零(清除全部)ceidc _ce清除上一步数据backspaceidc _backspace从后向前删除4、 逐步实现代码按钮1-9的实现 文本编辑框的类型为string型,所以若按下数字1按钮时只需在数组尾部添加“1”即可其他代码如此类推,具体代码如下:void

8、cmydlg:onbutton0() / 数字 0this-check() ;cstring tmp = num_buffer ;/ 当为小数点后或其前面有不为零的数时允许输入零if ( tmp.reversefind(.) != -1 | tmp.findoneof( 123456789 ) != -1 )num_buffer += 0 ;elsenum_buffer = 0 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cmydlg:onbutton1() / 数字 1this-check() ;num_buf

9、fer += 1 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cmydlg:onbutton2() / 数字 2this-check() ;num_buffer += 2 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cmydlg:onbutton3() / 数字 3this-check() ;num_buffer += 3 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer

10、) ;void cmydlg:onbutton4() / 数字 4this-check() ;num_buffer += 4 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cmydlg:onbutton5() / 数字 5this-check() ;num_buffer += 5 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cmydlg:onbutton6() / 数字 6this-check() ;num_buffer += 6 ;

11、getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cmydlg:onbutton7() / 数字 7this-check() ;num_buffer += 7 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cmydlg:onbutton8() / 数字 8this-check() ;num_buffer += 8 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cm

12、ydlg:onbutton9() / 数字 9this-check() ;num_buffer += 9 ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;void cmydlg:onbuttondot() / 小数点if ( num_buffer.isempty() )num_buffer = 0. ;else if ( num_buffer.reversefind(.) = -1 )num_buffer += . ;getdlgitem( idc_edit_show )-setwindowtext( num_buffer )

13、 ;/ 求相反数void cmydlg:onbuttonni() / 正负处理m_num = - atof( num_buffer ) ;/ 转化为字符串num_buffer.format( _t(%lf), m_num );getdlgitem( idc_edit_show )-setwindowtext( num_buffer ) ;运行结果如下:加减乘除代码的实现: 通过控件的绑定以及传值函数,以指针调用的方式进行赋值,并将结果保存在num_buffer中,与下一次输入的num2进行新的一元运算并给result赋值,通过updatedata()函数反应到文本编辑框中,具体代码如下:/加

14、void cmydlg:onbuttonadd() this-num1 = atof( num_buffer ) ;this-num_buffer.empty() ;this-operation_type = add ;/ 减void cmydlg:onbuttonsub() this-num1 = atof( num_buffer ) ;this-num_buffer.empty() ;this-operation_type = sub ;/ 乘void cmydlg:onbuttonmul() this-num1 = atof( num_buffer ) ;this-num_buffer.

15、empty() ;this-operation_type = mul ;/ 除void cmydlg:onbuttondiv() this-num1 = atof( num_buffer ) ;this-num_buffer.empty() ;this-operation_type = div ;void cmydlg:onbuttonres() const double epsinon = 0.00001 ;bool error = false ; this-num2 = atof( num_buffer ) ;this-num_buffer.empty() ; switch( this-o

16、peration_type )case add :this-m_num = num1 + num2 ;break;case sub :this-m_num = num1 - num2 ;break;case mul :this-m_num = num1 * num2 ;break;case div :if ( (num2 -epsinon ) & (num2 m_num = num1 / num2 ;break;default:this-m_num = this-num2 ;break; 结果如下图所示 科学性运算按钮的处理:只需根据数值分析等为按钮进行算法的合理设计,正确赋值即可,具体代码如

17、下:/ 自然底数 evoid cscience:onbuttoneconst() this-check() ;num_buffer.format(_t(%lf) , m_e) ;fresh() ;/ 圆周率 void cscience:onbuttonpai() this-check() ;num_buffer.format(_t(%lf) , m_pi) ;fresh() ;void cscience:onbuttonni() / 正负处理m_result = - atof( num_buffer ) ;/ 转化为字符串num_buffer.format( _t(%lf), m_result

18、 );fresh() ;void cscience:onbuttonmutinv() this-unary_operation = true ;const double epsinon = 0.00001 ;this-m_result = atof( num_buffer ) ;if ( (this-m_result = - epsinon) & (this-m_result setwindowtext(0 的倒数没有定义n) ;elsethis-m_result = 1.0 / m_result ;num_buffer.format( _t(%lf), m_result );fresh()

19、;this-unary_operation = false ;void cscience:onbuttonpercent() this-unary_operation = true ;cstring tmp = num_buffer ;this-m_result = atof(num_buffer) ;tmp.format(_t(%lf) , this-m_result * 100 ) ;tmp += % ;fresh(tmp) ;this-unary_operation = false ;void cscience:onbuttonsqr() this-unary_operation = t

20、rue ;this-m_result = atof(num_buffer) ;this-m_result = sqrt(m_result) ;num_buffer.format(_t(%lf) , this-m_result) ;fresh() ;this-unary_operation = false ;void cscience:onbuttonsin() cstring tmp ;this-unary_operation = true ;this-m_result = atof(num_buffer) ;num_buffer.format(_t(%lf) , this-m_result)

21、 ;tmp = sin( + num_buffer + ) = ;this-m_result = sin(m_result) ;num_buffer.format(_t(%lf) , this-m_result) ;tmp += num_buffer ;fresh(tmp) ;this-unary_operation = false ;void cscience:onbuttoncos() cstring tmp ;this-unary_operation = true ;this-m_result = atof(num_buffer) ;num_buffer.format(_t(%lf) ,

22、 this-m_result) ;tmp = cos( + num_buffer + ) = ;this-m_result = cos(m_result) ;num_buffer.format(_t(%lf) , this-m_result) ;tmp += num_buffer ;fresh(tmp) ;this-unary_operation = false ;void cscience:onbuttontan() cstring tmp ;const double epsinon = 0.00001 ;this-unary_operation = true ;this-m_result

23、= atof(num_buffer) ;num_buffer.format(_t(%lf) , this-m_result) ;tmp = tan( + num_buffer + ) = ;if ( (cos(m_result) = -epsinon) & (cos(m_result) m_result = tan(m_result) ;num_buffer.format(_t(%lf) , this-m_result) ;tmp += num_buffer ;fresh(tmp) ;this-unary_operation = false ;void cscience:onbuttoncot

24、() cstring tmp ;const double epsinon = 0.00001 ;this-unary_operation = true ;this-m_result = atof(num_buffer) ;num_buffer.format(_t(%lf) , this-m_result) ;tmp = cot( + num_buffer + ) = ;if ( (sin(m_result) = -epsinon) & (sin(m_result) m_result = cos(m_result)/sin(m_result) ;num_buffer.format(_t(%lf)

25、 , this-m_result) ;tmp += num_buffer ;fresh(tmp) ;this-unary_operation = false ;void cscience:onbuttonln() cstring tmp ;const double epsinon = 0.00001 ;this-unary_operation = true ;this-m_result = atof(num_buffer) ;num_buffer.format(_t(%lf) , this-m_result) ;tmp = ln( + num_buffer + ) = ;if ( m_resu

26、lt m_result = log(m_result) ;num_buffer.format(_t(%lf) , this-m_result) ;tmp += num_buffer ;fresh(tmp) ;this-unary_operation = false ;运行结果如下:进制间的转换:1. 按钮a-f的实现与,进制运算时,按钮条件的设置。在进行16进制运算时,需定义a-f按键,而在10进制时,a-f按键设置为不可使用,以及8进制时8、9按钮禁止使用。具体代码如下:void cscience:onbuttona() / 数字 a(10)this-check() ;num_buffer

27、+= a ;fresh() ;void cscience:onbuttonb() / 数字 b(11)this-check() ;num_buffer += b ;fresh() ;void cscience:onbuttonc() / 数字 c(11)this-check() ;num_buffer += c ;fresh() ;void cscience:onbuttond() / 数字 d(12)this-check() ;num_buffer += d ;fresh() ;void cscience:onbuttone() / 数字 f(12)this-check() ;num_buf

28、fer += f ;fresh() ;void cscience:onbuttonf() / 数字 e(12)this-check() ;num_buffer += e ;fresh() ;2、进制间的转换运算 将result转换成强制转换成int型,通过itoa(int value, char *string, int radix);函数将result转换成所需的radix进制,类型为字符型并保存在 string 里 这里,在进行进制转换前, 需预先判断是否在之前有过进制转换,即需将result结果转回10进制表示,再进行其他进制的转换。具体代码如下:void cscience:enable

29、numbut()/ 十进制处理if ( this-radix = dec )enabledecbut(true) ;/ 确定打开数字键0-9for( int i = 0 ; i enablewindow(true) ;/ 确定关闭数学键a-ffor ( i = 0 ; i enablewindow(false) ; getdlgitem( idc_button_d )-enablewindow(false) ;/ 非十进制处理else/ 禁用十进制操作enabledecbut(false) ;/* 十六进制处理 */if ( this-radix = hex )/ 确定打开数字键0-ffor(

30、 int i = 0 ; i enablewindow(true) ;for ( i = 0 ; i enablewindow(true) ; getdlgitem( idc_button_d )-enablewindow(true) ;else if( this-radix = oct )/ 确定打开数字键0-7for( int i = 0 ; i enablewindow(true) ;getdlgitem(idc_button2 + i)-enablewindow(false) ;getdlgitem(idc_button2 + i + 1 )-enablewindow(false) ;

31、for ( i = 0 ; i enablewindow(false) ; getdlgitem( idc_button_d )-enablewindow(false) ;else if ( this-radix = bin )/ 确定打开数字键0-1 , 关闭数字键2-ffor( int i = 0 ; i enablewindow(false) ;for ( i = 0 ; i enablewindow(false) ; getdlgitem( idc_button_d )-enablewindow(false) ;运行结果如下:其他细节处理/ 非十进制处理void cscience:en

32、abledecbut( bool flag )/ 禁用小数点getdlgitem( idc_button_dot )-enablewindow(flag) ;/ 禁用 1/x , % , sin , cos , tan , cot , ln , log , e , getdlgitem( idc_button_mut_inv )-enablewindow(flag) ;getdlgitem( idc_button_percent )-enablewindow(flag) ;getdlgitem( idc_button_sin )-enablewindow(flag) ;getdlgitem( idc_button_cos )-enablewindow(flag) ;getdlgitem( idc_button_tan )-enablewindow(flag) ;getdlgitem( idc_button_cot )-enablewindow(flag) ;getdlgitem( idc_button_ln )-enablewindow(flag) ;getdlgitem( idc_button_log )-enablewindow(flag) ;getdlgitem( idc_button_e_const )-enablewindow(flag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论