基于MFC的简易计算器制作设计_第1页
基于MFC的简易计算器制作设计_第2页
基于MFC的简易计算器制作设计_第3页
基于MFC的简易计算器制作设计_第4页
基于MFC的简易计算器制作设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、JINGCHU UNIVERSITY OF TECHNOLOGY一个简单的计算器设计课程设计报告学院:计算机工程学院 学号: 姓名: 朱钟雄 专业年级:12计算机应用技术2班指导教师: 游明坤 时 间: 2014年12月25日 基于对话框的计算器MFC方法实现随着社会的发展,人们在日常生活中经常需要用到计算器来进行简单或者复杂的运算,计算器在人们生活中的地位也越来越重要。简单的计算器能实现加、减、乘、除、开方、平方等运算。学习了C+的程序设计语言这门课程,可以利用基于VC的MFC方法制作一个简易的计算器,实现基本的运算功能,从而满足生活中的需要,降低计算的难度。一. 面向对象的程序设计方法区别

2、与面向过程的“先功能后数据”思想,面向对象的程序设计方法把状态(数据)和行为(功能)捆绑在一起,形成了对象。当遇到一个具体的问题时,我们只需要将一个系统分解成一个个的对象,同时将状态和行为封装在对象中。  面向对象的程序设计方法具有三个基本特点:封装、继承和多态。 (1) 封装性  封装是一个用来指代将对象的状态和行为捆绑到一个单一逻辑单元的机制的正式术语。它不是面向对象语言所特有的,面向过程的C语言用结构封装了数据,函数封装了逻辑。但是面向对象封装了两者,从这种意义上来说,面向对象的封装更加完美。  出于一些安全

3、性与方便性的考虑,对象经常会限制对它们特征(包括属性和方法)的访问,这种限制称为信息隐藏。作为对象的抽象,类通常只公开对象可以公开的东西,主要是一个特定对象对系统的服务,而隐藏执行服务的内部细节和为了完成这些服务而设计的数据。 ( 2) 继承性  继承是定义新类的一种机制,使用这种机制创建新类时只需要声明新类和已创建类之间的差别。 对于一个特定的继承关系,我们将创建的新类称为子类(subclass),被继承的原始类称为超类(superclass)。子类可以使用超类定义属性和方法,也可以自己定义新的属性和方法。超类的特征不会受到子类的影

4、响。  继承带来的第一个且是最显而易见的好处是减少了代码冗余,因此也减轻了需要改进或重写代码时的负担。  进一步地,子类会比不使用继承时更加简洁,这点应当不难理解;通过继承可以不加修改地重用和扩展已经彻底测试的代码,这避免了工程性的组装对已经完成测试代码的影响;最好的一点,即使没有已有类的源代码,仍然可以从已有的类中派生出新类,只要我们拥有那个类编译后的字节码。   (3)多态性 术语多态指的是属于两个或多个不同类的对象以各自的类相关的不同方式响应同一消息(方法调用)的能力。同一个消息根据发送的对象不同而采用多种不

5、同的行为方式。换句话说多态使得消息发送者能给一组具有公共接口的对象发送相同的消息,接收者做出相应的回应。  多态的作用:增强了代码的可读性、操作的透明性,增强了代码的灵活性和可扩充性。二. MFC程序设计方法 (1)API 应用程序编程的接口函数 一个应用程序要和具体的硬件打交道,比如接收按键值,接收鼠标左击或右击,记录鼠标的坐标等,就势必要有所有这些硬件的驱动,这样加大了程序的代码量。而且,每一个应用程序都得写,增加了不必要的重复工作。操作系统就是解决这些问题的。 操作系统基于硬件和应用程序之间,它提供应用程序调用的函数,应用程序可

6、通过这些函数与硬件打交道。而这些函数就是API。 (2)MFC(Microsoft Foundation Class)微软基础类库 MFC类库集成了大量已经预先定义好的类,用户可以根据编程的需要调用响应的类,或根据需要自定义有关的类。 (3)窗口 就是一个应用程序能够看到的部分。是Windows应用程序中一个非常重要的元素。 通常都包含标题栏、菜单栏、系统菜单等 (4)消息和消息队列 消息 :应用程序接收的事件都会产生相应的消息,消息的产生是因为事件发生的结果。如键盘有键盘按下和抬起消息,鼠标有

