基于VC++MFC下的大整数计算器(带菜单)课程报告.doc

上传人:文库蛋蛋多 文档编号:2385906 上传时间:2023-02-17 格式:DOC 页数:33 大小:2.19MB
返回 下载 相关 举报
基于VC++MFC下的大整数计算器(带菜单)课程报告.doc_第1页
第1页 / 共33页
基于VC++MFC下的大整数计算器(带菜单)课程报告.doc_第2页
第2页 / 共33页
基于VC++MFC下的大整数计算器(带菜单)课程报告.doc_第3页
第3页 / 共33页
基于VC++MFC下的大整数计算器(带菜单)课程报告.doc_第4页
第4页 / 共33页
基于VC++MFC下的大整数计算器(带菜单)课程报告.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《基于VC++MFC下的大整数计算器(带菜单)课程报告.doc》由会员分享,可在线阅读,更多相关《基于VC++MFC下的大整数计算器(带菜单)课程报告.doc(33页珍藏版)》请在三一办公上搜索。

1、专业技能培训课程实验报告 课程设计题目: 大整数计算器 学生姓名: 学生学号: 学生院系: 学生班级: 指导教师: 摘要:本课程设计将实现一个大整数计算器。其类似于Windows附件中自带的计算器。这个计算器可以实现大整数的四则运算功能,并且具有简洁大方的图文外观。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。在课程设计中,系统开发平台为Windows 2000/XP及以上,程序设计设计语言采用Visual C+,在程序设计中,采用了结构

2、化与面向对象两种解决问题的方法。 关键词 : 程序设计;计算器;MFC;按钮控件目 录一、问题描述3二、功能描述 3三、需求分析3四、概要设计3五、详细设计41、运算流程图42、详细设计步骤53、菜单功能的实现84、相关程序代码13六、 设计和调试分析17七、 用户手册18八、 测试结果20九、 设计心得23十、 参考文献24附录24一、问题描述超大整数(超100位)的运算和输出、输出 二、功能描述 (1)定义大整数类;(2)大整数的输入/输出 ;(3)计算功能:大整数的数的加、减、乘、除、模除运算;(4)菜单功能:每种功能的操作都是在菜单中进行相应选择;(5)计算器上数字09为一个控件数组,

3、加、减、乘、除为一个控件数组;(6)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中;(7)计算功能基本上是用系统内部函数;(8)“0”不能做除数;(9)“Backspace”按钮可以清除上一次输入的数据,“Clear”按钮可以清除所有已输入的数据从头计算。三、需求分析本设计是大整数计算器。日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的

4、计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。本软件主要用于计算机windows 2000/XP以上版本的用户的使用,这次课程设计一般是实现大整数计算器的功能。要程序能实现:加,减,乘,除,模运算等运算功能;还可以实现数据的输入,输出,计算,显示及程序退出等功能。四、概要设计本软件主要应用的设计工具是Visual C+6.0以及Visual C+6.0中的MFC。MFC是Win API与C+的结合,MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现

5、对一个窗口对象的控制(如创建,销毁),而是一些在WinDOS(用MFC编写的程序绝大部分都在WinDOS中运行)中实现内部处理的类。使用Visual C+6.0进行设计编程非常方便实用。五、详细设计1、运算流程图 N Y Y N Y 2、详细设计步骤(1)打开Visual C+6.0,选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为“计算器”,按确定。在弹出界面选择创建对话框,单击“完成”按钮。(2)这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图1所示: 图1(3)在生成的设计界面中加入控件,得到计算器应用界面。如

6、图2: 图2(4)为控件编辑框编辑ID,如下表: 按钮名称ID用途0IDC_BUTTON_0按键01IDC_ BUTTON_1按键12IDC_ BUTTON_2按键23IDC_ BUTTON_3按键34IDC_ BUTTON_4按键45IDC_ BUTTON_5按键56IDC_ BUTTON_6按键67IDC_ BUTTON_7按键78IDC_ BUTTON_8按键89IDC_ BUTTON_9按键9.IDC_ BUTTONpt按键.+/-IDC_ BUTTONor正负+IDC_ BUTTONjia加-IDC_ BUTTONjian减*IDC_ BUTTONcheng乘/IDC_ BUTTON

