MFC课程设计报告-一个简单的计算器应用程序
《MFC编程及应用》课程设计报告

《MFC编程及应用》课程设计报告题目:计算器学号:姓名:指导老师:时间:为了完成计算器这个程序的编程,我首先创建了一个基于对话框的应用程序。
我在对话框中添加了三个编辑框,分别用来输入操作数和输出结果,添加了三个静态文本框来标记三个编辑框,添加了四个按钮来实现加减乘除的运算。
通过设置静态文本框的属性,我将它们的名字改为“数1”,“数2”和“结果”。
同样我改变了按钮的名字,我先为“加”这个按钮添加了一个BN-CLICKED的成员函数,这时候对话框的类中就出现了一个ON_BATTON1的消息响应函数要从两个编辑框中取出输入的值,我在这个消息响应函数中新增了三个char型数组的成员变量用来保存输入的字符和输出字符,由于计算机处理的是整数不是字符,所以我又增加了三个整型的成员变量num1,num2,num3作为计算机处理的变量。
在这个过程中,我碰到了四个问题,一,要怎么把输入的字符从编辑框中取出来。
为此我调用了一个函数GetDlgItem(IDC_EDIT2)->GetWindowText(ch1,10);将编辑框中的字符取出并赋值给ch1[]。
二,要怎么把一个字符型的变量转变成整形变量,我调用了函数num1=atoi(ch1);这样就实现了从字符到整数的转变。
三,怎样保证输入的是1到100的数,我用了一个if语句来判断,if(num1<1||num1>100||num2<1||num2>100)MessageBox("请输入一个1到100的整数");else{ num3=num1+num2;只有当输入的是满足要求的数时才进入下一步,如果输入数非法就弹出一个对话框提示输入非法。
四,要怎么把结果输入到第三个编辑框中,由于计算结果是一个整数所以我先调用了函数itoa(num3,ch3,10);将其变成字符,并利用函数GetDlgItem(IDC_EDIT4)->SetWindowText(ch3);将它输出到第三个编辑框中。
mfc计算器实验报告

mfc计算器实验报告MFC计算器实验报告引言:MFC(Microsoft Foundation Class)是微软公司开发的一套用于Windows应用程序开发的类库,它提供了一系列的类和函数,方便开发者进行图形界面的设计和开发。
在本次实验中,我们将使用MFC来设计一个简单的计算器应用程序,并通过实验报告来总结我们的设计过程和结果。
1. 实验目的本次实验的主要目的是熟悉MFC框架的使用,了解MFC的基本原理和设计思路,并通过实际操作来掌握MFC应用程序的开发流程。
2. 实验环境本次实验使用的开发环境是Visual Studio 2019,该版本已经集成了MFC开发环境,方便我们进行MFC应用程序的设计和开发。
3. 实验步骤3.1 创建MFC项目首先,我们打开Visual Studio 2019,并选择创建一个新的MFC应用程序项目。
在创建项目的过程中,我们需要选择MFC应用程序向导,并设置一些基本的项目属性,如应用程序名称、目标平台等。
3.2 设计计算器界面在项目创建完成后,我们将进入MFC应用程序的设计界面。
在这个界面中,我们可以通过拖拽和调整控件的方式来设计应用程序的界面。
为了实现一个简单的计算器功能,我们需要添加一些按钮、文本框和标签等控件,并设置它们的属性和事件响应函数。
3.3 实现计算器功能在设计界面完成后,我们需要在代码中实现计算器的功能。
具体来说,我们需要编写一些函数来处理按钮的点击事件,并根据用户的输入来进行相应的计算操作。
在这个过程中,我们可以使用MFC提供的一些数学函数和操作符重载来简化计算的过程。
4. 实验结果经过我们的设计和开发,一个简单的计算器应用程序已经完成了。
在实验过程中,我们测试了该应用程序的基本功能,包括加法、减法、乘法和除法等运算操作,并对一些特殊情况进行了处理,如除数为零等。
实验结果表明,该计算器应用程序在功能和稳定性方面都达到了预期的效果。
5. 实验总结通过本次实验,我们对MFC框架的使用和应用程序的开发流程有了更深入的了解。
简单MFC程序设计(编写一个小型计算器)

if(dotflag==1) {
quan= quan*10; m_Num += 0 / (double)quan; } else { if(numflag==1) {
m_Num = m_Num * 10 + 0; } else m_Num = 0; } numflag = 1; mark=1; UpdateData(FALSE); } void CTestDlg::OnButtonZhengfu() { UpdateData(); m_Num = 0-m_Num; UpdateData(FALSE); } void CTestDlg::OnButtonDengyu()
m_Num = m_Num * 10 + 8; } else m_Num = 8; } numflag = 1; mark=1; UpdateData(FALSE); } void CTestDlg::OnButtonNum9()
5
{ if(dotflag==1) { quan= quan*10; m_Num += 9 / (double)quan; } else { if(numflag==1) { m_Num = m_Num * 10 + 9; } else m_Num = 9; } numflag = 1; mark=1; UpdateData(FALSE);
是否为数字的 int 型标志 mark。
c) 然后考虑到在计算过程中 num1 和 num2 的储存状态有三种,num1==0 和
num2==0,也就是程序开始运行还没有开始录入数字的状态;num1!=0 和
num2==0,也就是第一个数字已经录入,第二个数字还没有录入的状态这时
简单计算器设计报告

