版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VC+课程设计报告简单科学计算器设计姓 名 : 学 号 : 学 院 : 计算机学院 班 级 : 日 期 : 2021-03-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、ln
3、、指数函数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、quot;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+".&qu
10、ot; 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、quot; 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(f
13、alse);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="e
14、"+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_x
15、s="" 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);void
16、 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=s
17、trlen(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_xs
18、1=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(&qu
21、ot;%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(fal
23、se); 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); m
25、_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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学五年级数学下册《数字与信息:编码的奥秘》教学设计
- 初中九年级英语仁爱版Unit 2 Topic 3复习课教学设计
- 初中八年级物理《光的折射》创新教学设计(沪科版·安徽适用)
- 2026经济公考面试题及答案解析
- 2026溺水处理面试题及答案
- 2026人民服务面试题库及答案
- 学校招生报名录取流程
- 行政事业单位内控基本制度
- 孕妇吸氧注意事项
- 谋定天下:孙子兵法的现代商业战略智慧
- 2025年无锡二院护理笔试题目及答案
- 配电网单相接地故障场景分析及实测波形研究
- ISO9001-2026质量管理体系中英文版标准条款全文
- 小学实验室安全知识培训课件
- 山西建设工程施工合同(标准版)
- 2025年招标采购从业人员专业能力评价考试(招标采购专业理论与法律基础初、中级)综合试题及答案一
- 抖音本地推介绍
- DB13∕T 5984-2024 河湖生态清淤工程勘察测量技术规程
- 高校设计教学课件
- 2025年古典音乐理论考试试卷及答案
- 船舶制造施工进度计划和确保工期的工艺控制措施
评论
0/150
提交评论