编程实验报告---科学计算器设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《可视化程序编程环境》
实验报告
项目名称科学计算器设计与实现
学院计算机学院
专业班级计算机科学与技术0804
2010年1月9 日
一、设计任务与要求
使学生了解可视化程序设计语言的基础知识,掌握面向对象编程的分析设计方法,以及与面向对象技术相关的一些软件开发技术,掌握在 VisualC++6环境下进行可视化程序设计技术。通过实践具体的项目,为他们进一步开展相关领域的学习和科研打下良好的基础。
二、需求分析
1. 功能需求(功能划分、功能描述)
1、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算
2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行
3、以角度、弧度两种方式实现上述部分函数
4、具备历史计算的记忆功能
5、对不正确的表达式能指出其错误原因
2. 运行需求(用户界面、人机接口、故障处理)
根据计算器要实现的相应功能来布局,分为基本功能区,特殊函数区,进制转换区,度数转换区和输出显示区五大基本模块。
三、实验方案
1、总体设计框图
2
3.基本功能区的设计
在这个模块中主要把0到F各个按键按下去后在输出显示区上显示出来列举一例:
void Caysf55Dlg::OnBnClickedButton3()
{if(zuizong=="0") m_str="";
m_str+="1";
UpdateData(0);
if(zuizong=="0") zuizong="";
zuizong+="1";// TODO: 在此添加控件通知处理程序代码
}
接下来从输出显示区获得字符串,通过运算符的相应按键处理:列举加法:
void Caysf55Dlg::OnBnClickedButton19()/*加法运算*/
{double zan;
if(m_str=="") MessageBox(L"没有运算数");
else if(y==1||M==1) MessageBox(L"只能输入数值");
else if(m_str.GetAt (m_str.GetLength()-1)=='+'||m_str.GetAt
(m_str.GetLength()-1)=='-'||m_str.GetAt
(m_str.GetLength()-1)=='*'||m_str.GetAt (m_str.GetLength()-1)=='/')
MessageBox(L"不能连续输入运算符!!");
else {{m_str+="+";UpdateData(0);point=0;
if(jinzhi.GetCurSel()==0) zan=S2toN(zuizong);
else if(jinzhi.GetCurSel()==1) zan=S8toN(zuizong);
else if(jinzhi.GetCurSel()==2) zan=StoN(zuizong);
else if(jinzhi.GetCurSel()==3) zan=S16toN(zuizong);}
if(Ds==0&&Ms==0)
{if(As==0&&Ss==0) {Ap1=zan;As=1;zuizong="";}
else if(As==0&&Ss==1)
{Sp2=zan;Ss=2;jisuan();Ap1=result;As=1;zuizong="";}
else if(As==1&&Ss==0)
{Ap2=zan;As=2;jisuan();Ap1=result;As=1;zuizong="";}
}
if(Ms==1) {if(As==0&&Ss==0)
{Mp2=zan;Ms=2;jisuan();Ap1=result;As=1;zuizong="";}
else if(As==1)
{Mp2=zan;Ms=2;jisuan();Ap2=result;As=2;jisuan();Ap1=result;As=1;zuizong= "";}
else if(Ss==1)
{Mp2=zan;Ms=2;jisuan();Sp2=result;Ss=2;jisuan();Ap1=result;As=1;zuizong="
";}}
if(Ds==1) {if(As==0&&Ss==0)
{Dp2=zan;Ds=2;jisuan();Ap1=result;As=1;zuizong="";}
else if(As==1)
{Dp2=zan;Ds=2;jisuan();Ap2=result;As=2;jisuan();Ap1=result;As=1;zuizong="
";}
else if(Ss==1)
{Dp2=zan;Ds=2;jisuan();Sp2=result;Ss=2;jisuan();Ap1=result;As=1;zuizong=""
;}}
}
// TODO: 在此添加控件通知处理程序代码
}
4.特殊函数区的设计
特殊函数区各个按键的功能实现主要是通过调用系统函数来实现的
举一例如sin:
void Caysf55Dlg::OnBnClickedButton27()/*sin*/
{double p;
if(jiaohu==2) MessageBox(L"请先选择角度或弧度!");
else if(m_str==""&&jiaohu==1) MessageBox(L"请输入角度!!");
else if(m_str==""&&jiaohu==0) MessageBox(L"请输入弧度!!");
else { OnBnClickedButton34();
if(jiaohu==1) {if(zhengfan.GetCheck()==1)
{p=asin(result);p=p*180/3.141592653;}
else if(zhengfan.GetCheck()==0)
{p=sin(result*3.141592653/180);}
}
if(jiaohu==0) {if(zhengfan.GetCheck()==1) {p=asin(result);}
else if(zhengfan.GetCheck()==0) {p=sin(result);}
}
m_str=NtoS(p);zuizong=NtoS(p);UpdateData(0);point=1;// TODO: 在此添加控件通知处理程序代码
}
}
其他函数cos,tan,cot,arcsin,arccos,arctan,log,ln实现方法相类似。Pi函数则通过对Pi置数3.141592653来实现。
4.进制转换区的设计:
在进制转换这个模块中主要涉及二进制,八进制,十进制跟十六进制之间的转换,并相应隐藏基本功能区中相应按键。
举二进制为例:
void Caysf55Dlg::OnCbnSelchangeCombo2()
{long k;
int a=jinzhi.GetCurSel();
if(As!=0||Ss!=0||Ms!=0||Ds!=0) {m_str="";zuizong="";}
if(a==0){if(m_str!="")