简单计算器设计报告045一、基本功能描述通过文本编辑框实现基本整数的加减乘除运算二、设计思路如下图是整个程序进行的流程图, 基本方法是在ItemText文本编辑框输入字符, 程序对字符进行判断, 若输入不是数字则提示错误。
输入正常时, 通过下拉框ComboBox_InsertString选择相应运算符。
点击等号IDC_OK, 即可得出运算结果。
操作简便, 算法简单。
三、软件设计1、设计步骤打开Microsoft Visual C++ 6.0,在文件中点击新建, 在弹出框内选择MFC AppWizard[exe]工程, 输入工程名zhoutong及其所在位置, 点击确定将弹出MFC AppWizard-step 1对话框, 选择基本对话框, 点击完成MFC AppWizard就建立了一个基于对话窗口的程序框架四、主要程序分析1.字符判定函数BOOL IsInt(TCHAR*str) {int i=atoi(str);TCHAR strtemp[256]; wsprintf(strtemp,"%i",i); if(strcmp(str,strtemp)!=0) {return FALSE;}Else{return TRUE;}}3、该函数通过atoi把文本编辑框读取的字符转换为数字, 再通过wsprintf把转换数字转换为字符, 通过strcmp比较原字符和转换得来的字符。
如相同返回true,不通则返回false.4、运算符选择程序BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){HWND hwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP);ComboBox_InsertString(hwndComboOP,-1,TEXT("+"));ComboBox_InsertString(hwndComboOP,-1,TEXT("-"));ComboBox_InsertString(hwndComboOP,-1,TEXT("*"));ComboBox_InsertString(hwndComboOP,-1,TEXT("/"));return TRUE;}通过ComboBox_InsertString插入要输入的运算符5、主程序字符获取TCHAR str1[256];TCHAR str2[256];GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));调用子程序判断输入是否为数字if(IsInt(str1)==FALSE){MessageBox(hwnd,TEXT("第一个数不是合法整数"),TEXT("错误"),MB_OK|MB_ICONERROR); return;}if(IsInt(str2)==FALSE){MessageBox(hwnd,TEXT("第二个数不是合法整数"),TEXT("错误"),MB_OK|MB_ICONERROR); return;}将输入字符转换为数字int i1=atoi(str1);int i2=atoi(str2);int i3=0;获取运算符HWND hwndComboOp=GetDlgItem(hwnd,IDC_COMBOOP);int curIndex=ComboBox_GetCurSel(hwndComboOp);运算switch(curIndex){case 0:{i3=i1+i2;}break;case 1:{i3=i1-i2;}break;case 2:{i3=i1*i2;}break;case 3:{i3=i1/i2;}break;}运算结果转换为字符TCHAR str3[256];itoa(i3,str3,10);输出运算结果SetDlgItemText(hwnd,IDC_EDIT3,str3);}break;退出程序case IDC_EXIT:{exit(0);}break;五、结果分析六、该计算器只能实现简单的整数运算, 不能对小数分数进行运算。
MFC计算器程序报告

