C++计算器课程设计

更新时间:2023-10-14 02:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++课程设计报告

( 2013 — 2014 年度第 1 学期)

计算器程序设计

专 业 学生姓名 班 级 学 号 指导教师 完成日期

计算机科学与技术

2014年1月16日

C++课程设计

目 录

摘 要 ....................................................................................................................... 1 1、引 言 ................................................................................................................... 1

1.1 课题意义及目的 .................................................................................................................. 1 1.2 课程设计内容及要求 .......................................................................................................... 1

2、开发工具的介绍 ................................................................................................... 2 3、设计内容 .............................................................................................................. 3

3.1 功能说明 .............................................................................................................................. 3 3.2 流程图: .............................................................................................................................. 3

4、系统的实现 .......................................................................................................... 4

4.1 文件创建 .............................................................................................................................. 4 4.2 界面设计 .............................................................................................................................. 6 4.3 数值计算功能的实现 ........................................................................................................ 10

5、程序结果的演示 ................................................................................................. 16

5.1 测试的研究与选择 ............................................................................................................ 16 5.2 测试环境 ............................................................................................................................ 16 5.3 实例测试结果 .................................................................................................................... 16

心得与体会 .............................................................................................................. 19 参考文献 ................................................................................................................. 20 附录1:RUN函数程序 ............................................................................................ 21 附录2:计算器程序 ................................................................................................ 22

I

C++课程设计

摘 要

随着当今社会的发展,越来越多的人开始使用电子商品,新的高考制度也允许使用计算器,而作为一名计算机专业的学生,在使用工具的同时也应该学会制作这类工具。本课程设计是利用VC++编程,实现一个简单计算器。此计算器类似于Windows附件中自带的计算器,它利用不仅实现了简单的四则运算功能,还实现了少部分科学函数计算功能,例如sin,cos,tan等而且具有简洁的外观,好看的背景。用户可以使用任何合法的四则运算,并且显示运算结果。计算器的设计是基于MFC下进行,通过各种控件的使用,实现要求中的功能。该报告介绍了该课题的意义,设计内容及要求, vc++开发工具的简单使用方式。且着重阐述了计算器的设计思路和功能,并对代码进行了详细的解释。

关键词 VC++ , 计算器 , MFC , 控件

1

C++课程设计

计算器程序设计 1、引 言

现代计算器一般是指“电子计算器”,所以,可以认为是“电子计算器”的简称。能进行数学运算的手持机器,拥有集成电路芯片,但结构简单,比现代的电脑结构简单的多,但是比较廉价,可以说是现代办公必备用品之一。本课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。

1.1 课题意义及目的

现实学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。人们对计算的要求不断提高,普通的功能简单的仅能进行四则运算的计算工具已经不能满足需要,需要一种能进行多种计算。现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。这些大大方便了我们的生活给我们更多的选择和实现方式。

这个程序可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。并且操作简单、界面清晰、灵活、实用、方便等要求出发,它所能完成的主要计算功能有以下几个方面:加法,减法,乘法,除法,求平方根,求Sin,求Cos,求Tan,求Log10。计算器的设计使我们所学到的c语言知识在现实中得到检验!

信息时代是科技和经济发展的产物,软件产业是信息时代的产物,它在我们的生活工作中发挥着越来越大的作用,计算器的设计对我们知识的掌握有很大的作用,更能方便他人,可行性很强!

1.2 课程设计内容及要求 1.设计内容

设计一个简单的计算器。要求能实现整数、小数算术运算。程序带清零按钮。 2.设计要求

用VC++进行编写MFC程序,工程名为自己的姓名首字母和学号连接而成。注重编码质量,代码要有适当的注释;

