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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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!="")

相关文档
最新文档