7、点击消息,画面有刷新消息,重画消息等。 编写应用程序时,如果需要对某事件进行响应,如需要当按下Ctrl+S组合键就进行保存操作时,就需要对Ctrl+S这个事件对应的消息设计响应函数。 消息队列 : 应用程序对事件消息进行的响应时从它本身的消息队列里取出消息来执行的。事件是有操作系统接收的,然后把它转化成消息,再把消息送到应用程序所在的队列中,供应用程序取走。 (5)事件驱动 Windows应用程序函数执行过程没有一个固定的顺序。一条消息过来就对应进行响应(只要设计了响应函数),那条消息来就执行那条对应的函数,没有消息就等待。 

8、;MFC程序设计的好处:一是MFC提供了一个标准化的结构,通过创建时的选择就可以实现一个基本的程序功能。这样不必从头开始设计创建和管理一个标准Windows应用程序所需的代码,节省了时间;二是它可以自动生成很多代码,比如只要用类向导(ClassWizard)添加了一个成员变量,它就会自动在代码的相应位置添加代码进去,如果手动添加,不光麻烦,而且文件很多,位置不固定可能会遗漏。所以类向导是经常需要用的,以提高编程效率,减少出错。 MFC编程的主要过程就是编写消息响应函数的过程,因为其他的工作都自动生成了。因此就需要我们知道如何添加消息响应函数(用类向导),响应函数中写什么内容。

9、0;响应函数的内容主要是调用系统函数,类里定义的成员函数,系统的系统函数,以及变量的传递等。三. MFC实现计算器的程序设计程序流程图点击加减乘除等进行运算选择点击数字键,输入第二个操作数点击数字键,输入第一个操作数点击“=”键,输出运算结果程序开始显示运算结果主要程序代码如下:/为了能在同一个编辑框里显示完整的算式,我添加了两个编辑框,同时输入,一个负责计算数据的不可见,另一个可见的用来显示。void CJncalDlg:OnNUM1()/ 点击数字键1时显示1UpdateData(TRUE);m_str1 = m_str1 + "1"/在编辑框1的字符串后加上字符1m_

10、str2 = m_str2 + "1"/在编辑框2的字符串后加上字符1UpdateData(FALSE);void CJncalDlg:OnNUM2()/ 按下数字键2时显示数字2UpdateData(TRUE);m_str1 = m_str1 + "2"/在编辑框1的字符串后加上字符2m_str2 = m_str2 + "2"/在编辑框2的字符串后加上字符2UpdateData(FALSE);void CJncalDlg:OnNUM3()/ /按下数字键3时显示数字3UpdateData(TRUE); m_str1 = m_str1

11、 + "3"/在编辑框1的字符串后加上字符3m_str2 = m_str2 + "3"/在编辑框2的字符串后加上字符3UpdateData(FALSE);数字键4、5、6、7、8、9、0、00的代码同上void CJncalDlg:OnSUB() /加法UpdateData(TRUE);m_str2 = m_str2 + "+"/显示框上显示“+”UpdateData(FALSE);SaveValue1();/调用函数将第一个操作数变为double型并保存m_Sign = 0;/选择语句的条件赋值void CJncalDlg:OnDE

12、C()/减法UpdateData(TRUE);m_str2 = m_str2 + "-"/显示框上显示“-”UpdateData(FALSE);SaveValue1();/调用函数将第一个操作数变为double型并保存m_Sign = 1; /选择语句的条件赋值void CJncalDlg:OnMUL() UpdateData(TRUE);m_str2 = m_str2 + "×"/显示框上显示“×”UpdateData(FALSE);SaveValue1();/调用函数将第一个操作数变为double型并保存m_Sign = 2;/选

13、择语句的条件赋值void CJncalDlg:OnDIV() /除法UpdateData(TRUE);m_str2 = m_str2 + "÷"/显示框上显示“÷”UpdateData(FALSE);SaveValue1();/调用函数将第一个操作数变为double型并保存m_Sign = 3; /选择语句的条件赋值void CJncalDlg:OnEQUAL() /“=”操作Calculator();/调用Calculator函数void CJncalDlg:SaveValue1()/保存第一个操作数函数UpdateData(TRUE);m_num1