提交设计报告一份(课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。 程序运行如下图1所示:

1

C++课程设计

图1 计算器运行界面

2、开发工具的介绍

本课程设计使用的是Visual C++6.0。Visual C++6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。

VC++6.0是Windows 95/98、XP或Windows NT下的一个应用程序,本身对软硬件没有特殊要求。就是说它对环境的要求与Windows 95/98、Windows NT要求是一致的。

硬件要求:一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。 软件要求:Windows 95/98或Windows NT3.51以上版本。

VC++ 6.0系统可以在一张CD盘上,也可以在“Visual Studio( Visual C++、Visual Foxpro)”等产品的第一张CD盘上。一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。

在安装好VC 6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。 与一般的应用软件一样,有以下两种启动方式:

(1)通过“开始”按钮,选择“程序”菜单,然后打开“Microsoft Visual studio 6.0中文版”子菜单中的“Microsoft Visual C++ 6.0 中文版”程序。

(2)用户也可以使用命令行启动VC。单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:\\Program Files\\Microsoft Visual Studio\\VC98\\VC6.exe(按默认盘符和路径安

2

C++课程设计

装)即可。 3、设计内容

3.1 功能说明

它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单机按钮进行操作,也可直接通过键盘直接输入。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。 功能:

(1)包含的功能有:加、减、乘、除运算,开方,平方等功能。

(2)计算器上数字0—9为一个控件数组,加、减、乘、除等为一个控件组。 (3)给对话框添加菜单。

(4)制定高级按钮控件,使按钮改变默认的颜色。

(5)制定高级编辑控件,该编辑控件可以指定文本文字的字体和颜色。 (6)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (7)计算功能基本上是用系统内部函数。

(8)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。

(10)“CE”按钮可以清除所有已输入的数据从头计算 功能模块的实现:

(1)首先,添加高级按钮控件类,在这个类中实现高级的按钮控件。在此类中对于所有的对于按钮的绘制工作都是在DrawItem函数中完成的,实现按钮对鼠标不同的位置和动作改变不同的颜色,并且按钮的客户区域变成一个椭圆。

(2)其次,添加一个高级编辑控件类,在此类的基础上实现高级编辑控件。在OnDisplay函数中设置编辑框的显示文本,再调用OnDraw函数将其显示出来,并用指定的画刷填充客户区,并且用指定的颜色绘制显示文本。

(3)最后,实现主对话框界面功能,主要是加载菜单资源和对话框扩展功能的实现。在CCalculatorDlg::OnCreate函数中设定对话框的初始大小与位置,可以在这个对话框中进行窗口风格修改,位置设置等操作,然后添加菜单项ID_EXTEND的响应函数OnExtend。 3.2 流程图:

3

C++课程设计

开始

输入第一个数

+、-、*、/等

输入第二个数

x^2、log、tan、cos、

sin、等

显示结果

按“CE”清零

结束

4、系统的实现

4.1 文件创建

利用MFC AppWinzard生成计算器应用程序框架具体步骤如下:

(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入ZZ 。Lacation文本框是指项目的本地路径。如图所示。

4

C++课程设计

(2)单击OK按钮,弹出MFC AppWinzard_Step1对话框。选中基本对话框,如图所示。

(3)单击Next按钮,弹出MFC AppWinzard_Step2 of4对话框,如图所示。

(4)单击Next按钮,弹出MFC AppWinzard_Step3 of4对话框,如图所示。

5

C++课程设计

(5)单击Next按钮,弹出MFC AppWinzard_Step4 of4对话框,如图所示。单击Finish按钮,创建框架。

4.2 界面设计

(1)编辑对话框及控件资源

利用Visual C++提供的资源编辑器对对话框资源进行编辑。删除对话框中默认的OK和Cancel按钮。添加一个Edit控件,其控件ID为IDC_EDIT1。

6

C++课程设计

接下来在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图所示,

在该对话框中输入控件的ID值和标题属性。并通过复制添加若干按钮控件,其ID如表4-1所示。

表1按钮控件资源清单:

按钮名称 0 1 2 3 4 5 6 7 8 9 . 按钮ID B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 Bd 用途 按键0 按键1 按键2 按键3 按键4 按键5 按键6 按键7 按键8 按键9 小数点 7

C++课程设计 = + - * / CE Sqrt sin cos tan x^2 log Brun Badd Bsub Bmult Bdiv ce sqrt sin cos tan pf log 求值 加号 减号 乘号 除号 清屏 开方 正弦 余弦 正切 平方 对数 所有按键都添加好后的效果如图2所示。

图 2

(2)连接按钮与变量

除了建立上面所示的控件外,还要对每个按钮控件定义一个对象与之相关联,并为每个按钮控件建立一个成员函数来响应其BN_CLICKED消息。如图3所示:

8

C++课程设计

图3为按钮控件添加消息响应

(3)关联控件与对象

在CAboutDlg类的声明中,已经为编辑框、静态框及每一个按钮声明了相应类型的对象与之对应。但这些控件与对象的关联工作是在DoDataExchange函数中完成的。

图4关联控件与对象

9

C++课程设计

(4)添加背景图

为对话框添加背景图,以增加界面的美观性。首先为工程添加一幅位图资源,以作为对话框的背景。然后加入一个Static控件,将其Type属性设为Bitmap,并为Image属性选择位图资源,如图5所示。

图5添加位图

参数设置后对话框的外观如图6所示。

图6运行结果图

4.3 数值计算功能的实现

1具体功能的实现首先添加成员变量。该计算器中大部分的运算都是二元运算,即需要两○

个操作数和一个二元运算操作符。所以必须声明两个浮点数,分别用来表示初始操作数和结果操作数,同时,必须声明两个字符串类型的变量,分别用来显示初始操作数。还需要一个整形变量来记录当前运算符,以及一个整形变量来记录当前小数点按钮是否被单击过。定义如下:

public:

CZZDlg(CWnd* pParent = NULL); // standard constructor

10

C++课程设计

double m_input; //保存输入的数字

bool m_done,opt; //布尔类型成员变量,判断一次计算结束,和操作符点击的凭据 void Numin(double put); //成员函数,处理输入的数据 double num_1,num_2; //两个操作数

void operate();//输入运算符后要调用的函数 int yun;//运算判断

bool dian;//判断小数点是否被点击 int n;//显示小数部分的输入位数 double m; void OnMnuCut(); void OnMnuCopy(); void OnMnuPaste();

void OnContextMenu(CWnd* pWnd, CPoint point);

2当小数点键被单击时,首先判断小数点键是否已经被单击过,以及当前初始操作数字符○

串是否为空。如果小数点键没有被单击过,而且当前初始操作数字符串不为空,则将小数点追加到初始操作数末尾,并且修改小数点标识dian为TRUE。实现代码如下:

小数点的定义如下: void CZZDlg::OnBd() { }

3程序判断代码实现如下: ○

void CZZDlg::Numin(double put) {

if(m_done==true||opt==true) //如果一次计算结束或运算符已经选择

{

if(dian==false)//如果小数点还没有被按下 {

m_Result=m_input=0.0; UpdateData(false);

m_input=m_input*10+put;

11

// \dian=true; n=1;

C++课程设计

}

m_Result=m_input; UpdateData(false); opt=false;m_done=false;

else if(dian==true)//如果小数点已经被按下////////// {

m_Result=m_input=0.0;

UpdateData(false);

int i;

for(i=0;i

put=put/10;

} m=put; } } else {

if(dian==false)//如果小数点还没有被按下 {

m_input=m_input*10+put; m_Result=m_input; UpdateData(false); opt=false;m_done=false; m_input=m_input+m; m_Result=m_input; UpdateData(false); opt=false;m_done=false;

}

else if(dian==true)//如果小数点已经被按下/////////////// {

int i;

for(i=0;i

{

12

C++课程设计

put=put/10;

} m=put;

m_input=m_input+m; m_Result=m_input; UpdateData(false); opt=false;m_done=false;

} }

