




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象的Visual C+程序设计课程设计报告学 号: 1123101750 姓 名: 金鹏举 专业年级:11测控技术与仪器河南大学物理与电子学院测控技术与仪器教研室1 / 15基于对话框的计算器MFC方法实现随着社会的发展,人们在日常生活中经常需要用到计算器来进行简单或者复杂的运算,计算器在人们生活中的地位也越来越重要。简单的计算器能实现加、减、乘、除、开方、平方等运算。学习了C+的程序设计语言这门课程,可以利用基于VC的MFC方法制作一个简易的计算器,实现基本的运算功能,从而满足生活中的需要,降低计算的难度。一. 面向对象的程序设计方法区别与面向过程的“先功能后数据”思想,面向对象的程序
2、设计方法把状态(数据)和行为(功能)捆绑在一起,形成了对象。当遇到一个具体的问题时,我们只需要将一个系统分解成一个个的对象,同时将状态和行为封装在对象中。面向对象的程序设计方法具有三个基本特点:封装、继承和多态。(1)封装性封装是一个用来指代将对象的状态和行为捆绑到一个单一逻辑单元的机制的正式术语。它不是面向对象语言所特有的,面向过程的C语言用结构封装了数据,函数封装了逻辑。但是面向对象封装了两者,从这种意义上来说,面向对象的封装更加完美。出于一些安全性与方便性的考虑,对象经常会限制对它们特征(包括属性和方法)的访问,这种限制称为信息隐藏。作为对象的抽象,类通常只公开对象可以公开的东西,主要是
3、一个特定对象对系统的服务,而隐藏执行服务的内部细节和为了完成这些服务而设计的数据。(2)继承性继承是定义新类的一种机制,使用这种机制创建新类时只需要声明新类和已创建类之间的差别。对于一个特定的继承关系,我们将创建的新类称为子类(subclass),被继承的原始类称为超类(superclass)。子类可以使用超类定义属性和方法,也可以自己定义新的属性和方法。超类的特征不会受到子类的影响。继承带来的第一个且是最显而易见的好处是减少了代码冗余,因此也减轻了需要改进或重写代码时的负担。进一步地,子类会比不使用继承时更加简洁,这点应当不难理解;通过继承可以不加修改地重用和扩展已经彻底测试的代码,这避免了
4、工程性的组装对已经完成测试代码的影响;最好的一点,即使没有已有类的源代码,仍然可以从已有的类中派生出新类,只要我们拥有那个类编译后的字节码。(3)多态性术语多态指的是属于两个或多个不同类的对象以各自的类相关的不同方式响应同一消息(方法调用)的能力。同一个消息根据发送的对象不同而采用多种不同的行为方式。换句话说多态使得消息发送者能给一组具有公共接口的对象发送相同的消息,接收者做出相应的回应。多态的作用:增强了代码的可读性、操作的透明性,增强了代码的灵活性和可扩充性。二. MFC程序设计方法(1)API应用程序编程的接口函数一个应用程序要和具体的硬件打交道,比如接收按键值,接收鼠标左击或右击,记录
5、鼠标的坐标等,就势必要有所有这些硬件的驱动,这样加大了程序的代码量。而且,每一个应用程序都得写,增加了不必要的重复工作。操作系统就是解决这些问题的。操作系统基于硬件和应用程序之间,它提供应用程序调用的函数,应用程序可通过这些函数与硬件打交道。而这些函数就是API。(2)MFC(MicrosoftFoundationClass)微软基础类库MFC类库集成了大量已经预先定义好的类,用户可以根据编程的需要调用响应的类,或根据需要自定义有关的类。(3)窗口就是一个应用程序能够看到的部分。是Windows应用程序中一个非常重要的元素。通常都包含标题栏、菜单栏、系统菜单等(4)消息和消息队列消息:应用程序
6、接收的事件都会产生相应的消息,消息的产生是因为事件发生的结果。如键盘有键盘按下和抬起消息,鼠标有点击消息,画面有刷新消息,重画消息等。编写应用程序时,如果需要对某事件进行响应,如需要当按下Ctrl+S组合键就进行保存操作时,就需要对Ctrl+S这个事件对应的消息设计响应函数。消息队列:应用程序对事件消息进行的响应时从它本身的消息队列里取出消息来执行的。事件是有操作系统接收的,然后把它转化成消息,再把消息送到应用程序所在的队列中,供应用程序取走。(5)事件驱动Windows应用程序函数执行过程没有一个固定的顺序。一条消息过来就对应进行响应(只要设计了响应函数),那条消息来就执行那条对应的函数,没
7、有消息就等待。MFC程序设计的好处:一是MFC提供了一个标准化的结构,通过创建时的选择就可以实现一个基本的程序功能。这样不必从头开始设计创建和管理一个标准Windows应用程序所需的代码,节省了时间;二是它可以自动生成很多代码,比如只要用类向导(ClassWizard)添加了一个成员变量,它就会自动在代码的相应位置添加代码进去,如果手动添加,不光麻烦,而且文件很多,位置不固定可能会遗漏。所以类向导是经常需要用的,以提高编程效率,减少出错。MFC编程的主要过程就是编写消息响应函数的过程,因为其他的工作都自动生成了。因此就需要我们知道如何添加消息响应函数(用类向导),响应函数中写什么内容。响应函数
8、的内容主要是调用系统函数,类里定义的成员函数,系统的系统函数,以及变量的传递等。三. MFC实现计算器的程序设计程序流程图点击加减乘除等进行运算选择点击数字键,输入第二个操作数点击数字键,输入第一个操作数点击“=”键,输出运算结果程序开始显示运算结果主要程序代码如下:/为了能在同一个编辑框里显示完整的算式,我添加了两个编辑框,同时输入,一个负责计算数据的不可见,另一个可见的用来显示。void CJncalDlg:OnNUM1()/ 点击数字键1时显示1UpdateData(TRUE);m_str1 = m_str1 + 1;/在编辑框1的字符串后加上字符1m_str2 = m_str2 + 1
9、;/在编辑框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 + 3;/在编辑框1的字符串后加上字符3m_str2 = m_str2 + 3;/在编辑框2的字符
10、串后加上字符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:OnDEC()/减法UpdateData(TRUE);m_str2 = m_str2 + -;/显示框上显示“-”UpdateData(FALSE);SaveValue1()
11、;/调用函数将第一个操作数变为double型并保存m_Sign = 1; /选择语句的条件赋值void CJncalDlg:OnMUL() UpdateData(TRUE);m_str2 = m_str2 + ;/显示框上显示“”UpdateData(FALSE);SaveValue1();/调用函数将第一个操作数变为double型并保存m_Sign = 2;/选择语句的条件赋值void CJncalDlg:OnDIV() /除法UpdateData(TRUE);m_str2 = m_str2 + ;/显示框上显示“”UpdateData(FALSE);SaveValue1();/调用函数将第
12、一个操作数变为double型并保存m_Sign = 3; /选择语句的条件赋值void CJncalDlg:OnEQUAL() /“=”操作Calculator();/调用Calculator函数void CJncalDlg:SaveValue1()/保存第一个操作数函数UpdateData(TRUE);m_num1 = atof(m_str1);/第一个编辑框内的字符转换为数字并赋给m_fNumber1m_str1 = ;/清空第一个编辑框UpdateData(FALSE);void CJncalDlg:Calculator()/Calculator函数UpdateData(TRUE);m_
13、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;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_n
14、um2;break;case 5: /开方f = sqrt(m_num2);break;default:break;if(r - int(r) = 1e-5) /如果浮点数其实是个整数m_str1.Format(%d,(int)f);m_str2=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();/调用voi
15、d CJncalDlg:OnCE() /清空编辑框操作UpdateData(TRUE);m_str1 = ;/第一个编辑框赋空值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.
16、Left(m_str2.GetLength()-1);UpdateData(FALSE); /以下为显示当前时间操作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.For
17、mat(%d:%d:%d,st.wHour,st.wMinute,st.wSecond);SetDlgItemText(IDC_STATICTIME,str_time);CDialog:OnTimer(nIDEvent);四、 试验结果展示计算器的整体效果图。我在计算器的顶端加入了显示当前日期和时间的功能,更加方便快捷。 加法功能的实现减法功能的实现乘法功能的实现除法功能的实现本计算器除了能实现加减乘除运算,还能进行平方(x2)和开方(sqrt)的运算。以下为开方演示 。关于计算器经过后续改进,我又再计算器中加入了音乐播放功能,能够边听音乐边计算。截图及程序代码如下:void CJncalDl
18、g:OnMUSIC1() /播放音乐1PlaySound(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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保领域项目负责人自查报告范文
- 物联网用户行为模式分析-全面剖析
- 空间碎片监测与治理-全面剖析
- 中级汉语综合课《路上的风景》教学设计
- 远程医疗中的预检分诊流程应用
- 柔性智能制造系统设计-全面剖析
- 城市学校学生课外活动参与计划
- 幼儿小班数学启蒙衔接计划
- 2025老年友善医疗服务提升计划
- 项目居间合同
- 人工智能设计伦理(浙江大学)知到智慧树章节答案
- 2021年9月25日广东省事业单位招聘高校应届生《基本能力测试》试题
- 2024-2030年中国街舞培训行业竞争格局及投资前景展望报告
- 2025年发展对象考试题库含答案
- 06 H5主流制作工具-易企秀
- 计算机程序设计语言(Python)学习通超星期末考试答案章节答案2024年
- DB34∕T 4235-2022 浓香窖泥检测操作规程
- 地质灾害防治工程勘察规范DB50143-2003
- “新课程”“新高考”背景下的高中学科教学变革
- 《财务大数据分析高职》全套教学课件
- 服务质量保障措施及进度保障措施
评论
0/150
提交评论