MFC计算器程序报告_第1页
MFC计算器程序报告_第2页
MFC计算器程序报告_第3页
MFC计算器程序报告_第4页
MFC计算器程序报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

C++课程设计试验报告学号 名院系专业一、课题名称简易的计算器设计。二、问题陈述编写一个计算器程序,能够进展四则运算、取模等运算要求:1、个人完成;2、运用对话框编写,界面上只能有一个输出框,数据通过按钮输入到程序,并显示在输出框中;当按下运算符后再输入数据,输出框中应显示数据;运算结果也显示在输出框中。3、四则运算、取模运算是最低要求,程序能正确执行;4、界面设计美观、合理;5、独立完成;三、设计目标和设计任务编写一个计算器程序,能够进展四则运算、取模、乘方、立方,并且给计算器程序添加背景。四、解题算法思想1.创立一个基于对话框的工程2.给对话框参加相应的操作按钮3.给按钮加上代码,设置属性4.为实现四则运算、取模等操作添加必要函数五、程序算法过程①选择File→New菜单命令,选择Project选项卡,并选择MFCAppWizard(exe),name命名为calculator;选择应用程序基于对话框,即Dialogbased。屡次单击next,最终单击Finish控件的属性中的标题局部。选中全部按钮,在属性中的ExtendedStyle中选中Modalframe,〔留意,在布局按钮时,为了使按钮总体整齐美观,可以先创立一行或一列按钮,使他们保持整齐后,按住Ctrl键,选中这一行或一列按钮,再移动鼠标,即可生成另一行或一列按钮;也可以通过Layout菜单中的指令对其进展布局〕③鼠标右击按钮控件,选择属性,即可对其ID进展更改,各ID与标题内容对应如下:IDIDIDC_BUTTON0IDC_BUTTON1IDC_BUTTON2标题012IDIDC_BUTTONCLSIDC_ADDIDC_PLUS+-IDC_BUTTON33IDC_MULTIPLY*IDC_BUTTON44IDC_DEVIDE/IDC_BUTTON55IDC_EQUALL=IDC_BUTTON66IDC_QUM取模|IDC_BUTTON77IDC_SQU平方IDC_BUTTON88IDC_CUB立方IDC_BUTTON99④在对话框非控件局部单击鼠标右键,翻开类向导ClassWizard,将数字按钮0~9关联到函数OnEnternum,方法为单击数字按钮ID,然后单击Message中的BN_CLICKED,最终单击右侧的AddFunction,在其中输入函数名即可。如以下图:、、、/按钮关联到函数OnCompute〔,将清零按钮关联到函数OnButtoncls将等号按钮关联到函数OnEqualOnQum〔,将平方按钮关联到函数OnSq〔,将立方按钮关联到函数OnCu〔。⑤为文本编辑框IDC_EDIT1添加关联float型变量m_nnum。方法为翻开类向导,单击MemberVariables选项卡,选中IDC_EDIT1,单击右侧的AddVariable...,在弹出的对话框中添加变量。如以下图:添加类成员变量,它们的名称及用途为:private添加类成员变量,它们的名称及用途为:private:BOOLm_bnext;//记录在键入数据后是否键入过运算符intm_ncomflag;//记录键入运算符次数floatm_numold;//记录上次运算的结果operationm_oper;//记录上次运算符号方法为在ClassView选项卡中翻开CCalculatorDlg,在classCCalculatorDlg:publicCDialog中添加上述代码。如以下图:同时添加代码:typedefenum{add,plus,multiply,devide}operation;////enum定义的范围内取,add,plus,multiply,devide。⑥接下来为各个函数添加代码。代码内容及解释如下:voidCCalculatorDlg::OnEnternum{//TODO:AddyourcontrolnotificationhandlercodehereCStringstrnum,strold;//CString类型的变量,便利之后字符串的拼接。this->GetDlgItemText(IDC_EDIT1,strold);////strold。this->GetFocus->GetWindowText(strnum);//将所按下的数字符的标题内容赋给strnum。if(m_bnext)//bnext变量在此的作用是推断输入数字符前,是否已输入操作符。m_bnext//的初始值为TURE。{this->SetDlgItemText(IDC_EDIT1,strnum);//假设m_bnext的值为TURE,即已输入//操作符,则将编辑框控件内的正文直接重置为strnum的值。m_bnext=FALSE;//m_bnext的值设为FALSE,为下一次数//字的输入做好预备。}else{if(strold==“0“)this->SetDlgItemText(IDC_EDIT1,strnum);//假设编辑框内的数字显示为零〔即第一次//按下的数字符是,也要将编辑框的正文重置。else

