1、提供全套,各专业毕业设计 PINGDINGSHAN UNIVERSITY 实训论文(设计) 题 目: 基于MFC编程的计算器 开发与实现 院(系): 软件学院 专业年级: 13级网络工程师 姓 名: 姚龙龙 学 号: 131530439 指导教师: 徐向艺 2014年 11月 2 日基于MFC编程的计算器开发与实现摘 要关键词:Vc+6.0 MFC 代码编辑器 结构功能图 程序流程图 类向导 目 录(采用系统自动生成目录)1 绪论11.1 项目设计的目的11.2 项目设计的意义11.3 项目的主要内容和基本结构11.4 本章小结12 工具及核心功能介绍22.1 开发工具2 2.1. 1 Vis
2、ual C+的概述2 2.1.2 Visual C+的特点2 2.1.3 项目和项目工作区2 2.1.4 代码编辑器22.2 项目结构和程序流程22.2.1 结构功能图32.2.2 程序流程图32.3 核心模块功能实现4 2.3.1 四则运算模块实现4 2.3.2 特殊运算模块实现5 2.3.3 删除整个字符串模块实现63 系统运行环境及截图73.1 窗口数字和元素按钮的类向导建立73.2按钮响应函数73.3运行函数10附 录10心 得16参考文献161 绪论1.1 项目设计的目的 1、巩固并加深学生对C+语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象
3、两种设计方法的区别;3、灵活应用类库模式下编写程序的技巧。4、能够熟练掌握MFC中的各个控件,消息的添加和处理,能够独立完成一些简单的算法,并且能够具体实现一些功能。 5、掌握书写程序设计开发文档的能力。 6、掌握将具体问题抽象为类与对象的方法。 1.2 项目设计的意义 通过这次实训使我们掌握基本软件开发的能力,增强对相关专业知识的感性认识,提高应用所学知识在实践中发现问题,分析问题,解决问题的能力。1.3 项目的主要内容和基本结构课题名称:计算器的实现说明:利用MFC实现一个计算器基本的功能,能执行简单的运算。要求: (1)用“计算器”的标准视图执行简单的计算。基本结构:(1)组成:简易计算
4、器由编辑框,数字按钮,功能按钮组成。1.4 本章小结在前面已经基本明确了本课程报告制作的目的,要求,以及简易计算器的功能,外形的要求,为后期的制作,明确了努力方向。2 工具及核心功能介绍2.1 开发工具2.1.1 Visual C+的概述 Microsoft Visual C+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliS
5、ense(自动完成功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著。2.1.2 Visual C+的特点 (1)VC+6.0作为一个主流的开发平台一直深受编程爱好者的喜爱,是当下主流的Windows平台上的编程环境。(2)VC+6.0必须具备良好的C/C+的基础,必要的英语阅读能力也是必不可少的,因为大量的技术文档多以英文形式发布。2.1.3 项目和项目工作区 (1)
6、项目截图 (2)项目工作区 Visual C+ 6.0有自己的项目工作管理区,方便用户在进行项目开发时的对项目的管理和操作。项目管理区提供三种视图供用户选择,分别是Class view,Resource view ,和File view。在实际的操作中给用户提供了很大的方便。2.1.4 代码编辑器V C+6.0的代码编辑器使用起来也是十分的方便。用户可以同时打开多个文档,这适用于用户在进行多文件操作,可以对多个文件内的代码进行编辑。当然用户也可以最大化当前正在浏览的文件,这样只能对当前文件内的代码进行编辑操作。2.2 项目结构和程序流图2.2.1 结构功能图 序号文件名主要功能备注1+加法求和
7、两个操作数2-减法求差两个操作数3*乘法求积两个操作数4/除法求商两个操作数5%求模两个操作数6Sqrt求平方根一个操作数71/x求导数 一个操作数 8 Back退格一个操作数 9 +/-转换正负 一个操作数 10C/CE寄存器清零 11 = 等于 开始2.2.2 程序流程图输入操作数 选择功能键 开方,求倒,求百分清零加,减,乘,除运算运算结果 2.3 核心模块功能实现2.3.1 四则运算模块实现1. 加法void CCalcDlg:OnBnClickedAdd()if (!b_Start) return; if (en_LastSignl=en_none) en_LastSignl=en_
8、add; RunOperation(en_LastSignl); en_LastSignl=en_add;2. 减法void CCalcDlg:OnBnClickedAdd()if (!b_Start) return; if (en_LastSignl=en_none) en_LastSignl=en_add; RunOperation(en_LastSignl); en_LastSignl=en_add;3. 乘法void CCalcDlg:OnBnClickedMul()if (!b_Start) return; if (en_LastSignl=en_none) cs_Num1=1; e
9、n_LastSignl=en_mul; RunOperation(en_LastSignl); en_LastSignl=en_mul;4. 除法void CCalcDlg:OnBnClickedDivide()if (!b_Start) return; if (en_LastSignl=en_none) cs_Num1=1; en_LastSignl=en_div; RunOperation(en_LastSignl); en_LastSignl=en_div;2.3.2 特殊运算模块void CCalcDlg:RunOperation(eum_signl e_signl) double s
10、um=0;double nAdd1; double nAdd2; nAdd1=atof(cs_Num0); nAdd2=atof(cs_Num1); switch(e_signl) case en_add: sum=nAdd1+nAdd2; break; case en_sub: sum=nAdd1-nAdd2; break; case en_mul: sum=nAdd1*nAdd2; break; case en_div: sum=nAdd1/nAdd2; break;case en_none:sum=nAdd1;break; cs_Num0.Format(%.3lf,sum); SetDl
11、gItemText(IDC_EDIT_SHOW,cs_Num0); if (!b_Hasport & -1=cs_Num0.Find(.) CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp); m_i = 1; b_Hasport=FALSE; b_Start=FALSE; cs_Numm_i=0;void CCalcDlg:PutIntoNum(int n) CString tem_i; tem_i.Format(%d,n); CString temp; i
12、f (!b_Start) cs_Numm_i=tem_i; b_Start=TRUE; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i); if (!b_Hasport) GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp); return; cs_Numm_i+=tem_i; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i); if (!b_Hasport) GetDlgItemText(IDC_EDIT_SHOW,temp);
13、 temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp); 2.3.3 删除整个字符串模块实现void CCalcDlg:InitAllDate() en_LastSignl=en_none; b_Hasport=FALSE; b_Start=FALSE; b_Hasmul=FALSE; b_Hasdiv=FALSE; cs_Num0=0; cs_Num1=0; m_i=0; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i+.); 3 系统运行环境及截图3.1 窗口数字和元素按钮类向导的建立3.1.1 窗口数字 在窗口输入数字后,编
14、辑框内会显示操作者输入的操作数,即可实现基本的算数要求。3.1.2 元素按钮的类向导建立 1)元素按钮建立在中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,在该对话框中输入控件的ID值和标题属性,如下图所示。按照上面的操作过程编辑其他按钮和编辑框等对象的属性。表3-1各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_EDIT1结果显示按钮IDC_BUTTON00按钮IDC_BUTTON11按钮IDC_BUT
15、TON22按钮IDC_BUTTON33按钮IDC_BUTTON44按钮IDC_BUTTON55按钮IDC_BUTTON66按钮IDC_BUTTON77按钮IDC_BUTTON88按钮IDC_BUTTON99按钮IDC_zhengfuhao+/-按钮IDC_BUTTONPoint.按钮IDC_BTN_ADD+按钮IDC_BTN_SUB-按钮IDC_BTN_MUL*按钮IDC_BTN_DIV/按钮IDC_Sqrtsqrt按钮IDC_daoshu1/x按钮IDC_equal=按钮IDC_BackBackspace按钮IDC_CECE按钮IDC_CC完成后界面如下图所示: 2) 元素类向导的建立: 在
16、中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button类向导对话框,在该对话框中设置单击函数,如下图所示: 依次将每个按钮按照上面的方法创建类向导,建立单击函数即可。3.2 按钮响应函数 控件消息函数功能IDC_zhengfuhaoBN_CLICKED处理正负号单击按钮IDC_BUTTONPointBN_CLICKED处理小数点单击按钮IDC_equalBN_CLICKED处理等于单击按钮IDC_daoshuBN_CLICKED处理
17、倒数单击按钮IDC_baifenbiBN_CLICKED处理百分比单击按钮IDC_SqrtBN_CLICKED处理开平方单击按钮IDC_BTN_ADDBN_CLICKED处理加号单击按钮IDC_BTN_SUBBN_CLICKED处理减号单击按钮IDC_BTN_MULBN_CLICKED处理乘号单击按钮IDC_BTN_DIVBN_CLICKED处理除号单击按钮IDC_BackBN_CLICKED处理退格键单击按钮IDC_CEBN_CLICKED处理清零单击按钮IDC_CBN_CLICKED处理归零单击按钮3.3 运行函数 virtual BOOL OnInitDialog();afx_msg v
18、oid OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnButton5();afx_msg void OnButton7();afx_msg void Onzhengfuhao();afx_msg void OnBUTTONPoint();afx_msg void OnButton1();afx_msg void OnButton0();afx_msg void OnButton2();afx_msg void OnButt
19、on3();afx_msg void OnBack();afx_msg void Onbaifenbi();afx_msg void OnButton4();afx_msg void OnButton6();afx_msg void OnButton8();afx_msg void OnButton9();afx_msg void OnC();afx_msg void OnCe();afx_msg void Ondaoshu();afx_msg void Onequal();afx_msg void OnSqrt();afx_msg void OnBtnDiv();afx_msg void O
20、nBtnMul();afx_msg void OnBtnSub();afx_msg void OnBtnAdd();附 录计算器所在类的核心代码:void CJisuan3Dlg:OnButton5() / TODO: Add your control notification handler code herePutIntoNum(5);void CJisuan3Dlg:OnButton7() / TODO: Add your control notification handler code herePutIntoNum(7);/-+void CJisuan3Dlg:Onzhengfuha
21、o() / TODO: Add your control notification handler code here if (!b_Start) return; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=0-num;temp.Format(%lf,num); SetDlgItemText(IDC_EDIT_SHOW ,temp);cs_Numm_i=temp;void CJisuan3Dlg:OnBUTTONPoint() / TODO: Add your control notificatio
22、n handler code here /已有小数点时 if (b_Hasport) return; /无小数点 cs_Numm_i+=.; b_Hasport=TRUE; b_Start=TRUE; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i);void CJisuan3Dlg:OnButton1() / TODO: Add your control notification handler code herePutIntoNum(1);void CJisuan3Dlg:OnButton0() / TODO: Add your control notific
23、ation handler code hereif(cs_Numm_i=0) return ;cs_Numm_i+=0; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i);if(!b_Hasport)CString temp;GetDlgItemText(IDC_EDIT_SHOW,temp);temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp);void CJisuan3Dlg:OnButton2() / TODO: Add your control notification handler code herePutIntoNu
24、m(2);void CJisuan3Dlg:OnButton3() / TODO: Add your control notification handler code herePutIntoNum(3);/ 退格键void CJisuan3Dlg:OnBack() / TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; int len; CHAR temp_ch32; GetDlgItemText(IDC_EDIT_SHOW,temp); /A
25、fxMessageBox(temp); num=atof(temp); sprintf(temp_ch,%g,num); num=0; /AfxMessageBox(temp_ch); len=strlen(temp_ch); int te_i=len-1; if(temp_chte_i=.) te_i-=1,b_Hasport=FALSE; temp_chte_i=0; / /AfxMessageBox(temp_ch); if (strlen(temp_ch)=0) temp_ch0=0; temp_ch1=0; / sscanf(temp_ch,%lf,&num); temp.Forma
26、t(%g,num); /AfxMessageBox(temp); SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?temp:temp+.); cs_Numm_i=temp;/ %void CJisuan3Dlg:Onbaifenbi() / TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num/=100; t
27、emp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp);void CJisuan3Dlg:OnButton4() / TODO: Add your control notification handler code herePutIntoNum(4);void CJisuan3Dlg:OnButton6() / TODO: Add your control notification handler code he
28、rePutIntoNum(6);void CJisuan3Dlg:OnButton8() / TODO: Add your control notification handler code herePutIntoNum(8);void CJisuan3Dlg:OnButton9() / TODO: Add your control notification handler code herePutIntoNum(9);void CJisuan3Dlg:OnC() / TODO: Add your control notification handler code hereInitAllDat
29、e();void CJisuan3Dlg:OnCe() / TODO: Add your control notification handler code here InitAllDate();/ 1/xvoid CJisuan3Dlg:Ondaoshu() / TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=1/num; tem
30、p.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp);void CJisuan3Dlg:Onequal() / TODO: Add your control notification handler code hereRunOperation(en_LastSignl); /*特殊* en_LastSignl=en_none; b_Start=TRUE;void CJisuan3Dlg:OnSqrt() / TOD
31、O: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=sqrt(num); temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp);CDialog:OnInit
32、Dialog();/ TODO: Add extra initialization hereInitAllDate();return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE*/心 得在课程设计的实训中,积累了不少的经验。掌握一个基于对话框的应用程序的编程方法以及对话框常用控件的编程。从中我了解到对话框应用程序的编程模式、改变按钮的客户区形状、在按钮客户区内作图及对话框的扩展等知识。经过设计的各个环节,锻炼了自己系统的
33、设计的能力,从系统的需求到系统的功能,到系统的测试,到系统的发布,可以掌握到一个完全的过程,这样对我们以后在工作中或学习中得到很好的锻炼。参考文献1谭浩强.C程序设计(第四版)(M).北京:清华大学出版社,2005. 2谭浩强.C程序设计题解与上机指导(第四版) (M).北京:清华大学出版社,2005.3Vc+实战开发宝典.1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究2. 基于单片机的嵌入式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5
34、. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器7. 单片机控制的二级倒立摆系统的研究8. 基于增强型51系列单片机的TCP/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究11. 基于单片机的作物营养诊断专家系统的研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发 13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发
35、17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流CO,2激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL单片机的在线间歇式浊度仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和设计 23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究 24. 基于单片机的机电产品控制系统开发 25. 基于PIC单片机的智能手机充电器 26. 基于单片机的实时内核设计及其应用研究 27. 基于单片机的远程抄表系统的设计与研究 28. 基于单片机的烟气二氧化硫浓度检测仪的研制
36、 29. 基于微型光谱仪的单片机系统 30. 单片机系统软件构件开发的技术研究 31. 基于单片机的液体点滴速度自动检测仪的研制32. 基于单片机系统的多功能温度测量仪的研制 33. 基于PIC单片机的电能采集终端的设计和应用 34. 基于单片机的光纤光栅解调仪的研制 35. 气压式线性摩擦焊机单片机控制系统的研制 36. 基于单片机的数字磁通门传感器 37. 基于单片机的旋转变压器-数字转换器的研究 38. 基于单片机的光纤Bragg光栅解调系统的研究 39. 单片机控制的便携式多功能乳腺治疗仪的研制 40. 基于C8051F020单片机的多生理信号检测仪 41. 基于单片机的电机运动控制系
37、统设计 42. Pico专用单片机核的可测性设计研究 43. 基于MCS-51单片机的热量计 44. 基于双单片机的智能遥测微型气象站 45. MCS-51单片机构建机器人的实践研究 46. 基于单片机的轮轨力检测 47. 基于单片机的GPS定位仪的研究与实现 48. 基于单片机的电液伺服控制系统 49. 用于单片机系统的MMC卡文件系统研制 50. 基于单片机的时控和计数系统性能优化的研究 51. 基于单片机和CPLD的粗光栅位移测量系统研究 52. 单片机控制的后备式方波UPS 53. 提升高职学生单片机应用能力的探究 54. 基于单片机控制的自动低频减载装置研究 55. 基于单片机控制的
38、水下焊接电源的研究 56. 基于单片机的多通道数据采集系统 57. 基于uPSD3234单片机的氚表面污染测量仪的研制 58. 基于单片机的红外测油仪的研究 59. 96系列单片机仿真器研究与设计 60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造 61. 基于单片机的温度智能控制系统的设计与实现 62. 基于MSP430单片机的电梯门机控制器的研制 63. 基于单片机的气体测漏仪的研究 64. 基于三菱M16C/6N系列单片机的CAN/USB协议转换器 65. 基于单片机和DSP的变压器油色谱在线监测技术研究 66. 基于单片机的膛壁温度报警系统设计 67. 基于AVR单片机的低压无功补偿控制器的设计 68. 基于单片机船舶电力推进电机监测系统 69. 基于单片机网络的振动信号的采集系统 70. 基于单片机的大容量数据存储技术的应用研究 71. 基于单片机的叠图机研究与教学方法实践 72. 基于单片机嵌入式Web服务器技术的研究及实现 73. 基于AT89S52单片机的通用数据采集系统 74. 基于单片机的多道脉冲幅度分析仪研究 75. 机器人旋转电弧传感角焊缝跟