还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程设计报告课程名称面向对象程序设计C++设计题目计算器课程设计专业计算机科学与技术2013级姓名学号指导教师李晓虹2016年1月8日1背景与目的随着科技的发展,人们在很多地方都要用到计算器来进行工程和商业上的运算,计算器在日常生活中的重要地位已经举足轻重计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、等简单运算的工具计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用要实现计算功能,可以用VC++的知识编写程序来解决此问题简单计算器包括双目运算和单目运算功能双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用在程序设计中,可以用两种方法解决问题一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法由于多个函数均需要访问某些数据,这些数据常被设计为全局变量而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束2需求分析本软件主要用于计算机windows 2007/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能要程序能实现加,减,乘,除,开方;还要实现数据的输入,输出,计算,显示及程序退出等功能另外还可以实现多种科学计算的功能,如正负数的运算,还有分数与小数的转化3详细设计
3.1设计目标了解Windows应用程序的结构与DOS程序的不同,掌握应用MFC类库编写Windows应用程序的基本模式
3.2设计内容以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用
3.3设计思想基于MFC库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能生成简单的应用软件
3.4设计说明1包含的功能有加、减、乘、除运算,开方等功能2计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件3输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中4计算功能基本上是用系统内部函数5程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象6“CE”按钮可以清除所有已输入的数据从头计算
3.5设计模块图图3-1功能模块图图3-1简单计算器模块程图
3.5设计总流程图图3-2设计总流程图4详细设计
4.1设计步骤
(1)选择FileNewlProject命令,选择MFCAppWizardexe创建Project名为Caa,按确定在弹出界面选择创建对话框,单击Finish按钮
(2)在生成的设计界面中加入控件,得到计算器应用界面如图图4-1计算器应用界面
(3)为控件编辑框编辑ID,如图
(4)进入ClassWizard界面选择MessageMaps为控件插入消息映射,插入消息函数,实现控件命令功能如图图4-2ClassWizard界面5进入ClassWizard界面MessageVaribles为编辑框添加成员变量m_result用以显示结果如图图4-3添加成员变量界面
(6)在CaaDlg.h中加入在主要成员函数和成员变量的申明在CaaDlg.cpp中加入主要成员函数实现过程和成员变量的初始化(代码片段将于后面介绍)
4.2主要成员函数关系图图4-4成员函数关系图5计算器的测试结果
5.1测试一点击“
12.5”“+”“8”“=”,运算结果
20.5,与实际结果相同图5-1测试运算结果
5.2测试二点击“4”再点击“sqrt”,结果为2,与实际结果相符图5-2测试运算结果
5.3测试三点击“50”与“-”“*”“2”“=”,结果为-100,与实际结果相符图5-3测试运算结果6结果分析通过对计算器的功能测试,各类运算功能都已经实现,只是当输入的数据很大或者很小时,会致使结果很大或者很小,此时,若是结果的大小超过数据类型的表示范围,那么就会产生错误,并且显示错误信息若是没有超出数据的表示范围,那么就会用浮点数来表示比较大或者比较小的数据但总体来说本计算器完全可以运用到实际生活中去为人们带来方便7总结经过多次测试,得出结论为设计的计算器基本完成功能描述内容中的全部功能尽管还有一小部分的功能没有实现,但是收获很大这样不仅能加深我们对MFC程序设计的掌握,而且还及时、真正的做到了学以致用同时这次课程设计也让我学到了很多,不仅是巩固了先前学的MFC程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展也要善于思考程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决只有这样才能纠正程序的不足并使其更加人性化7附源代码#includestdafx.h#includewindows.h#includewindowsx.h#includeresource.h#includeMainDlg.h#includemath.hTCHARtext
[50];TCHARopt=c;BOOLhave=FALSEenable=TRUE;doublenum1=0num2=0;BOOLWINAPIMain_ProcHWNDhWndUINTuMsgWPARAMwParamLPARAMlParam{switchuMsg{HANDLE_MSGhWndWM_INITDIALOGMain_OnInitDialog;HANDLE_MSGhWndWM_COMMANDMain_OnCommand;HANDLE_MSGhWndWM_CLOSEMain_OnClose;}returnFALSE;}BOOLMain_OnInitDialogHWNDhwndHWNDhwndFocusLPARAMlParam{memsettext\0sizeofTCHAR*50;SetDlgItemTexthwndIDC_EDITTEXT
0.;returnTRUE;}voidtrim{inti=0j=0;fori=0;ilstrlentext;i++{iftext[i]!=\0text[i]!=0{j=i;}}forj=j+1;jlstrlentext;j++{text[j]=\0;}}voidAppendTextHWNDhwndTCHARc{iflstrlentext==1text
[0]==0c!=.{text
[0]=c;}else{text[lstrlentext]=c;}SetDlgItemTexthwndIDC_EDITtext;}voidresultHWNDhwnd{switchopt{case+:num2=num2+num1;break;case-:num2=num2-num1;break;case*:num2=num1*num2;break;case/:ifnum1==0{SetDlgItemTexthwndIDC_EDITTEXT除数不能为零.;enable=FALSE;return;}else{num2=num2/num1;}break;default:num2=num2+num1;break;}num1=0;sprintftextTEXT%fnum2;trim;SetDlgItemTexthwndIDC_EDITtext;}voidMain_OnCommandHWNDhwndintidHWNDhwndCtlUINTcodeNotify{TCHARc
[2];switchid{caseIDC_0:caseIDC_1:caseIDC_2:caseIDC_3:caseIDC_4:caseIDC_5:caseIDC_6:caseIDC_7:caseIDC_8:caseIDC_9:{ifenable{GetDlgItemTexthwndidc2;AppendTexthwndc
[0];}}break;caseIDC_DOT:{if!haveenable{have=TRUE;iflstrlentext==0{AppendTexthwnd0;}AppendTexthwnd.;}}break;caseIDC_PLUSS:caseIDC_SUB:caseIDC_MUL:caseIDC_DIV:{ifenable{iflstrlentext!=0{num1=atoftext;resulthwnd;GetDlgItemTexthwndidc2;opt=c
[0];memsettext\0sizeofTCHAR*50;have=FALSE;}else{GetDlgItemTexthwndidc2;opt=c
[0];}}}break;caseIDC_EQUAL:{iflstrlentext!=0enable{num1=atoftext;resulthwnd;memsettext\0sizeofTCHAR*50;have=FALSE;}}break;caseIDC_C:{memsettext\0sizeofTCHAR*50;num1=0;num2=0;have=FALSE;enable=TRUE;opt=c;SetDlgItemTexthwndIDC_EDITTEXT
0.;}break;caseIDC_CE:{memsettext\0sizeofTCHAR*50;num1=0;have=FALSE;enable=TRUE;SetDlgItemTexthwndIDC_EDITTEXT
0.;}break;caseIDC_CHANGE:{ifstrlentext!=0enable{num1=atoftext;num1=-num1;sprintftextTEXT%fnum1;trim;SetDlgItemTexthwndIDC_EDITtext;}}break;caseIDC_1CX:{ifenable{num1=atoftext;ifnum1==0{SetDlgItemTexthwndIDC_EDITTEXT除数不能为零.;enable=FALSE;}else{num1=
1.0/num1;sprintftextTEXT%fnum1;trim;SetDlgItemTexthwndIDC_EDITtext;}}}break;caseIDC_BFH:{}break;caseIDC_SQRT:{ifenable{num1=atoftext;ifnum10{SetDlgItemTexthwndIDC_EDITTEXT被开方数不能为负数.;enable=FALSE;}else{num1=sqrtnum1;sprintftextTEXT%fnum1;trim;SetDlgItemTexthwndIDC_EDITtext;}}}break;caseIDC_BACKSPACE:{iflstrlentext0enable{text[lstrlentext-1]=\0;iflstrlentext==0{SetDlgItemTexthwndIDC_EDITTEXT
0.;}else{SetDlgItemTexthwndIDC_EDITtext;}}}break;caseIDC_MC:{}break;caseIDC_MR:{}break;caseIDC_MS:{}break;caseIDC_MPLUSS:{}break;caseID_ABOUT:{MessageBoxhwndTEXTTEXT关于计算器MB_OK;}break;caseID_HP:{systemstartC:\\windows\\help\\calc.chm;}break;default:break;}}voidMain_OnCloseHWNDhwnd{EndDialoghwnd0;}。