编程试验报告---科学计算器设计与实现
《可视化程序编程环境》 实验报告 项目名称科学计算器设计与实现 学院计算机学院 专业班级计算机科学与技术 0804 2010 年 1 月9日 一、设计任务与要求一、设计任务与要求 使学生了解可视化程序设计语言的基础知识, 掌握面向对象编程的分析设计方法, 以及 与面向对象技术相关的一些软件开发技术,掌握在 VisualC++6环境下进行可视化程序设计 技术。通过实践具体的项目,为他们进一步开展相关领域的学习和科研打下良好的基础。 二、需求分析二、需求分析 1. 功能需求(功能划分、功能描述)功能需求(功能划分、功能描述) 1、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算 2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数 运行 3、以角度、弧度两种方式实现上述部分函数 4、具备历史计算的记忆功能 5、对不正确的表达式能指出其错误原因 2. 运行需求(用户界面、人机接口、故障处理)运行需求(用户界面、人机接口、故障处理) 根据计算器要实现的相应功能来布局,分为基本功能区,特殊函数区,进制 转换区,度数转换区和输出显示区五大基本模块。 三、实验方案三、实验方案 1 1、总体设计框图、总体设计框图 开始运行计算器 角度弧度十进制进制转换函数 二进制 函数运算简单的运算 八进制 历史记录出错处理十六进制 结束运行计算器 2 2、计算器平面图、计算器平面图 3.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==0As=1;zuizong=““;} else if(As==0Ss=2;jisuan();Ap1=result;As=1;zuizong=““;} else if(As==1As=2;jisuan();Ap1=result;As=1;zuizong=““;} } if(Ms==1) {if(As==0Ms=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==0Ds=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. 4.特殊函数区的设计特殊函数区的设计 特殊函数区各个按键的功能实现主要是通过调用系统函数来实现的 举一例如sin: void Caysf55Dlg::OnBnClickedButton27()/*sin*/ {double p; if(jiaohu==2)MessageBox(L“请先选择角度或弧度!“); else if(m_str==““ else if(m_str==““ 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.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==