为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

万能计算器

2017-09-01 18页 doc 200KB 211阅读

用户头像

is_998870

暂无简介

举报
万能计算器万能计算器 基于C++的万能计算器的设计与实现 摘要:基于C++的万能计算器~不仅能实现简单的四则运算功能~还实现了高级的科学计算功能与复数计算功能~系统具有良好的界面、必要的交互信息和快捷简单的操作。使用MFC按钮控件的消息处理函数对按钮的操作进行处理~并使用结构化和面向对象方法处理问题。 关键词 软件设计,计算器,C++,按钮控件,MFC 0引 言 基于C++的万能计算器的设计主要是帮助人们来完成快速计算的要求,减少计算工作量,基于C++的万能计算器可以在简单计算器界面下进行简单运算,也可以在科学计算器界面下进行...
万能计算器
万能计算器 基于C++的万能计算器的与实现 摘要:基于C++的万能计算器~不仅能实现简单的四则运算功能~还实现了高级的科学计算功能与复数计算功能~系统具有良好的界面、必要的交互信息和快捷简单的操作。使用MFC按钮控件的消息处理函数对按钮的操作进行处理~并使用结构化和面向对象方法处理问。 关键词 软件设计,计算器,C++,按钮控件,MFC 0引 言 基于C++的万能计算器的设计主要是帮助人们来完成快速计算的要求,减少计算工作量,基于C++的万能计算器可以在简单计算器界面下进行简单运算,也可以在科学计算器界面下进行高级的科学计算,还可以在复数计算器界面下进行复数的运算,并且可以分别计算弧度、角度的三角函数等较为复杂的运算。 1设计思想 1.1 课题背景 计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。要实现计算功能,可以用VC++的知识编写程序来解决此问题。基于C++的万能计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度,使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对各行各业人员的工作有非常大的帮助。 1.2 程序设计思想 在程序设计中,可以用传统的结构化程序设计方法,也可以用更先 进的面向对象程序设计方法。 由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。 在面向对象程序设计中,关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两个要素通常是必不可少的,甚至还应考虑类必须满足的约束。 第1页(共13页) 2 系统 2.1 Visual C++简介 Visual C++6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。 VC++6.0是Windows 95/98、XP或Windows NT下的一个应用程序,对软硬件没有特殊要求,具有使用方便、灵活,而且对连接生成后的文件具有可移植性好等特点,为人们所青睐。 2.2可行性分析 日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,它需要具有占用空间资源较少,对电脑其他程序的应用影响较小的优点。基于C++的万能计算器设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息、较好的可移植性和美观的操作界面面,使用人员能快捷简单地进行操作,即时准确地获得需要的计算的结果,大大降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。 2.3 需求分析 基于C++的万能计算器主要用于计算机windows XP/7以及windows XP前的各版本的用户的使用。所设计的程序能实现:加,减,乘,除,开方,倒数等运算功能;还能实现数据的输入、输出、计算、显示及程序退出等功能,另外还可以实现多种科学计算与复数计算的功能,如:三角函数的计算,弧度与角度间的转换,对数指数的计算、复数的加减乘除运算等等。 3 系统功能说明 第2页(共13页) 基于C++的万能计算器通过单击按钮进行操作,即时准确地获得需要的计算的结果,充分降低了数字计算的难度,节约了时间。包含的功 [1]能有:加、减、乘、除运算、开方、求倒数等功能。计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。“CE”按钮可以清除所有已输入的数据。 4 系统的实现 4.1 窗体设计 利用MFC AppWinzard生成计算器应用程序框架步骤如下:执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入Calculator 。Lacation文本框是指项目的本地路径。单击OK按钮,弹出MFC AppWinzard_Step1对话框,选中单选按钮。单击Next按钮,直至弹出MFC AppWinzard_Step4 of4对话框。单击Finish按钮,创建框架。 4.2 编辑资源 4.2.1编辑对话框及控件资源 使用Visual C++提供的资源编辑器对对话框资源进行编辑。删除对话框中默认的OK和Cancel按钮。添加一个Edit控件,其控件ID为IDC_DSPEDIT。添加若干按钮控件,其ID如表1所示: 表1 按钮资源清单 序号 按钮名称 按钮ID 用途 1 0 BTN_0 按键0 2 1 BTN_1 按键1 3 2 BTN_2 按键2 4 3 BTN_3 按键3 5 4 BTN_4 按键4 6 5 BTN_5 按键5 7 6 BTN_6 按键6 8 7 BTN_7 按键7 9 8 BTN_8 按键8 10 9 BTN_9 按键9 第3页(共13页) 11 . BTN_10 小数点 12 = BTN_11 求值 13 + BTN_12 加好 14 - BTN_13 减号 15 * BTN_14 乘号 16 / BTN_15 除号 17 CE BTN_16 清屏 18 Sqrt BTN_17 开方 19 1/x BTN_18 倒数 20 sin BTN_19 正弦 21 cos BTN_20 余弦 22 tan BTN_21 正切 23 x^2 BTN_22 平方 24 x^3 BTN_23 立方 25 x^y BTN_24 Y次幂 26 exp BTN_25 E的幂 27 ln BTN_26 E的对数 28 log BTN_27 对数 29 i BTN_28 i 30 -/+ BTN_29 正负号 31 10^x BTN_30 X次方 32 N! BTN_31 N的阶乘 添加2个单选按钮,按钮资源为角度按钮BTN_DEGREE和弧度按钮 BTN_RAD。添加4个静态框,将编辑控件,普通计算,高级计算分别分 组。其效果如图1所示。 图1 编辑对话框资源 4.2.2编辑菜单资源 在Visual C++中的 第4页(共13页) Workspace工具栏中,选中ResourceView选项卡。在其中的Menu项上右击,在弹出的快捷菜单中选择Insert命令,如图2所示。 图2 添加菜单资源 将添加的菜单资源的ID更改为IDR_MENU。利用资源编辑器对菜单进行编辑,编辑后的菜单如图3所示。 图3 编辑菜单资源 4.3 对话框界面设计 对主对话框添加成员变量和函数。 主要成员变量: CButton m_DspStatic; CString m_advEdit; //显示计算结果的编辑框 char m_buffer[100];//用来存贮需要显示的数字 CString m_StrBegin;//记录初始操作数的字符串 float DtoR; //角度弧度的判断变量 主要成员函数: Protected: virtual void DoDataExchange(CDataExchange*pDX);//数据交换函数 virtual BOOL OnInitDialog();//虚函数,可覆盖用来进行用户初始 第5页(共13页) 化操作 virtual void OnOK();//虚函数,覆盖用来屏蔽Enter操作 除以上主要成员外,还要对每个按钮控件定义一个CAdvButton的对象与之相关联,并为每个按钮控件建军立一个成员函数来响应其EN_CLICKED消息。如图4所示。 图4 为按钮控件添加消息响应 4.3.1加载菜单资源 在4.2.2节中,已经为工程新建了一个菜单资源IDR_MENU,现将其添加到计算器对话框上。利用CMenu类的LoadMenu函数,将菜单资源加载到内存中。再调用SetMenu函数,将菜单添加到对话框上,如图5所示。代码见附录1所示。 图5 菜单效果 4.3.2实现对话框扩展功能 首先在CCalculatorDlg::OnCreate函数中,设定对话框的初始大小与位置,实现代码如下。 SetWindowPos(&wndTop,0,0,186,245,SWP_NOMOVE|SWP_NOZO 第6页(共13页) RDER); 其次,添加菜单项ID_KEXUE和ID_FUSHU的响应函数OnKexue和OnFushu。在OnKexue和OnFushu函数中,首先判断当前对话框状态,即是否已经被扩展。 如果对话框已被扩展,则收缩对话框。首先得到对话框的当前位置,将其指定为新的宽度,高度维持不变。再将其中的编辑控件和编辑控件外的静态框收缩到合理位置。将表示对话框是否扩展标识变量flag设置为0。 如果对话框为非扩展,则扩展对话框。首先得到对话框的当前位置,将其指定为新的宽度,高度不变。再将其中的编辑控件和编辑控件外的静态框收缩到合理的位置。将表示对话框是否扩展的标识变量flag设置为1,实现代码如附录1所示。效果如图6和图7、图8所示。 图6 型收缩图 图7 科学型扩展图 第7页(共13页) 图8 复数型收缩图 至此,计算器的界面已经完成。但是,它还有一个缺陷:当Enter键按下时,对话框应付突然关掉。这是因为对话框默认具有焦点的控件是OK键,当Enter键按下时,框架会自动执行当前拥有焦点的控件的响应函数。要屏蔽这一功能,执行代码如下: void CCalculatorDlg::OnOK() { //CDialog::OnOK(); //屏蔽掉此句代码 } 4.4 数值计算功能的实现 4.4.1标准计算和科学计算的实现 首先添加成员变量。由于该计算器中所有的运算都是二元运算,即需要两个操作数,一个二元运算操作符。所以必须声明两个浮点数,分别用来表示初始操作数和结果操作数,同时,必须声明两个字符串类型的变量,分别用来显示初始操作数。还需要一个整形变量来记录当前运算符,以及一个整形变量来记录当前小数点按钮是否被单击过。代码如下: char m_buffer[100];//用来存贮需要显示的数字 double m_end;//记录结果操作数 double m_begin;//记录初始操作数 int m_bit;//记录运算符 int m_IsCheckPoint;//判断是否按下了小数点符号,当其为0时,表示没有按下 当数字键0—9被单击时,则将当前所按键加到初始操作数末尾,并将初始操作数显示出来。以数字键盘0被单击为例,实现代码如下: 第8页(共13页) UpdateData(FALSE); m_StrBegin = m_StrBegin+"0"; if (!m_IsCheckPoint) //如果小数点按下了 GetDlgItem(IDC_DSPEDIT)->SetWindowText(m_StrBegin+"."); else //如果小数点没有按下 GetDlgItem(IDC_DSPEDIT)->SetWindowText(m_StrBegin); UpdateData(TRUE); 当小数点键被单击时,首先判断小数点键是否已经被单击过,以及当前初始操作数字符串是否为空。代码如下: if (!m_IsCheckPoint && m_StrBegin != "") //如果小数点没有按下,且字符不为空 { UpdateData(FALSE); m_StrBegin = m_StrBegin+"."; GetDlgItem(IDC_DSPEDIT)->SetWindowText(m_StrBegin); m_IsCheckPoint = true; //改变标识 UpdateData(TRUE); } else if (m_IsCheckPoint && m_StrBegin != "") //如果小数点按下,且字符不为空 { UpdateData(FALSE); m_StrBegin = m_StrBegin+"."; GetDlgItem(IDC_DSPEDIT)->SetWindowText(m_StrBegin); m_IsCheckPoint = true; //改变标识 UpdateData(TRUE); } 当清除键CE被单击时,则对所有的成员变量进行初始化。清除小数点标识,将保存初始操作数和结果操作数的字符串清空,将保存初始操作数和结果操作数的浮点数清0,将当前操作符清0。实现代码如下: m_IsCheckPoint = true; //消除小数点按下标记 第9页(共13页) m_StrBegin = ""; m_begin = 0.0; //清0 m_end = 0.0; //清0 m_bit = 0; //当前操作符为无效操作 当任何一个运算符键被单击时,首先根据当前运算符计算运算结果,再修改记录当前运算符的变量的值。以加号键被按下为例,实现代码如下: Result(); //计算运算结果 m_bit = 1; //设置当前运算类型;1代表加法运算 计算器的核心运算函数——Result。在Result中,首先将记录当前操作数的字符串中保存的字符串转化为浮点数;其次根据当前操作符的类型,选择适当的运算操作;再将记录结果操作数的浮点变量中的值转化为字符串,并显示在结果编辑框中。 4.4.2复数计算的实现 首先添加一个复数类ComplexNum,类定义主要如下: ComplexNum operator+(const ComplexNum & pa)const;//复数加 ComplexNum operator-(const ComplexNum & pa)const;//复数减 ComplexNum operator*(const ComplexNum & pa)const;//复数乘 ComplexNum operator/(const ComplexNum & pa)const;//复数除 void operator=(const ComplexNum & pa);//复数实部与虚部赋值运算 然后是对复数运算的操作符进行判断,当在对话框界面上按下操作符时,计算器函数要对其进行判断,并对操作进行运算。我们以“+”为例: PCount++; m_StrBegin=m_StrBegin+"+"; GetDlgItem(IDC_DSPEDIT)->SetWindowText(m_StrBegin); 函数对操作符进行判断。并记录下操作符的状态。当按下“=”时。将复数需要的实部和虚部传递到“=”的函数中。再调用复数的计算函数计算复数加的数值,并将数值显示到计算器的Edit Box控件上,复数的减和乘除与复数加的运算方法一致。代码见附录2所示。 第10页(共13页) 5程序测试 5.1测试的研究与选择 测试过程中要判断测试是否成功,要分析程序界面的变化和计算数据的结果是否正确以及各功能键是否能正常使用。 5.2 测试环境 测试环境如下: 测试系统: Windows XP 测试工具: Visual Studio C++ 6.0 5.3 实例测试结果 首先,在运行界面测试简单运算是否能正常运算,输入“100+87=” 计算结果是187,如图9所示。 图9 “100+87=”的运行结果 其次,展开计算器,选中“角度”输入“30”单击“sin”,可计算 0角度为30的正弦值为0.4999999996487,如图10所示。 图10 “sin30?”的运行结果 第11页(共13页) 选中“弧度”输入“15”单击“sin”,结果如图11所示。 图11 “sin15”的运行结果 最后,展开计算器,选中“复数型”输入“3+3i”和“6+6i”单击“=”,可得到其复数结果值,如图12所示。 图12“ 3+3i”和“6+6i”的运行结果 6总结 基于C++的万能计算器的设计与实现,采用C++编程,结合MFC对于控件的消息处理函数,实现后台对数据的处理过程。主要实现了计算器的基本运算、科学运算以及复数运算的过程。基于C++的万能计算器以Windows自带的计算器为,虽然功能上相对于自带的计算器有一些不足,但数据计算的准确性还是不容怀疑的;另一个不足是不能通过键盘进行操作,系统界面略显简单,有待进一步改进和提高。 第12页(共13页) 参 考 文 献 [1] 谭浩强.C++程序设计[M].北京:清华大学出版社. 2011.5. [2] Walter Savitch著~周靖译. C++面向对象程序设计,第6版,[M].北京:清 华大学出版社~ 2007.6. [3] 郑阿奇~丁有和(Visual C++教程(北京:机械工业出版社~2006 [4] 网冠科技编著~Visual C++6.0时尚编程百例[J]. 2002.1:7. [5] 王晓东编著~计算机算法设计与分析(第三版)[M].北京:电子工业出版社. 2010.5:9 [6] 王永超. MFC中文档视图结构浅析[J].广东技术师范学院学报~2010,6,:4-6. [7] 张润宇. 计算机中计算器的数值转换方法研究与开发[J].武汉理工大学学报~ 2006.5. 第4版)[M].北京:清华大学出版社~ [8] 郑莉~董渊~何江舟.C++语言程序设计( 2010.7. [9] 杨志勇.Visual C++按钮——实用编程技巧三则[J].程序春秋~2003.4. [10] 刘小豫~李红~吴粉侠.利用Debug探索Visual C++编程原理[J].咸阳师范学 院学报~2010.6. Based On C + + Universal Calculator Design And Implementation CHEN BeiFang Abstract: Based on C + + universal calculator, not only can achieve a simple function of the four operations, but also realize the advanced scientific computing functions and complex calculation function, the system has a good interface, the necessary interaction information and the quick and easy operation. Use the MFC button control to the message processing function of the button operation is processed, and the use of structured and object oriented method to deal with the problem. Keywords: Software design; Calculator; C++; Button control; MFC 第13页(共13页)
/
本文档为【万能计算器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索