计算器实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(计算机与信息工程学院)可视化编程实验报告

实验题目:基于MFC的计算器

班级:13级专升本

指导教师:朝力萌

学号:***********

*名:**

2013年6月30日

一.实验要求

参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能完成数据的加减乘除的基本功能。

二.设计思路

1.创建主体框架:建立程序的主要界面后,系统自动生成界面的主要窗口生

成代码。对于每个按钮的的代码段中,分别添加事件触发的处理代码。对于Edit,显示输入的信息和显示处理后的结果。

2.数字1-9的按键的事件处理都是在Edit中分别添加相对应的数字字符,把

数字当成是字符串处理。对于加减乘除四则运算按键,事件触发后的处理是在Edit中的字符串后加上相应的四则运算符,要说明的是计算器的显示是按了四则运算符后并不是清屏Edit的,而是把四则运算符一起显示出来直到输入完了运算式,按了“=”按键才开始运算并显示结果。

3.程序使用时是先把整个运算的式子输入到Edit当中,程序把这一表达式转

化成字符串,运行四则运算函数,把字符从栈中读出,根据出栈的符号确定该进行那种运算处理。

通常地,计算机组成原理当中介绍的四则运算算法一般如下,在计算器编程当中可以从中获取可行的思想。四则运算算法的一般描述:

1.加法算法

a)通过界面输入获得两个操作数的值;

b)将计算结果保存并输出。

2.减法算法

首先通过界面输入两个操作数,然后调用令第二个操作数取相反数,调用加法函数就可以实现减法计算。

3.乘法算法

乘法的算法就是简单的按照一般的乘法计算方法来进行的。考虑一般情况,两个操作数均为小数,从低位到高位,依次用第二个操作数的每一位上的数字乘以第一个操作数,然后将得出的结果调用加法函数相加即得到乘法的最后结果。

4.除法算法

除法算法也是按照除法算法进行。建立如下的除法算法:

a)输入两个操作数;

b)若第二个操作数为0,则输出除数不能为0的出错信息;

c)若第二个操作数不是0,则用第一个数除以第二个数;

d)保存并输出结果。

5.取倒数的算法

有了除法的算法,取倒数的算法就很简单了,直接用1和输入的操作数做除法运算,输出结果即可。

6.其他一些运算的算法,在代码上会有体现。

三.实验步骤

(1)新建工程——MFC AppWizard(exe),工程名LT

(2)选择基于对话框的设计

完成:

(4)利用Visual C++提供的资源编辑器对对话框资源进行编辑。删除对话框中默认的OK和Cancel按钮。添加两个Edit控件,其控件ID为IDC_s和IDC_show。添加若干按钮控件,其ID如表所示。

按钮控件资源

按钮名称按钮ID 用途

0 IDC_0 按键0

(5)由这些控件组成的计算器如下图所示

(6)在Visual C++中左侧的工具栏中,选中CAboutDLG选项→右键→添加→成员变量m_flag、temp等步骤如图所示:

(7)给Edit1和Edit2绑定CString类函数单击Edit——右键——classwizard 如图所示:

四.核心代码:

按钮sqrt的代码(开平方)

void CcalDlg::OnBnClickedGen()

{

double temp;

UpdateData(true);

temp=sqrt(_ttof(m_s));

m_s.Format(L"%lf",temp);

del0();

UpdateData(false);

}

}

按钮”%”的代码

if(m_flag==6)//"%"

{

a=_ttof(m_s)/100;

if(m_a==1)

temp=m_temp +m_temp*a;

if(m_a==2)

temp=m_temp -m_temp*a;

if(m_a==3)

temp=m_temp *m_temp*a;

temp=m_temp /m_temp*a;

}

m_s.Format(L"%lf",temp);

del0();

UpdateData(false);

}

清空按钮

void CcalDlg::OnBnClickedClear()

{

m_s="";

UpdateData(false);

}

清除一位按钮

void CcalDlg::OnBnClickedClear1w() {

UpdateData(true);

m_s.Delete(m_s.GetLength()-1,1);

UpdateData(false);

}

按钮“.”的代码

void CcalDlg::OnBnClickedDot()

{

UpdateData(true);

if(m_s.Find(L".")==-1)

m_s=m_s+L".";

UpdateData(false);

}

按钮”=”的代码

void CcalDlg::OnBnClickedCal()

{

double temp,a;

int n,i;

UpdateData(true);

if(m_flag==1)

temp=m_temp + _ttof(m_s);

if(m_flag==2)

temp=m_temp - _ttof(m_s);

相关文档
最新文档