n++; }

4当数字键0—9被单击时,则将当前所按键加到初始操作数末尾,并将初始操作数显○

示出来。以数字键盘被单击为例,实现代码如下:

void CZZDlg::OnB0() { // \ Numin(0.0); }

void CZZDlg::OnB1() { // \ Numin(1.0); }

void CZZDlg::OnB2() { // \ Numin(2.0); }

void CZZDlg::OnB3() {// \ Numin(3.0); }

void CZZDlg::OnB4() { // \ Numin(4.0); }

void CZZDlg::OnB5() { // \ Numin(5.0); }

void CZZDlg::OnB6() { // \ Numin(6.0); }

void CZZDlg::OnB7() { // \ Numin(7.0);

13

C++课程设计 } void CZZDlg::OnB8() {// \ Numin(8.0); } void CZZDlg::OnB9() { // \ Numin(9.0); } void CZZDlg::operate() { num_1=m_Result; opt=true; dian=false; } n=0; 5当清除键CE被单击时,则对所有的成员变量进行初始化。清除小数点标识,将保存初○始操作数和结果操作数的字符串清空,将保存初始操作数和结果操作数的浮点数清0,将当前操作符清0。实现代码如下:

void CZZDlg::OnBce()

{// \

m_input=0;

m_Result=float(m_input); }

6当任何一个运算符键被单击时,首先根据当前运算符计算运算结果,再修改记录当前运○

算符的变量的值。以加号键被按下为例,实现代码如下:

加号函数:

void CZZDlg::OnBadd() { // \ }

void CZZDlg::operate() {

num_1=m_Result;

14

UpdateData(false); m_done=false; dian=false; opt=false; n=0;

operate(); yun=1;

C++课程设计

opt=true;

dian=false; n=0;

}

7加号运算的实现如下: if(yun==1)//判断执行何种运算

{ m_Result=num_1+num_2; UpdateData(false);

}

8计算机还有简单的函数功能,函数定义如下:void CZZDlg::Onlog() { operate(); yun=5;

}

void CZZDlg::Onpf() { operate(); yun=6; }

void CZZDlg::Onsqrt() { operate(); yun=7; }

void CZZDlg::Onsin() { operate(); ○

9函数运算实现如下: else if(yun==6)//平方 {

m_Result=num_1*num_1; 15

yun=8;

}

void CZZDlg::Ontan() { operate(); yun=9;

}

void CZZDlg::Oncos() { operate(); yun=10;

} UpdateData(false); }

else if(yun==7)//根号 {

if(num_1<=0)

C++课程设计

{

m_Result=0; UpdateData(false); }

else if(yun==9)//tan {

m_Result=tan(num_1*PI/180);

UpdateData(false); }

else if(yun==10)//cos {

m_Result=sqrt(num_1); UpdateData(false); }

else if(yun==8)//sin {

m_Result=cos(num_1*PI/180);

UpdateData(false); }

m_Result=sin(num_1*PI/180);

UpdateData(false); }

10计算器的核心运算函数——Run。在Run中,首先将记录当前操作数的字符串中保存的○

字符串转化为浮点数;其次根据当前操作符的类型,选择适当的运算操作;再将记录结果操作数的浮点变量中的值转化为字符串,并显示在结果编辑框中。Run函数实现代码见附录1。

11计算器的全部代码实现见附录2。 ○

5、程序结果的演示

5.1 测试的研究与选择

测试过程中要判断测试是否成功,首先要分析程序界面的变化是否正常、输入数据显示是否正常,然后是计算数据的结果是否正确,最后看各个功能键是否能正常使用。 5.2 测试环境 测试环境如下:

测试系统: Windows win7 *64位 测试工具: Visual Studio C++ 6.0 5.3 实例测试结果

首先,在运行界面测试简单运算是否能正常运算,输入“34+87=”见结果图5-1所示,观察计算结果是否正确。

16

C++课程设计

图5-1“34+78=”的运行结果

其次,输入“2*4=”,见结果图5-2所示

图5-2“2*4=”的运行结果

再输入“9/3=”,见结果图5-3所示

17

C++课程设计 // DO NOT EDIT what you see /////////////////////////////////////in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_ZZ_H__D6CCE042_0495_4C65_8B5F_FC1236BFFCEC__INCLUDED_) // ZZ.cpp : Defines the class behaviors for the application. // #include \#include \#include \ #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //////////////////////////////////////// // CZZApp BEGIN_MESSAGE_MAP(CZZApp, CWinApp) //{{AFX_MSG_MAP(CZZApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CZZApp construction CZZApp::CZZApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } ///////////////////////////////////////////////////////////////////////////// // The one and only CZZApp object CZZApp theApp; 33

C++课程设计 ///////////////////////////////////////////////////////////////////////////// // CZZApp initialization BOOL CZZApp::InitInstance() { AfxEnableControlContainer(); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif CZZDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel } // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; } 34

C++课程设计

图5-3“9/3=”的运行结果

最后出入25开根,见结果图5-4所示:

图5-3“25开根=”的运行结果

测试结构显示,“计算器”运行基本正常,没有发现明显的错误。

18

C++课程设计

心得与体会

经过两个星期的努力,课程设计基本完成了。在课程设计的实践中,学到很多有用的知识,也积累了不少宝贵的经验。本次设计是以一个计算器的实现为基础,掌握一个基于对话框的应用程序的编程方法以及对话框常用控件的高级编程。在课程设计中我了解到到对话框应用程序的编程模式、对话框添加背景图片。课程设计是需要大量时间去动手练习才能体验到它的内涵的,同时还需要用心地投入,时间和情感花下去之后,的确感受到有所收获,增加了对编程的兴趣。通过这次课程设计,掌握了对话框的相关操作,也体会到书写代码一定要仔细,有时候一小点拼写错误会浪费很多调试程序的时间,再有一点就是要好好学习英语,对编程有很大帮助。

经过设计的各个环节,从中学到了很多,锻炼了自己系统的设计的能力,从系统的需求到系统的功能,到系统的测试,到系统的发布,可以掌握到一个完全的过程,这样对我们以后在工作中或学习中得到很好的锻炼,为用VC++编辑软件奠定基础。这次课程设计让我学到了很多,不仅巩固了MFC程序设计知识,而且也培养了我的动手能力,令我的创造性思维得到拓展。期待今后有更多类似的锻炼机会。

当然,本课程设计所采取的解决问题的方法并不是非常完善的,在今后的学习、工作中,我将继续认真学习,以求能做出更完善的程序。

19

C++课程设计

参考文献

[1] 徐金梧.TURBO C实用大全.北京机械工业出版社.1996. 5 [2] 江汉秀.C语言实用程序荟萃.西安西安电子科技大学出版社1993 [3] 谭浩强.C语言程序设计.北京清华大学出版社1999.12 [4] 杨开城.C语言教程实验与练习.北京人民邮电出版社2002.8

[5] 揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社.2005

[6] 张建宏、汤练兵、马德骏.计算机程序设计基础-C语言程序设计.科学出版社.2006 [7] 陈清华.Visual C++课程设计案例精选与编程指导.东南大学出版社.2004

20

C++课程设计

附录1:RUN函数程序

void CZZDlg::OnBrun() {

// TODO: Add your control notification handler code here else if(yun==6)//平方 {

m_Result=num_1*num_1; UpdateData(false); //\

num_2=m_Result; if(yun==1)//加 {

m_Result=num_1+num_2; UpdateData(false);

}

else if(yun==2)//减 {

m_Result=num_1-num_2; UpdateData(false); }

else if(yun==3)//乘 {

m_Result=num_1*num_2; UpdateData(false); }

else if(yun==4)//除 {

m_Result=num_1/num_2; UpdateData(false); }

else if(yun==5)//log { if(num_1<=0) {

m_Result=0;

UpdateData(false); }

