基于mfc编程的计算器开发与实现本科学位论文

上传人:痛*** 文档编号:218209995 上传时间:2023-06-18 格式:DOC 页数:20 大小:483.50KB
返回 下载 相关 举报
基于mfc编程的计算器开发与实现本科学位论文_第1页
第1页 / 共20页
基于mfc编程的计算器开发与实现本科学位论文_第2页
第2页 / 共20页
基于mfc编程的计算器开发与实现本科学位论文_第3页
第3页 / 共20页
点击查看更多>>
资源描述
提供全套,各专业毕业设计 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 Visual 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、灵活应用类库模式下编写程序的技巧。4、能够熟练掌握MFC中的各个控件,消息的添加和处理,能够独立完成一些简单的算法,并且能够具体实现一些功能。 5、掌握书写程序设计开发文档的能力。 6、掌握将具体问题抽象为类与对象的方法。 1.2 项目设计的意义 通过这次实训使我们掌握基本软件开发的能力,增强对相关专业知识的感性认识,提高应用所学知识在实践中发现问题,分析问题,解决问题的能力。1.3 项目的主要内容和基本结构课题名称:计算器的实现说明:利用MFC实现一个计算器基本的功能,能执行简单的运算。要求: (1)用“计算器”的标准视图执行简单的计算。基本结构:(1)组成:简易计算器由编辑框,数字按钮,功能按钮组成。1.4 本章小结在前面已经基本明确了本课程报告制作的目的,要求,以及简易计算器的功能,外形的要求,为后期的制作,明确了努力方向。2 工具及核心功能介绍2.1 开发工具2.1.1 Visual C+的概述 Microsoft Visual C+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliSense(自动完成功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著。2.1.2 Visual C+的特点 (1)VC+6.0作为一个主流的开发平台一直深受编程爱好者的喜爱,是当下主流的Windows平台上的编程环境。(2)VC+6.0必须具备良好的C/C+的基础,必要的英语阅读能力也是必不可少的,因为大量的技术文档多以英文形式发布。2.1.3 项目和项目工作区 (1)项目截图 (2)项目工作区 Visual C+ 6.0有自己的项目工作管理区,方便用户在进行项目开发时的对项目的管理和操作。项目管理区提供三种视图供用户选择,分别是Class view,Resource view ,和File view。在实际的操作中给用户提供了很大的方便。2.1.4 代码编辑器V C+6.0的代码编辑器使用起来也是十分的方便。用户可以同时打开多个文档,这适用于用户在进行多文件操作,可以对多个文件内的代码进行编辑。当然用户也可以最大化当前正在浏览的文件,这样只能对当前文件内的代码进行编辑操作。2.2 项目结构和程序流图2.2.1 结构功能图 序号文件名主要功能备注1+加法求和两个操作数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_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; en_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 sum=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); SetDlgItemText(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; if (!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); 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 窗口数字 在窗口输入数字后,编辑框内会显示操作者输入的操作数,即可实现基本的算数要求。3.1.2 元素按钮的类向导建立 1)元素按钮建立在中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,在该对话框中输入控件的ID值和标题属性,如下图所示。按照上面的操作过程编辑其他按钮和编辑框等对象的属性。表3-1各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_EDIT1结果显示按钮IDC_BUTTON00按钮IDC_BUTTON11按钮IDC_BUTTON22按钮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) 元素类向导的建立: 在中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button类向导对话框,在该对话框中设置单击函数,如下图所示: 依次将每个按钮按照上面的方法创建类向导,建立单击函数即可。3.2 按钮响应函数 控件消息函数功能IDC_zhengfuhaoBN_CLICKED处理正负号单击按钮IDC_BUTTONPointBN_CLICKED处理小数点单击按钮IDC_equalBN_CLICKED处理等于单击按钮IDC_daoshuBN_CLICKED处理倒数单击按钮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 void 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 OnButton3();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 OnBtnMul();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:Onzhengfuhao() / 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 notification 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 notification 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 herePutIntoNum(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); /AfxMessageBox(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.Format(%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; temp.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 herePutIntoNum(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 hereInitAllDate();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; temp.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() / TODO: 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:OnInitDialog();/ TODO: Add extra initialization hereInitAllDate();return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE*/心 得在课程设计的实训中,积累了不少的经验。掌握一个基于对话框的应用程序的编程方法以及对话框常用控件的编程。从中我了解到对话框应用程序的编程模式、改变按钮的客户区形状、在按钮客户区内作图及对话框的扩展等知识。经过设计的各个环节,锻炼了自己系统的设计的能力,从系统的需求到系统的功能,到系统的测试,到系统的发布,可以掌握到一个完全的过程,这样对我们以后在工作中或学习中得到很好的锻炼。参考文献1谭浩强.C程序设计(第四版)(M).北京:清华大学出版社,2005. 2谭浩强.C程序设计题解与上机指导(第四版) (M).北京:清华大学出版社,2005.3Vc+实战开发宝典.15
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!