C++课程设计--计算器设计报告.doc_第1页
C++课程设计--计算器设计报告.doc_第2页
C++课程设计--计算器设计报告.doc_第3页
C++课程设计--计算器设计报告.doc_第4页
C++课程设计--计算器设计报告.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

一、项目简介本设计将实现一个简单计算器。其功能参照Windows附件中自带的计算器。这个计算器实现了简单的四则运算功能,还实现了模运算和指数运算,具有简洁的图文外观。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互让使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。在课程设计中,系统开发平台为Windows 7,程序设计设计语言采用Visual C+,在程序设计中,采用了面向对象的解决问题的方法。在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用面向对象程序设计方法解决问题。由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C+程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。二、功能介绍它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单击按钮进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。(1)包含的功能有:加、减、乘、除运算,开方、求模等功能(2)计算器上数字09为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。(3) 输入的原始数据和结果都显示在窗口顶部的同一个标签中。 (4) 计算功能基本上是用公式计算方法实现。(5) 程序可以能自动判断输出数据的正确性,保证不出现结果中以0开头等不正常现象。功能模块的实现:基于dialog类添加Caculator类,在这个类中实现高级的按钮控件。在此类中对于所有的对于按钮的绘制工作都是在对话框资源管理中完成的,实现按钮对鼠标单击动作执行不同的计算,在UpdateData(false)函数后显示文本。三、系统实现概述1、窗体设计打开Microsoft Visual C+ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizardexe工程,输入工程名Calculator及其所在位置,点击确定,如图1所示。 图1将弹出MFC应用程序向导-步骤1对话框,选择基本对话框,点击完成,如图2所示。图2这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图3所示。图3 2、编辑资源(1)编辑对话框及控件资源 在图5所示的Resoure View选项卡中打开Dialog资源组,双击IDD_CALCULATOR_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。而按钮的创建则以“1”为例进行介绍,其他按钮的创建可参照以下步骤进行操作。a)在图5中Controls的编辑框按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图4所示,在该对话框中输入ID属性。 图4b)在图3中Controls的按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图5所示,在该对话框中输入控件的ID值和标题。图5 按照上面的操作过程编辑其他按钮和编辑框等对象的属性。利用Visual C+提供的资源编辑器对对话框资源进行编辑。删除对话框中默认的OK和Cancel按钮。添加一个Edit控件,其控件ID为IDC_EDIT1。添加若干按钮控件,其ID如表a所示。按钮名称按钮ID用途0IDC_0按键01IDC_1按键12IDC_2按键23IDC_3按键34IDC_4按键45IDC_5按键56IDC_6按键67IDC_7按键78IDC_8按键89IDC_9按键9.IDC_POINT小数点=IDC_EQUAL等号+IDC_ADD加号-IDC_MINUS减号*IDC_MUTIPLY乘号/IDC_DIVID除号BackspaceIDC_BACKSPACE退格IDC_SQUAREROOT开方%IDC_PERCENT百分号1/xIDC_RECIPROCAL倒数帮助信息IDC_HELP帮助信息+/-IDC_SIGN相反数ModIDC_MOD求余n!IDC_FACTORIALn的阶乘SinIDC_SIN正弦函数CosIDC_COS余弦函数TanIDC_TAN正弦函数LogIDC_LOG常用对数函数LnIDC_LN自然对数函数xyIDC_POWER以x为底的y次幂二进制IDC_CHANGE十进制转为二进制AndIDC_AND逻辑运算符NotIDC_NOT逻辑运算符OrIDC_OR逻辑运算符XorIDC_XOR逻辑运算符IDC_PI圆周率00IDC_HUNDRED乘百表a 完成后界面如图6所示。图6(2)连接变量和代码a) 给编辑框连接变量。在编辑框上单击鼠标右键,在弹出菜单中选择建立类向导菜单项,弹出MFC ClassWizard对话框,选择Member Variables选项卡,如图7所示。图7在Control IDs列表框中选择IDC_DISPLAY,单击Add Variables按钮,在弹出的对话框中连接变量m_edit_value。变量类型设定为CString型。如图8所示。图8 b) 给“1”按钮连接代码。在“1”按钮上单击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择Messages Maps选项卡,然后在Object IDs列表框中选择IDC_1,在Messages列表框中选择BN_CLICKED项,即选择单击按钮事件,如图9所示。 图9(3)菜单的设计选择 插入/资源命令,将显示插入资源对话框。如图10所示。选择Menu,点击新建即可。图10Resoure View选项卡中打开Menu资源组,双击IDR_MENU1, 然后给菜单添加相应的标题,并把每个菜单对应的ID值与相应的按钮的一致。如图11所示。 图11在对话框的任何一个空白域单击鼠标右键,然后在弹出的快捷菜单中选择属性命令,弹出对话 属性对话框,如图12。在对话框中的菜单组合框中选择IDR_MENU1。图12最终的得到的界面如图13。图13四、关键技术(1)操作数的输入编辑框所关联的变量为m_temp,程序开始时为零。每按下一个数字键按钮,就把它累加到m_temp里并刷新显示。BOOL型变量UpdateData来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。当UpdateData=TRUE时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行UpdateData=TRUE。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_temp上,若没有则把m_temp乘以10,然后累加到编辑框所关联的变量m_temp上。BOOL CCalculatorDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization here OperatorPressed=FALSE; After=FALSE; m_edit_value=0; value1=0,value2=0,result=0; Restarted=TRUE;return TRUE; / return TRUE unless you set the focus to a control(2)单目运算符功能的实现由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_temp=sqrt(m_temp).按下按钮即可实现其功能。void CCalculatorDlg:OnSquareroot() / TODO: Add your control notification handler code hereUpdateData(TRUE);double m_temp=atof(m_edit_value);/将字符串类型的m_edit_value转化为浮点数类型的m_tempif(m_temp=0)m_temp=sqrt(m_temp);/求开方m_edit_value.Format(%g,m_temp);/将m_temp的值返回到m_edit_value中,默认精度为六位UpdateData(false);elseMessageBox(负数不能开方);(3)双目运算符功能的实现双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_temp中的值保存到变量temp2中,然后把m_temp清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动,参见(6)。(4)退格键功能的实现当按下一次退格按钮时,若m_temp为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_temp执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。完成后需要把dint将减小1。void CCalculatorDlg:OnBackspace() / TODO: Add your control notification handler code here UpdateData(true);char str256;int length;length = m_edit_value.GetLength();/得到m_edit_value的长度,赋给lengthfor(int i=0;i=0) m_temp=sqrt(temp2); temp2m_temp;”。其他单目运算符同理。为实现连续运算是不需要按下等号即可实现,又在所有的运算符按钮的消息处理函数代码前加上了“if(addt!=0)Onequal();”。既若之前有按下双目运算符和两个操作数则连续运算再按下任一运算符时会自动调用等号的处理函数将上次的运算完成并保存结果方便下一次的运算。五、进一步的设想根据实验结果,本设计基本完成了设计要求,但是由于键盘数目的限制,数码数目的限制使得这个计算器不能拥有强大的计算功能。还有就是考虑到课程时间的限制和本人技术的水平,没有更多的完善系统功能,而是尽量简单的设计。如果有时间和更多的经历投入,相信本设计可以达到更好的功能。例如:1、 一键清空按钮2、 动态设置计算器大小3、 拥有历史数据记忆4、 对弧度、梯度的运算5、 更多的数进制转换6、 一些统计函数的运算6、 个人贡献几个星期的课程设计以后,根据老师的指导书与讨论小组的共同努力,终于把这个简易的计算器完成了。在整个工作任务中,我负责了图形设计这个部分,跟MFC打了一下交道。尽

温馨提示

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

最新文档

评论

0/150

提交评论