ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:283.84KB ,
资源ID:24024294      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24024294.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(刁竞雄计算器报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

刁竞雄计算器报告.docx

1、刁竞雄计算器报告课 程 设 计 课程名称 Visual C+ 可视化编程 题目名称 一个简单计算器的设计 学生学院 计算机学院 专业班级 2006级软件工程2班 学 号 3106006946 学生姓名 刁竞雄 指导教师 谭台哲 2008 年 12月 31日Visual C+ 可视化编程简单计算器的设计一、实验目的与要求1.实验目的:目标是使学生了解可视化程序设计语言的基础知识,掌握面向对象编程的分析设计方法,以及与面向对象技术相关的一些软件开发技术,掌握在 VisualC+6环境下进行可视化程序设计技术。通过实践具体的项目,为他们进一步开展相关领域的学习和科研打下良好的基础。2.实验要求:本实

2、验要求学生通过学习MFC应用程序的创建;MFC类库;VisualC+6程序结构;VisualC+6工程管理;MFC自定义类;VisualC+6程序的编译等,运用面向对象编程思想的整体知识,借助于VisualC+6编程工具,设计并实现一个简单计算器的程序设计工作。 3.实验内容本实验要求计算器能够实现以下功能:1) 二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算2) 科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行3) 以角度、弧度两种方式实现上述部分函数4) 具备历史计算的记忆功能5) 对不正确的表达式能指出其错误原因6) 具有可

3、操作性、开放性,容易增加各种附加功能。7) 整理上机步骤、完成实验报告、提交可运行的程序,给出实验数据和实验结果。二、实验完成情况1) 完成了实验要求的所有内容2) 可以处理含括号的表达式3) 增加了科学计算器的一些设施,如退格键BackSpace,清空与归零键,求阶乘,求Ln等三、实验(设计)仪器设备和材料软件环境:Windows XP操作系统,Visual C+6.0四、实验方案1.设计方案: 实验要求在Windows XP操作系统的基础上借助于VisualC+6编程工具,设计并实现一个简单计算器的程序设计工作!根据实验的要求,本次实验把计算器分为几个模块,模块之间是相互独立但有相互联系的

4、!他们为实现计算器的功能体现着自己的价值:1) 计算器外观的设计用MFC AppWizard创建一个Dialog Based的对话框。在Dialog上添加和布局控件。2)基本按键的控制及关联实现基本按纽与字符及字符串的关联和实现与控件的数据交换3)运用对话框窗口实现各种数制的简单计算分别实现计算器二进制、八进制、十进制、十六进制的简单计算,并能进行数学表达式的计算。4)实现科学计算功能调用科学计算函数,为计算器添加科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等5)为部分科学计算函数添加角度与弧度两种数值表示形式6)实现历史计算功能7) 程序容错处理8)添加其它小

5、功能,优化交互性功能并调整界面。2.详细的设计方案1)计算器外观的设计建立一个对话框,将控件摆在合理的位置上。各个控件的名称和功能如下所示: Edit BoxIDC_EDIT_INPUT, OnChangeEditInput 演算显示框IDC_EDIT_RESULT 结果显示框IDC_EDIT_History 历史显示框IDC_EDIT_M 数据存储显示框Radio ButtonIDC_RADIO_Bin, OnRADIOBin 二进制IDC_RADIO_Oct, OnRADIOOct 八进制IDC_RADIO_DEC 十进制IDC_RADIO_Hex, OnRADIOHex 十六进制IDC_

6、RADIO_DEGREE 角度选择IDC_RADIO_RADIAN 弧度选择 Button标准键: IDC_Btn1, OnBtn1 1 IDC_Btn2, OnBtn2 2 IDC_Btn3, OnBtn3 3 IDC_Btn4, OnBtn4 4 IDC_Btn5, OnBtn5 5 IDC_Btn6, OnBtn6 6 IDC_Btn7, OnBtn7 7 IDC_Btn8, OnBtn8 8 IDC_Btn9, OnBtn9 9 IDC_BtnDot, OnBtnDot . IDC_BtnNgt, OnBtnNgt +/- IDC_BtnF, OnBtnF 十六进制F IDC_BtnA

