基于vc++mfc的科学计算器程序实验报告.docx
- 文档编号:25572341
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:29
- 大小:167.47KB
基于vc++mfc的科学计算器程序实验报告.docx
《基于vc++mfc的科学计算器程序实验报告.docx》由会员分享,可在线阅读,更多相关《基于vc++mfc的科学计算器程序实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
基于vc++mfc的科学计算器程序实验报告
实验报告
课程名称:
windows软件开发实习
实验项目:
科学计算器
工业大学实验报告
(适用计算机程序设计类)
专业班级:
软件1006学号:
101201622姓名:
鑫可
实验名称:
1.实验目的:
本程序设计实践是采用C++语言,在VC平台下设计。
本课程设
计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力。
程序设计实践主要是培养学生利用系统综合C++语言进行程序设计的能力。
1.进一步巩固和复习C++程序设计的基础知识。
2.培养学生结构化程序、模块化程序设计的方法和能力。
3.了解软件的编制过程及各环节的具体容。
4.提高学生程序调试技巧、软件设计能力和代码规化等素质。
5.提高学生分析问题、解决问题以及实际运用能力。
2.实验容:
设计一个简单的计算器。
要求能实现整数、小数算数运算。
程序带
清零按钮。
3.实验方案(程序设计说明)
见附件
4.实验步骤或程序(经调试后正确的源程序)
(填写主要步骤与程序代码等。
见附件A)
5.出现的问题及解决方法
附件A工业大学实验报告
(适用计算机程序设计类)
专业班级:
软件1006学号:
101201622姓名:
鑫可
实验步骤或程序:
一、关于VisualC++:
VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过过一个名为DeveloperStudio的组件集成为和谐的开发环境。
Microsoft的主力软件产品。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的
首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为6平台。
VisualC++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。
这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。
二、设计要点
1、基本要求:
设计的系统界面要美观大方,操作合理,有必要的
提示。
2、创新要求:
在基本要求达到后,进行创新设计。
3、对系统进行功能模块分析、控制流程分析正确。
4、系统设计要实用,编程简练,可用,功能全面,并有一定的容错
能力。
5、说明书、流程图要清楚
6、要求程序设计合理,用户界面良好,如采用菜单工作方式。
三、实验步骤:
1、首先利用MFCAppWinzard生成计算器应用程序框架具体步骤如下:
执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFCAppWizard(exe)选项,然后在Projectname文本框中输入cyyJSQ。
Lacation文本框是指项目的本地路径。
2、界面设计
在界面中添加按钮,编辑框等相应控件,并合理摆放,使用户能更加方便的使用。
具体设计如下图所示:
3、绑定控件
通过如下方式绑定控件。
具体绑定如下表所示:
按钮控件资源清单
按钮名称
按钮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
从后向前删除
4、逐步实现代码
①按钮1-9的实现
文本编辑框的类型为string型,所以若按下数字1按钮时只需在数组尾部添加“1”即可
其他代码如此类推,具体代码如下:
voidCMyDlg:
:
OnButton0()
{
//数字0
this->check();
CStringtmp=num_buffer;
//当为小数点后或其前面有不为零的数时允许输入零
if(tmp.ReverseFind('.')!
=-1||tmp.FindOneOf("123456789")!
=-1)
{
num_buffer+="0";
}
else
{
num_buffer="0";
}
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton1()
{
//数字1
this->check();
num_buffer+="1";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton2()
{
//数字2
this->check();
num_buffer+="2";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton3()
{
//数字3
this->check();
num_buffer+="3";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton4()
{
//数字4
this->check();
num_buffer+="4";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton5()
{
//数字5
this->check();
num_buffer+="5";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton6()
{
//数字6
this->check();
num_buffer+="6";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton7()
{
//数字7
this->check();
num_buffer+="7";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton8()
{
//数字8
this->check();
num_buffer+="8";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButton9()
{
//数字9
this->check();
num_buffer+="9";
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
voidCMyDlg:
:
OnButtonDot()
{
//小数点
if(num_buffer.IsEmpty())
{
num_buffer="0.";
}
elseif(num_buffer.ReverseFind('.')==-1)
{
num_buffer+=".";
}
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
//求相反数
voidCMyDlg:
:
OnButtonNI()
{
//正负处理
m_num=-atof(num_buffer);
//转化为字符串
num_buffer.Format(_T("%lf"),m_num);
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer);
}
运行结果如下:
②加减乘除代码的实现:
通过控件的绑定以及传值函数,以指针调用的方式进行赋值,并将结果保存在num_buffer中,与下一次输入的num2进行新的一元运算并给result赋值,通过Updatedata()函数反应到文本编辑框中,具体代码如下:
//加
voidCMyDlg:
:
OnButtonAdd()
{
this->num1=atof(num_buffer);
this->num_buffer.Empty();
this->operation_type=ADD;
}
//减
voidCMyDlg:
:
OnButtonSub(){
this->num1=atof(num_buffer);
this->num_buffer.Empty();
this->operation_type=SUB;}
//乘
voidCMyDlg:
:
OnButtonMul(){
this->num1=atof(num_buffer);
this->num_buffer.Empty();
this->operation_type=MUL;}
//除
voidCMyDlg:
:
OnButtonDiv()
{
this->num1=atof(num_buffer);
this->num_buffer.Empty();
this->operation_type=DIV;
}
voidCMyDlg:
:
OnButtonRes(){
constdoubleEPSINON=0.00001;
boolerror=false;
this->num2=atof(num_buffer);
this->num_buffer.Empty();
switch(this->operation_type)
{
caseADD:
this->m_num=num1+num2;
break;
caseSUB:
this->m_num=num1-num2;
break;
caseMUL:
this->m_num=num1*num2;
break;
caseDIV:
if((num2>-EPSINON)&&(num2<=EPSINON)){
num_buffer="除数不能为零";
error=true;}
else{
this->m_num=num1/num2;
}break;
default:
this->m_num=this->num2;
break;}
结果如下图所示
③科学性运算按钮的处理:
只需根据数值分析等为按钮进行算法的合理设计,正确赋值即可,具体代码如下:
//自然底数e
voidCScience:
:
OnButtonEConst()
{
this->check();
num_buffer.Format(_T("%lf"),M_E);
fresh();
}
//圆周率∏
voidCScience:
:
OnButtonPai()
{
this->check();
num_buffer.Format(_T("%lf"),M_PI);
fresh();
}
voidCScience:
:
OnButtonNi()
{
//正负处理
m_result=-atof(num_buffer);
//转化为字符串
num_buffer.Format(_T("%lf"),m_result);
fresh();
}
voidCScience:
:
OnButtonMutInv()
{
this->unary_operation=true;
constdoubleEPSINON=0.00001;
this->m_result=atof(num_buffer);
if((this->m_result>=-EPSINON)&&(this->m_result<=EPSINON))
{
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText("0的倒数没有定义\n");
}
else
{
this->m_result=1.0/m_result;
num_buffer.Format(_T("%lf"),m_result);
fresh();
this->unary_operation=false;
}
}
voidCScience:
:
OnButtonPercent()
{
this->unary_operation=true;
CStringtmp=num_buffer;
this->m_result=atof(num_buffer);
tmp.Format(_T("%lf"),this->m_result*100);
tmp+="%";
fresh(tmp);
this->unary_operation=false;
}
voidCScience:
:
OnButtonSqr()
{
this->unary_operation=true;
this->m_result=atof(num_buffer);
this->m_result=sqrt(m_result);
num_buffer.Format(_T("%lf"),this->m_result);
fresh();
this->unary_operation=false;
}
voidCScience:
:
OnButtonSin()
{
CStringtmp;
this->unary_operation=true;
this->m_result=atof(num_buffer);
num_buffer.Format(_T("%lf"),this->m_result);
tmp="Sin("+num_buffer+")=";
this->m_result=sin(m_result);
num_buffer.Format(_T("%lf"),this->m_result);
tmp+=num_buffer;
fresh(tmp);
this->unary_operation=false;
}
voidCScience:
:
OnButtonCos()
{
CStringtmp;
this->unary_operation=true;
this->m_result=atof(num_buffer);
num_buffer.Format(_T("%lf"),this->m_result);
tmp="Cos("+num_buffer+")=";
this->m_result=cos(m_result);
num_buffer.Format(_T("%lf"),this->m_result);
tmp+=num_buffer;
fresh(tmp);
this->unary_operation=false;
}
voidCScience:
:
OnButtonTan()
{
CStringtmp;
constdoubleEPSINON=0.00001;
this->unary_operation=true;
this->m_result=atof(num_buffer);
num_buffer.Format(_T("%lf"),this->m_result);
tmp="tan("+num_buffer+")=";
if((cos(m_result)>=-EPSINON)&&(cos(m_result)<=EPSINON))
{
error();
}
else
{
this->m_result=tan(m_result);
num_buffer.Format(_T("%lf"),this->m_result);
tmp+=num_buffer;
fresh(tmp);
this->unary_operation=false;
}
}
voidCScience:
:
OnButtonCot()
{
CStringtmp;
constdoubleEPSINON=0.00001;
this->unary_operation=true;
this->m_result=atof(num_buffer);
num_buffer.Format(_T("%lf"),this->m_result);
tmp="cot("+num_buffer+")=";
if((sin(m_result)>=-EPSINON)&&(sin(m_result)<=EPSINON))
{
error();
}
else
{
this->m_result=cos(m_result)/sin(m_result);
num_buffer.Format(_T("%lf"),this->m_result);
tmp+=num_buffer;
fresh(tmp);
this->unary_operation=false;
}
}
voidCScience:
:
OnButtonLn()
{
CStringtmp;
constdoubleEPSINON=0.00001;
this->unary_operation=true;
this->m_result=atof(num_buffer);
num_buffer.Format(_T("%lf"),this->m_result);
tmp="ln("+num_buffer+")=";
if(m_result<=EPSINON)
{
error("参数必须大于0");
}
else
{
this->m_result=log(m_result);
num_buffer.Format(_T("%lf"),this->m_result);
tmp+=num_buffer;
fresh(tmp);
this->unary_operation=false;
}
}
运行结果如下:
④进制间的转换:
1.按钮A-F的实现与,进制运算时,按钮条件的设置。
在进行16进制运算时,需定义A-F按键,而在10进制时,A-F按键设置为不可使用,以及8进制时8、9按钮禁止使用。
具体代码如下:
voidCScience:
:
OnButtonA()
{
//数字A(10)
this->check();
num_buffer+="A";
fresh();
}
voidCScience:
:
OnButtonB()
{
//数字B(11)
this->check();
num_buffer+="B";
fresh();
}
voidCScience:
:
OnButtonC()
{
//数字C(11)
this->check();
num_buffer+="C";
fresh();
}
voidCScience:
:
OnButtonD()
{
//数字D(12)
this->check();
num_buffer+="D";
fresh();}
voidCScience:
:
OnButtonE()
{
//数字F(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 vc mfc 科学 计算器 程序 实验 报告