基于vcmfc的科学计算器程序实验报告.doc

上传人:李司机 文档编号:1131791 上传时间:2022-06-30 格式:DOC 页数:15 大小:102KB
返回 下载 相关 举报
基于vcmfc的科学计算器程序实验报告.doc_第1页
第1页 / 共15页
基于vcmfc的科学计算器程序实验报告.doc_第2页
第2页 / 共15页
基于vcmfc的科学计算器程序实验报告.doc_第3页
第3页 / 共15页
基于vcmfc的科学计算器程序实验报告.doc_第4页
第4页 / 共15页
基于vcmfc的科学计算器程序实验报告.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《基于vcmfc的科学计算器程序实验报告.doc》由会员分享,可在线阅读,更多相关《基于vcmfc的科学计算器程序实验报告.doc(15页珍藏版)》请在三一办公上搜索。

1、实验步骤或程序:一、关于Visual C+: Visual C+6.0由Microsoft开发, 它不仅是一个C+ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境integrated development environment,IDE。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过过一个名为Developer Studio的组件集成为和谐的开发环境。Microsoft的主力软件产品。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出V

2、isual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进展软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows *P和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为 6平台。 Visual C+6.0以拥有语法高亮,自动编译功能以及高级除错功能而著称。比方,它允许用户进展远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及创立预编译头文件(stdaf*.h)、最小重建功

3、能及累加连结(link)著称。这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件方案上尤其显著。二、设计要点1、根本要求:设计的系统界面要美观大方,操作合理,有必要的 提示。2、创新要求:在根本要求到达后,进展创新设计。3、对系统进展功能模块分析、控制流程分析正确。4、系统设计要实用,编程简练,可用,功能全面,并有一定的容错能力。5、说明书、流程图要清楚6、要求程序设计合理,用户界面良好,如采用菜单工作方式。三、实验步骤:1、首先利用MFC AppWinzard生成计算器应用程序框架具体步骤如下: 执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到

4、Projects选项卡,选择MFC AppWizard(e*e)选项,然后在Project 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 _Equ

