收藏 分享(赏)

用VC6.0编写计算器程序.doc

上传人:精品资料 文档编号:8491141 上传时间:2019-06-29 格式:DOC 页数:16 大小:860.50KB
下载 相关 举报
用VC6.0编写计算器程序.doc_第1页
第1页 / 共16页
用VC6.0编写计算器程序.doc_第2页
第2页 / 共16页
用VC6.0编写计算器程序.doc_第3页
第3页 / 共16页
用VC6.0编写计算器程序.doc_第4页
第4页 / 共16页
用VC6.0编写计算器程序.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、微机上机报告01. 121用 C编写计算器程序一、计算器介绍1. 计算器主界面1.1、计算器打开运行后界面如下所示:1.2 主界面的说明主界面主要由三部分组成: 文本框:用于数据的输入(可由下面的按钮或键盘输入) ,以及计 算结果的输出; 基本计算区:主要可用于数字的输入以及简单的加减乘除的计算,还有可用于清楚文本框的数据; 数学函数计算区:主用可实现基本常用的数学函数的计算,包括常用的三角函数和反三角函数以及 e 指数、开平方和以 e 和 10微机上机报告01. 122为底对数的计算。2.计算器的操作说明及注意事项2.1、基本操作:使用计算器进行基本数据计算时通过键盘及基本计算区的按钮输入数

2、据,然后根据计算需要点击“+、-、*、/”按钮,然后点击”=”按钮得出计算结果。若需使用函数计算时,可先输入数据,然后点击对应使用函数的按钮即可得出结果。特别的,对于三角函数的计算时,可点击单选框“弧度制” 、 “角度制”以实现弧度制及角度制数据的三角计算。2.2、注意事项: 使用除法计算时应注意不能使被除数为 0,否则会出错:出现此错误时只需点击确定即可继续之前的计算。 在使用三角函数时应先确定所输入的数据是角度制还是弧度制的数据,否则计算器会跳出提醒框,如下所示:微机上机报告01. 123而计算反三角函数时只能计算弧度制数据得到角度制结果: 在使用常用函数进行计算时应特别注意所输入的数应满

3、足函数的定义域,使函数有意义,否则会出错: 另注:当所得数据很小时会以科学计数法的形式输出:微机上机报告01. 124其中 e-002 即表示10 -2。二、MFC 编程的实现1. 计算器主界面的设计1.1、建立对话框1. 启动 Visual C+ 6.0 集成开发环境2. 创建对话框类型应用程序在【工程】选项卡中选择【MFC AppWizard】应用程序类型,工程文件名为 Calculator。单击确定后选择【基本对话】建立基本对话框应用程序。1.2、添加控件,设计界面界面设计如下所示:微机上机报告01. 1252. 控件 ID 及变量 控件: ID: IDC_NUM1 IDC_NUM2 I

4、DC_NUM3 IDC_NUM4 IDC_NUM5消息函数: OnNum1 OnNum2 OnNum3 OnNum4 OnNum5 控件: ID: IDC_NUM6 IDC_NUM7 IDC_NUM8 IDC_NUM9 IDC_NUM12消息函数: OnNum6 OnNum7 OnNum8 OnNum9 OnNum12 控件: ID: IDC_NUM10 IDC_ADD IDC_SUBTRACT IDC_MULPTIPLY IDC_DIVISION 消息函数: OnNum10 OnAdd OnSubtract OnMulptiply OnDivision 控件: ID: IDC_EQUAL I

5、DC_BACKSPACE IDC_CLEAR1 IDC_Exit消息函数: OnEqual OnBackspace OnClear1 OnExit微机上机报告01. 126 控件: ID:IDC_RADIO1 IDC_RADIO2 IDC_SIN IDC_ARCSIN IDC_COS IDC_TAN消息函数: OnRadio1 OnRadio2 OnSin OnArcsin OnCos OnTan 控件: ID:IDC_ARCCOS IDC_ARCTANV IDC_EXP IDC_SQRT IDC_LN IDC_LOG 消息函数: OnArccos OnArctan OnExp OnSqrt

6、OnLn OnLog 编辑框为 IDC_EDIT1,定义类型为 CEdit 的变量 m_Edit1.3. 程序代码的实现3.1、定义变量1) 向 CalculatorDlg.h 的 CCalculatorDlg 类定义中添加 public 型变量:2) 在 CalculatorDlg.cpp 中定义四个全局变量;3) 控件函数代码的实现 数字输入按钮下函数的实现以下是数字键 的函数的代码,其余以此类推void CCalculatorDlg:OnNum1() / TODO: Add your control notification handler code hereCString t;GetD

