简单计算器可视化程序编程
- 格式:docx
- 大小:49.10 KB
- 文档页数:24
简单计算器
一、基本功能描述二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算
科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行
以角度、弧度两种方式实现上述部分函数
具备历史计算的记忆功能
对不正确的表达式能指出其错误原因
二、流程图
输入数据子函数
图1 输入数据子函数流程图
图2
三、设计步骤
打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名Calculter及其所在位置,点击确定,如图3所示。
图3 新建MFC AppWizard[exe]工程
将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图4所示。
图4 基本对话框
这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图5所示。
图5 新建的对话框
四、界面设计
1、创建控件
在图5所示的Resoure View选项卡中打开Dialog资源组,双击IDD_CALCULATOR_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建
1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图6所示,在该对话框中输入ID属性。
图6 Edit属性对话框
2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图7所示,在该对话框中输入控件的ID值和标题属性。
图7 Push Button属性
按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
表1 各按钮和编辑框等对象的属性
完成后界面如图8所示。
图8 计算器界面五、计算器源程序代码
// Calculation.cpp: implementation of the CCalculation class.
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Calculator.h"
#include "Calculation.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define FUNCNUM 15 //函数个数
#define CONSTNUM 11 //常数个数
#define PI 3.14159
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCalculation::CCalculation()
{
//初始化函数和常数
m_bDegree=0;
m_nOutputFlag=0;
opt[0]="e^";
opt[1]="ch";
opt[2]="sqr";
opt[3]="sh";
opt[5]="cos";
opt[6]="sin";
opt[7]="tan";
opt[8]="ln";
opt[9]="abs";
opt[10]="at";
opt[11]="as";
opt[12]="ac";
opt[13]="th";
opt[14]="cot";
opt2[0]='^';
opt2[1]='/';
opt2[2]='*';
opt2[3]='%';
opt2[4]='+';
opt2[5]='-';
m_strConValue[1]="9.80665"; m_strConName[1]="GG";
m_strConValue[2]="(8.988*10^9)"; m_strConName[2]="EF";
m_strConValue[3]="0.02241383"; m_strConName[3]="VM";
m_strConValue[4]="(1.380662*10^(-23))"; m_strConName[4]="BC";
m_strConValue[5]="8.3144"; m_strConName[5]="MG";
m_strConValue[6]="(6.6720*10^(-11))"; m_strConName[6]="GR";
m_strConValue[7]="(6.022045*10^23)"; m_strConName[7]="NA";
}
CCalculation::~CCalculation()
{
}
bool CCalculation::IsDigital(CString str)
{
while(str.GetAt(0)=='-') str.Delete(0);
for(int i=0;i for(i=0;i<6;i++) if(str.Find(opt2[i])!=-1) return 0; return 1; } CString CCalculation::NtoS(double d) { int decimal, sign; char *buffer; buffer = _ecvt( d, 16, &decimal, &sign ); CString str=buffer; if(decimal>=0 && decimal<=16) str.Insert(decimal,"."); else if(decimal>16) { for(int i=str.GetLength();i