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

下载本文档

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

文档简介

..实验报告课程名称:windows软件开发实习实验项目:科学计算器XX工业大学实验报告〔适用计算机程序设计类专业__软件1006__101201622__张鑫可实验名称:1.实验目的:本程序设计实践是采用C++语言,在VC平台下设计。本课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。程序设计实践主要是培养学生利用系统综合C++语言进行程序设计的能力。1.进一步巩固和复习C++程序设计的基础知识。2.培养学生结构化程序、模块化程序设计的方法和能力。3.了解软件的编制过程及各环节的具体内容。4.提高学生程序调试技巧、软件设计能力和代码规范化等素质。5.提高学生分析问题、解决问题以及实际运用能力。实验内容:设计一个简单的计算器。要求能实现整数、小数算数运算。程序带清零按钮。3.实验方案〔程序设计说明见附件4.实验步骤或程序〔经调试后正确的源程序〔填写主要步骤与程序代码等。见附件A5.出现的问题及解决方法附件AXX工业大学实验报告〔适用计算机程序设计类专业__软件1006__101201622__张鑫可实验步骤或程序:一、关于VisualC++:VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境〔integrateddevelopmentenvironment,IDE。VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。这些组件通过过一个名为DeveloperStudio的组件集成为和谐的开发环境。Microsoft的主力软件产品。VisualC++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了VisualC++.NET<VisualC++7.0>,但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。所以实际中,更多的是以VisualC++6.0为6平台。VisualC++6.0以拥有"语法高亮",自动编译功能以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及创建预编译头文件<stdafx.h>、最小重建功能及累加连结<link>著称。这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。二、设计要点1、基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。2、创新要求:在基本要求达到后,进行创新设计。3、对系统进行功能模块分析、控制流程分析正确。4、系统设计要实用,编程简练,可用,功能全面,并有一定的容错能力。5、说明书、流程图要清楚6、要求程序设计合理,用户界面良好,如采用菜单工作方式。三、实验步骤:1、首先利用MFCAppWinzard生成计算器应用程序框架具体步骤如下:执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFCAppWizard<exe>选项,然后在Projectname文本框中输入cyyJSQ。Lacation文本框是指项目的本地路径。界面设计在界面中添加按钮,编辑框等相应控件,并合理摆放,使用户能更加方便的使用。具体设计如下图所示:绑定控件通过如下方式绑定控件。具体绑定如下表所示:按钮控件资源清单按钮名称按钮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_DIV除号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从后向前删除逐步实现代码①按钮1-9的实现文本编辑框的类型为string型,所以若按下数字1按钮时只需在数组尾部添加"1"即可其他代码如此类推,具体代码如下:voidCMyDlg::OnButton0<>{ //数字0 this->check<>; CStringtmp=num_buffer; //当为小数点后或其前面有不为零的数时允许输入零 if<tmp.ReverseFind<'.'>!=-1||tmp.FindOneOf<"123456789">!=-1> { num_buffer+="0"; } else { num_buffer="0"; } GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }voidCMyDlg::OnButton1<>{ //数字1 this->check<>; num_buffer+="1"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>;}voidCMyDlg::OnButton2<>{ //数字2 this->check<>; num_buffer+="2"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>;}voidCMyDlg::OnButton3<>{ //数字3 this->check<>; num_buffer+="3"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }voidCMyDlg::OnButton4<>{ //数字4 this->check<>; num_buffer+="4"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }voidCMyDlg::OnButton5<>{ //数字5 this->check<>; num_buffer+="5"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }voidCMyDlg::OnButton6<>{ //数字6 this->check<>; num_buffer+="6"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }voidCMyDlg::OnButton7<>{ //数字7 this->check<>; num_buffer+="7"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }voidCMyDlg::OnButton8<>{ //数字8 this->check<>; num_buffer+="8"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }voidCMyDlg::OnButton9<>{ //数字9 this->check<>; num_buffer+="9"; GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }voidCMyDlg::OnButtonDot<>{ //小数点 if<num_buffer.IsEmpty<>> { num_buffer="0."; } elseif<num_buffer.ReverseFind<'.'>==-1> { num_buffer+="."; } GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<num_buffer>; }//求相反数voidCMyDlg::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〔函数反应到文本编辑框中,具体代码如下://加voidCMyDlg::OnButtonAdd<>{ this->num1=atof<num_buffer>; this->num_buffer.Empty<>; this->operation_type=ADD;}//减voidCMyDlg::OnButtonSub<>{ this->num1=atof<num_buffer>; this->num_buffer.Empty<>; this->operation_type=SUB;}//乘voidCMyDlg::OnButtonMul<>{ this->num1=atof<num_buffer>; this->num_buffer.Empty<>; this->operation_type=MUL;}//除voidCMyDlg::OnButtonDiv<>{ this->num1=atof<num_buffer>; this->num_buffer.Empty<>; this->operation_type=DIV;}voidCMyDlg::OnButtonRes<>{ constdoubleEPSINON=0.00001; boolerror=false;this->num2=atof<num_buffer>; this->num_buffer.Empty<>;switch<this->operation_type> { caseADD: this->m_num=num1+num2; break; caseSUB: this->m_num=num1-num2; break; caseMUL: this->m_num=num1*num2; break; caseDIV: if<<num2>-EPSINON>&&<num2<=EPSINON>>{ num_buffer="除数不能为零"; error=true;} else{ this->m_num=num1/num2; }break; default:this->m_num=this->num2; break;}结果如下图所示③科学性运算按钮的处理:只需根据数值分析等为按钮进行算法的合理设计,正确赋值即可,具体代码如下://自然底数evoidCScience::OnButtonEConst<>{ this->check<>; num_buffer.Format<_T<"%lf">,M_E>; fresh<>;}//圆周率∏voidCScience::OnButtonPai<>{ this->check<>; num_buffer.Format<_T<"%lf">,M_PI>; fresh<>;}voidCScience::OnButtonNi<>{ //正负处理 m_result=-atof<num_buffer>; //转化为字符串 num_buffer.Format<_T<"%lf">,m_result>; fresh<>;}voidCScience::OnButtonMutInv<>{ this->unary_operation=true; constdoubleEPSINON=0.00001; this->m_result=atof<num_buffer>; if<<this->m_result>=-EPSINON>&&<this->m_result<=EPSINON>> { GetDlgItem<IDC_EDIT_SHOW>->SetWindowText<"0的倒数没有定义\n">; } else { this->m_result=1.0/m_result; num_buffer.Format<_T<"%lf">,m_result>; fresh<>; this->unary_operation=false; }}voidCScience::OnButtonPercent<>{ this->unary_operation=true; CStringtmp=num_buffer; this->m_result=atof<num_buffer>; tmp.Format<_T<"%lf">,this->m_result*100>; tmp+="%"; fresh<tmp>; this->unary_operation=false;}voidCScience::OnButtonSqr<>{ 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;}voidCScience::OnButtonSin<>{ CStringtmp; this->unary_operation=true; this->m_result=atof<num_buffer>; num_buffer.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;}voidCScience::OnButtonCos<>{ CStringtmp; this->unary_operation=true; this->m_result=atof<num_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;}voidCScience::OnButtonTan<>{ CStringtmp; constdoubleEPSINON=0.00001; this->unary_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><=EPSINON>> { error<>; } else { this->m_result=tan<m_result>; num_buffer.Format<_T<"%lf">,this->m_result>; tmp+=num_buffer; fresh<tmp>; this->unary_operation=false; }}voidCScience::OnButtonCot<>{ CStringtmp; constdoubleEPSINON=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><=EPSINON>> { error<>; } else { this->m_result=cos<m_result>/sin<m_result>; num_buffer.Format<_T<"%lf">,this->m_result>; tmp+=num_buffer; fresh<tmp>; this->unary_operation=false; }}voidCScience::OnButtonLn<>{ CStringtmp; constdoubleEPSINON=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_result<=EPSINON> { error<"参数必须大于0">; } else { this->m_result=log<m_result>; num_buffer.Format<_T<"%lf">,this->m_result>; tmp+=num_buffer; fresh<tmp>; this->unary_operation=false; }}运行结果如下:④进制间的转换:按钮A-F的实现与,进制运算时,按钮条件的设置。在进行16进制运算时,需定义A-F按键,而在10进制时,A-F按键设置为不可使用,以及8进制时8、9按钮禁止使用。具体代码如下:voidCScience::OnButtonA<>{ //数字A<10> this->check<>; num_buffer+="A"; fresh<>; }voidCScience::OnButtonB<>{ //数字B<11> this->check<>; num_buffer+="B"; fresh<>; }voidCScience::OnButtonC<>{ //数字C<11> this->check<>;num_buffer+="C"; fresh<>; }voidCScience::OnButtonD<>{ //数字D<12> this->check<>; num_buffer+="D"; fresh<>; }voidCScience::OnButtonE<>{ //数字F<12> this->check<>; num_buffer+="F"; fresh<>; }voidCScience::OnButtonF<>{//数字E<12> this->check<>; num_buffer+="E"; fresh<>; }2、进制间的转换运算将result转换成强制转换成int型,通过itoa<intvalue,char*string,intradix>;函数将result转换成所需的radix进制,类型为字符型并保存在string[]里这里,在进行进制转换前,需预先判断是否在之前有过进制转换,即需将result结果转回10进制表示,再进行其他进制的转换。具体代码如下:voidCScience::enableNumBut<>{ //十进制处理 if<this->radix==DEC> { enableDecBut<TRUE>; //确定打开数字键0-9 for<inti=0;i<8;i++> GetDlgItem<IDC_BUTTON2+i>->EnableWindow<TRUE>; //确定关闭数学键A-F for<i=0;i<5;i++> { GetDlgItem<IDC_BUTTON_B+i>->EnableWindow<FALSE>; } GetDlgItem<IDC_BUTTON_D>->EnableWindow<FALSE>; } //非十进制处理 else { //禁用十进制操作 enableDecBut<false>; /*十六进制处理*/ if<this->radix==HEX> { //确定打开数字键0-F for<inti=0;i<8;i++> GetDlgItem<IDC_BUTTON2+i>->EnableWindow<TRUE>; for<i=0;i<5;i++> { GetDlgItem<IDC_BUTTON_B+i>->EnableWindow<TRUE>; } GetDlgItem<IDC_BUTTON_D>->EnableWindow<TRUE>; } elseif<this->radix==OCT> { //确定打开数字键0-7 for<inti=0;i<6;i++> GetDlgItem<IDC_BUTTON2+i>->EnableWindow<TRUE>; GetDlgItem<IDC_BUTTON2+i>->EnableWindow<FALSE>; GetDlgItem<IDC_BUTTON2+i+1>->EnableWindow<FALSE>; for<i=0;i<5;i++> { GetDlgItem<IDC_BUTTON_B+i>->EnableWindow<FALSE>; } GetDlgItem<IDC_BUTTON_D>->EnableWindow<FALSE>; } elseif<this->radix==BIN> { //确定打开数字键0-1,关闭数字键2-F for<inti=0;i<8;i++> GetDlgItem<IDC_BUTTON2+i>->EnableWindow<FALSE>; for<i=0;i<5;i++> { GetDlgItem<IDC_BUTTON_B+i>->EnableWindow<FALSE>; } GetDlgItem<IDC_BUTTON_D>->EnableWindow<FALSE>; } }}运行结果如下:④其他细节处理//非十进制处理voidCScience::enableDecBut<boolflag>{ //禁用小数点 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>; GetDlgItem<IDC_BUTTON_PAI>->EnableWindow<flag>; //禁用括号 GetDlgItem<IDC_BUTTON_LEFTBRACKET>->EnableWindow<flag>; GetDlgItem<IDC_BUTTON_RIGHTBRACKET>->EnableWindow<flag>;}/************************************************************************//* 任意进制字符串

温馨提示

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

评论

0/150

提交评论