this->SetDlgItemText(IDC_EDIT1,strold+strnum);//将编辑框控件内的正文设//置为strold+strnum,马上按下的数字符拼接在原编辑框正文之后。}UpdateData(TRUE);//将编辑框显示的内容传递给m_nnum。}voidCCalculatorDlg::OnComputer{//TODO:AddyourcontrolnotificationhandlercodehereCStringstroper;m_ncomflag++;//m_ncomflag的作用是记录操作符的键入次数。m_bnext=TRUE;//由于按下了操作符,故将m_bnext的值置为TRUE。if(m_ncomflag>1)//以下代码是为了应对消灭的连续运算而设计的。{m_numold=computer(m_numold,m_oper);//m_numold的作用是记录下上次运算的结//果。this->GetFocus->GetWindowText(stroper);//将所按下的操作符的标题内容赋给//stroper。if(stroper==“+“)m_oper=add;if(stroper==“-“)m_oper=plus;if(stroper==“*“)m_oper=multiply;if(stroper==“/“)m_oper=devide;//四种符号对应四种运算,便利接下来在computer函数//中的运算执行过程。}else//以下代码应对消灭的简洁运算过程,例如执行1+1=。{this->GetFocus->GetWindowText(stroper);if(stroper==“+“)m_oper=add;if(stroper==“-“)m_oper=plus;if(stroper==“*“)m_oper=multiply;if(stroper==“/“)m_oper=devide;m_numold=m_nnum;//m_nnum的值保存在m_numold中。}m_nnum=m_numold;//这句代码也是为了能将连续运算中的中间结果显示到编辑框内//而设计的。UpdateData(FALSE);//刷编辑框的显示内容。}其中函数computer〔〕是添加的一个成员函数,其代码为:floatCCalculatorDlg::computer(floatnum,operationm_oper)//computer函数是运算的实际执行//函数。{floatresult;switch(m_oper)//依据键入的不同操作符,执行不同的操作。其中,m_nnum为当前编辑框//的显示内容。{caseadd:result=num+m_nnum;break;caseplus:result=num-m_nnum;break;casemultiply:result=num*m_nnum;break;casedevide:if(m_nnum==0){AfxMessageBox(“除数为零,出错!“);result=0;exit;//考虑到除数为零的状况。}elseresult=num/m_nnum;break;}returnresult;//返回运算结果。}还要在classCCalculatorDlg:publicCDialog中添加对该函数的原型声明:floatcomputer(floatnum,operationoper);//函数的原型声明。voidCCalculatorDlg::OnButtoncls//清零函数。{//TODO:Addyourcontrolnotificationhandlercodeherethis->SetDlgItemText(IDC_EDIT1,“0“);m_numold=0;}voidCCalculatorDlg::OnQum//执行取模操作{//TODO:Addyourcontrolnotificationhandlercodehereif(m_numold>=0)m_nnum=m_numold;elsem_nnum=-m_numold;m_numold=m_nnum;UpdateData(FALSE);}voidCCalculatorDlg::OnSqu//执行平方操作{//TODO:Addyourcontrolnotificationhandlercodeherem_nnum=m_nnum*m_nnum;UpdateData(FALSE);}voidCCalculatorDlg::OnCub//执行立方操作{//TODO:Addyourcontrolnotificationhandlercodeherem_nnum=m_nnum*m_nnum*m_nnum;UpdateData(FALSE);}此外,要在对话框类的初始化函数中,对变量进展初始化:BOOLCCalculatorDlgOnInitDialog{...//TODO:Addextrainitializationherem_ncomflag=0;m_nnum=0;UpdateData(FALSE);}⑦最终,为了是对话框美观,添加背景图片。预备一张bmp格式的图片〔假设不是bmp格式,可以用画图翻开一张图片,另存为时选择bmp格式即可“Bitma“Bitmapbmp图片,最终选择了其中一张跑车背景的图片做背景。如以下图:定位到voidCCalculatorDlg::OnPanif...eselse添加如下代码:else{ID}

//CDialog::OnPaint要制止这个调CPaintDC dc(this);CRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP2); //IDB_BITMAP2是背景图对应BITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width,rect.Height,&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);最终程序运行画面如以下图:六、测试数据如运行2*3/6+4-9= 运行的效果图如下-4接着按取模键,结果如以下图4然后接连按下乘方和立方键,结果如以下图4096七、运行状况分析加减乘除及取模、乘方、立方的运算良好,都可以正确运算,假设遇到除不尽的状况,0时会弹出对话框,如以下图程序的整体运行状况良好,实现了题目所要求的功能。八、设计小结本次MFC计算器的制作,程序可以进展四则运算、取模、乘方、立方,虽然做出了程序,但是程序仍旧存在肯定的问题,程序比较简陋,比方没有参加三角函数的运算可以做得更好。九、

温馨提示

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

评论

0/150

提交评论