版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VC+课程设计报告简单科学计算器设计姓 名 : 学 号 : 学 院 : 电气工程学院 班 级 : 日 期 : 2009-12-27 目 录一、设计任务11、选题意义12、设计目标1二、程序设计与实现11、程序结构12、设计步骤33、详细设计41、计算器界面42、主要代码43、函数功能说明16三、设计难点与解决方法17四、设计效果与缺乏之处181、程序效果图182、缺乏之处18五、学习体会18一、 设计任务1. 选题意义此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握Visual C+应用程序。统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C+,并在此
2、环境下设计并实现一个简单计算器系统。该计算器应能实现如下功能: 1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方等简单计算 2)、科学计算函数,包括正弦、余弦、正切、余切、开方、对数、指数等函数运算 3)、具备历史计算的记忆功能。2. 设计目标使计算器含有以下功能:1、根本运算功能:可以进行加、减、乘、除等根本运算。2、数制转换功能:可以一次完成二进制转十进制、十进制转二进制、八进制转二进制等运算。3、三角函数运算功能:可以一次完成三角函数之间的计算,求正弦函数sin、余弦函数cos、正切函数tan、余切函数cot等函数的值。4、对数、指数运算功能:可以一次求的对数函数log、l
3、n、指数函数exp等函数的运算。5、删除功能:可以在输入错误时删除已输入的数值。6、归零功能:可以在计算完成后清空编辑框中的已有数值。二、 程序设计与实现1. 程序结构 本计算器首先是通过在计算器的界面上按下相应的按钮,来进行根本的加,减,乘,除等根本运算,计算器还能够进行平方运算,求平方根运算,乘方运算,三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot),对数函数(ln、log),指数函数(exp),幂函数(x)和进制转换(包括二进制转十进制、十进制转二进制和八进制转二进制)等运算。 以下是本计算器的运算流程图:结束开始加法运算输入数据进制转换乘
4、方运算正切运算余弦运算正弦运算除法运算乘法运算减法运算归零功能平方运算根式运算输出结果输入数据指数运算对数运算二进制转十进制N-S流程图:int len;double sum=0.0,num;len=strlen(m_xs);int i=0;i<len;num=(m_xsi-48);num=num*pow(2,len-i-1);sum+=num;i+;m_xs.Format("%f",sum);UpdateData(false);十进制转二进制N-S流程图:int n,i,t;double Y,p=0.0;Y=strtod( m_xs,NULL);t=(int)(Y)
5、;t!=1是否i=1;当t>1;n=t%2;t=t/2;p+=n*pow(10,(i-1);p+=1*pow(10,(i-1);m_xs.Format("%f",p);UpdateData(false);2. 设计步骤:(1) 创立一个基于对话框的应用程序。(2) 利用资源编辑器编辑对话框资源,及设计计算器界面并修改对话框各按钮的ID属性和Caption属性。(3) 利用ClassWizard为各按钮添加消息映射代码在下面详细介绍。(4) 设置对话框文本背景颜色。(5) 编辑图标。3. 详细介绍:1计算器界面:2主要代码:void CGyDlg:On0() /输入相应
6、的数据,这为输入数据0 s2=s2+"0" m_xs=m_xs+"0" UpdateData(FALSE); void CGyDlg:On1() /输入相应的数据,这为输入数据1 s2=s2+"1" m_xs=m_xs+"1" UpdateData(FALSE);void CGyDlg:On2() /输入相应的数据,这为输入数据2 s2=s2+"2" m_xs=m_xs+"2" UpdateData(FALSE);void CGyDlg:On3() /输入相应的数据,这为输入
7、数据3 s2=s2+"3" m_xs=m_xs+"3"UpdateData(FALSE);void CGyDlg:On4() /输入相应的数据,这为输入数据4 s2=s2+"4" m_xs=m_xs+"4" UpdateData(FALSE);void CGyDlg:On5() /输入相应的数据,这为输入数据5 s2=s2+"5" m_xs=m_xs+"5" UpdateData(FALSE);void CGyDlg:On6() /输入相应的数据,这为输入数据6 s2=s2+
8、"6" m_xs=m_xs+"6"UpdateData(FALSE);void CGyDlg:On7() /输入相应的数据,这为输入数据7s2=s2+"7" m_xs=m_xs+"7" UpdateData(FALSE);void CGyDlg:On8() /输入相应的数据,这为输入数据8 s2=s2+"8"m_xs=m_xs+"8" UpdateData(FALSE);void CGyDlg:On9() /输入相应的数据,这为输入数据9 s2=s2+"9"
9、; m_xs=m_xs+"9" UpdateData(FALSE);void CGyDlg:Onadd() /加法运算 s2="" s1=m_xs; m_xs=m_xs+'+' str='+' UpdateData(false);void CGyDlg:Onsub() /减法运算 s2="" s1=m_xs; m_xs=m_xs+'-' str='-' UpdateData(false);void CGyDlg:Onxsd() /小数点运算 s2=s2+".&q
10、uot; m_xs=m_xs+"." UpdateData(false);void CGyDlg:Oncheng() /乘法运算 s2="" s1=m_xs; m_xs=m_xs+'*' str='*' UpdateData(false);void CGyDlg:Onchu() /除法运算 s2="" s1=m_xs; m_xs=m_xs+'/' str='/' UpdateData(false);void CGyDlg:Ondel() /删除功能 m_xs.Delete
11、(m_xs.GetLength()-1,1); UpdateData(false);void CGyDlg:Onpf() /平方运算 s2="" s1=m_xs; m_xs=m_xs+"2" str='p' UpdateData(false);void CGyDlg:Onkf() /开2次方运算 s2="" s1=m_xs; m_xs=m_xs+"1/2" str='k' UpdateData(false);void CGyDlg:Onsin() /sin函数运算 s2="
12、" s1=m_xs; m_xs="sin"+m_xs; str='s' UpdateData(false);void CGyDlg:Oncos() /cos函数运算 s2="" s1=m_xs; m_xs="cos"+m_xs; str='c' UpdateData(false);void CGyDlg:Ontan() /tan函数运算 s2="" s1=m_xs; m_xs="tan"+m_xs; str='t' UpdateData(
13、false);void CGyDlg:Onln() /ln函数运算 s2="" s1=m_xs; m_xs="ln"+m_xs; str='l' UpdateData(false);void CGyDlg:Onlog() /log函数运算 s2="" s1=m_xs; m_xs="log"+m_xs; str='g' UpdateData(false);void CGyDlg:Onex() /以e为底的指数运算 s2="" s1=m_xs; m_xs="
14、e"+m_xs; str='e' UpdateData(false);void CGyDlg:On3cfg() /开3次方运算 s2="" s1=m_xs; m_xs=m_xs+"1/3" str='f' UpdateData(false);void CGyDlg:Onxy() / x的y次方运算 s2="" s1=m_xs; m_xs=m_xs+"" str='' UpdateData(false);void CGyDlg:Onqk() / 归零按钮 m_
15、xs="" UpdateData(FALSE);void CGyDlg:Onsze() /十进制转二进制 s2="" int n,i,t; double Y,p=0.0; Y=strtod( m_xs,NULL); /把字符串转化成浮点型 t=(int)(Y); if(t!=1) for(i=1;t>1;i+) n=t%2; t=t/2; p+=n*pow(10,(i-1); p+=1*pow(10,(i-1); m_xs.Format("%f",p); m_xs=scl(m_xs); UpdateData(false);voi
16、d CGyDlg:Onezs() /二进制转十进制 s2="" int len; double sum=0.0,num; len=strlen(m_xs); for (int i=0;i<len;i+) num=(m_xsi-48); num=num*pow(2,len-i-1); sum+=num; m_xs.Format("%f",sum); m_xs=scl(m_xs); UpdateData(false);void CGyDlg:Onbze() /八进制转二进制 s2="" int i,len; char s; len=
17、strlen(m_xs); CString m_xs1; for(i=0;i<len;i+) s=m_xsi; switch(s) case'1': m_xs1=m_xs1+"001" break; case '2': m_xs1=m_xs1+"010" break; case '3': m_xs1=m_xs1+"011" break; case '4': m_xs1=m_xs1+"100" break; case'5': m_x
18、s1=m_xs1+"101" break; case '6': m_xs1=m_xs1+"110" break; case'7': m_xs1=m_xs1+"111" break; case'.': m_xs1=m_xs1+"." break; m_xs=m_xs1; UpdateData(false); double add(double X, double Y) return X+Y; /加函数double subtract(double X, double Y)
19、 return X-Y; /减函数double chu(double X, double Y) return X/Y; /除函数double cheng(double X, double Y) return X*Y; /乘函数double jzf(double fu) return fu / 180.0 * 3.14159265; / 角度转弧度CString scl(CString m) /删除小数点后多余的零 int len,i,j=0; len=strlen(m); if(mlen-1='0') i=len-1; while(mi='0') j+; i-;
20、 m.Delete(len-j,j); / 删除小数点后无用的零 return m;double chengfang(double X, int Y) /乘方 double m=1.0; if(Y=1) return X; else for(int i=1;i<=Y;i+) m=m*X; return m;void CGyDlg:Ondy() /等于号的功能函数 double X,Y;X=strtod(s1,NULL); /把字符串转化成浮点型Y=strtod(s2,NULL); /把字符串转化成浮点型switch(str)case '+': m_xs.Format(&q
21、uot;%f",add(X,Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case '-': m_xs.Format("%f",subtract(X,Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case '*': m_xs.Format("%f",cheng( X,Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case &
22、#39;/': m_xs.Format("%f",chu(X,Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case 'p': m_xs.Format("%f",cheng(Y,Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case 'k': m_xs.Format("%f",sqrt(Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(fa
23、lse); break; case 's': m_xs.Format("%f",sin(jzf(Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case 'c': m_xs.Format("%f",cos(jzf(Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case 't': m_xs.Format("%f",tan(jzf(Y); m_xs=scl(m_xs)
24、; /调用删除零函数 UpdateData(false); break; case 'l': m_xs.Format("%f",log(Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case 'g': m_xs.Format("%f",log10(Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case 'e': m_xs.Format("%f",exp(Y);
25、m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case '': m_xs.Format("%f", chengfang(X,(int)Y); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; case 'f': m_xs.Format("%f", pow(Y,M3); m_xs=scl(m_xs); /调用删除零函数 UpdateData(false); break; default : UpdateData(false); m_xs="" s2=""HBRUSH CGyDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) /设置编辑框背景颜色HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor); pDC->SetBkColor(RGB(190,255,0);return hbr;3函数功能说明整个计算器除了根本的加、减、乘、除运算外,另外还有8个功能,实现八大运算:三角函数运算功能、对数函数运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年网式印刷机企业县域市场拓展与下沉战略分析研究报告
- 音响调协设备批发行业商业模式创新分析报告
- 2025-2030年绘图、计算及测量仪器市场需求变化趋势与商业创新机遇分析研究报告
- 2025年天津市区事业单位招聘考试试卷真题
- 工地安全工作总结(汇编15篇)
- 安全员年度工作总结集锦15篇
- 年会获奖的发言稿(15篇)
- 远离危险学会保护自己小学主题班会课件
- 2026方言传承面试题及答案
- 2026枫桥经验税务面试题及答案
- 青岛华瀚管理咨询有限公司招聘笔试题库2026
- 2026-2030中国动力定位系统行业市场发展分析及前景趋势预测与投资发展究报告
- 11340《古代小说戏曲专题》国家开放大学期末考试题库
- 2025年7月辽宁省普通高中学业水平合格性考试生物试题(原卷版)
- AQ 1044-2007 矿井密闭防灭火技术规范(正式版)
- 玩转高中数学研讨 08 立体几何与空间向量学霸必刷100题(原卷版)
- 及时雨高考英语词汇默写本上册答案1-10
- 中考英语1600词(词频顺序自测版)
- JTG-T 3331-04-2023 多年冻土地区公路设计与施工技术规范
- 日照站改造工程既有投光灯塔拆除专项方案(修改版2)
- 上海海湾别墅市场分析
评论
0/150
提交评论