5、al等于+IDC _ADD加号-IDC _SUB减号*IDC _MUL乘号/IDC _DIV除号CEIDC _CE清屏SqrtIDC _Sqrt开方1/*IDC _Daoshu倒数-/+IDC _ ZHengfu正负MCIDC _Mc去除存记录数据MRIDC _Mr存中保存的数据MSIDC _Ms数据存入存储器中,将原有的数据冲走M+IDC _Madd当前记录数据与存数据相加%IDC _Per百分号CIDC _C清零去除全部CEIDC _CE去除上一步数据BackspaceIDC _Backspace从后向前删除4、 逐步实现代码按钮1-9的实现 文本编辑框的类型为string型,所以假设按下

6、数字1按钮时只需在数组尾部添加1即可其他代码如此类推,具体代码如下:void 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 )-SetWindowTe*t( num_buffer ) ;void CMyDlg:

7、OnButton1() / 数字 1this-check() ;num_buffer += 1 ;GetDlgItem( IDC_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButton2() / 数字 2this-check() ;num_buffer += 2 ;GetDlgItem( IDC_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButton3() / 数字 3this-check() ;num_buffer += 3 ;GetDlgItem( IDC

8、_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButton4() / 数字 4this-check() ;num_buffer += 4 ;GetDlgItem( IDC_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButton5() / 数字 5this-check() ;num_buffer += 5 ;GetDlgItem( IDC_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButton6(

9、) / 数字 6this-check() ;num_buffer += 6 ;GetDlgItem( IDC_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButton7() / 数字 7this-check() ;num_buffer += 7 ;GetDlgItem( IDC_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButton8() / 数字 8this-check() ;num_buffer += 8 ;GetDlgItem( IDC_EDIT_SHOW

10、 )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButton9() / 数字 9this-check() ;num_buffer += 9 ;GetDlgItem( IDC_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;void CMyDlg:OnButtonDot() / 小数点if ( num_buffer.IsEmpty() )num_buffer = 0. ;else if ( num_buffer.ReverseFind(.) = -1 )num_buffer += . ;GetDlgItem( IDC_

11、EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;/ 求相反数void CMyDlg:OnButtonNI() / 正负处理m_num = - atof( num_buffer ) ;/ 转化为字符串num_buffer.Format( _T(%lf), m_num );GetDlgItem( IDC_EDIT_SHOW )-SetWindowTe*t( num_buffer ) ;运行结果如下:加减乘除代码的实现: 通过控件的绑定以及传值函数,以指针调用的方式进展赋值,并将结果保存在num_buffer中,与下一次输入的num2进展新的一元运算并给result

12、赋值,通过Updatedata函数反响到文本编辑框中,具体代码如下:/加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 =

13、atof( num_buffer ) ;this-num_buffer.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

14、-num_buffer.Empty() ; switch( this-operation_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; 结果如以下图所示科学性运算按钮的处

15、理:只需根据数值分析等为按钮进展算法的合理设计,正确赋值即可,具体代码如下:/ 自然底数 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 ) ;/ 转化为字符串

16、num_buffer.Format( _T(%lf), m_result );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 SetWindowTe*t(0 的倒数没有定义n) ;elsethis-m_result = 1.0 / m_result ;num_buffer.

17、Format( _T(%lf), m_result );fresh() ;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:On

18、ButtonSqr() this-unary_operation = true ;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_bu

19、ffer.Format(_T(%lf) , this-m_result) ;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_

20、buffer) ;num_buffer.Format(_T(%lf) , 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-un

21、ary_operation = true ;this-m_result = 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_operatio

22、n = false ;void CScience:OnButtonCot() 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(

23、m_result) ;num_buffer.Format(_T(%lf) , 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 =

24、 ln( + num_buffer + ) = ;if ( m_result 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()

25、 / 数字 A(10)this-check() ;num_buffer += 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:OnButto

26、nE() / 数字 F(12)this-check() ;num_buffer += F ;fresh() ;void CScience:OnButtonF() / 数字 E(12)this-check() ;num_buffer += E ;fresh() ;2、进制间的转换运算 将result转换成强制转换成int型,通过itoa(int value, char *string, int radi*);函数将result转换成所需的radi*进制,类型为字符型并保存在 string 里 这里,在进展进制转换前, 需预先判断是否在之前有过进制转换,即需将result结果转回10进制表示,再进

27、展其他进制的转换。具体代码如下:void CScience:enableNumBut()/ 十进制处理if ( this-radi* = 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

28、( this-radi* = HE* )/ 确定翻开数字键0-Ffor( int i = 0 ; i EnableWindow(TRUE) ;for ( i = 0 ; i EnableWindow(TRUE) ; GetDlgItem( IDC_BUTTON_D )-EnableWindow(TRUE) ;else if( this-radi* = OCT )/ 确定翻开数字键0-7for( int i = 0 ; i EnableWindow(TRUE) ;GetDlgItem(IDC_BUTTON2 + i)-EnableWindow(FALSE) ;GetDlgItem(IDC_BUT

29、TON2 + i + 1 )-EnableWindow(FALSE) ;for ( i = 0 ; i EnableWindow(FALSE) ; GetDlgItem( IDC_BUTTON_D )-EnableWindow(FALSE) ;else if ( this-radi* = BIN )/ 确定翻开数字键0-1 , 关闭数字键2-Ffor( int i = 0 ; i EnableWindow(FALSE) ;for ( i = 0 ; i EnableWindow(FALSE) ; GetDlgItem( IDC_BUTTON_D )-EnableWindow(FALSE) ;运

30、行结果如下:其他细节处理/ 非十进制处理void CScience:enableDecBut( bool flag )/ 禁用小数点GetDlgItem( IDC_BUTTON_DOT )-EnableWindow(flag) ;/ 禁用 1/* , % , sin , cos , tan , cot , ln , log , e , GetDlgItem( IDC_BUTTON_MUT_INV )-EnableWindow(flag) ;GetDlgItem( IDC_BUTTON_PERCENT )-EnableWindow(flag) ;GetDlgItem( IDC_BUTTON_SI

31、N )-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 )

32、-EnableWindow(flag) ;GetDlgItem( IDC_BUTTON_PAI )-EnableWindow(flag) ;/ 禁用括号GetDlgItem( IDC_BUTTON_LEFTBRACKET )-EnableWindow(flag) ;GetDlgItem( IDC_BUTTON_RIGHTBRACKET )-EnableWindow(flag) ;/*/* 任意进制字符串转化为十进制 */*/int CScience:atoi_qeq(CString str, int radi*)int result = 0 , ne*t ;char ch = 0 ;for(

33、int i = 0 ; i str.GetLength() ; i+ )ch = stri ;if ( ch = 0 )ne*t = ch - 0 ;else if( ch = A )ne*t = ch - A + 10 ;else/ 错误返回0return 0 ;result = result * radi* + ne*t ; return result ;/左右括号的处理/void CScience:OnButtonLeftbracket() check() ;this-num_buffer += ( ;fresh() ;void CScience:OnButtonRightbracket

34、() check() ;this-num_buffer += ) ;fresh() ;4、 运行结果展示1、 简单的加减运算2、 多项式运算3、进制间转换运算五、课程设计心得体会 经过两周的努力,课程设计根本完成了。当我刚刚拿到题目的时候,感觉特别难,一点思路都没有,后来,经过教师的指导和自己进一步的仔细琢磨、认真思考以及刻苦练习,慢慢地有了点眉目。同时,在课程设计的过程中,我学会不少新的知识,扩展了自己的知识面,并且对以前已经学过的知识进展了稳固练习。在进展课设的过程中,发现团队合作十分重要,分开局部各个击破,使问题变得容易了很多,不然就这个题目而言,一个人做的话是非常复杂的,而且时间也不够。大家的通力合作,才完成了整个设计。 最后的一点体会是,面对困难的时候,如果绕不过去,就要努力抑制,可以求助于教师,同学,查阅资料,不要轻易放弃和改变已选 定的方法。总之,这次课设投入了很多,也收获了很多,吧所学知识进一步深入,并学到了很多课本以外的工作,感觉这次课设对我有很大帮助。感教师的辛勤指导,使我们抓住解决问题的关键,从而顺利完成课程设计。感同组同学的团结合作,以及其他同学给予的帮助,使我们的课程设计得以圆满完成。

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号