计算器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);