当前位置:文档之家› 编程实验报告---科学计算器设计与实现

编程实验报告---科学计算器设计与实现

《可视化程序编程环境》实验报告项目名称科学计算器设计与实现学院计算机学院专业班级计算机科学与技术08042010年1月9 日一、设计任务与要求使学生了解可视化程序设计语言的基础知识,掌握面向对象编程的分析设计方法,以及与面向对象技术相关的一些软件开发技术,掌握在 VisualC++6环境下进行可视化程序设计技术。

通过实践具体的项目,为他们进一步开展相关领域的学习和科研打下良好的基础。

二、需求分析1. 功能需求(功能划分、功能描述)1、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行3、以角度、弧度两种方式实现上述部分函数4、具备历史计算的记忆功能5、对不正确的表达式能指出其错误原因2. 运行需求(用户界面、人机接口、故障处理)根据计算器要实现的相应功能来布局,分为基本功能区,特殊函数区,进制转换区,度数转换区和输出显示区五大基本模块。

三、实验方案1、总体设计框图23.基本功能区的设计在这个模块中主要把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!=""){if(ya==1){k=S8toN(m_str);m_str=IntNtoS(k);m_str=OnDecToOther(2);}else if(ya==2){k=StoN(m_str);m_str=IntNtoS(k);m_str=OnDecToOther(2);}else if(ya==3){k=S16toN(m_str);m_str=IntNtoS(k);m_str=OnDecToOther(2);}}kz1.EnableWindow(true);kz2.EnableWindow(false);kz3.EnableWindow(false);kz4.EnableWindow(false);kz5.EnableWindow(false);kz6.EnableWindow(false);kz7.EnableWindow(false);kz8.EnableWindow(false);kz9.EnableWindow(false);kz0.EnableWindow(true);kzA.EnableWindow(false);kzB.EnableWindow(false);kzC.EnableWindow(false);kzD.EnableWindow(false);kzE.EnableWindow(false);kzF.EnableWindow(false);kzpi.EnableWindow(false);kzd.EnableWindow(false);kzdao.EnableWindow(false);kzsin.EnableWindow(false);kzcos.EnableWindow(false);kztan.EnableWindow(false);kzcot.EnableWindow(false);kzx2.EnableWindow(true);kzx3.EnableWindow(true);kzxy.EnableWindow(true);kzlog.EnableWindow(false);kzln.EnableWindow(false);ya=0;UpdateData(0);zuizong=m_str;}} long Caysf55Dlg::S2toN(CString str){//将二进制CString类型字符串转化为十进制数字String^ newStr = gcnew String(str);long d = Convert::ToInt32(newStr,2);return d;}其他进制按键设置及类型转换相类似。

5.度数转换区的设计:这个模块主要是为特殊函数区服务的,即是以度数来转换还是弧度来转换。

通过在特殊函数中判断选择了哪种度数来进行相应计算。

相关主题