7、lgItem(IDC_NUM1)-GetWindowText(t); /获取按钮的数字t=Num+t; /字符串连接m_Edit1.SetWindowText(t);/在编辑框中显示Num=t;double result=0;/存放结果数据,赋初值 0,得出结果后清 0int control=0; /用于判断是何种运算,注意得出结果后清 0const double pi=3.14159265358979323846; /圆周率的值int math=0; /用于区分弧度制和角度制CString Num; /用于按钮输入数字的连接的连接微机上机报告01. 127 退格键 及清屏键 函数代码的实现v

8、oid CCalculatorDlg:OnBackspace() /退格Num=Num.Left(Num.GetLength()-1); /使 Num 的长度减 1m_Edit1.SetWindowText(Num);void CCalculatorDlg:OnClear1() /清楚屏幕/ TODO: Add your control notification handler code herem_Edit1.SetSel(0,-1);m_Edit1.ReplaceSel(“ “);Num= ;result=0;control=0;UpdateData(FALSE); 计算的实现, 按钮下程

9、序代码的实现:void CCalculatorDlg:OnAdd() /加法运算/ TODO: Add your control notification handler code herechar cs30;double add;m_Edit1.GetWindowText(cs,30);add=atof(LPCTSTR)cs);switch(control) /每次计算之前前进行之前的运算case 0: result=add;break; /第一个数应存储case 1: result=result+add;break;case 2: result=result-add;break;case

10、3: result=result*add;break;case 4:if(add=0) MessageBox(“除数不能为 0!请重新输入.“);char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);微机上机报告01. 128Num= ;control=0; /control 赋初值return;else result=result/add;break;control=1;char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;UpdateData(FALSE);voi

11、d CCalculatorDlg:OnSubtract() /减法运算/ TODO: Add your control notification handler code herechar cs30;double sub;m_Edit1.GetWindowText(cs,30);sub=atof(LPCTSTR)cs);switch(control) /每次计算之前前进行之前的运算case 0: result=sub;break; /第一个数应存储case 1: result=result+sub;break;case 2: result=result-sub;break;case 3: re

12、sult=result*sub;break;case 4:if(sub=0) MessageBox(“除数不能为 0!请重新输入.“);char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;control=0; /control 回到初值return;else result=result/sub;break;微机上机报告01. 129control=2;char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;void CCalculatorDlg:OnMul

13、ptiply() /乘法运算/ TODO: Add your control notification handler code herechar cs30;double sub;m_Edit1.GetWindowText(cs,30);sub=atof(LPCTSTR)cs);switch(control) /每次计算之前前进行之前的运算case 0: result=sub;break; /第一个数应存储case 1: result=result+sub;break;case 2: result=result-sub;break;case 3: result=result*sub;break

14、;case 4:if(sub=0) MessageBox(“除数不能为 0!请重新输入.“);char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;control=0; /control 回到初值return;else result=result/sub;break;control=3;char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;微机上机报告01. 1210void CCalculatorDlg:OnDivision() /除法运算/ TODO:

15、 Add your control notification handler code herechar cs30;double sub;m_Edit1.GetWindowText(cs,30);sub=atof(LPCTSTR)cs);switch(control) /每次计算之前前进行之前的运算case 0: result=sub;break; /第一个数应存储case 1: result=result+sub;break;case 2: result=result-sub;break;case 3: result=result*sub;break;case 4:if(sub=0) Mes

16、sageBox(“除数不能为 0!请重新输入.“);char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;control=0; /control 回到初值return;else result=result/sub;break;control=4;char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ; 等于 的实现void CCalculatorDlg:OnEqual() /等于的实现微机上机报告01. 1211/ TODO: Add your contro

17、l notification handler code herechar cs30,seq50;double equal;switch(control)case 1:m_Edit1.GetWindowText(cs,30);equal=atof(LPCTSTR)cs);result=result+equal;_gcvt(result,50,seq);m_Edit1.SetWindowText(seq);Num= ;result=0;control=0;break;case 2:m_Edit1.GetWindowText(cs,30);equal=atof(LPCTSTR)cs);result=

18、result-equal;_gcvt(result,50,seq);m_Edit1.SetWindowText(seq);Num= ;result=0;control=0;break;case 3:m_Edit1.GetWindowText(cs,30);equal=atof(LPCTSTR)cs);result=result*equal;_gcvt(result,50,seq);m_Edit1.SetWindowText(seq);Num= ;result=0;control=0;break;case 4:m_Edit1.GetWindowText(cs,30);微机上机报告01. 1212