C++课程设计实验报告学号姓名院系专业一、课题名称简易的计算器设计。
二、问题陈述编写一个计算器程序,能够进行四则运算、取模等运算要求:1、个人完成;2、运用对话框编写,界面上只能有一个输出框,数据通过按钮输入到程序,并显示在输出框中;当按下运算符后再输入数据,输出框中应显示新数据;运算结果也显示在输出框中。
3、四则运算、取模运算是最低要求,程序能正确执行;4、界面设计美观、合理;5、独立完成;三、设计目标和设计任务编写一个计算器程序,能够进行四则运算、取模、乘方、立方,并且给计算器程序添加背景。
四、解题算法思想1.创建一个基于对话框的项目2. 给对话框加入相应的操作按钮3. 给按钮加上代码,设置属性4. 为实现四则运算、取模等操作添加必要函数五、程序算法过程①选择File→New菜单命令,选择Project选项卡,并选择MFC AppWizard(exe), name 命名为calculator;选择应用程序基于对话框,即Dialog based。
多次单击next,最后单击Finish后,系统弹出一对话框,如下图:②使用按钮控件、文本编辑框控件和组控件,将他们加入到对话框中,并通过更改按钮控件的属性中的标题部分。
选中所有按钮,在属性中的Extended Style中选中Modal frame,使其达到下图效果:(注意,在布局按钮时,为了使按钮总体整齐美观,可以先创建一行或一列按钮,使他们保持整齐后,按住Ctrl键,选中这一行或一列按钮,再移动鼠标,即可生成另一行或一列按钮;也可以通过Layout菜单中的指令对其进行布局)③鼠标右击按钮控件,选择属性,即可对其ID进行更改,各ID与标题内容对应如下:ID 标题ID 标题IDC_BUTTON0 0 IDC_BUTTONCLS 清零IDC_BUTTON1 1 IDC_ADD +IDC_BUTTON2 2 IDC_PLUS -IDC_BUTTON3 3 IDC_MULTIPL Y *IDC_BUTTON4 4 IDC_DEVIDE /IDC_BUTTON5 5 IDC_EQUALL =IDC_BUTTON6 6 IDC_QUM 取模|IDC_BUTTON7 7 IDC_SQU 平方IDC_BUTTON8 8 IDC_CUB 立方IDC_BUTTON9 9④在对话框非控件部分单击鼠标右键,打开类向导ClassWizard,将数字按钮0~9关联到函数OnEnternum(),方法为单击数字按钮ID,然后单击Message中的BN_CLICKED,最后单击右侧的Add Function,在其中输入函数名即可。
基于MFC的简易计算器课程设计