m_Result=log10(num_1); UpdateData(false); }

}

else if(yun==7)//根号 {

if(num_1<=0) {

m_Result=0;

UpdateData(false); }

m_Result=sqrt(num_1); UpdateData(false); }

else if(yun==8)//sin {

m_Result=sin(num_1*PI/180); UpdateData(false); }

else if(yun==9)//tan {

m_Result=tan(num_1*PI/180); UpdateData(false); }

else if(yun==10)//cos {

m_Result=cos(num_1*PI/180); UpdateData(false); }

opt=false; m_done=true; dian=false; n=0;

21

C++课程设计

附录2:计算器程序

// ZZDlg.h : header file

#if !defined(AFX_ZZDLG_H__70D9D5A9_C97C_488F_8F36_08F210B07A01__INCLUDED_) #define

AFX_ZZDLG_H__70D9D5A9_C97C_488F_8F36_08F210B07A01__INCLUDED_

#if _MSC_VER > 1000 #pragma once

#endif // _MSC_VER > 1000

///////////////////////////////////////////////////////////////////// // CZZDlg dialog

class CZZDlg : public CDialog {

// Construction public: CZZDlg(CWnd* pParent = NULL); // standard constructor

double m_input; //保存输入的数字

bool m_done,opt; //布尔类型成员

变量,判断一次计算结束,和操作符点击的凭据

void Numin(double put); //成员函数,

处理输入的数据 double num_1,num_2; //两个操作

void operate();//输入运算符后要调用的函数 int yun;

bool dian;//判断小数点是否被点击 int n;//显示小数部分的输入位数

double m;

void OnMnuCut(); void OnMnuCopy(); void OnMnuPaste();

void OnContextMenu(CWnd* pWnd,

CPoint point);

// Dialog Data //{{AFX_DATA(CZZDlg)

enum { IDD = IDD_ZZ_DIALOG }; double m_Result; //}}AFX_DATA

// ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CZZDlg) protected:

virtual void

DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

// Implementation protected: HICON m_hIcon; // Generated message map functions //{{AFX_MSG(CZZDlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnB0();

22

C++课程设计 afx_msg void OnB1(); afx_msg void OnB2(); afx_msg void OnB3(); afx_msg void OnB4(); afx_msg void OnB5(); afx_msg void OnB6(); afx_msg void OnB7(); afx_msg void OnB8(); afx_msg void OnB9(); afx_msg void OnBadd(); afx_msg void OnBce(); afx_msg void OnBd(); afx_msg void OnBdiv(); afx_msg void OnBmult(); afx_msg void OnBrun(); afx_msg void OnBsub(); afx_msg void OnChangeEdit1(); afx_msg void Onpf(); afx_msg void Onsin(); afx_msg void Onsqrt(); afx_msg void Ontan(); afx_msg void Oncos(); afx_msg void Onlog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_ZZDLG_H__70D9D5A9_C97C_488F_8F36_08F210B07A01__INCLUDED_) // ZZDlg.cpp : implementation file // #include \#include \#include \#include \#include #include \#include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE #define PI 3.1415926535897932384626433 static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA 23

