计算器实验报告.docx
《计算器实验报告.docx》由会员分享,可在线阅读,更多相关《计算器实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
计算器实验报告
内蒙古师范大学
(计算机与信息工程学院)
可视化编程实验报告
实验题目:
计算器
班级:
指导教师:
学号:
姓名:
2013年6月6日
(一)实验内容:
用VC++的知识编写程序来实现计算功能。
(二)实验目的:
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对我们对编程语句及语义分析和理解,并实现对命令语句的灵活应用。
这次实验目的就是实现简单计算器的功能。
要程序能实现:
加、减、乘、除、开方、倒数等运算功能;还要实现数据的输入、输出、计算、显示及程序退出等功能,另外还可以实现多种科学计算的功能。
(三)实验步骤:
1、首先利用MFCAppWinzard生成计算器应用程序框架具体步骤如下:
(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFCAppWizard(exe)选项,然后在Projectname文本框中输入cyyJSQ。
Lacation文本框是指项目的本地路径。
(2)单击OK按钮,弹出MFCAppWinzard_Step1(应用程序向导-步骤1)对话框。
选中单选按钮,如图所示。
(3)单击Next按钮,弹出MFCAppWinzard_Step2of4对话框,如图所示。
(4)单击Next按钮,弹出MFCAppWinzard_Step3of4对话框,如图所示。
(5)单击Next按钮,弹出MFCAppWinzard_Step4of4对话框,如图所示。
单击Finish按钮,创建框架。
2、其次编辑资源
(1)编辑对话框及控件资源
首先利用VisualC++提供的资源编辑器对对话框资源进行编辑。
删除对话框中默认的OK和Cancel按钮。
添加两个Edit控件,其控件ID为IDC_EDIT1和IDC_EDIT2。
添加若干按钮控件,其ID如表所示。
按钮控件资源清单
按钮名称
按钮ID
用途
0
IDC_ZERO
按键0
1
IDC_1
按键1
2
IDC_2
按键2
3
IDC_3
按键3
4
IDC_4
按键4
5
IDC_5
按键5
6
IDC_6
按键6
7
IDC_7
按键7
8
IDC_8
按键8
9
IDC_9
按键9
.
IDC_DOT
小数点
=
IDC_Equal
等于
+
IDC_ADD
加号
-
IDC_SUB
减号
*
IDC_MUL
乘号
/
IDC_DIV
除号
CE
IDC_CE
清屏
Sqrt
IDC_Sqrt
开方
1/x
IDC_Daoshu
倒数
-/+
IDC_ZHengfu
正负
MC
IDC_Mc
清除内存记录数据
MR
IDC_Mr
内存中保存的数据
MS
IDC_Ms
数据存入存储器中,将原有的数据冲走
M+
IDC_Madd
当前记录数据与内存数据相加
%
IDC_Per
百分号
C
IDC_C
清零(清除全部)
CE
IDC_CE
清除上一步数据
Backspace
IDC_Backspace
从后向前删除
(2)由以上按钮控件组成简单的计算机如下图所示:
(3)编辑菜单资源
1、在VisualC++中左侧的工具栏中,选中CAboutDLG选项→右键→添加→成员变量m_flag、temp、temp1。
步骤如图所示:
点击“确定”按钮则会有如下图所示:
2、同样再用上面的方法→选中→CCyyJSQDlg→右键→添加成员变量m_momery、m_s、m_hlcon等。
如下图所示:
(四)实验代码:
响应按钮‘0’
voidCCyyJSQDlg:
:
OnZero()
{
UpdateData(true);
m_s=m_s+"0";
UpdateData(false);
}
响应按钮‘1’
voidCCyyJSQDlg:
:
On1()
{
UpdateData(true);
m_s=m_s+"1";
UpdateData(false);
}
响应按钮‘2’
voidCCyyJSQDlg:
:
On2()
{
UpdateData(true);
m_s=m_s+"2";
UpdateData(false);
}
响应按钮‘3’
voidCCyyJSQDlg:
:
On3()
{
UpdateData(true);
m_s=m_s+"3";
UpdateData(false);
}
响应按钮‘4’
voidCCyyJSQDlg:
:
On4()
{
UpdateData(true);
m_s=m_s+"4";
UpdateData(false);
}
响应按钮‘5’
voidCCyyJSQDlg:
:
On5()
{
UpdateData(true);
m_s=m_s+"5";
UpdateData(false);
}
响应按钮‘6’
voidCCyyJSQDlg:
:
On6()
{
UpdateData(true);
m_s=m_s+"6";
UpdateData(false);
}
响应按钮‘7’
voidCCyyJSQDlg:
:
On7()
{
UpdateData(true);
m_s=m_s+"7";
UpdateData(false);
}
响应按钮‘8’
voidCCyyJSQDlg:
:
On8()
{
UpdateData(true);
m_s=m_s+"8";
UpdateData(false);
}
响应按钮‘9’
voidCCyyJSQDlg:
:
On9()
{
UpdateData(true);
m_s=m_s+"9";
UpdateData(false);
}
响应按钮加‘+’
voidCCyyJSQDlg:
:
OnAdd()
{
m_flag=1;
UpdateData(true);
temp=atof(m_s);
m_s="";
UpdateData(false);
}
响应退格按钮‘Backspace’
voidCCyyJSQDlg:
:
OnBackspace()
{
intl;
UpdateData(true);
l=m_s.GetLength();
m_s.Delete(l-1,1);
UpdateData(false);
}
响应百分号按钮‘%’
voidCCyyJSQDlg:
:
OnPer()
{
UpdateData(true);
temp=atof(m_s);
m_s.Format("%lf",temp*atof(m_s)/100);
UpdateData(false);
}
响应按钮清零‘C’
voidCCyyJSQDlg:
:
OnC()
{
m_s="";
temp=0;
m_flag=0;
flag=0;
UpdateData(false);
}
响应等号按钮‘=’
voidCCyyJSQDlg:
:
OnEqual()
{
if(m_flag==1)
{
temp=temp+atof(m_s);
m_s.Format("%lf",temp);
Check();
UpdateData(false);
}
if(m_flag==2)
{
temp=temp-atof(m_s);
m_s.Format("%lf",temp);
Check();
UpdateData(false);
UpdateData(false);
}
if(m_flag==3)
{
temp=temp*atof(m_s);
m_s.Format("%lf",temp);
Check();
UpdateData(false);
}
if(m_flag==4)
{
temp=temp/atof(m_s);
m_s.Format("%lf",temp);
Check();
UpdateData(false);
}
}
响应按钮清零‘CE’
voidCCyyJSQDlg:
:
OnCe()
{
m_s="";
UpdateData(false);
}
响应按钮乘‘*’
voidCCyyJSQDlg:
:
OnMul()
{
m_flag=3;
UpdateData(true);
temp=atof(m_s);
m_s="";
UpdateData(false);
}
响应按钮除‘/’
voidCCyyJSQDlg:
:
OnDiv()
{
m_flag=4;
UpdateData(true);
temp=atof(m_s);
m_s="";
UpdateData(false);
}
响应按钮倒数‘1/x’
voidCCyyJSQDlg:
:
OnDaoshu()
{
UpdateData(true);
temp=atof(m_s);
temp=1/temp;
m_s.Format("%f",temp);
UpdateData(false);
}
响应按钮小数点‘.’
voidCCyyJSQDlg:
:
OnDot()
{
UpdateData(true);
if(m_s.Find(".",0)==-1)
{
m_s=m_s+".";
}
UpdateData(false);
}
响应按钮减号‘—’
voidCCyyJSQDlg:
:
OnSub()
{
m_flag=2;
UpdateData(true);
temp=atof(m_s);
m_s="";
UpdateData(false);
}
响应清除内存记录数据
voidCCyyJSQDlg:
:
OnMc()
{
UpdateData(true);
temp1=0;
m_memory="";
UpdateData(false);
}
响应当前记录数据与内存数据相加
voidCCyyJSQDlg:
:
OnMadd()
{
UpdateData(true);
temp1=temp1+atof(m_s);
m_s.Format("%lf",temp1);
UpdateData(false);
}
响应显示内存中保存的数据
voidCCyyJSQDlg:
:
OnMr()
{
UpdateData(true);
m_s.Format("%lf",temp1);
m_memory="M";
UpdateData(false);
}
响应将所显示的数据存入存储器中,将原有的数据取走
voidCCyyJSQDlg:
:
OnMs()
{
UpdateData(true);
temp1=atof(m_s);
m_s.Format("%lf",temp1);
Check();
m_memory="M";
UpdateData(false);
}
响应按钮算术平方根
voidCCyyJSQDlg:
:
OnSqrt()
{
doubletemp;
UpdateData(true);
temp=atof(m_s);
temp=sqrt(temp);
m_s.Format("%lf",temp);
Check();
UpdateData(false);
}
响应按钮取相反数
voidCCyyJSQDlg:
:
OnZHengfu()
{
UpdateData(true);
temp=-atof(m_s);
m_s.Format("%lf",temp);
Check();
UpdateData(false);
}
voidCCyyJSQDlg:
:
Check()
{
while(m_s.Right
(1)=="0")
m_s.Delete(m_s.GetLength()-1,1);
}
5.3测试结果:
在运行界面测试简单运算是否能正常运算
(1)输入“34+87”观察结果,如图
(1):
图
(1)
(2)输入“36”单击“Sqrt”观察结果,见图5.2所示:
图
(2)“36开平方”结果
(3)输入“4”单击“1/x”观察结果,见图(3)所示:
图(3)“1/4”的运行结果
六、实验心得
通过实验这次,更加了解计算器基本使用工程。
同时也清楚的自己在编程方面存在的一些不足,虽然实验完成的质量并不是特别的还,但是自己在这次实验中还是学到了很多的知识。