7、chu除ClearIDC_ BUTTONC清零BackspaceIDC_ BUTTONbk退格=IDC_ BUTTONdeng等于 编辑框IDC_EDIT1显示数据输入输出 (5)进入ClassWizard界面选择Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。如图3: 图3(6) 进入ClassWizard界面Message Varibles为编辑框添加成员变量m_stredit用以显示结果。如图: 图4(7)在“计算器Dlg.h”中加入在主要成员函数和成员变量的申明,在“计算器Dlg.cpp”中加入主要成员函数实现过程和成员变量的初始化。在头文件中“计算器Dlg

8、.h”中public下添加: int sos; /操作附鉴别符int cal;CString m_str2; /存放按下操作符之前m_stredit的值CString m_str1; /中间变量,当前m_stredit的值在“计算器Dlg.cpp”中要定义各种数学运算添加:#include math.h3、菜单功能的实现(1)添加菜单栏如图: (2)添加需要弹出的新对话框如图:(3)在主对话框的类(CMyDlg)头文件中定义一个菜单类对象m_Menu用于加载菜单:CMenu m_Menu; /定义一个菜单类对象 (4)在CmyDlg类的BOOL CMyDlg:OnInitDialog()成员函

9、数中添加如下代码:m_Menu.LoadMenu(IDR_MENU1);SetMenu(&m_Menu);(5)给要弹出的对话框创建一个类CPopDlg:(6) 给菜单项响应一个点击事件:ps:这里注意 类名一定要选主对话框。(7)在菜单项的响应函数中添加执行函数,弹出新对话框:CPopDlg dlg; /定义一个新对话框的对象dlg.DoModal(); /弹出对话框 (8) 然后就是记得在主对话框前面加上新对话框类的头文件: #include PopDlg.h 4、相关程序代码(1)加、减、乘、除算法void CMyDlg:OnBUTTONjia() / TODO: Add your co

10、ntrol notification handler code hereUpdateData(TRUE);m_str1=m_stredit;m_stredit=;sos=1; UpdateData(FALSE); void CMyDlg:OnBUTTONjian() / TODO: Add your control notification handler code hereUpdateData(TRUE);m_str1=m_stredit;m_stredit=;sos=2;UpdateData(FALSE); void CMyDlg:OnBUTTONcheng() / TODO: Add y

11、our control notification handler code hereUpdateData(TRUE);m_str1=m_stredit;m_stredit=;sos=3;UpdateData(FALSE); void CMyDlg:OnBUTTONchu() / TODO: Add your control notification handler code hereUpdateData();m_str1=m_stredit;m_stredit=;sos=4;UpdateData(FALSE); (2)“=”号void CMyDlg:OnBUTTONdeng() / TODO:

12、 Add your control notification handler code heredouble f1,f2,f3;int f4,f5,f6;/%运算符操作数只能是整型switch(sos)case 1:UpdateData(TRUE);m_str2=m_stredit;f1=atof(m_str1);f2=atof(m_str2);f3=f1+f2;m_stredit.Format(%f,f3);UpdateData(FALSE);break;case 2:UpdateData(TRUE);m_str2=m_stredit;f1=atof(m_str1);f2=atof(m_st

13、r2);f3=f1-f2;m_stredit.Format(%f,f3);UpdateData(FALSE);break;case 3:UpdateData(TRUE);m_str2=m_stredit;f1=atof(m_str1);f2=atof(m_str2);f3=f1*f2;m_stredit.Format(%f,f3);UpdateData(FALSE);break;case 4:UpdateData(TRUE);m_str2=m_stredit;f1=atof(m_str1);f2=atof(m_str2);if(f2=0)MessageBox(被除数不能为零!);elsef3=

14、f1/f2; m_stredit.Format(%f,f3);UpdateData(FALSE);break;case 6:UpdateData(TRUE);m_str2=m_stredit;f4=atoi(m_str1);/将字符型转化为整型,下面做相应修改f5=atoi(m_str2);f6=int(f4)%int(f5);m_stredit.Format(%d,f6);UpdateData(FALSE);break; (3)“Backspace”void CMyDlg:OnBUTTONbk() / TODO: Add your control notification handler c

