湖南工业大学
湖南工业大学
课程设计任务书
2011 —2012 学年第 二 学期
学院(系、部)专业 班级 课程名称:
设计题目: 完成期限:自 2012 年 06 月 12 日至 2012 年 06 月17日共 一 周
指导教师(签字): 2012年12月27日 系(教研室)主任(签字): 年 月 日
计算机与通信学院
C++面向对象课程设计报告
题 目
学 号
专业及班级
姓 名
日 期 2012/6/18
目录
1. 实验要求……………………………………………4
2. 功能需求………………………………………………….4
3. 总体设计…………………………………………………………4——43
4. 测试与实现………………………………………………………45
5. 总结……………………………………………46
1 题目要求
仿照Windows系统自带计算器做的一个小型科学计算器。 2 功能需求
整个系统具有的功能:响应各个数字键,实现加、减、乘、除、x^y、lnx、x!、sinx、cosx、tanx、二进制、二进制转换八进制、清空、求倒数等基本功能;
3 总体设计 3.1 系统模块
自然对数
函数和数据结构设计流程
科学计算器的参考源代码
1)在对话框类中定义用到的变量: double Buffer; //放显示结果 double Number1; //放第一个数 double Number2; //放第二个数 double Answer; //放结果
long Number1_N; //放第一个数的整数部分 long Number1Temp; //小数位临时变量 long Number2Temp; //小数位临时变量
long Number2_N; //放第二个数的整数部分
double Number1_Point;//放第一个数的小数部分 double Number2_Point;//放第二个数的小数部分 char Operater; //放操作数
short int OperaterFlag; //操作数的标志
short int WhichNumFlag; //输入那个数的标志 bool FigureFlag ; //是否按下等号的标志 bool Num1PointFlag; //数一小数的标志 bool Num2PointFlag; //数二小数的标志 short int OverFlag; //溢出标志
long Number1_PointBit; //第一个数小数位数 long Number2_PointBit; //第二个数小数位数 bool signFlag; //前一位是操作数
2)在对话框类的定义中添加下列函数声明:
afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnHEX();
afx_msg void OnButton1(); afx_msg void OnButton2(); afx_msg void OnButton3(); afx_msg void OnButton4(); afx_msg void OnButton5(); afx_msg void OnButton6(); afx_msg void OnButton7(); afx_msg void OnButton8(); afx_msg void OnButton9(); afx_msg void OnButton0(); afx_msg void Onpoint();
afx_msg void Onpositivenegative(); afx_msg void Onadd(); afx_msg void Onsub(); afx_msg void Onmul();
afx_msg void Ondiv(); afx_msg void Onmod(); afx_msg void Onsprt();
afx_msg void OnPrescribing(); afx_msg void Onfigure(); afx_msg void OnCe(); afx_msg void OnPi(); afx_msg void Onexp(); afx_msg void Onsin(); afx_msg void Oncos(); afx_msg void Ontan(); afx_msg void Onlog(); afx_msg void Onln();
afx_msg void Onallmul();
3)在对话框的可执行文件的消息映射中添加如下代码:
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) ON_BN_CLICKED(IDC_BUTTON6, OnButton6) ON_BN_CLICKED(IDC_BUTTON7, OnButton7) ON_BN_CLICKED(IDC_BUTTON8, OnButton8) ON_BN_CLICKED(IDC_BUTTON9, OnButton9) ON_BN_CLICKED(IDC_BUTTON0, OnButton0) ON_BN_CLICKED(IDC_point, Onpoint)
ON_BN_CLICKED(IDC_positive_negative, Onpositivenegative) ON_BN_CLICKED(IDC_add, Onadd) ON_BN_CLICKED(IDC_sub, Onsub) ON_BN_CLICKED(IDC_mul, Onmul) ON_BN_CLICKED(IDC_div, Ondiv) ON_BN_CLICKED(IDC_mod, Onmod) ON_BN_CLICKED(IDC_sprt, Onsprt)
ON_BN_CLICKED(IDC_Prescribing, OnPrescribing) ON_BN_CLICKED(IDC_figure, Onfigure) ON_BN_CLICKED(IDC_CE, OnCe) ON_BN_CLICKED(IDC_PI, OnPi)
ON_BN_CLICKED(IDC_exp, Onexp) ON_BN_CLICKED(IDC_sin, Onsin) ON_BN_CLICKED(IDC_cos, Oncos) ON_BN_CLICKED(IDC_tan, Ontan) ON_BN_CLICKED(IDC_log, Onlog) ON_BN_CLICKED(IDC_ln, Onln)
ON_BN_CLICKED(IDC_allmul, Onallmul)
4)在对话框的构造函数中初始化变量 Number1=0; Number1_N=0; Number1_Point=0; Number1_PointBit=1; Num1PointFlag=0; Number1Temp=0; Number2=0; Number2_N=0;
Number2_Point=0; Number2_PointBit=1; Num2PointFlag=0; Number2Temp=0; Answer=0;
FigureFlag=0; OperaterFlag=0; WhichNumFlag=1; OverFlag=0; Buffer=0;
Operater='#'; signFlag=0;
5)为对话框添加计算函数用于计算 void CCaculate3_0Dlg::OnButton1() {
// TODO: Add your control notification handler code here signFlag=0; OverFlag++;
if(WhichNumFlag==1) {
if(Num1PointFlag==0) {
if(OverFlag
Number1_N=Number1_N*10+1;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE); Buffer=Number1;
UpdateData (FALSE); } }
if(Num1PointFlag==1) {
if(OverFlag
Number1_PointBit=Number1_PointBit*10; Number1Temp=Number1Temp*10+1 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point; UpdateData (TRUE); Buffer=Number1;
UpdateData (FALSE); } } }
if(WhichNumFlag==2) {
if(Num2PointFlag==0) {
if(OverFlag
Number2_N=Number2_N*10+1;
Number2=Number2_N+Number2_Point; UpdateData (TRUE); Buffer=Number2;
UpdateData (FALSE); } }
if(Num2PointFlag==1) {
if(OverFlag
Number2_PointBit=Number2_PointBit*10; Number2Temp=Number2Temp*10+1 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point; UpdateData (TRUE); Buffer=Number2;
UpdateData (FALSE); }
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton2()
{
// TODO: Add your control notification handler code here signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+2;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
{
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+2 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
{
Number2_N=Number2_N*10+2;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+2 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton3()
{
// TODO: Add your control notification handler code here signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+3;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
{
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+3 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
{
Number2_N=Number2_N*10+3;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+3 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton4()
{
// TODO: Add your control notification handler code here
signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+4;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
{
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+4 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
{
Number2_N=Number2_N*10+4;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+4 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton5()
{
// TODO: Add your control notification handler code here signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+5;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
{
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+5 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
{
Number2_N=Number2_N*10+5;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+5 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton6()
{
// TODO: Add your control notification handler code here signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+6;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
{
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+6 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
{
Number2_N=Number2_N*10+6;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+6 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton7()
{
// TODO: Add your control notification handler code here signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+7;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
{
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+7 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
Number2_N=Number2_N*10+7;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+7 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton8()
{
// TODO: Add your control notification handler code here signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+8;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+8 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
{
Number2_N=Number2_N*10+8;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+8 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton9()
{
// TODO: Add your control notification handler code here signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+9;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
{
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+9 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
{
Number2_N=Number2_N*10+9;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+9 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::OnButton0()
{
// TODO: Add your control notification handler code here signFlag=0;
OverFlag++;
if(WhichNumFlag==1)
{
if(Num1PointFlag==0)
{
if(OverFlag
{
Number1_N=Number1_N*10+0;
Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
if(Num1PointFlag==1)
{
if(OverFlag
{
Number1_PointBit=Number1_PointBit*10;
Number1Temp=Number1Temp*10+0 ;
Number1_Point=(double)Number1Temp/Number1_PointBit; Number1=Number1_N+Number1_Point;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
}
}
}
if(WhichNumFlag==2)
{
if(Num2PointFlag==0)
{
if(OverFlag
{
Number2_N=Number2_N*10+0;
Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
if(Num2PointFlag==1)
{
if(OverFlag
{
Number2_PointBit=Number2_PointBit*10;
Number2Temp=Number2Temp*10+0 ;
Number2_Point=(double)Number2Temp/Number2_PointBit; Number2=Number2_N+Number2_Point;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
}
}
}
FigureFlag=0;
}
void CCaculate3_0Dlg::Onpoint() //小数点
{
// TODO: Add your control notification handler code here if(WhichNumFlag==1)
{
Num1PointFlag=1;
}
if(WhichNumFlag==2)
{
Num2PointFlag=1;
}
}
void CCaculate3_0Dlg::Onpositivenegative() //正负号 {
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
Answer=Answer/(-1);
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
Number1=Number1/(-1);
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
if(WhichNumFlag==2)
{
Number2=Number2/(-1);
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
}
}
}
void CCaculate3_0Dlg::Onadd()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
OperaterFlag=1;
Number1=Answer;
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
OperaterFlag++;
if(OperaterFlag==1)
{
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(OperaterFlag>1&&signFlag==0)
{
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
Number1=CCaculate3_0Dlg::operfigure(Operater); UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
WhichNumFlag=2;
Operater='+';
OverFlag=0;
FigureFlag=0;
signFlag=1;
}
void CCaculate3_0Dlg::Onsub()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
OperaterFlag=1;
Number1=Answer;
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
OperaterFlag++;
if(OperaterFlag==1)
{
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(OperaterFlag>1&&signFlag==0)
{
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
Number1=CCaculate3_0Dlg::operfigure(Operater); UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
WhichNumFlag=2;
Operater='-';
OverFlag=0;
FigureFlag=0;
signFlag=1;
}
void CCaculate3_0Dlg::Onmul()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
OperaterFlag=1;
Number1=Answer;
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
OperaterFlag++;
if(OperaterFlag==1)
{
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(OperaterFlag>1&&signFlag==0)
{
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
Number1=CCaculate3_0Dlg::operfigure(Operater); UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
WhichNumFlag=2;
Operater='*';
OverFlag=0;
FigureFlag=0;
signFlag=1;
}
void CCaculate3_0Dlg::Ondiv()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
OperaterFlag=1;
Number1=Answer;
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
OperaterFlag++;
if(OperaterFlag==1)
{
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(OperaterFlag>1&&signFlag==0)
{
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
Number1=CCaculate3_0Dlg::operfigure(Operater); UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
WhichNumFlag=2;
Operater='/';
OverFlag=0;
FigureFlag=0;
signFlag=1;
}
void CCaculate3_0Dlg::Onmod()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
OperaterFlag=1;
Number1=Answer;
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
OperaterFlag++;
if(OperaterFlag==1)
{
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(OperaterFlag>1&&signFlag==0)
{
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
Number1=CCaculate3_0Dlg::operfigure(Operater); UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
WhichNumFlag=2;
Operater='%';
OverFlag=0;
FigureFlag=0;
signFlag=1;
}
void CCaculate3_0Dlg::Onsprt()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
Answer=sqrt(Answer);
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
Number1=sqrt(Number1);
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
if(WhichNumFlag==2)
{
Number2=sqrt(Number2);
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
}
}
}
void CCaculate3_0Dlg::OnPrescribing()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
Answer=Answer*Answer;
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
Number1=Number1*Number1;
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
}
if(WhichNumFlag==2)
{
Number2=Number2*Number2;
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
}
}
}
void CCaculate3_0Dlg::Onfigure()
{
// TODO: Add your control notification handler code here if(FigureFlag==0)
{
Answer=CCaculate3_0Dlg::operfigure(Operater);
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
Number1_N=0;
Number1_Point=0;
Number1_PointBit=1;
Num1PointFlag=0;
Number1Temp=0;
Number2=0;
Number2_N=0;
Number2_Point=0;
Number2_PointBit=1;
Num2PointFlag=0;
Number2Temp=0;
FigureFlag=1;
OperaterFlag=0;
WhichNumFlag=1;
Operater='#';
signFlag=0;
}
OverFlag=0;
}
void CCaculate3_0Dlg::OnCe()
{
// TODO: Add your control notification handler code here Number1=0;
Number1_N=0;
Number1_Point=0;
Number1_PointBit=1;
Num1PointFlag=0;
Number1Temp=0;
Number2=0;
Number2_N=0;
Number2_Point=0;
Number2_PointBit=1;
Num2PointFlag=0;
Number2Temp=0;
Answer=0;
FigureFlag=0;
OperaterFlag=0;
WhichNumFlag=1;
OverFlag=0;
Operater='#';
signFlag=0;
UpdateData (TRUE);
Buffer=0;
UpdateData (FALSE);
}
void CCaculate3_0Dlg::OnPi()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
Answer=3.14159;
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
Number1=3.14159;
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(WhichNumFlag==2)
{
Number2=3.14159;
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
}
}
}
void CCaculate3_0Dlg::Onexp()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
Answer=2.7183;
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
Number1=2.7183;
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(WhichNumFlag==2)
{
Number2=2.7183;
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
}
}
}
void CCaculate3_0Dlg::Onsin()
{
// TODO: Add your control notification handler code here
if(FigureFlag==1)
{
Answer=sin(Answer);
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
Number1=sin(Number1);
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(WhichNumFlag==2)
{
Number2=sin(Number2);
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
}
}
}
void CCaculate3_0Dlg::Oncos()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
Answer=cos(Answer);
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
Number1=cos(Number1);
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(WhichNumFlag==2)
{
Number2=cos(Number2);
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
}
}
}
void CCaculate3_0Dlg::Ontan()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
Answer=tan(Answer);
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
Number1=tan(Number1);
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(WhichNumFlag==2)
{
Number2=tan(Number2);
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
}
}
}
void CCaculate3_0Dlg::Onlog()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
if(Answer
{
MessageBox("输入必须为正数");
}
else
{
Answer=log10(Answer);
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
if(Number1
{
MessageBox("输入必须为正数");
}
else
{
Number1=log10(Number1);
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
}
if(WhichNumFlag==2)
{
if(Number2
{
MessageBox("输入必须为正数");
}
else
{
Number2=log10(Number2);
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
}
}
}
}
void CCaculate3_0Dlg::Onln()
{
// TODO: Add your control notification handler code here if(FigureFlag==1)
{
if(Answer
{
MessageBox("输入必须为正数");
}
else
{
Answer=log(Answer);
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
if(Number1
{
MessageBox("输入必须为正数");
}
else
{
Number1=log(Number1);
UpdateData (TRUE);
Buffer=Number1 ;
UpdateData (FALSE);
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
if(WhichNumFlag==2)
{
if(Number2
{
MessageBox("输入必须为正数");
}
else
{
Number2=log(Number2);
UpdateData (TRUE);
Buffer=Number2 ;
UpdateData (FALSE);
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
}
}
}
}
void CCaculate3_0Dlg::Onallmul()
{
// TODO: Add your control notification handler code here int i;
long allmulTemp=1;
if(FigureFlag==1)
{
if(Answer12)
{
MessageBox("输入必须为正数或输入数必须小于13");
}
else
{
Answer=labs(Answer);
for(i=1;i
allmulTemp=allmulTemp*i;
Answer=allmulTemp;
UpdateData (TRUE);
Buffer=Answer;
UpdateData (FALSE);
}
}
if(FigureFlag!=1)
{
if(WhichNumFlag==1)
{
if(Number112)
{
MessageBox("输入必须为正数或输入数必须小于13"); }
else
{
Number1=labs(Number1);
for(i=1;i
allmulTemp=allmulTemp*i;
Number1=allmulTemp;
UpdateData (TRUE);
Buffer=Number1;
UpdateData (FALSE);
Num1PointFlag=0;
Number1_Point=0;
Number1_N=0;
Number1_PointBit=1;
Number1Temp=0;
}
}
if(WhichNumFlag==2)
{
if(Number212)
{
MessageBox("输入必须为正数或输入数必须大于13");
}
else
{
Number2=labs(Number2);
for(i=1;i
allmulTemp=allmulTemp*i;
Number2=allmulTemp;
UpdateData (TRUE);
Buffer=Number2;
UpdateData (FALSE);
Num2PointFlag=0;
Number2_Point=0;
Number2_N=0;
Number2_PointBit=1;
Number2Temp=0;
}
}
}
}
double CCaculate3_0Dlg::operfigure(char a)
{
double AnswerTemp;
if(a=='/')
{
if(Number2==0)
{
MessageBox("除数不能为零");
AnswerTemp=Number1;
Number2=0;
return AnswerTemp;
}
else
{
AnswerTemp=Number1/Number2;
Number2=0;
return AnswerTemp;
}
}
else
{
switch(a)
{
case '+':
AnswerTemp=Number1+Number2;
break;
case '-':
AnswerTemp=Number1-Number2;
break;
case '*':
AnswerTemp=Number1*Number2;
break;
case '%':
AnswerTemp=(long)Number1%(long)Number2;
break;
case 'A':
AnswerTemp=(long)Number1&(long)Number2;
break;
case '#':
AnswerTemp=Number1;
break;
}
Number2=0;
return AnswerTemp;
}
}
测试与实现
1.计算 100的各种三角函数值
结果:-0.[1**********](sin) 0.[1**********]7(cos) -0.[1**********](tan)
计算 20的其它运算值
结果:2.[1**********]3(In) 0.05(倒数) 4.[1**********]9(根号)
总结
在大学学习C语言已有一个学期之久,已经感觉C语言是一门不好学的一门课程,然而还是为了自己能编一些比较简单的程序窃喜的,但经过课程设计才知道原来C语言比我想象的要难的多,一个简单的计算器都令我苦不堪言,更别说将来工作需要编的程序的难度 。编计算器时甚至连代码都不是很明白,利用MFC做计算器的封面就更难了,不过经过这次课我还是学到了很多东西,比如更了解
Visual C++,对Visual C++的运行机制、类、消息处理等的理解都有了明显的提高,并且对MFC的操作也了解了一点皮毛。