C++课程设计 // ClassWizard generated virtual // No message handlers function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void //}}AFX_MSG_MAP END_MESSAGE_MAP() //////////////////////////////////////////////////////////////////////////DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) /// // CZZDlg dialog CZZDlg::CZZDlg(CWnd* pParent /*=NULL*/) : CDialog(CZZDlg::IDD, pParent) { //{{AFX_DATA_INIT(CZZDlg) m_Result = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CZZDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CZZDlg) DDX_Text(pDX, IDC_EDIT1, m_Result); //}}AFX_DATA_MAP } 24

C++课程设计 BEGIN_MESSAGE_MAP(CZZDlg, CDialog) //{{AFX_MSG_MAP(CZZDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_B0, OnB0) ON_BN_CLICKED(IDC_B1, OnB1) ON_BN_CLICKED(IDC_B2, OnB2) ON_BN_CLICKED(IDC_B3, OnB3) ON_BN_CLICKED(IDC_B4, OnB4) ON_BN_CLICKED(IDC_B5, OnB5) ON_BN_CLICKED(IDC_B6, OnB6) ON_BN_CLICKED(IDC_B7, OnB7) ON_BN_CLICKED(IDC_B8, OnB8) ON_BN_CLICKED(IDC_B9, OnB9) ON_BN_CLICKED(IDC_Badd, OnBadd) ON_BN_CLICKED(IDC_Bce, OnBce) ON_BN_CLICKED(IDC_Bd, OnBd) ON_BN_CLICKED(IDC_Bdiv, OnBdiv) ON_BN_CLICKED(IDC_Bmult, OnBmult) ON_BN_CLICKED(IDC_Brun, OnBrun) ON_BN_CLICKED(IDC_Bsub, OnBsub) ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1) ON_BN_CLICKED(IDC_pf, Onpf) ON_BN_CLICKED(IDC_sin, Onsin) ON_BN_CLICKED(IDC_sqrt, Onsqrt) ON_BN_CLICKED(IDC_tan, Ontan) ON_BN_CLICKED(IDC_cos, Oncos) ON_WM_RBUTTONDOWN() ON_BN_CLICKED(IDC_log, Onlog) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CZZDlg message handlers BOOL CZZDlg::OnInitDialog() { CDialog::OnInitDialog(); m_input=0.0; opt=false,m_done=false; dian=false; // Add \system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR25

