版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 课程名称_可视化编程环境 题目名称_ _简单计算器_学生学院_ 计算机学院_专业班级_计算机科学与技术4班_学 号 3107006480 学生姓名_ 黄旭洲_指导教师_ 谭台哲_2009 年 12 月 25 日 计算机 学院 计算机科学与技术 专业 4 班 组、学号3107006480姓名 黄旭洲 协作者_ 教师评定_实验题目 一个简单计算器的设计 一.实验目的与要求目的: 目标是使学生了解可视化程序设计语言的基础知识,掌握面向对象编程的分析设计方法,以及与面向对象技术相关的一些软件开发技术,掌握在 VisualC+6环境下进行可视化程序设计技术。通过实践具体的项目,为他们进一
2、步开展相关领域的学习和科研打下良好的基础。要求: 设计一个简单的计算器1、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行3、以角度、弧度两种方式实现上述部分函数4、具备历史计算的记忆功能5、对不正确的表达式能指出其错误原因6、整理上机步骤、完成实验报告、提交可运行的程序,给出实验数据和实验结果。二.设计方案本实验用了Visual C+6.0软件开发工具,设计了一个简单的计算器,设置了数字、加减乘除、开方、任意实数的任意次方、求模、正弦、余弦、反正弦、反余弦、正切、余切、反正切、反
3、余切、自然对数ln、常用对数lg、记忆功能上下查询键、二进制、八进制、十进制、十六进制,弧度、角度之间的转换以及各个进制各自的加减乘除等功能按钮。功能按钮是利用MFC在一个基本对话框里面添加控件,如按钮,单选按钮,编辑框实现计算器的界面.对每个按钮的操作进行消息响应,并编写代码实现功能,增加一个与编辑框相关联的变量m_edit来接受并进行操作,用于在编辑框上显示输入的数据。同时有另一个m_edit1的变量来实现对记录下来的表达式及其计算结果进行显示,可以通过2个查询按键来进行向前和向后的查询。详细设计:1.利用一个CString变量m_edit与编辑框相关联,当按下数字按钮,加,减,乘,除,求
4、模, 任意实数的任意次方,把它们放在m_edit中在编辑框中显示出来.2.在按下每个按键时,会对应记录到定义的history 中,在数据和表达式输入显示的过程,同时进行表达式的记录。3.对于单目运算符,如三角函数,开方,对数等,当你输入一个表达式后,再按下这些按键,程序会首先将表达式的值求出来,再利用值进行这些运算符的运算.4.当按下“=”按键时,会根据算法计算出输入的表达式的结果,并输出到编辑框中,同时把结果添加到history 当中,且跳转到下一记录的开始处,继续记录新的表达式。5.对于角度与弧度的转换则是通过一个选择项来判断,如果选择的是角度则通过“temp*=PI/180;”该语句及#
5、define PI 3.141592进行相应的转换,从而计算出对应的弧度,得到实现三角函数的计算功能的数据。6.对于一些运算符的范围限制,程序中也进行了判别,如除数不能为0,对数的真数不能为非正数,tan的角度不能为90度等等,反正弦和反余弦的输入数据范围不能小于-1或大于1,出错时候会弹出一个对话框进行警告,并将编辑框清零.7.可以通过、按键对已经输入的正确表达式及其结果进行查询,若输入记录为空,会提示"No record"。8.通过选择不同的进制,会自动对计算结果进行转换,该功能通过将输入的数据统一转换为十进制,计算出正确结果之后,在根据已经选择的进制,把结果转换为对应
6、的进制输出到编辑框中。科学计算器基本的计算功能不同进制的转换角度、弧度转换科学计算功能(如三角函数,反三角函数,平方,开方等)历史记忆功能数值的进制转换输入数值根据选择决定进制转换数值为默认的十进制将计算结果转换为已经选择的进制输出期待的进制的结果基本的运算或科学运算运算过程的流程图:输入数值是否为十进制数如果不是十进制数,先转换为对应的十进制数根据不同的算符进行相对应的计算是否采用十进制如果选择的不是十进制,则将结果转换为要求的进制格式显示结果记录输入的数字记录选择的算符和计算结果调转到下一记录的初始点并准备记录通过、按键对已经输入的正确表达式及其结果进行查询能对输入的不同算符进行判断并计算
7、出结果的函数:int CMyDlg:OperateAction(double temp)switch(operateSign)case '+':operate+=temp;break;case '-':operate-=temp;break;case '*':operate=operate*temp;break;case '/':if (temp=0)MessageBox("除数不能为0!");m_edit="0"operate=atof(LPCTSTR)m_edit);operateSig
8、n='0'flag=1;return 0;operate=operate/temp;break;case 'm':operate=(int)operate%(int)temp;break;case 'n':operate=pow(operate,temp);break;case 'o':if(temp<0)MessageBox("开方数不能为负数!");m_edit="0"operate=atof(LPCTSTR)m_edit);operateSign='0'flag=
9、1;return 0;operate=sqrt(temp);break;case '2':operate=pow(temp,2);break;case 's':if (GetCheckedRadioButton(IDC_ANGLE,IDC_RADIAN)=IDC_ANGLE)temp*=PI/180;operate=sin(temp);break;case 'c':if (GetCheckedRadioButton(IDC_ANGLE,IDC_RADIAN)=IDC_ANGLE)temp*=PI/180;operate=cos(temp);bre
10、ak;case 't':if (GetCheckedRadioButton(IDC_ANGLE,IDC_RADIAN)=IDC_ANGLE)if(fmodf(float)temp,180)=90)MessageBox("该角度的正切值无效!");m_edit="0"operate=atof(LPCTSTR)m_edit);operateSign='0'flag=1;return 0;elsetemp*=PI/180;operate=tan(temp);break;case 'g':if (GetChecke
11、dRadioButton(IDC_ANGLE,IDC_RADIAN)=IDC_ANGLE)if(fmodf(float)temp,180)=90)MessageBox("该角度的正切值无效!");m_edit="0"operate=atof(LPCTSTR)m_edit);operateSign='0'flag=1;return 0;elsetemp*=PI/180;operate=1/tan(temp);break;case 'i':operate=asin(temp);if (GetCheckedRadioButton
12、(IDC_ANGLE,IDC_RADIAN)=IDC_ANGLE)operate=operate*180/PI;break;case 'a':operate=acos(temp);if (GetCheckedRadioButton(IDC_ANGLE,IDC_RADIAN)=IDC_ANGLE)operate=operate*180/PI;break;case 'r':operate=atan(temp);if (GetCheckedRadioButton(IDC_ANGLE,IDC_RADIAN)=IDC_ANGLE)operate=operate*180/P
13、I;break;case 'q':operate=PI/2-atan(temp);if (GetCheckedRadioButton(IDC_ANGLE,IDC_RADIAN)=IDC_ANGLE)operate=operate*180/PI;break;return 1;转换函数:CString CMyDlg: toCString(double x)/将结果转化为字符串输出char cRet50,temp150; int str; memset(cRet,0,50); memset(temp1,0,50); sprintf(cRet,"%f",x); st
14、r = strlen(cRet); str=str-1; while(str>0)if(cRetstr='0'&&cRetstr!='.')str-;elsebreak; for(int i=0;i<=str;i+)temp1i=cReti; return temp1; /进制转换CString CMyDlg: toten(int x,CString str)CString temp1,tt;double ll=0;int i,j;int len=str.Find('.');if(len=-1)len=str.GetL
15、ength();tt=str.GetAt(0);switch(x)case 16: for(i=0,j=len-1;i<len;i+,j-) if(stri<='9') && (stri>='0') ll+=(stri-'0')*pow(16,j);else if(stri<='F') && (stri>='A') ll+=(stri-'A'+10)*pow(16,j);else if(stri<='f') &
16、;& (stri>='a') ll+=(stri-'a'+10)*pow(16,j); if(len<str.GetLength()for(i=str.Find('.')+1,j=-1;i<str.GetLength();i+,j-)if(stri<='9')&&(stri>='0')ll+=(stri-'0')*pow(16,j);elseif(stri<='F')&&(stri>='A
17、9;)ll+=(stri-'A'+10)*pow(16,j);elseif(stri<='f')&&(stri>='a')ll+=(stri-'a'+10)*pow(16,j); break;case 8:for(i=0,j=len-1;i<len;i+,j-) if(stri<='7') && (stri>='0') ll+=(stri-'0')*pow(8,j); if(len<str.GetLength() f
18、or(i=str.Find('.')+1,j=-1;i<str.GetLength();i+,j-)if(stri<='7') && (stri>='0') ll+=(stri-'0')*pow(8,j); break;case 2: for(i=0,j=len-1;i<len;i+,j-)if(stri<='1') && (stri>='0') ll+=(stri-'0')*pow(2,j);if(len<s
19、tr.GetLength() for(i=str.Find('.')+1,j=-1;i<str.GetLength();i+,j-)if(stri<='1') && (stri>='0') ll+=(stri-'0')*pow(2,j);break; if(x=10)temp1=str;elsetemp1=toCString(ll); if(tt="-"&&x!=10)temp1=tt+temp1;return temp1;CString CMyDlg:itoa
20、(int y)CString rrst=""switch (y)case 10:rrst+='A' break;case 11:rrst+='B' break;case 12:rrst+='C' break;case 13:rrst+='D' break;case 14:rrst+='E' break;case 15:rrst+='F' break;default:rrst+=toCString(y).GetAt(0);break;return rrst;CString CMyD
21、lg: tento(CString str)/10进制转化为其它进制 int i,j; int xx,yy,zz;double zzy;CString temp1,tt=""CString rrst="",rst="",rst1="",rst2="0."int len=str.Find('.');if(len=-1)len=str.GetLength(); for(i=0;i<len;i+)if(str.GetAt(i)='-')continue;elser
22、st+=str.GetAt(i);if(len<str.GetLength() for(i=str.Find('.')+1;i<str.GetLength();i+) rst2+=str.GetAt(i);xx=atoi(rst);/整数部分zzy=atof(rst2); doyy=(int)(xx%jinzhi);rrst+=itoa(yy);xx=(int)(xx/jinzhi);while(xx!=0); j=0; if(zzy!=0)dozz=(int)zzy*jinzhi;rst1+=itoa(zz);zzy=zzy*jinzhi-zz;j+;while(
23、zzy!=0&&j<=8);for(i=rrst.GetLength()-1;i>=0;i-)temp1+=rrst.GetAt(i);temp1=temp1+'.'temp1=temp1+rst1;if(jinzhi=10)return str;else if(str.GetAt(0)='-')temp1="-"+temp1;return temp1; 三.实验结果和数据处理点击运行计算器之后出现界面:具体操作:1、二进制、八进制、十进制、十六进制数之间的相互转换和加、减、乘、除、取模、乘方等基本计算,例如:9/
24、3+7=10.000000先在十进制下输入表达式按下等号,此时屏幕会计算得到10.000000,再按下二数制单选按钮再按“=”,别得到1010, 按下八数制单选按钮,得到12, 按下十六数制单选按钮,别得到A2. 二进制、八进制、十六进制数加、减、乘、除、取模、乘方等基本计算二进制10101+1110=100011八进制 100011+10=100021;十进制 48/0,此时会弹出一个对话框,除数不能为0! 55/3=18.333333十六进制数 1A+23=3D3. 科学计算函数角度制 sin40=0.642788 弧度制 arcsin0.7=44.42700492=81.0000005.
25、历史记录:输入数据的过程会记录符号,记录到history 中, 可以通过、按键对已经输入的正确表达式及其结果进行查询,若输入记录为空,会提示"No record"。四.结论与体会通过本次实验,让我逐渐的了解了VC+的强大功能。这次实验我懂得了如何去使用VC+这个新的软件,学会了VC+的基本功能,初步了解了MFC,了解了什么是面向对象编程。通过一步一步学习来完成这个课程设计,虽然我用了比较多的时间来做完这个课程设计,但是我觉得自己的水平得到了提高,能力得到了锻炼,而且也对VC6.0这个开发工具有了更进一步的了解和掌握。基本上掌握了MFC的一些控件功能和操作以及开发。对MFC的
26、常用库函数有了深刻的理解。同时掌握了VC6.0的消息映像与dos环境下的不同之处。要编写一个完整的程序,得经历算法设计、代码编写、程序调试、出错处理、程序完善好几个阶段。编程的过程也是不断出现错误和不断改正的过程,然而在做这个课程设计的过程中我也遇到了很多的问题。例如消息映像的增加与否,如何对消息映像函数进行编程等。编程前的设计要做好,这样编程时才会顺畅,可以事半功倍。在学习的过程中,要不断地和同学交流,吸收别人好地编程方法和好的思想。这也是自己进步的好方法。在这次课程设计中学习到了不少的实际上机操作技巧,积累了不少的程序开发的经验。但由于自己对Visual C+还不是特别熟悉,Visual
27、C+的类库又特别的庞大,成员方法相当多,要熟练运用的话,还需要很长的学习时间。查错时不要只是自己一个人查,可以请其他没涉及编程的人帮忙,这样可以发现很多你编程时存在的BUG。 虽然设计的功能还不很完善,但是最重要的是我从中得到了锻炼,加强了我独立思考的能力,善于从实践中掌握知识,运用知识。通过本次实验,让我逐渐的了解了VC+的强大功能。这次实验我懂得了如何去使用VC+这个新的软件,学会了VC+的基本功能,初步了解了MFC,了解了什么是面向对象编程。五.问题与讨论1. 怎样利用VC+集成开发环境进行C+程序的书写?答:VC+集成环境是一个多功能的开发环境,不但可以用它来进行运用程序有编写,而且还
28、可以用它来编写单文档形式的C+源程序。只要新建的时候选择文件类型C+ Source File就可以了。2. C+程序对C程序进行了哪些扩充与修改?答:C+用标准的输入输出的头文件iostream.h替代了C中的stido.h,用cin、count和操作运算符>>、<<等实现并扩展了C语言的scanf和printf函数功能。C+还增加了以下标准关键字:Asm 、bool、catch、class、delete、 frient 、inline、mutable、namespace、New、operator、private、protected、public 、this、templ
29、ate、throw、try、Virtual、usingC+的类型还可以死是布尔型的,即值为TURE或FALSE C+中没有字符串变量类型,字符串是由字符类型的数组或者是指针来定义的。C+变量的定义比较自由,其变量的初始化还有另外一种形式。例如:Int nx(1), ny(3);表示nx和ny是整型变量,它们的初值分别是1和3。在C中初始化数组的值也不能通过跳过逗号的方式来省略。3. 如何根据软件开发需要创建类?这些类的层次具有什么关系?答:在Visual C+中,用户可以得用微软提供的MFC类库进行软件开发,在MFC中封装了大量的类库供用户使用,从而使代码重用,缩短了软件的开发时间和开发周期。这些类中出现了大量的派生关系和继承关系,类与类之间的相互调用,互相帮助关系。4. 如何建立类的属性成员、方法成员?如何确定成员的私有、公有或继续关系?答:类的属性成员、方法成员有public、private、protected等类型。public(公有):基类的公有成员和保护成员作为派生类的公有成员和保护成员,基类的私有成员仍然是基类所私有的,不能被派生类访问。private(私有):基类的公有成员和保护成员都作为派生类的私有成员,不能被该派生类的子类所访问。protected(保护):基类的公有成员和保护成员都成为派生类的保护成员,只能被它的派生类成员函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店客房用品采购与供应制度
- 酒店员工招聘与培训一体化制度
- 2025年云南省农业科学院第二批公开招聘博士备考题库(4人)及答案详解(考点梳理)
- 2025南昌航空大学科技学院招聘4人备考题库及答案详解一套
- 2025湖南衡阳市衡阳县湘南船山高级技工学校招聘专业技术人员6人备考题库及完整答案详解一套
- 2025湖北武汉21世纪经济报道招聘实习记者2人备考题库及完整答案详解
- 糖尿病患者的饮食健康促进方案-1
- 糖尿病患者的社区低血糖预防体系
- 糖尿病多学科管理中的睡眠障碍干预策略
- 2026广东广州花都区第一中学校医招聘1人备考题库有答案详解
- 民用建筑热工设计规范
- 学堂在线 雨课堂 学堂云 唐宋词鉴赏 期末考试答案
- 2025至2030中国辐射监测仪表市场投资效益与企业经营发展分析报告
- 工程力学(本)2024国开机考答案
- 产品认证标志管理制度
- 广州西关大屋介绍
- 基于机器视觉的SLM金属3D打印设备视觉标定技术研究
- CJ/T 192-2017内衬不锈钢复合钢管
- GB/T 31907-2025服装测量方法
- 消毒供应中心清洗流程
- 买卖合同争议仲裁应诉答辩书范本
评论
0/150
提交评论