VC++简单科学计算器设计共16页.docx
- 文档编号:11876893
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:21
- 大小:34.72KB
VC++简单科学计算器设计共16页.docx
《VC++简单科学计算器设计共16页.docx》由会员分享,可在线阅读,更多相关《VC++简单科学计算器设计共16页.docx(21页珍藏版)》请在冰点文库上搜索。
VC++简单科学计算器设计共16页
VC++课程设计报告
一般说来,“教师”概念之形成经历了十分漫长的历史。
杨士勋(唐初学者,四门博士)《春秋谷梁传疏》曰:
“师者教人以不及,故谓师为师资也”。
这儿的“师资”,其实就是先秦而后历代对教师的别称之一。
《韩非子》也有云:
“今有不才之子……师长教之弗为变”其“师长”当然也指教师。
这儿的“师资”和“师长”可称为“教师”概念的雏形,但仍说不上是名副其实的“教师”,因为“教师”必须要有明确的传授知识的对象和本身明确的职责。
简单科学计算器设计
一、设计任务
1.我国古代的读书人,从上学之日起,就日诵不辍,一般在几年内就能识记几千个汉字,熟记几百篇文章,写出的诗文也是字斟句酌,琅琅上口,成为满腹经纶的文人。
为什么在现代化教学的今天,我们念了十几年书的高中毕业生甚至大学生,竟提起作文就头疼,写不出像样的文章呢?
吕叔湘先生早在1978年就尖锐地提出:
“中小学语文教学效果差,中学语文毕业生语文水平低,……十几年上课总时数是9160课时,语文是2749课时,恰好是30%,十年的时间,二千七百多课时,用来学本国语文,却是大多数不过关,岂非咄咄怪事!
”寻根究底,其主要原因就是腹中无物。
特别是写议论文,初中水平以上的学生都知道议论文的“三要素”是论点、论据、论证,也通晓议论文的基本结构:
提出问题――分析问题――解决问题,但真正动起笔来就犯难了。
知道“是这样”,就是讲不出“为什么”。
根本原因还是无“米”下“锅”。
于是便翻开作文集锦之类的书大段抄起来,抄人家的名言警句,抄人家的事例,不参考作文书就很难写出像样的文章。
所以,词汇贫乏、内容空洞、千篇一律便成了中学生作文的通病。
要解决这个问题,不能单在布局谋篇等写作技方面下功夫,必须认识到“死记硬背”的重要性,让学生积累足够的“米”。
选题意义
死记硬背是一种传统的教学方式,在我国有悠久的历史。
但随着素质教育的开展,死记硬背被作为一种僵化的、阻碍学生能力发展的教学方式,渐渐为人们所摒弃;而另一方面,老师们又为提高学生的语文素养煞费苦心。
其实,只要应用得当,“死记硬背”与提高学生素质并不矛盾。
相反,它恰是提高学生语文水平的重要前提和基础。
此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握VisualC++应用程序。
统计学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境VisualC++,并在此环境下设计并实现一个简单计算器系统。
该计算器应能实现如下功能:
1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方等简单计算2)、科学计算函数,包括正弦、余弦、正切、余切、开方、对数、指数等函数运算3)、具备历史计算的记忆功能。
2.设计目标
使计算器含有以下功能:
(1)、基本运算功能:
可以进行加、减、乘、除等基本运算。
(2)、数制转换功能:
可以一次完成二进制转十进制、十进制转二进制、八进制转二进制等运算。
(3)、三角函数运算功能:
可以一次完成三角函数之间的计算,求正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)等函数的值。
(4)、对数、指数运算功能:
可以一次求的对数函数(log、ln)、指数函数(exp)等函数的运算。
(5)、删除功能:
可以在输入错误时删除已输入的数值。
(6)、归零功能:
可以在计算完成后清空编辑框中的已有数值。
二、程序设计与实现
1.程序结构
本计算器首先是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算,计算器还能够进行平方运算,求平方根运算,乘方运算,三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)),对数函数(ln、log),指数函数(exp),幂函数(x~)和进制转换(包括二进制转十进制、十进制转二进制和八进制转二进制)等运算。
以下是本计算器的运算流程图:
2.设计步骤:
(1)创建一个基于对话框的应用程序。
(2)利用资源编辑器编辑对话框资源,及设计计算器界面并修改对话框各按钮的ID属性和Caption属性。
(3)利用ClassWizard为各按钮添加消息映射(代码在下面详细介绍)。
(4)设置对话框文本背景颜色。
(5)编辑图标。
3.详细介绍:
(2)主要代码:
voidCGyDlg:
:
On0()//输入相应的数据,这为输入数据0
{s2=s2+"0";
m_xs=m_xs+"0";
UpdateData(FALSE);
voidCGyDlg:
:
On1()//输入相应的数据,这为输入数据1
{s2=s2+"1";
m_xs=m_xs+"1";
UpdateData(FALSE);
voidCGyDlg:
:
On2()//输入相应的数据,这为输入数据2
{s2=s2+"2";
m_xs=m_xs+"2";
UpdateData(FALSE);
voidCGyDlg:
:
On3()//输入相应的数据,这为输入数据3
{s2=s2+"3";
m_xs=m_xs+"3";
UpdateData(FALSE);
voidCGyDlg:
:
On4()//输入相应的数据,这为输入数据4
{s2=s2+"4";
m_xs=m_xs+"4";
UpdateData(FALSE);
voidCGyDlg:
:
On5()//输入相应的数据,这为输入数据5
{s2=s2+"5";
m_xs=m_xs+"5";
UpdateData(FALSE);
voidCGyDlg:
:
On6()//输入相应的数据,这为输入数据6
{s2=s2+"6";
m_xs=m_xs+"6";
UpdateData(FALSE);
voidCGyDlg:
:
On7()//输入相应的数据,这为输入数据7
{s2=s2+"7";
m_xs=m_xs+"7";
UpdateData(FALSE);
voidCGyDlg:
:
On8()//输入相应的数据,这为输入数据8
{s2=s2+"8";
m_xs=m_xs+"8";
UpdateData(FALSE);
voidCGyDlg:
:
On9()//输入相应的数据,这为输入数据9
{s2=s2+"9";
m_xs=m_xs+"9";
UpdateData(FALSE);
voidCGyDlg:
:
Onadd()//加
{s2="";
s1=m_xs;
m_xs=m_xs+'+';
str='+';
UpdateData(false);
voidCGyDlg:
:
Onsub()//减
{s2="";
s1=m_xs;
m_xs=m_xs+'-';
str='-';
UpdateData(false);
voidCGyDlg:
:
Onxsd()//小数点
{s2=s2+".";
m_xs=m_xs+".";
UpdateData(false);
voidCGyDlg:
:
Oncheng()//乘
{s2="";
s1=m_xs;
m_xs=m_xs+'*';
str='*';
UpdateData(false);
voidCGyDlg:
:
Onchu()//除
{s2="";
s1=m_xs;
m_xs=m_xs+'/';
str='/';
UpdateData(false);
voidCGyDlg:
:
Ondel()//删除
m_xs.Delete(m_xs.GetLength()-1,1);
UpdateData(false);
voidCGyDlg:
:
Onpf()//平方
{s2="";
s1=m_xs;
m_xs=m_xs+"^2";
str='p';
UpdateData(false);
voidCGyDlg:
:
Onkf()//开2次方
{s2="";
s1=m_xs;
m_xs=m_xs+"^1/2";
str='k';
UpdateData(false);
voidCGyDlg:
:
Onsin()//sin函数
{s2="";
s1=m_xs;
m_xs="sin"+m_xs;
str='s';
UpdateData(false);
voidCGyDlg:
:
Oncos()//cos函数
{s2="";
s1=m_xs;
m_xs="cos"+m_xs;
str='c';
UpdateData(false);
voidCGyDlg:
:
Ontan()//tan函数
{s2="";
s1=m_xs;
m_xs="tan"+m_xs;
str='t';
UpdateData(false);
voidCGyDlg:
:
Onln()//ln函数
{s2="";
s1=m_xs;
m_xs="ln"+m_xs;
str='l';
UpdateData(false);
voidCGyDlg:
:
Onlog()//log函数
{s2="";
s1=m_xs;
m_xs="log"+m_xs;
str='g';
UpdateData(false);
voidCGyDlg:
:
Onex()//以e为底的指数
{s2="";
s1=m_xs;
m_xs="e^"+m_xs;
str='e';
UpdateData(false);
voidCGyDlg:
:
On3cfg()//开3次方
s2="";
s1=m_xs;
m_xs=m_xs+"^1/3";
str='f';
UpdateData(false);
voidCGyDlg:
:
Onxy()//x的y次方
{s2="";
s1=m_xs;
m_xs=m_xs+"^";
str='^';
UpdateData(false);
voidCGyDlg:
:
Onqk()//归零按钮
{m_xs="";
UpdateData(FALSE);
voidCGyDlg:
:
Onsze()//十进制转二进制
{s2="";
intn,i,t;
doubleY,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);
UpdateData(false);
voidCGyDlg:
:
Onezs()//二进制转十进制
{s2="";
intlen;
doublesum=0.0,num;
len=strlen(m_xs);
for(inti=0;i {num=(m_xs[i]-48); num=num*pow(2,len-i-1); sum+=num; m_xs.Format("%f",sum); UpdateData(false); voidCGyDlg: : Onbze()//八进制转二进制 {s2=""; inti,len; chars; len=strlen(m_xs); CStringm_xs1; for(i=0;i {s=m_xs[i]; 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_xs1=m_xs1+"101"; break; case'6': m_xs1=m_xs1+"110"; break; case'7': m_xs1=m_xs1+"111"; break; m_xs=m_xs1; UpdateData(false); doubleadd(doubleX,doubleY){returnX+Y;}//加函数 doublesubtract(doubleX,doubleY){returnX-Y;}//减函数 doublechu(doubleX,doubleY){returnX/Y;}//除函数 doublecheng(doubleX,doubleY){returnX*Y;}//乘函数 doublejzf(doublefu){returnfu/180.0*3.14159265;}//角度转弧度 doublechengfang(doubleX,intY)//乘方 {doublem=1.0; if(Y==1) returnX; else for(inti=1;i<=Y;i++) m=m*X; returnm; voidCGyDlg: : Ondy()//等于号的功能函数 {intlen,i,j=0; doubleX,Y; X=strtod(s1,NULL);//把字符串转化成浮点型 Y=strtod(s2,NULL);//把字符串转化成浮点型 switch(str) case'+': m_xs.Format("%f",add(X,Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'-': m_xs.Format("%f",subtract(X,Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'*': m_xs.Format("%f",cheng(X,Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'/': m_xs.Format("%f",chu(X,Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'p': m_xs.Format("%f",cheng(Y,Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'k': m_xs.Format("%f",sqrt(Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case's': m_xs.Format("%f",sin(jzf(Y))); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'c': m_xs.Format("%f",cos(jzf(Y))); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case't': m_xs.Format("%f",tan(jzf(Y))); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'l': m_xs.Format("%f",log(Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j); UpdateData(false); break; case'g': m_xs.Format("%f",log10(Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'e': m_xs.Format("%f",exp(Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'^': m_xs.Format("%f",chengfang(X,(int)Y)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; case'f': m_xs.Format("%f",pow(Y,M3)); len=strlen(m_xs); if(m_xs[len-1]=='0') {i=len-1; while(m_xs[i]=='0') {j++; i--; m_xs.Delete(len-j,j);//删除小数点后无用的零 UpdateData(false); break; default: UpdateData(false); m_xs=""; s2=""; HBRUSHCGyDlg: : OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor) //设置编辑框背景颜色 HBRUSHhbr=CDialog: : OnCtlColor(pDC,pWnd,nCtlColor); pDC->SetBkColor(RGB(190,255,0)); returnhbr; (3)函数功能说明 整个计算器除了基本的加、减、乘、除运算外,另外还有8个功能,实现八大运算: 三角函数运算功能、对数函数运算功能、指数函数运算功能、乘方运算功能、平方运算功能、根式运算功能、进制转换功能、归零功能。 各个运算功能的详细设计说明分别如下: a、基本运算功能 主要实现数据的加、减、乘、除运算,提供简单的科学计算! b、三角函数运算功能 用来执行三角函数的运算,包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)和余切函数(cot)。 c、对数函数运算功能 用来执行对数函数的运算,包括以e为底ln函数和以10为底的lg函数。 d、指数函数运算功能 用来执行指数函数的运算。 e、乘方运算功能 用来执行乘方的运算,进行数值的成倍计算。 f、平方运算功能 用来执行平方运算,说到底它也属于乘方运算的范畴。 g、根式运算功能 用来执行根式的运算。 h、进制转换运算功能 主要实现数值间的转换,包括二进制转十进制、十进制转二进制和八进制转二进制的运算。 二进制转十进制N-S流程图: len=strlen(m_xs); inti=0;i num=(m_xs[i]-48); num=num*pow(2,len-i-1); sum+=num; i++; 十进制转二进制N-S流程图: intn,i,t; doubleY,p=0.0; Y=strtod(m_xs,NULL); t=(int)(Y); 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_x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 简单 科学 计算器 设计 16