7、, OnBtnA 十六进制A IDC_BtnB, OnBtnB 十六进制B IDC_BtnC, OnBtnC 十六进制C IDC_BtnD, OnBtnD 十六进制D IDC_BtnE, OnBtnE 十六进制E IDC_BtnAdd, OnBtnAdd + IDC_BtnMin, OnBtnMin - IDC_BtnMul, OnBtnMul * IDC_BtnDiv, OnBtnDiv / IDC_BtnLbar, OnBtnLbar ( IDC_BtnRbar, OnBtnRbar ) IDC_BtnBack, OnBtnBack BACK IDC_BtnPow, OnBtnPow 乘方

8、 IDC_BtnMod, OnBtnMod 求模 IDC_BtnPi, OnBtnPi IDC_BtnEe, OnBtnEe e科学计算器按键 IDC_BtnSin, OnBtnSin sin IDC_BtnCos, OnBtnCos cos IDC_BtnTan, OnBtnTan tan IDC_BtnArccos, OnBtnArccos acos IDC_BtnCot, OnBtnCot cot IDC_Arcsin, OnArcsin asin IDC_BtnArctan, OnBtnArctan atan IDC_BtnLog, OnBtnLog log IDC_BtnSh, On

9、BtnSh sh IDC_BtnCh, OnBtnCh ch IDC_BtnTh, OnBtnTh th IDC_BtnLn, OnBtnLn ln IDC_BtnExp, OnBtnExp 求e的x次方 IDC_BtnSqr, OnBtnSqr 除方IDC_Btn10exp, OnBtn10Exp 求x的10次方其它按键 IDC_BtnClean, OnBtnClean 清空演算框 IDC_BtnMS, OnBtnMS 存储一个数据 IDC_BtnMR, OnBtnMR 将数据输出到对话框 IDC_BtnMC, OnBtnMC 取出一个数 IDC_BtnMadd, OnBtnMadd 将这个

10、数对演算框里的数相加IDC_BtnAbout 调用ABOUT对话框,版权说明2)计算功能 这一部分是整个程序的重点及核心部分,也是整个课程设计中遇到最难的问题,将采用一个简单的示意图表明计算时各个函数的调用关系。 以上函数各部分的功能如下:MainPro() 主函数IsDigital() 对函数数位进行检查StoN() 字符串转为数字NtoS() 数字转化为字符串Oct2Dec() 将八进制转换成十进制Hex2Dec() 将十六进制转换成十进制Bin2Dec() 将 二进制转换成十进制BraCheck() 对函数中的括号进行检查DelBracket() 对各个括号内的数据进行运算LocateL

11、Bra () 对括号进行定位SingleE() 一个数据时,进行的科学计算TwoE() 两个数据时,进行的普通运算MultiE() 处理各种形式的运算Calcu() 对二元式进行计算MinusMinus () 处理“”的情况SynRes() 返回错误结果ModiResult() 返回计算结果程序的普通计算功能、科学计算功能、容错处理都包含在以上的主函数及调用函数里面。普通计算功能主要包含于函数TwoE(),科学计算功能主要包含于函数于SingleE(),容错功能主要包含于函数MultiE()。 (1)实现各种数制的简单计算功能可以描述为:将每个过程拆分为二元计算过程进行运算。CString C

12、Calculation:TwoE(CString strEdit) double x2,y,x1=StoN(strEdit); strEdit=m_strTmp; char op=strEdit.GetAt(0); strEdit.Delete(0); x2=StoN(strEdit); if(m_strTmp!=) return ERROR_+m_strTmp+未知符号_; if(op=+) y=x1+x2; else if(op=*) y=x1*x2; else if(op=-) y=x1-x2; else if(op=) y=pow(x1,x2); else if(op=/) y=x1/