15、ode hereUpdateData(TRUE);m_stredit=m_stredit.Left(m_stredit.GetLength()-1);UpdateData(FALSE); (4)“Clear”void CMyDlg:OnButtonc() / TODO: Add your control notification handler code hereUpdateData(TRUE);m_stredit=;sos=0;UpdateData(FALSE); 六、 设计和调试分析通过测试时发现,加法返回的结果与正确的结果不相符、在做乘法时遇到最多的问题便是超出了字符的数值范围,当使用界

16、面进行加法操作时发现无法清空上一次加法的结果,不过通过排查,最后把问题给解决了。七、 用户手册输入的形式:键盘上的数字键输入或者界面数字键输入输入、输出值的范围为:(0,),输出的形式:编辑框输出运算结果。用户可以使用计算器进行大整数的运算,只需打开Visual C+6.0点击“文件”“打开工作空间”“选择后缀类型为.dsw的程序”运行即可进行计算,如图: 八、 测试结果数据A:10000000000000000000000000数据B:200000000000000000000“+”结果:10000200000000002000000000如图: “-”结果:9999799999999999

17、900000000如图: “*”结果:2000000000000000200000000000000000000000000000如图: “/”结果:50000如图: 除数为零时,显示: 九、 设计心得课程设计到此已告一段落,经过自己的努力,这几周的技能培训课程设计基本完成了。从中学到很多有用的知识,也积累了不少宝贵的经验。虽然在此次课程设计我们只是针对性的去学习对对话框应用程序的编程模式,但也体会到了MFC这类库的博大精深。想全部了解这样一个类库,今后还需多下功夫。本次课程设计我完成了一个计算器应用软件,在此期间,遇上了不少的技术难题,但是经过努力,通过查找资料,难题还是一个个被解决了,从中

18、学到了许多课堂上没学到的东西,这是很值得高兴的。经过设计的各个环节,从中学到了很多,锻炼了系统的设计的能力。这样对我以后在工作中或学习中得到很好的锻炼,为用VC+编辑软件奠定基础。在本次实践期间对大整数计算器的设计虽然大体实现各个控件的功能,但仍存在许多的不足与漏洞,还待以后的不断学习进一步完善。 十、 参考文献参考文献:1Visual C+ 7.0 起步进阶,国防工业出版社 武装 等编著2Visual C+ 基础教程,西安电子科技大学出版社,2006.6 附录各按钮的响应程序代码:(1)“09”按钮:void CMyDlg:OnButton0() / TODO: Add your contr

19、ol notification handler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=0;UpdateData(FALSE); void CMyDlg:OnButton1() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=1;UpdateData(FALSE); void CMy

20、Dlg:OnButton2() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=2;UpdateData(FALSE); void CMyDlg:OnButton3() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_

21、stredit+=3;UpdateData(FALSE);void CMyDlg:OnButton4() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=4;UpdateData(FALSE); void CMyDlg:OnButton5() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(cal

22、=1)else if(m_stredit=0.)m_stredit=;m_stredit+=5;UpdateData(FALSE); void CMyDlg:OnButton6() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=6;UpdateData(FALSE); void CMyDlg:OnButton7() / TODO: Add your control notification ha

23、ndler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=7;UpdateData(FALSE); void CMyDlg:OnButton8() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=8;UpdateData(FALSE); void CMyDlg:OnButton9() /

24、TODO: Add your control notification handler code hereUpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=9;UpdateData(FALSE); (2)“.”void CMyDlg:OnBUTTONpt() / TODO: Add your control notification handler code hereUpdateData();m_stredit+=.;cal=1;UpdateData(FALSE); (3)“+/-”号void CMyDlg

25、:OnBUTTONor() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(m_stredit.Left(1)=-) /截取m_str1左边的第一个字符-m_stredit=m_stredit.Right(m_stredit.GetLength()-1);elsem_stredit=-+m_stredit;/sos=5;UpdateData(FALSE); (4)编辑框:void CMyDlg:OnChangeEdit1() / TODO: If this is a RICHEDIT control, the control will not/ send this notification unless you override the CDialog:OnInitDialog()/ function and call CRichEditCtrl().SetEventMask()/ with the ENM_CHANGE flag ORed into the mask./ TODO: Add your control notification handler code here

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号