19、equal=atof(LPCTSTR)cs);if(equal=0)MessageBox(“除数不能为 0!请重新输入.“);char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;control=0; /control 回到初值return;elseresult=result/equal;_gcvt(result,50,seq);m_Edit1.SetWindowText(seq);Num= ;result=0;control=0;break; 以下是角度制 和弧度制 的实现代码void CCalculatorDlg:OnR

20、adio2() /角度制/ TODO: Add your control notification handler code heremath=2;void CCalculatorDlg:OnRadio1() /弧度制/ TODO: Add your control notification handler code heremath=1; 数学函数的实现,以下给出 和 的程序代码,其余函数依此类推即可得到:void CCalculatorDlg:OnSin() /正弦函数计算的实现/ TODO: Add your control notification handler code here微

21、机上机报告01. 1213char cs30;double sub;m_Edit1.GetWindowText(cs,30);sub=atof(LPCTSTR)cs);switch(control) /先进行判断之前是否有简单运算case 0: break;case 1: sub=result+sub;break;case 2: sub=result-sub;break;case 3: sub=result*sub;break;case 4:if(sub=0) MessageBox(“除数不能为 0!请重新输入.“);char ed50;_gcvt(result,50,ed);m_Edit1.

22、SetWindowText(ed);Num= ;control=0; /control 回到初值return;else sub=result/sub;break;switch(math)case 0: MessageBox(“计算三角函数前请选择单位制!“);return;case 1: break;case 2: sub=(sub*pi)/180;break;result=sin(sub);char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;control=0;UpdateData(FALSE);void CCalcul

23、atorDlg:OnArcsin() /arcsin 函数微机上机报告01. 1214计算的实现/ TODO: Add your control notification handler code herechar cs30;double sub;m_Edit1.GetWindowText(cs,30);sub=atof(LPCTSTR)cs);switch(control) /先进行判断之前是否有简单运算case 0: break;case 1: sub=result+sub;break;case 2: sub=result-sub;break;case 3: sub=result*sub;

24、break;case 4:if(sub=0) MessageBox(“除数不能为 0!请重新输入.“);char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;control=0; /control 回到初值return;else sub=result/sub;break;if(sub1|sub-1) MessageBox(“所输入的数超出 arcsin 函数的定义域,请重新输入!“);char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;return;sw

25、itch(math)case 0: break;case 1: break;case 2: MessageBox(“计算反三角函数时请选择弧度制!“);return;微机上机报告01. 1215result=asin(sub);result=(result*180)/pi;char ed50;_gcvt(result,50,ed);m_Edit1.SetWindowText(ed);Num= ;control=0;UpdateData(FALSE);三、心得体会此次微机上机编程中,我原本打算完成那 20 道题目的集合的程序,并已有了初步的整体规划,且已完成了主程序及前两小题的设计工作。但是由于

26、此工程包含内容太多,每一题的方法都不尽相同,加之时间紧(这是由于 11 号还有考试,故在完成前两题的工作后已是 11 号晚上了) ,因而放弃原来计划,改为编程制作建议计算器。由于有之前的编程经历,在编程计算器的过程中较为顺利,故而只用一天的时间就编完成。在编程的过程中除少量借鉴网络资源的计算器编程外,绝大部分均是本人通查阅编程书籍和自己思考完成的。在编程过程中最难实现的是加减乘除和等号之间已输入数据的存放和修改,以及各个操作之间的相互影响,故而我在文档中将所有的加减乘除以及等号全部写出。每个函数之间的相互联系以及如何处理好这些联系是这部分代码的核心思想。另外在常用数学函数的实现中,应特别注意判断微机上机报告01. 1216各个函数的定义域的问题,以及出现错误后的处理和之前数据的处理问题,这是这部分代码的主要问题。这两个问题是变成过程中工作量最大、时间消耗最多的部分,也是修改完善最多的部分,更是此程序最核心的部分。由于时间紧,在刚开始设计计算器之时所形成的一些想法在实际编程的过程中没有来得及实现。这让我体会到了编程工作的不易,更让我感受到了编程工作的严谨。每一部分之间都有很强的联系,而且在越深入的思考和编程后会发现这种联系会越来越紧密,因而,正确理顺各部分的关系,以及处理好这些关系是最重要的问题。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报