c++课程设计.docx
《c++课程设计.docx》由会员分享,可在线阅读,更多相关《c++课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
c++课程设计
计算机学院
C++课程设计报告
(2011--2012年度第1学期)
计算器的设计
专业
网络工程
学生姓名
王芬
班级
网102班
学号
109074337
指导教师
陈学进
完成日期
2011年12月10日
课题名称:
计算器的实现
说明:
实现一个计算器。
1.系统目标
我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
要计算功能有以下几个方面:
加法,减法,乘法,除法,求幂,求平方根等
2.系统功能划分
序号
文件名
主要功能
备注
1
+
加法求和
两个操作数
2
-
减法求差
两个操作数
3
×
乘法求积
两个操作数
4
÷
除法求商
两个操作数
5
x^y
求x的y次幂
两个操作数
6
sqrt
求平方根
一个操作数
7
X^2
求平方
一个操作数
8
1/x
求倒数
一个操作数
9
ln
求对数
一个操作数
10
log
求对数
一个操作数
11
X^3
求三次方
一个操作数
12
10^x
求十次幂
一个操作数
13
=
等于
14
CE
删除所有字母
15
BACKSPACE
删除一个字母
1)假设执行操作“+”,先输入一个数,再按“+”,再输入另一个数,最后按“=”。
整个功能“+”就执行完毕。
2)执行操作“x^2”,先输入一个数,在按“x^2”,或先按“x^2”,在输入一个数,最后按“=”。
整个功能“x^2”就执行完毕。
3)执行操作“x^y”,先输入一个数,在按“x^y”,在输入一个数,最后按“=”。
整个功能“x^y”就执行完毕。
3.计算器状态
●CE表示清零
●CE状态输入数字进入状态A,在A状态下可以通过不同方式进入B或C状态(A状态输入双元运算符进入B状态,A状态输入单元运算符进入C状态)
●B状态可以通过单元运算符或数字进入C状态,等于号结束运算;
●在C状态只能按等号才能结束;
●在D状态可以接受数字,双元运算符,单元运算符,进入下一次运算。
●实例:
5×=25如果只输入一个数字,为状态A,按下双元运算符,为状态B,系统自认先前数字为第二个数字,进入D状态。
4.计算器测试
●1/6.251=0.159974
●5.264*9.5264=50.146069
●9.526714-9.873642=-0.346928
●5.216384的三次方为141.941254
●ln1.526345=0.422876
CalculatorDlg.h部分类定义
public:
CCalculatorDlg(CWnd*pParent=NULL);//standardconstructor
CStringstrMess1,strMess2;
floatnum1,num2,result;
charclick;
//DialogData
//{{AFX_DATA(CCalculatorDlg)
enum{IDD=IDD_CALCULATOR_DIALOG};
CButtonm_clickone;
CEditm_edit;
CalculatorDlg.cpp部分代码
voidCCalculatorDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCalculatorDlg)
DDX_Control(pDX,IDC_NUM_ADD,m_clickone);
DDX_Control(pDX,IDC_DISPLAY,m_edit);
//NOTE:
theClassWizardwilladdDDXandDDVcallshere
//}}AFX_DATA_MAP
}
voidCCalculatorDlg:
:
OnNum9()
{
strMess1+="9";
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum8()
{strMess1+="8";
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum7()
{
strMess1+="7";
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum6()
{strMess1+="6";
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum5()
{
strMess1+="5";
m_edit.SetWindowText(strMess1);//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum4()
{strMess1+="4";
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum3()
{strMess1+="3";
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum2()
{
strMess1+="2";
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum1()
{
strMess1+="1";
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum0()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
strMess1+="0";
m_edit.SetWindowText(strMess1);
}
voidCCalculatorDlg:
:
OnNumAdd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_edit.GetWindowText(strMess1);
num1=atof(strMess1);
//m_edit.SetWindowText("");
strMess1="";
click='+';
}
voidCCalculatorDlg:
:
OnNumMinus()
{
m_edit.GetWindowText(strMess1);
num1=atof(strMess1);
strMess1="";
click='-';
}
voidCCalculatorDlg:
:
OnNumM()
{
m_edit.GetWindowText(strMess1);
num1=atof(strMess1);
strMess1="";
click='*';
}
voidCCalculatorDlg:
:
OnNumD()
{
m_edit.GetWindowText(strMess1);
num1=atof(strMess1);
//m_edit.SetWindowText("");
strMess1="";
click='/';
}
voidCCalculatorDlg:
:
OnA()
{
click='p';
}
voidCCalculatorDlg:
:
OnNumSqrt()
{
click='s';
}
voidCCalculatorDlg:
:
OnNumS()
{
click='l';
}
voidCCalculatorDlg:
:
OnNumGet()
{
m_edit.GetWindowText(strMess1);
num2=atof(strMess1);
CStringstr;
switch(click)
{
case'+':
//if(clickadd=='+')
num1+=num2;
break;
case'-':
num1-=num2;
break;
case'*':
num1*=num2;
break;
case'l':
num1=1/num2;
break;
case'/':
num1/=num2;
break;
case's':
if(num2<0)
{
AfxMessageBox("函数输入无效!
");
return;
}
num1=sqrt(num2);
break;
case'p':
num1=num2*(-1);
break;
case10:
num1=pow(num1,num2);
break;
case11:
num1=pow(10,num2);
break;
case12:
num1=num2*num2*num2;
break;
case13:
if(num2<=0)
{
AfxMessageBox("函数输入无效!
");
return;
}
num1=log(num2);
break;
case14:
if(num2<=0)
{
AfxMessageBox("函数输入无效!
");
return;
}
num1=log10(num2);
break;
case17:
num1=num2*num2;
break;
default:
AfxMessageBox("请选择做的那种运算!
!
");
}
m_edit.GetWindowText(strMess1);
intsize=strMess1.GetLength();
strMess1.Delete(0,size);
m_edit.SetWindowText(strMess1);
click=0;
str.Format("%f",num1);
m_edit.SetWindowText(str);//显示结果
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnCe()
{
m_edit.GetWindowText(strMess1);
intsize=strMess1.GetLength();
strMess1.Delete(0,size);
m_edit.SetWindowText(strMess1);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnBackspace()
{
m_edit.GetWindowText(strMess1);
intsize=strMess1.GetLength();
strMess1.Delete(size-1,1);
m_edit.SetWindowText(strMess1);
}
voidCCalculatorDlg:
:
OnDot()
{
strMess1+=".";
m_edit.SetWindowText(strMess1);
}
voidCCalculatorDlg:
:
OnNumJc()
{
click=17;
}
voidCCalculatorDlg:
:
OnNum10()
{
m_edit.GetWindowText(strMess1);
num1=atof(strMess1);
//m_edit.SetWindowText("");
strMess1="";
click=10;//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCCalculatorDlg:
:
OnNum11()
{
click=11;
}
voidCCalculatorDlg:
:
OnNum12()
{
click=12;
}
voidCCalculatorDlg:
:
OnNum13()
{
click=13;
}
voidCCalculatorDlg:
:
OnNum14()
{
click=14;
}