14、= atof(m_str1);/第一个编辑框内的字符转换为数字并赋给m_fNumber1m_str1 = ""/清空第一个编辑框UpdateData(FALSE);void CJncalDlg:Calculator()/Calculator函数UpdateData(TRUE);m_num2 = atof(m_str1);/编辑框1内的字符转换成数字并赋值给m_fNumber2double r = 0.0f;switch (m_Sign)/选择语句case 0: /加f = m_num1 + m_num2;break;case 1: /减f = m_num1 - m_num2

15、;break;case 2: /乘f = m_num1* m_num2;break;case 3: /除if (m_num2 = 0.0f)MessageBox("输入错误,请重新输入");elsef = m_numn1 / m_num2;break;case 4: /平方f = m_num2 * m_num2;break;case 5: /开方f = sqrt(m_num2);break;default:break;if(r - int(r) <= 1e-5) /如果浮点数其实是个整数m_str1.Format("%d",(int)f);m_st

16、r2=m_str2+"="+m_str1+" "elsem_str1.Format("%f",f);m_str2=m_str2+"="+m_str1+" "UpdateData(FALSE);m_num1 = r;m_num2 = 0.0f;void CJncalDlg:OnABOUT() /软件关于按钮CAboutDlg dlg;dlg.DoModal();/调用void CJncalDlg:OnCE() /清空编辑框操作UpdateData(TRUE);m_str1 = "&quo

17、t;/第一个编辑框赋空值m_str2 = ""/第二个编辑框赋空值m_num1 = 0.0f; /第一个操作数赋0m_ num2 = 0.0f; /第二个操作数赋0m_Sign = 0;UpdateData(FALSE);void CJncalDlg:OnDEL() /退格操作UpdateData(TRUE);if (!m_str1.IsEmpty()/移除编辑框内最右边一个字符m_str1= m_str1.Left(m_str1.GetLength()-1);m_str2 = m_str2.Left(m_str2.GetLength()-1);UpdateData(FAL

18、SE); /以下为显示当前时间操作int CJncalDlg:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CDialog:OnCreate(lpCreateStruct) = -1)return -1;SetTimer(1,1000,NULL);/设置定时器return 0;void CJncalDlg:OnTimer(UINT nIDEvent) SYSTEMTIME st;GetLocalTime(&st);CString str_time;str_time.Format("%d:%d:%d",st.wHour,st.

19、wMinute,st.wSecond);SetDlgItemText(IDC_STATICTIME,str_time);CDialog:OnTimer(nIDEvent);四、 试验结果展示计算器的整体效果图。我在计算器的顶端加入了显示当前日期和时间的功能,更加方便快捷。 加法功能的实现减法功能的实现乘法功能的实现除法功能的实现本计算器除了能实现加减乘除运算,还能进行平方(x2)和开方(sqrt)的运算。以下为开方演示 。关于计算器经过后续改进,我又再计算器中加入了音乐播放功能,能够边听音乐边计算。截图及程序代码如下:void CJncalDlg:OnMUSIC1() /播放音乐1PlaySo

20、und("F:/1.wav", NULL, SND_FILENAME| SND_ASYNC);void CJncalDlg:OnMUSICOFF()/关闭音乐/ TODO: Add your control notification handler code herePlaySound(NULL,NULL,SND_ASYNC);void CJncalDlg:OnMUSICCHANGE()/播放音乐2/ TODO: Add your control notification handler code herePlaySound("F:/1.wav", NULL, SND_FILENAME| SND_ASYNC);五、 总结这次计算器的制作我查阅了大量参考文献借鉴了许多前辈们的制作基础上独立完成的。控件的添加,代码的编写都是耗费大量时间和精力才成功的。计算器已经实现了其基本功能,可以进行整数和小数的加减乘除、平方、开方运算,与其他计算器不同的是我所制作的计算器能够完整的显示运算

温馨提示

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

评论

0/150

提交评论