13、x2; else if(op=%) y=fmod(x1,x2); else return ERROR_+m_strTmp+未知运算符_; return NtoS(y); (2)实现计算器科学计算功能这个功能可以简单描述为:将字符串读进程序中,并和相关字符进行匹配,接着调用各个数学函数进行运算。CString CCalculation:SingleE(CString op,double dx) if(op=ln) return NtoS(log(dx); else if(op=log) return NtoS(log10(dx); else if(op=sqr) return NtoS(sqrt

14、(dx); else if(op=e) return NtoS(exp(dx); else if(op=abs) return NtoS(fabs(dx); else if(op=ac) return NtoS(acos(dx); else if(op=as) return NtoS(asin(dx); else if(op=at) return NtoS(atan(dx); if(m_bDegree) dx=dx*PI/180; if(op=tan) return NtoS(tan(dx); else if(op=sin) return NtoS(sin(dx); else if(op=co

15、s) return NtoS(cos(dx); else if(op=cot) return NtoS(1/tan(dx); else if(op=sh) return NtoS(sinh(dx); else if(op=ch) return NtoS(cosh(dx); else if(op=th) return NtoS(sinh(dx)/cosh(dx); else if(op=exp) return NtoS(pow(10,dx); return ERROR+op+_未知函数_;(3)程序的具体运算过程及程序容错处理程序容错处理包含在程序计算里面,程序运算的主体函数为:void CCa

16、lculation:MultiE(CString *strEdit) if(strEdit-IsEmpty() *strEdit=ERROR_函数表达式为空_; if(IsDigital(*strEdit) return; while(1)/*处理所有的一元运算*/ for(int i=0;iFind(opti); if(pos!=-1) CString str=strEdit-Right(strEdit-GetLength()-pos-opti.GetLength(); double dx=StoN(str); if(m_strTmp=str) *strEdit=ERROR+str+_无法识

17、别的函数_;return; strEdit-Delete(pos,strEdit-GetLength()-pos); *strEdit+=SingleE(opti,dx)+m_strTmp; MinusMinus(strEdit); if(pos=1) char ch=strEdit-GetAt(pos-1); if(ch=48 & chFind(); if(pos=-1) break; else Calcu(strEdit,pos); while(1) pos=strEdit-Find(/); if(pos=-1) break; else Calcu(strEdit,pos); while(

18、1) pos=strEdit-Find(*); if(pos=-1) break; else Calcu(strEdit,pos); while(1) pos=strEdit-Find(%); if(pos=-1) break; else Calcu(strEdit,pos); pos=0; if(strEdit-GetAt(0)=- |strEdit-GetAt(0)=+) strEdit-Insert(0,0); while(1) int tmpos=strEdit-Right(strEdit-GetLength()-pos).Find(-); if(tmpos=-1) break; el

19、se pos+=tmpos; if(pos=0 & strEdit-GetAt(pos+1)=- | pos0) if(strEdit-GetAt(pos+1)=+) strEdit-Delete(pos+1); pos=0; continue; /*处理连减(如:-1)的情况*/ int nCount=0; while(1) if(+pos0) if(strEdit-GetAt(pos)!=-) break; else nCount+; else break; if(nCount0) strEdit-Delete(pos-nCount-1,nCount+1); if(nCount%2=0)

20、strEdit-Insert(pos-nCount-1,-); else if(pos-nCount-10) strEdit-Insert(pos-nCount-1,+); pos=0; continue; else pos-; /*/ if(pos0 & strEdit-GetAt(pos-1)=+) pos+; continue; Calcu(strEdit,pos); else pos+; pos=0; while(1) pos=strEdit-Find(+);/ int tmpos=strEdit-Right(strEdit-GetLength()-pos).Find(+); if(p

21、os=-1) break;/ else pos+=tmpos; if(pos=0 & strEdit-GetAt(pos+1)=+ | pos0) /*处理连加(如:+1)的情况*/ int nCount=0; while(1) if(+pos0) if(strEdit-GetAt(pos)!=+) break; else nCount+; else break; if(nCount0) strEdit-Delete(pos-nCount-1,nCount+1); strEdit-Insert(pos-nCount-1,+); pos=0; continue; else pos-; /*/ C

22、alcu(strEdit,pos); else pos+; (4)程序的其它各个主要调用函数主体程序如下:CString CCalculation:MainPro(CString strEdit) if(strEdit.IsEmpty() return 表达式不能为空; Macro(&strEdit); strEdit.MakeLower(); /表达式全部小写 /*给表达式加上保护括号*/ strEdit.Insert(0,(); strEdit+=); /*/ int pos=strEdit.Find( ); int n=BraCheck(strEdit); CString str; st

23、r.Format(%d,abs(n); if(n=1) strEdit+=); else if(n=-1) strEdit.Insert(0,(); else if(n0) return 缺少+str+个右括号; else if(n=0 & decimal16) for(int i=str.GetLength();idecimal;i+) str+=0; str+=.0; else for(int i=0;i-decimal;i+) str.Insert(0,0); str.Insert(0,.); if(sign=1) str.Insert(0,-); return str;double CCalculation:StoN(CString str) char *stopstring; double x; x = strtod( str.GetBuffer(0), &stopstring ); m_strTmp=stopstring; return x;int CCalculation:LocateLBra(CString strEdit

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1