编程试验报告---科学计算器设计与实现
可视化程序编程环境 实验报告 项目名称科学计算器设计与实现 学院计算机学院 专业班级计算机科学与技术 0804 2010 年 1 月9日 一、设计任务与要求一、设计任务与要求 使学生了解可视化程序设计语言的基础知识, 掌握面向对象编程的分析设计方法, 以及 与面向对象技术相关的一些软件开发技术,掌握在 VisualC6环境下进行可视化程序设计 技术。通过实践具体的项目,为他们进一步开展相关领域的学习和科研打下良好的基础。 二、需求分析二、需求分析 1. 功能需求(功能划分、功能描述)功能需求(功能划分、功能描述) 1、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算 2、科学计算函数,包括反正弦、反余弦、反正切、反余切、开方、指数等函数 运行 3、以角度、弧度两种方式实现上述部分函数 4、具备历史计算的记忆功能 5、对不正确的表达式能指出其错误原因 2. 运行需求(用户界面、人机接口、故障处理)运行需求(用户界面、人机接口、故障处理) 根据计算器要实现的相应功能来布局,分为基本功能区,特殊函数区,进制 转换区,度数转换区和输出显示区五大基本模块。 三、实验方案三、实验方案 1 1、总体设计框图、总体设计框图 开始运行计算器 角度弧度十进制进制转换函数 二进制 函数运算简单的运算 八进制 历史记录出错处理十六进制 结束运行计算器 2 2、计算器平面图、计算器平面图 3.3.基本功能区的设计基本功能区的设计 在这个模块中主要把0到F各个按键按下去后在输出显示区上显示出来 列举一例 void Caysf55DlgOnBnClickedButton3 {ifzuizong“0“ m_str““; m_str“1“; UpdateData0; ifzuizong“0“ zuizong““; zuizong“1“;// TODO 在此添加控件通知处理程序代码 } 接下来从输出显示区获得字符串,通过运算符的相应按键处理 列举加法 void Caysf55DlgOnBnClickedButton19/*加法运算*/ {double zan; ifm_str““ MessageBoxL“没有运算数“; else ify1||M1 MessageBoxL“只能输入数值“; else ifm_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/ MessageBoxL“不能连续输入运算符“; else {{m_str““;UpdateData0;point0; ifjinzhi.GetCurSel0 zanS2toNzuizong; else ifjinzhi.GetCurSel1 zanS8toNzuizong; else ifjinzhi.GetCurSel2 zanStoNzuizong; else ifjinzhi.GetCurSel3 zanS16toNzuizong;} ifDs0As1;zuizong““;} else ifAs0Ss2;jisuan;Ap1result;As1;zuizong““;} else ifAs1As2;jisuan;Ap1result;As1;zuizong““;} } ifMs1 {ifAs0Ms2;jisuan;Ap1result;As1;zuizong““;} else ifAs1 {Mp2zan;Ms2;jisuan;Ap2result;As2;jisuan;Ap1result;As1;zuizong ““;} else ifSs1 {Mp2zan;Ms2;jisuan;Sp2result;Ss2;jisuan;Ap1result;As1;zuizong“ “;}} ifDs1 {ifAs0Ds2;jisuan;Ap1result;As1;zuizong““;} else ifAs1 {Dp2zan;Ds2;jisuan;Ap2result;As2;jisuan;Ap1result;As1;zuizong“ “;} else ifSs1 {Dp2zan;Ds2;jisuan;Sp2result;Ss2;jisuan;Ap1result;As1;zuizong““ ;}} } // TODO 在此添加控件通知处理程序代码 } 4. 4.特殊函数区的设计特殊函数区的设计 特殊函数区各个按键的功能实现主要是通过调用系统函数来实现的 举一例如sin void Caysf55DlgOnBnClickedButton27/*sin*/ {double p; ifjiaohu2MessageBoxL“请先选择角度或弧度“; else ifm_str““ else ifm_str““ else { OnBnClickedButton34; ifjiaohu1 {ifzhengfan.GetCheck1 {pasinresult;pp*180/3.141592653;} else ifzhengfan.GetCheck0 {psinresult*3.141592653/180;} } ifjiaohu0 {ifzhengfan.GetCheck1 {pasinresult;} else ifzhengfan.GetCheck0 {psinresult;} } m_strNtoSp;zuizongNtoSp;UpdateData0;point1;// TODO 在此添 加控件通知处理程序代码 } } 其他函数cos,tan,cot,arcsin,arccos,arctan,log,ln实现方法相类似。Pi函数则 通过对Pi置数3.141592653来实现。 4.4.进制转换区的设计进制转换区的设计 在进制转换这个模块中主要涉及二进制,八进制,十进制跟十六进制之间的 转换,并相应隐藏基本功能区中相应按键。 举二进制为例 void Caysf55DlgOnCbnSelchangeCombo2 {long k; int ajinzhi.GetCurSel; ifAs0||Ss0||Ms0||Ds0 {m_str““;zuizong““;} ifa0{ifm_str““ {ifya