简易计算器实验报告.docx
《简易计算器实验报告.docx》由会员分享,可在线阅读,更多相关《简易计算器实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
![简易计算器实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/12/eadf0947-29b6-4c12-9de3-d8b02207f4a8/eadf0947-29b6-4c12-9de3-d8b02207f4a81.gif)
简易计算器实验报告
简易计算器实验报告
实验题目简易计算器
学生姓名吴云
学号**********
所在学院计算机学院
年级班级计科5班
成都信息工程学院计算机学院
一、题目:
简易计算器
题目概述:
∙学习MFC的应用,做出相对精美的界面;学习面向对象的思想,即用C++,考虑到类。
∙模仿Windows的计算器,用图形界面实现加减乘除开根号求倒数等等基本操作。
∙实现括号运算。
二、开发环境
Win7操作系统的电脑一台+VC6.0编程软件
三、设计步骤
(一)界面设计:
首先打开VC++6.0建立一个MFC的基本对话框,添加所需的按钮的编辑框如下图:
(二)添加变量:
点击菜单栏的:
查看->建立类向导->添加成员变量:
给编辑框添加一个CString类型的变量m_result。
(三)为按钮添加事件:
为按钮和编辑框改了名字和ID后点击每一个按钮,为每一个按钮添加一个对应的事件,即:
为每一个按钮添加算法代码。
(四)个性化程序:
即修改程序一些细节的地方,如程序的图标,程序的界面颜色、图案等等。
。
(五)调试并运行程序:
将写好的程序调试好了后运行。
四、程序的主要函数及其释义:
voidCCalculatorDlg:
:
OnButton1()//按下数字键1时出现的事件
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){//当fff==0时,此时刚算完上次的数据,再按数字键时自动清空上次的数据
m_result=_T("");//对字符串处理需要_T()函数实现
fff=0;
}
m_result+=_T("1");
UpdateData(FALSE);//将数据送到编辑窗口
}
voidCCalculatorDlg:
:
OnButton2()//按下数字键2时出现的事件,同上
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("2");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton3()//3
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("3");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton4()//4
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("4");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton5()//5
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("5");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton6()//6
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("6");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton7()//7
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("7");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton8()//8
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("8");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton9()//9
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("9");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton10()//0
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T("0");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnButton11()//按下‘.’后出现的事件
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(fff==1){
m_result=_T("");
fff=0;
}
m_result+=_T(".");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnBUTTONpi()//按下‘PI’后出现的事件
{
//TODO:
Addyourcontrolnotificationhandlercodehere
fff=0;
m_result=_T("3.14159265358979");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnBUTTONjia()//按下‘+’键,后发生的事件
{
//TODO:
Addyourcontrolnotificationhandlercodehere
n=1;
data=strtod(m_result,NULL);//将之前输入的字符串转化为double型的数并保存起来
m_result=_T("");//清空输入屏
}
voidCCalculatorDlg:
:
OnBUTTONjian()//‘减’,同理
{
//TODO:
Addyourcontrolnotificationhandlercodehere
n=2;
data=strtod(m_result,NULL);
m_result=_T("");
}
voidCCalculatorDlg:
:
OnBUTTONchen()//乘
{
//TODO:
Addyourcontrolnotificationhandlercodehere
n=3;
data=strtod(m_result,NULL);
m_result=_T("");
}
voidCCalculatorDlg:
:
OnBUTTONchu()//除
{
//TODO:
Addyourcontrolnotificationhandlercodehere
n=4;
data=strtod(m_result,NULL);
m_result=_T("");
}
voidCCalculatorDlg:
:
OnBUTTONcifang()//次方
{
//TODO:
Addyourcontrolnotificationhandlercodehere
n=5;
data=strtod(m_result,NULL);
m_result=_T("");
}
voidCCalculatorDlg:
:
OnBUTTONDel()//退格
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_result=m_result.Left(m_result.GetLength()-1);
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnBUTTONdengyu()//等于,按下‘=’键后发生的事件
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(n==1)//加
{
data+=strtod(m_result,NULL);//将先前保存的数据与后输入的数据相加
m_result.Format(_T("%lf"),data);//将数据转化为CString型并显示在屏上
UpdateData(FALSE);//刷新显示数据
}
if(n==2)//减同上类似
{
data-=strtod(m_result,NULL);
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
}
if(n==3)//乘
{
data*=strtod(m_result,NULL);
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
}
if(n==4)//除
{
if(strtod(m_result,NULL)==0){//如果判断出被除数为0,就在输出框中输出以下文字。
GetDlgItem(IDC_EDIT1)->SetWindowText("error!
除数不能为0!
");
}
else{
data/=strtod(m_result,NULL);
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
}
}
if(n==5)//当判断运算符为‘次方’时,根据幂底数的正负性有不同的情况
{
if(data>0){
data=exp(strtod(m_result,NULL)*log(data));
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
}
elseif(data==0){
data=0;
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
}
else{
if((int)strtod(m_result,NULL)-strtod(m_result,NULL)!
=0)//如计算(-2)^3.2时,即指数有小数,输入以下文字。
GetDlgItem(IDC_EDIT1)->SetWindowText(“该计算结果无意义!
”);
else{//如计算(-2)^3时,即指数没小数
doublei=strtod(m_result,NULL),data1=data;
for(;i>1;i--)
{
data*=data1;
}
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
}
}
}
fff=1;
}
voidCCalculatorDlg:
:
OnButtonAc()//AC,即按清除键。
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_result=_T("");
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnBUTTONsin()//sin
{
//TODO:
Addyourcontrolnotificationhandlercodehere
data=sin(strtod(m_result,NULL));
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
fff=1;
}
voidCCalculatorDlg:
:
OnBUTTONcos()//cos
{
//TODO:
Addyourcontrolnotificationhandlercodehere
data=cos(strtod(m_result,NULL));
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
fff=1;
}
voidCCalculatorDlg:
:
OnBUTTONtan()//tan
{
//TODO:
Addyourcontrolnotificationhandlercodehere
data=tan(strtod(m_result,NULL));
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
fff=1;
}
voidCCalculatorDlg:
:
OnBUTTONsqrt()//sqrt,即取平方根
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(strtod(m_result,NULL)<0){
GetDlgItem(IDC_EDIT1)->SetWindowText("根号下不能负数哦~~");
}
else{
data=sqrt(strtod(m_result,NULL));
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
}
fff=1;
}
voidCCalculatorDlg:
:
OnBUTTONjiecheng()//阶乘
{
//TODO:
Addyourcontrolnotificationhandlercodehere
data=strtod(m_result,NULL);
doublei=data-1;
for(;i>0;i--)
{
data*=i;
}
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
fff=1;
}
voidCCalculatorDlg:
:
OnBUTTONlog()//lg
{
//TODO:
Addyourcontrolnotificationhandlercodehere
data=log10(strtod(m_result,NULL));
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
fff=1;
}
voidCCalculatorDlg:
:
OnBUTTONln()//ln
{
//TODO:
Addyourcontrolnotificationhandlercodehere
data=log(strtod(m_result,NULL));
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
fff=1;
}
voidCCalculatorDlg:
:
OnBUTTONzhengfu()//正负取反
{
//TODO:
Addyourcontrolnotificationhandlercodehere
data=-strtod(m_result,NULL);
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
}
voidCCalculatorDlg:
:
OnBUTTONdaoshu()//1/x
{
//TODO:
Addyourcontrolnotificationhandlercodehere
data=1/(strtod(m_result,NULL));
m_result.Format(_T("%lf"),data);
UpdateData(FALSE);
fff=1;
}
voidCCalculatorDlg:
:
OnBUTTONguanyu()//关于本软件,即点击关于本软件按钮
{
//TODO:
Addyourcontrolnotificationhandlercodehere
GetDlgItem(IDC_EDIT1)->SetWindowText("本软件由吴云制作,新手一个,不足之处还请谅解...O(∩_∩)O");
}
五、程序运行展示:
这是我自己画得程序图标,没有copy哦,虽然很丑。
。
。
这是我们程序打开的界面,是不是很简洁?
很符合简易计算器这个称号吧。
。
。
这是当我们输入除数为零时显示的画面,既有英文又有中文,中西结合哦。
。
。
这是我们的程序当输入一个负数取根号时,就会出现这一句温馨的提醒。
。
。
这是点击程序的关于本软件时,出现响应事件,本来想加上作者电话和QQ的,当时,几番思量后,还是算了。
。
。
。
六、感悟和心得:
经过本次简易计算器的制作,巩固了C语言学到的知识,学到了MFC可视化界面基本的编程方法,对C++面向对象的编程思想有了更深刻的理解,增加了编写程序的能力。
对类的类的封装和设计也有了一种新的认识,丰富了自己的知识,增添了自己对专业的兴趣和热爱之情。