基于MFC的简易计算器课程设计一、摘要:这次课程设计的主要目的是运用MFC设计一个简易计算器,此简易计算器的功能:用户可以在输入功能框中输入任何合法、非法的运算四则运算表达式,还可以作x的y次方运算、立方运算、开二次方运算、log运算和倒数运算如果是合法表达式,计算器自动计算并显示结果,如果非法显示出错信息。
二、设计团队:Cary(班级:通信052,学号:200500402088)李子琨(班级:通信052,学号:200500402068)三、设计分工:李子琨:主要任务是使用MFC制作主程序界面,添加按钮控件并关联变量,手动添加按钮消息映射郑特:编写函数的实现代码四、简易计算器实现功能:可以实现:两个数的加、减、乘、除、x的y次方;一个数的立方、开二次方根、倒数、LOG值计算等。
五、设计步骤(函数实现):1、void cal( )函数实现:(1)、cal( )函数说明:此函数按照定义的变量“OperationState”进行计算,流程如下:(2)、代码实现如下:void CCalculatorDlg::cal( ) //按OperationState进行计算{switch(OperationState){case 1:if(number2==0)MessageBox("请注意,除数不能为零!","温馨提示:");elsem_number=(double)number1/number2;NumberState=1;UpdateData(FALSE);number1=m_number; break;case 2:m_number=number1*number2;NumberState=1;UpdateData(FALSE);number1=m_number; break;case 3:m_number=number1+number2;NumberState=1;UpdateData(FALSE);number1=m_number; break;case 4:m_number=number1-number2;NumberState=1;UpdateData(FALSE);number1=m_number; break;case 5:m_number=pow(number1,number2);NumberState=1;UpdateData(FALSE);number1=m_number; break;}OperationState=0;1、数字按钮处理的成员函数实现:代码实现如下:void CCalculatorDlg::OnNumberKey(UINT nID) //监视输入,独立输入变为实际的数据{int n=0;switch(nID){case IDC_NUMBER1:n=1;break;case IDC_NUMBER2:n=2;break;case IDC_NUMBER3:n=3;break;case IDC_NUMBER4:n=4;break;case IDC_NUMBER5:n=5;break;case IDC_NUMBER6:n=6;break;case IDC_NUMBER7:n=7;break;case IDC_NUMBER8:n=8;break;case IDC_NUMBER9:n=9;break;case IDC_NUMBER10:n=0;break;}if (NumberState==1){if(point_1==1){m_number=m_number+n*pow(0.1,point_1);point_1++;number1=m_number;UpdateData(FALSE);}else{m_number=m_number*10+n;number1=m_number;UpdateData(FALSE);}}else{if(point==1){m_number=m_number+pow(0.1,point_1);point_1++;number2=m_number;UpdateData(FALSE);}else{m_number=m_number*10+n;number2=m_number;UpdateData(FALSE);}}}2、操作按钮功能的成员函数实现:void CCalculatorDlg::OnOperationKey(UINT nID) //对于非一般四则运算分别匹配运算规则{switch(nID){case IDC_NUMBER11:m_number=-m_number;if(NumberState==1)number1=m_number;else number2=m_number;UpdateData(FALSE);break;case IDC_NUMBER12:m_number=(int)m_number/10;if(NumberState==1)number1=m_number;else number2=m_number;UpdateData(FALSE);break;case IDC_NUMBER13:OperationState=1;m_number=0;UpdateData(FALSE);NumberState=2;break;case IDC_NUMBER14:OperationState=2;m_number=0;UpdateData(FALSE);NumberState=2;break;case IDC_NUMBER15:OperationState=3;m_number=0;UpdateData(FALSE);NumberState=2;break;case IDC_NUMBER16:OperationState=4;m_number=0;UpdateData(FALSE);NumberState=2;break;case IDC_NUMBER17:number1=number2=m_number=0;UpdateData(FALSE);NumberState=1;break;case IDC_NUMBER18:if(number1<0)MessageBox("请注意,被开方数不能小于零!","温馨提示:");elsenumber1=m_number=sqrt(number1);UpdateData(FALSE);break;case IDC_NUMBER19:number1=m_number=(double)1/number1;UpdateData(FALSE);break;case IDC_NUMBER20:cal(); break;case IDC_NUMBER21:number1=m_number=number1*number1*number1;UpdateData(FALSE);break;case IDC_NUMBER22:OperationState=5;m_number=0;UpdateData(FALSE);NumberState=2;break;case IDC_NUMBER23:if(number1<0)MessageBox("请注意,计算不能为负!","温馨提示:");else{number1=m_number=log10(number1);UpdateData(FALSE);}break;case IDC_NUMBER24://point_1=1;break;}}六、编译、运行运行后程序主界面:七、心得、体会通过这次软件工程课程设计的练习,使我增加了对软件编程的兴趣,对VC++运行机制有了更进一步的了解,在编写代码的过程中遇到了很多的问题,团队成员之间通过相互探讨,共同解决了遇到的问题,使自己解决问题的能力有了进一步的提高,思维变得更加的活跃,而且更加严谨,虽然这次做的只是一个简单的项目,但我收获很多!我要更加努力的学习编程,让自己的技术更进一步提高!。
mfc计算器的设计报告

