VC简单科学计算器设计
一个简单的计算器VC课程设计
《可视化程序设计》课程设计报告模拟计算器姓名:班级:学号:指导教师:成绩:完成时间:2009年12月30日完成地点:软件实验室(9)一、设计题目(问题)描述和要求题目:模仿windows计算器描述:使用Microsoft Visual Studio .NET 2005完成一个功能与windows 自带的计算器功能相似的小程序。
要求完成以下功能:①能够完成加、减、乘、除、开平方、取倒数、百分数运算;②能够使用“BackSpace”、“C”、“.”、“+/-”、“CE”的功能。
二、系统分析与概要设计根据题目描述和要求,系统要求能够制作出来一个与Windows自带计算器功能相似的小软件。
我们需要使用基于对话框的MFC应用程序来完成此任务,所建项目名为:计算器。
本项目中不需要添加心得类,只需要使用系统自动生成的CAboutDlg,C计算器App,C计算器Dlg三个类即可。
其中主要实现该项目功能的类为:C计算器Dlg类。
概要设计:(1)我们先要对对话框的可视部分进行编辑,向上面添加一个“EditControl”控件和23个“Button”控件。
其中“EditControl”控件用来显示数据及运算结果,“Button”控件用来实现各种操作功能。
(2)我们需要为“EditControl”控件添加一个变量“n”,用来接收及显示数据;为23个“Button”控件分别添加“事件处理程序”,来实现具体功能。
(3)在声明模块(计算器Dlg.h) 中我们需要声明七个变量:n,n_2,setxiaoshu,xiaoshui,setnew,operate,innum。
26个成员函数:1-23是控件功能函数“afx_msg voidOnBnClickedButton1()”…,其余三个函数是另行添加的功能函数:void setempty(void)(置空中间变量),void inum(int i)(处理字符输入),void operation(char ope)(执行选定运算)。
VC编程-计算器
实验报告项目名称科学计算器的设计与实现学院计算机学院专业班级计算机科学与技术0602 学号 3106006475 姓名杨振风指导教师黄益民2008年12 月30 日一、设计任务与要求;1、能独立搭建可视化程序编程环境,掌握Visual C++6的安装、运行和使用。
2、总体要求:用面向对象编程的思想与方法,实现一个简单计算器的分析与设计阶段的开发工作,开发工具使用Visual C++6。
3、具体要求:本系统为简单计算器程序开发,实现基本的算术运算以及科学计算,具备计算历史的查询功能,并能检查算术表达式中的错误,分别以二进制、十进制等数制的计算。
4、编写设计方案,设计过程,源程序文件结构,分析实验方案,并对实验做出总结。
二、需求分析1.功能需求(功能划分、功能描述)系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++,并在此环境下设计并实现一个简单计算器系统,该计算器应能实现如下功能:(1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算(2)、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算(3)、以角度、弧度两种方式实现上述部分函数(4)、具备历史计算的记忆功能(5)、对不正确的表达式能指出其错误原因2. 运行需求(用户界面、人机接口、故障处理)总体的界面要求类似于Windows xp的要求能够任意切换各种进制,以及弧度和角度。
人性化的显示所输入的表达式,方便用户能够校验输入的数据是否有误,并且能够给出出错处理,如除数不能为0,0次幂的底数不能为0等等!同时能把之前产生的值能够记录下来,便于下次需要时调用。
三、系统设计1.总体方案设计首先我想描述我做的计算器的主要功能的实现。
由于这次课程设计要求加入三角运算以及倒数,平方,三次幂,log, ln, 开根运算。
再加上基本运算符加减乘除。
如果把这些运算符都加在一个表达式里面,这样处理表达式编程一场复杂。
程序设计综合实践课C简单计算器
1、项目概述
该项目目标是设计开发一个支持连 续计算的四则运算计算器 myCalculator,通过单击按钮,输 入并完成如4+5+6或5*8+16类似的 连续计算,并将运算结果显示在输 出文本框中,同时也具备清空、后 退等功能。
2、设计步骤
项目分析与算法流程设计。
计算器myCalculator的主要功能是完 成加、减、乘、除四则运算,而且支 持连续计算,如4+5+7-8或4*5-6等运 算。连续计算的实现借助于开发工具 中 预 定 义 的 数 据 结 构 Stack ( 栈 ) 实 现,如流程图所示
4、项目扩展2
扩展计算器的使用领域,开发贷 款计算器(或其他,如利息计算 器等)
5、成绩评定说明
ቤተ መጻሕፍቲ ባይዱ程序设计开发语言不限。 成绩评定(要求提交设计报告和程序): ✓其中设计报告占40%(格式可参照本ppt的前四部分) ✓程序(源代码)占60%(程序能够正常运行) 完成项目扩展的酌情加分
2、设计步骤
界面设计。
2、设计步骤
代码编写(略)
2、设计步骤
运行调试
计算“5*9+5+50”,依次单击按 钮“5”、“*”、“9”、“+”、 “5”、“+”、“50”,然后单 击按钮“=”,显示框的数值为 100
3、项目扩展1
增加计算器的功能,添加求平方 根、求余、倒数的功能(读者也 可自行扩展。
c简易计算器课程设计
c 简易计算器课程设计一、课程目标知识目标:1. 学生能理解简易计算器的基本原理,掌握加、减、乘、除四则运算的操作方法。
2. 学生能够运用所学知识,解决生活中简单的数学问题。
3. 学生了解计算器的发展历程,认识到科技对生活的影响。
技能目标:1. 学生能够熟练操作简易计算器,进行基本的四则运算。
2. 学生通过实际操作,培养动手能力和问题解决能力。
3. 学生能够运用计算器辅助学习,提高数学学习效率。
情感态度价值观目标:1. 学生培养对数学学习的兴趣,树立正确的数学观念。
2. 学生在合作交流中,培养团队意识和沟通能力。
3. 学生通过计算器的使用,认识到科技发展的成果,增强民族自豪感。
课程性质:本课程为信息技术与数学学科的整合课程,旨在通过简易计算器的学习,提高学生的数学素养和信息技术能力。
学生特点:四年级学生具备一定的数学基础和信息技术能力,好奇心强,善于合作交流。
教学要求:教师需结合学生的特点,采用启发式教学,引导学生主动探究,注重培养学生的动手能力和问题解决能力。
在教学过程中,关注学生的情感态度,激发学生的学习兴趣,使学生在轻松愉快的氛围中学习。
通过本课程的学习,使学生达到预期的学习成果。
二、教学内容1. 计算器的历史与原理:介绍计算器的发展简史,探讨计算器的工作原理,让学生了解计算器的演变过程,认识到科技对生活的改变。
2. 简易计算器操作方法:详细讲解加、减、乘、除四则运算的操作步骤,让学生熟练掌握计算器的使用方法。
3. 实践应用:结合数学课本中的实际例题,指导学生运用计算器进行计算,解决实际问题,提高计算速度和准确性。
4. 计算器在数学学习中的应用:探讨计算器在辅助数学学习中的作用,如:简化计算过程、提高解题效率等。
教学内容安排和进度:第一课时:计算器的历史与原理,计算器的简单操作。
第二课时:四则运算的操作方法,实践练习。
第三课时:计算器在数学学习中的应用,解决实际问题。
教材章节:《信息技术》第四章:计算器与计算机。
VC++科学计算器实验报告 2
西安科技大学计算机学院VC++程序设计实验报告题目科学计算器学号专业及班级计科0804姓名日期 2010-11-03一、实验内容1.实验目的:(1)通过对科学计算器的实现掌握MFC的CDialog类和其他运行机制,掌握各种控件的使用。
(2)学习使用对话框实现人机交互功能。
2.实验步骤:(1)打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名ex5及其所在位置,点击确定,如图1-1所示。
图1-1 新建MFC AppWizard[exe]工程(2)将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图1-2所示。
图1-2基本对话框(3)这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图1-3所示。
图1-3新建的对话框(4)界面设计界面设计主要是创建控件,在图1-3所示的Resoure View选项卡中打开Dialog资源组,双击IDD_ex5_DIALOG,在右边的窗口中显示出待编辑的对话框。
开始摆放控件,包括编辑框和按钮的创建。
按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。
1)在图1-4中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。
在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图4-4所示,在该对话框中输入ID属性。
图1-4 Edit属性对话框2)在图1-4中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图1-5所示,在该对话框中输入控件的ID值和标题属性。
VC++计算器设计与实现文档
VC++环境下计算器程序设计与实现设计目标:在VC++环境下可视化编程实现简单计算器的实现。
目标是有数字按钮,加减乘除符号按钮,清除按钮,两个输入框用来输入用算数字,一个输出框用来显示输出结果。
设计过程:第一步页面设计部分与控件添加部分首先打开VC,选择MFC AppWizard[exe],设定好路径和工程名(这里我设置工程名为为“计算器”)。
在创建向导步骤1的时候,选择“基本对话框”。
创建完成后,把当前页面上原配的控件按Delete全部清除,接着按照MFC自带的控件选项进行本次计算器的控件添加,在原先清空的界面中依次用控件工具框中的相应工具,画出基本的计算器界面(如下图)。
每个控件“属性”都有属于它自己的ID,默认的按钮按键为IDC_BUTTON0,对控件数字按钮和符号按钮的ID不进行修改,把按钮的标题改成相应的数字和运算符号。
编辑框的ID选择默认ID不做修改,完成修改后,就需给控件添加消息响应了,基本操作可以是直接双击控件,便会有向导提示。
MFC默认下了的响应信息都为On_开头,这个步骤一般不对成员函数名称做任何修改,直接点击OK即可。
之后就会跳转到具体的代码实现过程,这里我们依次给每一个控件添加消息响应函数:void CMyDlg::OnButton1(){// TODO: Add your control notification handler code here}void CMyDlg::OnButton3(){// TODO: Add your control notification handler code here}其他的控件和上面的类似。
到此为止,基本上完成了计算器页面的前半部分预备工作,下来是对控件具体实现代码的添加。
在开始第二步之前有一项工作时必须要做的,那便是添加3个成员变量和一个CEdit类的变量。
具体添加方法,就是右键主对话框CMyDlg,选择Add Member Variable。
vc计算器课程设计
描写童年趣事作文600字高二描写童年趣事作文600字高二6篇童年是七色的,是热忱的、可爱的、好玩的,布满笑声的。
共享一下你的童年趣事吧。
下面是我为大家收集的描写童年趣事作文600字高二例文,期望你宠爱。
描写童年趣事作文600字高二(篇1)一进教室,映入眼帘的就是讲台上的那几个易拉罐和几根“专业”的钓鱼竿。
我一下子就呆住了,心里不禁猜想起老师葫芦里卖的是什么药?“莫非是去钓鱼,不对,要易拉罐干什么?莫非里面装的是鱼食?不对,不对”“下面我们来玩一个叫‘钓旱鱼’的玩耍吧!”老师的一句话打断了我的猜想,也点破了我的困惑。
首先,江老师将我们分成四个大组,每个大组有六名“钓鱼者”。
老师为了让我们生疏玩耍规章,便让我们先进行练习。
在练习的过程中,我渐渐把握了要领,能在十五秒之内钓起一条“旱鱼”了。
在为自己的成绩窃喜时,我才发觉真是“人外有人,天外有天”啊!———有些同学格外娴熟,不出十秒就能钓起一条“旱鱼”,这使我不由得站在一旁观看起其他人的动作。
不一会儿,练习结束,老师让各组前来抽签。
令我欣喜的是:我们组竟幸运的抽到了第5号,这样我们就有机会进行训练了。
这时,老师让每组选出2名队员来参赛。
然而,在参赛问题上,大家竟不约而同的推选了我和刘宇欣,这是我颇感意外的。
竞赛最终开头了。
首先上场的是闵耀东和王涵,他们或许是由于第一个上场产生了恐惊心理,或许是由于不太娴熟,所以显得有些力不从心,连续2次都使“鱼儿”顺当脱钩,最终才钓起了2次。
我和队友们马上对他们报以了“鼓舞”的掌声。
最精彩的也是最使人感到意外的,是第四个上场的李亦桐和方菁如一组。
她们一开头上场的表现是顺风顺水,一连钓起了2个,但到中间的时候,不知是谁顺手将竿一抖,两根鱼竿就像热恋情人一般纠缠在一起了,害得同学们费了九牛二虎之力才将难分难舍的它们分开。
“哈!哈!哈!”的笑声始终萦绕在我的耳畔,它不仅使我的童年丰富多彩,更使它意义非凡。
描写童年趣事作文600字高二(篇2)每个人的童年生活都是丰富多彩的,布满了无穷的乐趣。
VC程序设计说明书---计算器
目录目录 (I)摘要 (II)1 设计目的 (1)2 设计要求 (2)3 设计内容 (3)3.1 系统分析 (3)3.2项目创建 (3)3.3界面设计 (5)3.4 代码实现 (7)3.5 方案分析总结 (16)总结与致谢 (19)参考文献 (20)附件 (21)摘要GPA英语全称是grade point average,意思就是平均分。
GPA的精确度往往达到小数点后1到2位,如:3.0,3.45。
GPA的标准计算方法是将大学成绩的加权平均数乘以4,再除以100,得出平均分。
美国的GPA满分是4分,即A=4,B=3,C=2, D=1。
一般来讲,百分制中的90分以上可视为4分,80分以上为3分,70分以上为2分,60分以上为1分,五分制中的5分为4分,4分为3分,3分为2分,2分为1分。
这次课程设计完成了一个简单的GPA计算器。
本次设计系统具有良好的界面,必要的交互信息和较好的健壮性,使我们能快捷简单地进行操作,即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
关键词:GPA;VC++6.0;MFC;控件;1 设计目的《VC程序设计++》是一门实践性、应用性很强的科目。
实践教学环节是必不可少的一个重要环节。
VC程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握VC程序设计的基本技能和面向对象的概念和方法;了解菜单、视图/文档、数据库等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
计算器VC源代码
{ //在编辑框中显示数据
m_display.Format(_T("%f"),lVal);
int i=m_display.GetLength();
while(m_display.GetAt(i-1)=='0') //格式化输出,将输出结果后的零截去
/
……
……
……
Button
IDC_BUTTON_CLEAR
C
Button
IDC_BUTTON9
9
Button
IDC_BUTTON_SQRT
sqrt
Button
IDC_BUTTON_POINT
.
Button
IDC_BUTTON_RECI
1/x
Button
IDC_BUTTON_SIGN
+/-
Button
3.CString m_operator;//存储运算符
4.double m_coff;//存储小数点的系数权值
5.CString m_display;//编辑框IDC_DISPLAY的关联变量,显示计算结果
5、在对话框类的构造函数中,初始化成员变量
CMyCalculatorDlg::CMyCalculatorDlg(CWnd* pParent /*=NULL*/): Dialog(CMyCalculatorDlg::IDD, pParent)
{……
m_display = _T("0.0");
m_first = 0.0;
m_second= 0.0;
m_operator=_T("+");
c课程设计简易计算器
c 课程设计简易计算器一、课程目标知识目标:1. 让学生掌握简易计算器的基本功能与操作,包括加、减、乘、除等四则运算。
2. 使学生理解计算器的工作原理,了解显示屏、键盘等组成部分及其作用。
3. 帮助学生掌握计算器的使用规范,如开关机、输入输出等基本操作。
技能目标:1. 培养学生运用计算器解决实际问题的能力,提高计算速度和准确性。
2. 培养学生通过观察、尝试、探索等方法,自主发现计算器操作技巧和功能特点。
3. 培养学生合作交流的能力,学会在小组讨论中分享观点,共同解决问题。
情感态度价值观目标:1. 激发学生对计算器的学习兴趣,培养良好的学习习惯和探究精神。
2. 培养学生尊重科学、严谨求实的态度,树立正确的价值观。
3. 培养学生团队协作意识,增强合作解决问题的能力。
本课程针对小学四年级学生,结合教材内容,以实用性为导向,注重培养学生的动手操作能力和实际问题解决能力。
课程目标明确,易于衡量,为后续教学设计和评估提供依据。
在教学过程中,教师应关注学生个体差异,因材施教,确保每位学生都能在课程中收获知识和技能。
二、教学内容本章节教学内容主要包括以下几部分:1. 计算器的基本结构:介绍计算器的显示屏、键盘、电池等组成部分及其功能。
2. 四则运算操作:详细讲解加、减、乘、除四则运算在计算器上的操作步骤。
3. 计算器操作规范:教授计算器的开关机、清屏、输入输出等基本操作规范。
4. 实际问题解决:结合教材实例,引导学生运用计算器解决生活中的实际问题。
5. 操作技巧与功能探索:指导学生探索计算器的其他功能,如百分比、乘方等,并分享操作技巧。
教学内容安排如下:第一课时:计算器的基本结构及操作规范介绍。
第二课时:四则运算操作教学,以教材为例题进行讲解和实操。
第三课时:实际问题解决,分组讨论并运用计算器解决生活中的数学问题。
第四课时:操作技巧与功能探索,学生自主探究计算器其他功能并分享。
教学内容与教材紧密关联,确保科学性和系统性。
利用VC设计计算器的步骤
利用VC设计计算器的步骤一、新建应用程序工程1、点“文件”、点“新建”、进入创建应用程序工程向导2、修改新建工程之类名二、编辑对话框修改按钮ID及按钮名分别为:IDC_ADD_BUTTON1 加IDC_MINUS_BUTTON2 减IDC_MULIPLE_BUTTON3 乘IDC_DIVIDE_BUTTON4 除编辑结果:三、创建变量、函数1、进入创建向导:2、为“结果”编辑框创建浮点类型变量m_result:3、创建函数:IDOKOnOk()退出按钮IDC_ADD_BUTTON1OnAddButton1()加按钮IDC_MINUS_BUTTON2OnMinusButton2()减按钮IDC_MULIPLE_BUTTON 3 OnMulipleButton3() 乘按钮IDC_DIVIDE_BUTTO N4 OnDivideButton4()除按钮四、为函数添加代码(红色部分):1、进入添加代码之函数文件:2、添加代码(红色部分):void CcomputerDlg::OnAddButton1(){int num1,num2,num3;char ch1[10],ch2[10],ch3[10];GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);num1=atoi(ch1);num2=atoi(ch2);num3=num1+num2;itoa(num3,ch3,10);GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);}void CcomputerDlg::OnMinusButton2(){int num1,num2,num3;char ch1[10],ch2[10],ch3[10];GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);num1=atoi(ch1);num2=atoi(ch2);num3=num1-num2;itoa(num3,ch3,10);GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);}void CcomputerDlg::OnMulipleButton3(){int num1,num2,num3;char ch1[10],ch2[10],ch3[10];GetDlgItemText(IDC_EDIT1,ch1,10);GetDlgItemText(IDC_EDIT2,ch2,10);num1=atoi(ch1);num2=atoi(ch2);num3=num1*num2;itoa(num3,ch3,10);SetDlgItemText(IDC_EDIT3,ch3);}void CcomputerDlg::OnDivideButton4(){// TODO: Add your control notification handler code here int num1,num2;char ch1[10],ch2[10];GetDlgItemText(IDC_EDIT1,ch1,10);GetDlgItemText(IDC_EDIT2,ch2,10);num1=atoi(ch1);num2=atoi(ch2);m_result=(float)num1/num2;UpdateData(FALSE);//ftoa(num3,ch3,10);//SetDlgItemText(IDC_EDIT3,ch3);}五、编译六、运行七、所用函数说明:1、CWnd::GetDlgItmeText函数声明int GeyDlgItemText(int nID,LPTSTR lpStr,int nMaxCount)constint GeyDlgItemText(intnID,CString&rString)constnID:控件之ID号lpStr:存放控件内容的指针nMaxCount:内容之最大长度rString:存放控件的内容2、CWnd::SetDlgItemText函数声明void SetDlgItemText(int nID,LPCTSTR lpszString)nID:控件的ID号lpszString:指向控件内容的指针功能:设置控件的内容3、CWnd::GetWindowText函数声明int GetWindoeText(LPTSTRlpszStringBuf,int nMaxCount)constvoid GetWindoeText(CString&rString)constlpszStringBuf:指向控件内容的字符串nMaxCount:输入字符的最大数值rString:保存字符串的最大数量功能:将一个CWnd类窗口的标题复制到指定字符串中,返回值为复制内容之大小4、CWnd::SetWindowText函数声明int SetWindowText(LPTSTR lpszString)lpszString:指向控件内容的字符串功能:设置指定窗口的标题。
vc课程设计计算器
vc 课程设计计算器一、教学目标本课程旨在让学生掌握计算器的基本使用方法,理解计算器在数学和科学计算中的应用,培养学生的逻辑思维能力和解决问题的能力。
具体目标如下:知识目标:使学生了解计算器的各种功能及其应用场景,掌握计算器的基本操作方法。
技能目标:能够运用计算器进行简单的数学计算、科学计算和数据处理,提高计算准确性和效率。
情感态度价值观目标:培养学生对科学技术的兴趣和好奇心,激发学生探索未知、创新思维的精神。
二、教学内容本课程的教学内容主要包括以下几个部分:1.计算器的基本结构:介绍计算器的各种按键功能及其对应的操作。
2.计算器的使用方法:讲解如何使用计算器进行数学计算、科学计算和数据处理。
3.计算器在实际应用中的案例分析:通过实际案例,使学生了解计算器在日常生活和学习中的重要作用。
4.计算器的维护与保养:教授学生如何正确使用和维护计算器,延长其使用寿命。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式:1.讲授法:教师讲解计算器的基本原理、功能及使用方法。
2.讨论法:分组讨论计算器在实际应用中遇到的问题,培养学生解决问题的能力。
3.案例分析法:分析实际案例,使学生了解计算器在生活和学习中的重要作用。
4.实验法:让学生亲自动手操作计算器,进行实际计算,巩固所学知识。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用内容丰富、适合学生年龄特点的计算器教材。
2.参考书:提供相关的计算器使用手册和资料,供学生课后自学。
3.多媒体资料:制作课件、教学视频等,以生动形象的方式展示计算器的使用方法。
4.实验设备:为学生提供足够的计算器,以便进行实际操作和实验。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和兴趣。
2.作业:布置适量的课后作业,检查学生对课堂所学知识的掌握程度。
VC++设计简易计算器
VC++设计简易计算器// CalculatorDlg.cpp : implementation file//#include "stdafx.h"#include "Calculator.h"#include "CalculatorDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifextern MyOperator optrs[14];extern Compare op[14][14];/////////////////////////////////////////////////////////////////// //////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////// //////////// CCalculatorDlg dialogCCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent){//{{AFX_DATA_INIT(CCalculatorDlg)m_strResult = _T("");//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CCalculatorDlg::DoDataExchange(CDataExchange* pDX) {CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CCalculatorDlg)DDX_Control(pDX, IDC_EDIT_RESULT, m_editResult);DDX_Text(pDX, IDC_EDIT_RESULT, m_strResult);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)//{{AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_EQUAL, OnEqual)ON_BN_CLICKED(IDC_NUM_1, OnNum1)ON_BN_CLICKED(IDC_NUM_0, OnNum0)ON_BN_CLICKED(IDC_NUM_2, OnNum2)ON_BN_CLICKED(IDC_NUM_3, OnNum3)ON_BN_CLICKED(IDC_NUM_4, OnNum4)ON_BN_CLICKED(IDC_NUM_5, OnNum5)ON_BN_CLICKED(IDC_NUM_6, OnNum6)ON_BN_CLICKED(IDC_NUM_7, OnNum7)ON_BN_CLICKED(IDC_NUM_8, OnNum8)ON_BN_CLICKED(IDC_NUM_9, OnNum9)ON_BN_CLICKED(IDC_POW, OnPow)ON_BN_CLICKED(IDC_SIN, OnSin)ON_BN_CLICKED(IDC_TAN, OnTan)ON_BN_CLICKED(IDC_NEGATIVE, OnNegative) ON_BN_CLICKED(IDC_MUT, OnMut)ON_BN_CLICKED(IDC_LOG, OnLog)ON_BN_CLICKED(IDC_LN, OnLn)ON_BN_CLICKED(IDC_DIV, OnDiv)ON_BN_CLICKED(IDC_DOT, OnDot)ON_BN_CLICKED(IDC_DEC, OnDec)ON_BN_CLICKED(IDC_COT, OnCot)ON_BN_CLICKED(IDC_ADD, OnAdd)ON_BN_CLICKED(IDC_COS, OnCos)ON_BN_CLICKED(IDC_AC, OnAc)ON_BN_CLICKED(IDC_BACK, OnBack)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CCalculatorDlg message handlersBOOL CCalculatorDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization heremc.InitStack();OperatorPressed=false;m_strResult="0.0";UpdateData(FALSE);Restarted=true;return TRUE; // return TRUE unless you set the focus to a control}void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CCalculatorDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CCalculatorDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CCalculatorDlg::OnEqual(){UpdateData(TRUE);if(OperatorPressed==false)mc.PushOpnd(mc.StringToDouble(m_strResult));mc.CalculateAll();m_strResult=mc.GetResult();UpdateData(FALSE);}void CCalculatorDlg::OnNum1(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true)m_strResult="1";elsem_strResult+="1";OperatorPressed=false;Restarted=false;UpdateData(FALSE);void CCalculatorDlg::OnNum0(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true) m_strResult="0";elsem_strResult+="0";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnNum2(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true) m_strResult="2";elsem_strResult+="2";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnNum3(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true) m_strResult="3";elsem_strResult+="3";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnNum4(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true) m_strResult="4";elsem_strResult+="4";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnNum5(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true) m_strResult="5";elsem_strResult+="5";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnNum6(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true) m_strResult="6";elsem_strResult+="6";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnNum7(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true) m_strResult="7";elsem_strResult+="7";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnNum8(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true)m_strResult="8";elsem_strResult+="8";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnNum9(){UpdateData(TRUE);if(OperatorPressed==true||Restarted==true)m_strResult="9";elsem_strResult+="9";OperatorPressed=false;Restarted=false;UpdateData(FALSE);}void CCalculatorDlg::OnPow(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[9]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnSin(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[4]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnTan(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[6]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnNegative(){UpdateData(TRUE);if(m_strResult.GetAt(0)=='-')m_strResult=m_strResult.Mid(1);elsem_strResult="-"+m_strResult;UpdateData(FALSE);}void CCalculatorDlg::OnMut(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[2]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnLog(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[11]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnLn(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[10]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;void CCalculatorDlg::OnDiv(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[3]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnDot(){UpdateData(TRUE);m_strResult+=".";UpdateData(FALSE);}void CCalculatorDlg::OnDec(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[1]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnCot()UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[7]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnAdd(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[0]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnCos(){UpdateData(TRUE);mc.PushOpnd(mc.StringToDouble(m_strResult)); mc.PushOptr(optrs[5]);m_strResult=mc.GetResult();UpdateData(FALSE);OperatorPressed=true;}void CCalculatorDlg::OnAc(){Restarted=true;mc.InitStack();m_strResult="0.0";UpdateData(FALSE);}void CCalculatorDlg::OnBack(){UpdateData(TRUE);if(m_strResult!="0"&&m_strResult!="0.0"&&m_strResult.Lef t(m_strResult.GetLength()-1)!="")m_strResult=m_strResult.Left(m_strResult.GetLength()-1);elsem_strResult="0.0";UpdateData(FALSE);}。
使用VC6编写一个计算器MFC
使用VC6.0编写一个简易的计算器效果图第一步:启动Visual C++6.0第二步:新建一个工程第三步:选择MFC AppWizard[exe],给工程命名,点击确定。
第四步:点选“基本对话框”,然后点击“完成”。
切记:不要点“下一步”第五步:点击“确定”,就完成工程建立了!第六步:看到这个页面后,就进入了面板的设计。
通过旁边的“控件”在面板中放置相应的按钮,编辑框,文本框等内容。
(这里讲的简易计算器需要按钮,编辑框这两个控件。
一般如果有需要的话还可以加入文本框用于说明。
)第七步:对每个对象建立类向导,但编写计算器只限于编辑框。
点击进入类向导后,点击横向按钮中的第二个按钮,在“Control IDs”中找到编辑框对应的名字,没有前期改动过的,一般都是IDC_EDIT1,点击“IDC_EDIT1”出现的对话框中,Variable type中选择CString,命名。
点击“OK”。
最后编写代码了:将面板上面的所有按钮和编辑框全部双击一遍,就会在“计算器Dlg.CPP”文件中生成控制其功能的空函数。
你需要在这些空函数中写入相应的代码以实现按钮的功能。
(请着重看红色加粗部分的代码,那才是真正的精髓)以下是“计算器Dlg.CPP”文件全部程序代码// 计算器Dlg.cpp : implementation file//#include "stdafx.h"#include "计算器.h"#include "计算器Dlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUALprotected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CMyDlg::CMyDlg(CWnd* pParent): CDialog(CMyDlg::IDD, pParent){//{{AFX_DATA_INIT(CMyDlg)num = _T("");//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CMyDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMyDlg)DDX_Text(pDX, IDC_EDIT1, num);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMyDlg, CDialog)//{{AFX_MSG_MAP(CMyDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON3, OnButton3)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON5, OnButton5)ON_BN_CLICKED(IDC_BUTTON6, OnButton6)ON_BN_CLICKED(IDC_BUTTON7, OnButton7)ON_BN_CLICKED(IDC_BUTTON8, OnButton8)ON_BN_CLICKED(IDC_BUTTON9, OnButton9)ON_BN_CLICKED(IDC_BUTTON10, OnButton10)ON_BN_CLICKED(IDC_BUTTON11, OnButton11)ON_BN_CLICKED(IDC_BUTTON12, OnButton12)ON_BN_CLICKED(IDC_BUTTON13, OnButton13)ON_BN_CLICKED(IDC_BUTTON14, OnButton14)ON_BN_CLICKED(IDC_BUTTON15, OnButton15)ON_BN_CLICKED(IDC_BUTTON16, OnButton16)ON_BN_CLICKED(IDC_BUTTON17, OnButton17)ON_BN_CLICKED(IDC_BUTTON18, OnButton18)ON_BN_CLICKED(IDC_BUTTON20, OnButton20)ON_BN_CLICKED(IDC_BUTTON19, OnButton19)ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)//}}AFX_MSG_MAPEND_MESSAGE_MAP()BOOL CMyDlg::OnInitDialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);return TRUE;}void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}void CMyDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this);SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}HCURSOR CMyDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CMyDlg::OnChangeEdit1() {}double num1,num2;char sys;void CMyDlg::OnButton1() {UpdateData(true);num+='1';UpdateData(false);}void CMyDlg::OnButton2() {UpdateData(true);num+='2';UpdateData(false);}void CMyDlg::OnButton3() {UpdateData(true);num+='3';UpdateData(false);}void CMyDlg::OnButton4() {UpdateData(true);num+='4';UpdateData(false);}void CMyDlg::OnButton5() {UpdateData(true);num+='5';UpdateData(false);}void CMyDlg::OnButton6() {UpdateData(true);num+='6';UpdateData(false);}void CMyDlg::OnButton7() {UpdateData(true);num+='7';UpdateData(false);}void CMyDlg::OnButton8() {UpdateData(true);num+='8';UpdateData(false);}void CMyDlg::OnButton9() {UpdateData(true);num+='9';UpdateData(false);}void CMyDlg::OnButton10() {UpdateData(true);num+='0';UpdateData(false);}void CMyDlg::OnButton11() {if(-1==num.Find('.')){UpdateData(true);num+='.';}UpdateData(false);}void CMyDlg::OnButton12() {UpdateData(true);num2=-num2;char rs[20];sprintf(rs,"%g",num2);num=rs;UpdateData(false);}void CMyDlg::OnButton13() {UpdateData(true);num1=atof(num);num='\0';sys='+';UpdateData(false);}void CMyDlg::OnButton14() {UpdateData(true);num1=atof(num);num='\0';sys='-';UpdateData(false);}void CMyDlg::OnButton15() {UpdateData(true);num1=atof(num);num='\0';sys='*';UpdateData(false);}void CMyDlg::OnButton16() {UpdateData(true);num1=atof(num);num='\0';sys='/';UpdateData(false);}void CMyDlg::OnButton17() {if(!num.IsEmpty()){UpdateData(true);num=num.Left(num.GetLength()-1);}UpdateData(false);}void CMyDlg::OnButton18() {UpdateData(true);num='\0';UpdateData(false);}void CMyDlg::OnButton20() {UpdateData(true);num1=atof(num);num='\0';sys='^';UpdateData(false);}void CMyDlg::OnButton19(){UpdateData(true);char rs[50];memset(rs,0,50);switch(sys){case'+':num2=num1+atof(num);sprintf(rs,"%g",num2);num=rs;break;case'-':num2=num1-atof(num);sprintf(rs,"%g",num2);num=rs;break;case'*':num2=num1*atof(num);sprintf(rs,"%g",num2);num=rs;break;case'/':num2=num1/atof(num);sprintf(rs,"%g",num2);num=rs;break;case'^':num2=1;for(inti=0;i<atof(num);i++)num2=num1*num2;sprintf(rs,"%g",num2);num=rs;break;}; UpdateData(false);}。
vc计算器实验报告
VC计算器实验报告1. 引言计算器是我们日常生活中经常使用的工具之一。
它可以帮助我们进行简单的数学运算,如加减乘除,以及更复杂的科学计算。
然而,传统的计算器通常功能有限,无法满足我们日益增长的计算需求。
为了解决这个问题,我们设计并实现了一款名为VC计算器的应用程序。
本文将详细介绍VC计算器的设计思路、功能特点以及实现过程。
2. 设计思路VC计算器的设计思路基于“step by step thinking”的理念,即通过逐步思考和分解问题来实现复杂的功能。
我们希望用户能够通过简单的步骤,逐渐构建出复杂的计算式,并获得准确的计算结果。
3. 功能特点3.1 基本计算功能VC计算器支持基本的四则运算,包括加法、减法、乘法和除法。
用户可以通过逐步输入数字和运算符,构建出复杂的计算式,并得到准确的计算结果。
3.2 科学计算功能除了基本的四则运算,VC计算器还提供了一些常用的科学计算功能,如三角函数、对数函数、指数函数等。
用户可以通过简单的步骤,构建出复杂的科学计算式,并得到准确的计算结果。
3.3 变量和函数支持为了进一步增强计算器的功能,我们在VC计算器中添加了变量和函数的支持。
用户可以定义和使用变量,以及定义和调用函数。
这样,用户可以根据自己的需求,自定义复杂的计算式,并得到准确的计算结果。
4. 实现过程4.1 界面设计我们通过使用Markdown文本格式来展示VC计算器的界面设计。
下面是一个示例界面:==========================================VC计算器==========================================[1] 2 + 3 = 5[2] sin(45) = 0.707[3] x = 10[4] y = 5[5] x + y = 15[6] f(x) = 2x + 1[7] f(5) = 114.2 代码实现VC计算器的代码实现主要分为以下几个步骤:1.解析用户输入,获取操作符和操作数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单科学计算器设计VC++课程设计报告简单科学计算器设计一、设计任务1.选题意义此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握Visual C++应用程序。
统计学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++,并在此环境下设计并实现一个简单计算器系统。
该计算器应能实现如下功能: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)主要代码:void CGyDlg::On0() //输入相应的数据,这为输入数据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() //输入相应的数据,这为输入数据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+"6";m_xs=m_xs+"6";UpdateData(FALSE);}void CGyDlg::On7() //输入相应的数据,这为输入数据7 { s2=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";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+".";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(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="";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(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="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_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);UpdateData(false);}void CGyDlg::Onezs() //二进制转十进制{ s2="";int len;double sum=0.0,num;len=strlen(m_xs);for (int i=0;i<len;i++){ num=(m_xs[i]-48);num=num*pow(2,len-i-1);sum+=num;}m_xs.Format("%f",sum);UpdateData(false);}void CGyDlg::Onbze() //八进制转二进制{ s2="";int i,len;char s;len=strlen(m_xs);CString m_xs1;for(i=0;i<len;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);}double add(double X, double Y) { return X+Y;} //加函数double subtract(double X, double Y) { 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; } // 角度转弧度double chengfang(double X, int Y) //乘方{ double m=1.0;if(Y==1)return X;elsefor(int i=1;i<=Y;i++)m=m*X;return m;}void CGyDlg::Ondy() //等于号的功能函数{ int len,i,j=0;double X,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;c ase '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="";}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个功能,实现八大运算:三角函数运算功能、对数函数运算功能、指数函数运算功能、乘方运算功能、平方运算功能、根式运算功能、进制转换功能、归零功能。