C++课程设计 ); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } void CZZDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CZZDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; 26

C++课程设计 // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CZZDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CZZDlg::OnB0() { // TODO: Add your control notification handler code here // \ Numin(0.0); } void CZZDlg::OnB1() { // TODO: Add your control notification handler code here // \ Numin(1.0); } void CZZDlg::OnB2() { // TODO: Add your control notification handler code here // \ Numin(2.0); } void CZZDlg::OnB3() { // TODO: Add your control notification handler code here // \ Numin(3.0); } void CZZDlg::OnB4() { // TODO: Add your control notification handler code here // \ Numin(4.0); } void CZZDlg::OnB5() { // TODO: Add your control notification handler code here // \ Numin(5.0); } 27

C++课程设计 void CZZDlg::OnB6() { // TODO: Add your control notification handler code here // \ Numin(6.0); } void CZZDlg::OnB7() { // TODO: Add your control notification handler code here // \ Numin(7.0); } void CZZDlg::OnB8() { // TODO: Add your control notification handler code here // \ Numin(8.0); } void CZZDlg::OnB9() { // TODO: Add your control notification handler code here // \ Numin(9.0); } void CZZDlg::OnBd() { // TODO: Add your control notification handler code here // \ dian=true; n=1; } void CZZDlg::OnBadd() { // TODO: Add your control notification handler code here // \ operate(); yun=1; } void CZZDlg::OnBsub() { // TODO: Add your control notification handler code here // \ operate(); yun=2; } void CZZDlg::OnBmult() { // TODO: Add your control notification handler code here 28

C++课程设计 // \ operate(); yun=3; } void CZZDlg::OnBdiv() { // TODO: Add your control notification handler code here // \ operate(); yun=4; } void CZZDlg::Onlog() { // TODO: Add your control notification handler code here operate(); yun=5; } void CZZDlg::Onpf() { // TODO: Add your control notification handler code here operate(); yun=6; } void CZZDlg::Onsqrt() { // TODO: Add your control notification handler code here operate(); yun=7; } void CZZDlg::Onsin() { // TODO: Add your control notification handler code here operate(); yun=8; } void CZZDlg::Ontan() { // TODO: Add your control notification handler code here operate(); yun=9; } void CZZDlg::Oncos() { // TODO: Add your control notification handler code here operate(); yun=10; } void CZZDlg::OnBce() { // TODO: Add your control notification handler code here // \29

C++课程设计 m_input=0; m_Result=float(m_input); UpdateData(false); m_done=false; dian=false; opt=false; n=0; } void CZZDlg::OnBrun() { // TODO: Add your control notification handler code here //\ num_2=m_Result; if(yun==1)//加 { m_Result=num_1+num_2; UpdateData(false); } else if(yun==2)//减 { m_Result=num_1-num_2; UpdateData(false); } else if(yun==3)//乘 { m_Result=num_1*num_2; UpdateData(false); } else if(yun==4)//除 { m_Result=num_1/num_2; UpdateData(false); } else if(yun==5)//log { if(num_1<=0) { m_Result=0; UpdateData(false); } m_Result=log10(num_1); UpdateData(false); } else if(yun==6)//平方 { m_Result=num_1*num_1; UpdateData(false); } else if(yun==7)//根号 { if(num_1<=0) { m_Result=0; UpdateData(false); } m_Result=sqrt(num_1); UpdateData(false); } else if(yun==8)//sin { m_Result=sin(num_1*PI/180); 30

C++课程设计 UpdateData(false); } else if(yun==9)//tan { m_Result=tan(num_1*PI/180); UpdateData(false); } else if(yun==10)//cos { m_Result=cos(num_1*PI/180); UpdateData(false); } opt=false; m_done=true; dian=false; n=0; } void CZZDlg::Numin(double put) { if(m_done==true||opt==true) //如果一次计算结束或运算符已经选择 { if(dian==false)//如果小数点还没有被按下 { m_Result=m_input=0.0; UpdateData(false); m_input=m_input*10+put; m_Result=m_input; UpdateData(false); opt=false;m_done=false; } else if(dian==true)//如果小数点已经被按下////////// { m_Result=m_input=0.0; UpdateData(false); int i; for(i=0;i

C++课程设计 { put=put/10; } m=put; m_input=m_input+m; m_Result=m_input; UpdateData(false); opt=false;m_done=false; } } n++; } void CZZDlg::operate() { num_1=m_Result; opt=true; dian=false; n=0; } // ZZ.h : main header file for the ZZ application #if !defined(AFX_ZZ_H__D6CCE042_0495_4C65_8B5F_FC1236BFFCEC__INCLUDED_) #define AFX_ZZ_H__D6CCE042_0495_4C65_8B5F_FC1236BFFCEC__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif #include \ // main symbols ///////////////////////////////////////////////////////////////////////////// // CZZApp: // See ZZ.cpp for the implementation of this class // class CZZApp : public CWinApp { public: CZZApp(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CZZApp) public: virtual BOOL InitInstance(); //}}AFX_VIRTUAL // Implementation //{{AFX_MSG(CZZApp) // NOTE - the ClassWizard will add and remove member functions here. 32

本文来源:https://www.bwwdw.com/article/ir1f.html

Top