MFC计算器课程设计题目: MFC计算器设计学院:计算机学院姓名:学号:指导教师:2015年5月20日目录1概述 (3)1.1课程设计目的 (3)1.2课程设计内容 (3)2系统需求分析 (4)2.1系统目标 (4)2.2主体功能 (4)2.3开发环境 (4)3系统概要设计 (4)3.1系统功能划 (4)4系统详细设计 (7)4.1 设计步骤 (7)4.2 界面设计 (9)5测试 (11)5.1 测试方案 (11)5.2 测试结果 (12)6小结 (14)参考文献 (14)附录 (15)附录1源程序清单 (15)计算器的设计1概述1.1 课程设计目的1、巩固并加深学生对C++语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VC++ 6.0集成开发环境;4、提高运用C++语言解决实际问题的能力;5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统;6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。
1.2 课程设计内容课题名称:计算器的实现说明:实现一个计算器。
要求:用“计算器”的标准视图执行简单的计算。
32系统需求分析2.1 系统目标我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
要计算功能有以下几个方面:加法,减法,乘法,除法,乘方。
2.2 主体功能十进制数的加、减、乘、除、乘方简单计算。
2.3 开发环境W indows操作系统,VC++ 6.0, OFFICE WORD3 系统概要设计3.1 系统功能划表3-1 系统功能表1)假设执行操作“+”,先输入一个数,再输入“+”,再输入另一个数,最后输入“+”。
整个功能“+”就执行完毕。
4四则代码如下void CCALDlg::OnButtonequal(){// TODO: Add your control notification handler code here UpdateData(TRUE);num2 =m_str;if(num2==0&&ope==3){m_str1="除数不能为零";m_str =0;num1 = 0;num2 = 0;UpdateData(FALSE);}else{// int f = 0;switch (ope){//加case 0:m_str = num1 + num2;break;//减case 1:m_str = num1 - num2;break;5case 2:m_str = num1 * num2;break;case 3:m_str = num1 / num2;break;case 4:m_str = num1 * num1;}UpdateData(FALSE);}64系统详细设计4.1 设计步骤打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名yeyahui及其所在位置,点击确定,如图4-1所示。
基于MFC的一个简单计算器

基于MFC的⼀个简单计算器写⼀个简单的计算器并不是什么很难的事,主要⽬的是要通过这个程序来学习和分析其中的核⼼算法。
这个简易计算器的核⼼部分就是对输⼊的表达式的正确性判断与求值,其中包括对表达式的解析、中缀表达式转后缀表达式、后缀表达式求值等等⼏个⽅⾯。
⼀、封装核⼼代码《》和《》这两篇⽂章已经对核⼼算法部分进⾏了讲解,并附有源码。
在此基础上制作⼀个简单计算器,我们要做的仅仅是封装核⼼代码并加⼊MFC⼯程中。
下⾯是我封装的⼀个 Expression 类:Expression.h#pragma once#include <iostream>#include <sstream>#include <string>#include <vector>#include <stack>#include <utility>using namespace std;class Expression{public:Expression(string str);bool test(); // 外部接⼝,判断表达式是否合法double calculate(); // 外部接⼝,计算表达式的值private:vector<pair<string, int>> word;string expr; // 算术表达式int idx; // word下标int sym; // 单词种别编码int err; // 错误int word_analysis(vector<pair<string, int>>& , const string);void Next();void E();void T();void F();bool Right; // 保存表达式test结果private:int prior(int); // 获取运算符的优先级bool isOperator(int); // 通过种别编码判定是否是运算符vector<pair<string,int>> getPostfix(const vector<pair<string,int>>&); // 中缀转后缀void popTwoNumbers(stack<double>&, double&, double&); // 从栈中连续弹出两个操作数double stringToDouble(const string&); // 把string转换为doubledouble expCalculate(const vector<pair<string, int>>&); // 计算后缀表达式的值};Expression.cpp#include "Expression.h"// 构造函数Expression::Expression( string str ):expr(str),idx(0),err(0),Right(true){}// 外部接⼝bool Expression::test(){return Right;}int err_num = word_analysis(word, expr);if (-1 == err_num){Right = false;}else{// 词法正确,进⾏语法分析Next();E();if (sym == 0 && err == 0) // 注意要判断两个条件Right = true;elseRight = false;}return Right;}// 外部接⼝double Expression::calculate(){if (test()){return expCalculate(getPostfix(word));}else{exit(0);}}/*--------------------------------词法分析----------------------------*/int Expression::word_analysis(vector<pair<string, int>>& word, const string expr) {for(int i=0; i<expr.length(); ++i){// 如果是 + - x ÷ ( )if(expr[i] == '(' || expr[i] == ')' || expr[i] == '+'|| expr[i] == '-' || expr[i] == '*' || expr[i] == '/'){string tmp;tmp.push_back(expr[i]);switch (expr[i]){case '+':word.push_back(make_pair(tmp, 1));break;case '-':word.push_back(make_pair(tmp, 2));break;case '*':word.push_back(make_pair(tmp, 3));break;case '/':word.push_back(make_pair(tmp, 4));break;case '(':word.push_back(make_pair(tmp, 6));break;case ')':word.push_back(make_pair(tmp, 7));break;}}// 如果是数字开头else if(expr[i]>='0' && expr[i]<='9'){string tmp;while(expr[i]>='0' && expr[i]<='9'){tmp.push_back(expr[i]);++i;}if(expr[i] == '.'){++i;if(expr[i]>='0' && expr[i]<='9'){tmp.push_back('.');tmp.push_back(expr[i]);++i;}}else{return -1; // .后⾯不是数字,词法错误}}word.push_back(make_pair(tmp, 5));--i;}// 如果以.开头else{return -1; // 以.开头,词法错误}}return 0;}/*--------------------------------语法分析----------------------------*/ // 读下⼀单词的种别编码void Expression::Next(){if(idx < word.size())sym = word[idx++].second;elsesym = 0;}// E → T { +T | -T }void Expression::E(){T();while(sym == 1 || sym == 2){Next();T();}}// T → F { *F | /F }void Expression::T(){F();while(sym == 3 || sym == 4){Next();F();}}// F → (E) | dvoid Expression::F(){if (sym == 5){Next();}else if(sym == 6){Next();E();if (sym == 7){Next();}else{err = -1;}}else{err = -1;}}/*--------------------------------求值部分----------------------------*/ int Expression::prior(int sym){case 1:case 2:return 1;case 3:case 4:return 2;default:return 0;}}bool Expression::isOperator(int sym){switch (sym){case 1:case 2:case 3:case 4:return true;default:return false;}}vector<pair<string,int>> Expression::getPostfix( const vector<pair<string,int>>& expr){vector<pair<string, int>> output; // 输出stack<pair<string, int>> s; // 操作符栈for(int i=0; i<expr.size(); ++i){pair<string, int> p = expr[i];if(isOperator(p.second)){while(!s.empty() && isOperator(s.top().second) && prior(s.top().second)>=prior(p.second)) {output.push_back(s.top());s.pop();}s.push(p);}else if(p.second == 6){s.push(p);}else if(p.second == 7){while(s.top().second != 6){output.push_back(s.top());s.pop();}s.pop();}else{output.push_back(p);}}while (!s.empty()){output.push_back(s.top());s.pop();}return output;}void Expression::popTwoNumbers( stack<double>& s, double& first, double& second ){first = s.top();s.pop();second = s.top();s.pop();}double Expression::stringToDouble( const string& str ){double d;stringstream ss;ss << str;ss >> d;return d;double Expression::expCalculate( const vector<pair<string,int>>& postfix ){double first,second;stack<double> s;for(int i=0; i<postfix.size(); ++i){pair<string,int> p = postfix[i];switch (p.second){case 1:popTwoNumbers(s, first, second);s.push(second+first);break;case 2:popTwoNumbers(s, first, second);s.push(second-first);break;case 3:popTwoNumbers(s, first, second);s.push(second*first);break;case 4:popTwoNumbers(s, first, second);s.push(second/first);break;default:s.push(stringToDouble(p.first));break;}}double result = s.top();s.pop();return result;}使⽤⽅法(测试):int main(){Expression e("(1.5+2.5)*2+0.53");if(e.test()) // 判断表达式是否合法cout << e.calculate() << endl;return 0;}⼆、加⼊MFC⼯程OK,核⼼代码(表达式的合法性判断与求值)已经封装到 Expression 类中,下⾯要做的就是新建⼀个 MFC ⼯程,并把 Expression 类加⼊⼯程⾥,并实现按钮的功能就⾏了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计一个简单的计算器应用程序
一、设计目标与内容
1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;
2.基本掌握面向对象程序设计的基本思路和方法;
3.掌握用VC++开发应用程序的的一般步骤和方法;
4.能够利用所学的基本知识,设计一个简单的计算器应用程序,实现基本的加、减、乘、除、求平方根,求倒数等基本运算(必须实现的功能),实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。
5.在程序中注意处理数据和运算符的输入,计算结果的显示。
二,设计要求
1.用VC++进行编码,实现应用程序的功能。
注重编码质量,代码要有适当的注释;
2.提交设计报告一份(课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。
一个简单的计算器应用程序
总体设计
能够利用所学的基本知识,设计一个简单的计算器应用程序,实现基本的加、减、乘、除、求平方根,求倒数等基本运算(必须实现的功能),实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。
在程序中注意处理数据和运算符的输入,计算结果的显示。
详细设计
◆新建工程Counter
新建工程,选择对话框应用程序。
◆程序运行主界面
图2-1
在对话框内添加相应的控件,分别给编辑框添加三个变量m_N1,m_N2和m_Result。
然后添加一个组合框,在里面添加十二个单选按钮设置第一个单选按钮为组,如图
图2-2
然后给对话框类添加一个int变量Operator用来作相应运算时的标记。
给控件添加相应的函数
1、给单选按钮添加相应的函数
void CCounterDlg::OnRadio1()
{
Operator=1;
}
void CCounterDlg::OnRadio2()
Operator=2;
}
void CCounterDlg::OnRadio3() {
Operator=3;
}
void CCounterDlg::OnRadio4() {
Operator=4;
}
void CCounterDlg::OnRadio5() {
Operator=5;
}
void CCounterDlg::OnRadio6() {
Operator=6;
void CCounterDlg::OnRadio7() {
Operator=7;
}
void CCounterDlg::OnRadio8() {
Operator=8;
}
void CCounterDlg::OnRadio9() {
Operator=9;
}
void CCounterDlg::OnRadio10() {
Operator=10;
}
void CCounterDlg::OnRadio11()
{
Operator=11;
}
void CCounterDlg::OnRadio12()
{
Operator=12;
}
用来作相应的操作时标记Operator的值。
2、给Button1(计算)添加相应的函数void CCounterDlg::OnButton1()
{
UpdateData();
double i=0,j=1;
switch(Operator)
{
case 1:
m_Result=m_N1+m_N2;break;
case 2:
m_Result=m_N1-m_N2;break;
case 3:
m_Result=m_N1*m_N2;break;
case 4:
if(m_N2==0)
MessageBox("除数不能为零!");
else
{
m_Result=m_N1/m_N2;break;
}
case 5:
if(m_N1==0)
MessageBox("分母不能为零!");
else
{
m_Result=1/m_N1;break;
}
case 6:
if(m_N2==0)
m_Result=1;
else
{
for(i=0;i<m_N2;i++)
j=j*m_N1;
m_Result=j;
}break;
case 7:
m_Result=pow(m_N1,1/m_N2);break;
case 8:
m_Result=sin(m_N1);break;
case 9:
m_Result=cos(m_N1);break;
case 10:
m_Result=tan(m_N1);break;
case 11:
m_Result=log(m_N1);break;
case 12:
if(m_N1<0)
MessageBox("对数取值范围大于零!");
else
{
m_Result=log10(m_N1);break;
}
}
UpdateData(FALSE);
}
3、给Button2(清零)添加相应的函数
void CCounterDlg::OnButton2()
{
UpdateData();
m_N1=0;
m_N2=0;
m_Result=0;
UpdateData(FALSE);
}
4、给Button3(退出)添加相应的函数
void CCounterDlg::OnButton3()
{
CDialog::OnOK();
}
编译运行
计算器是一个比较简单的程序,里面的很多运算我们只需要调用C++的相应函数就行了,所以做起来很容易,但是如果要想做一个比较复杂的计算器就需要我们下一定的功夫了。
网络092刘砺锋。