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 类加⼊⼯程⾥,并实现按钮的功能就⾏了。
MFC_的简易计算器程序设计
MFC 课程设计——简易计算器程序设计FCL指导老师:东南大学机械工程学院2009-10-12目录摘要 (3)Abstract (4)第一章绪论 (5)1.1 引言 (5)1.2 MFC主要的界面风格 (6)1.3 基于对话框设计的技术 (6)第二章程序设计 (7)2.1 计算器基本功能的需求 (7)2.2 计算器具体功能介绍 (7)2.3 详细设计的类 (8)第三章程序具体实现代码及步骤 (11)3.1 开始步骤 (11)3.2 对话框设计,变量关联 (11)3.3 加入的代码 (13)第四章运行实例 (31)结论 (34)致谢 (34)参考文献(References) (34)附录 (35)简易计算器程序设计摘要摘要内容(中文):通过MFC Windows 可以设计出许多的应用程序。
计算器是其中一个简单的,也是非常实用的应用程序。
此计算器可以进行+、-、×、÷、、sin、cos、tan、arcsin、arccos、arctan(输入,输出结果以度为单位)、、、、log、ln、。
关键词(中文):MFC,计算器,基本运算The Design of a Simple and Easy CalculatorAbstractAbstract (English):Through MFC, many programs can be designed. Calculator is just a simple and practical program. This calculator can operate +、-、×、÷、、sin、cos、tan、arcsin、arccos、arctan、、、、log、ln、、vector operations and imaginary number operations.Key words:MFC, Calculator, Basic operations, Vector operations, Imaginary number operations第一章绪论1.1 引言MFC,微软基础类(Microsoft Foundation Classes),是一种Application Framework,随微软Visual C++ 开发工具发布。
MFC计算器课程设计报告
MFC表达式计算器课程设计报告题目:利用MFC框架编写简易表达式计算器【分析】一.设计过程1.Windows消息处理机制的理解首先编写程序需要对Windows程序的消息处理机制(Message Handle)有个比较清晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
还有用户消息,比如鼠标的单击,双击,键盘的键入等。
2.界面的设计1)界面的初步设计仿照Windows附件里面的计算器,在资源视图中画好界面,如图:2)修改每个static的属性ID CAPTIONIDD_STA TIC4 简易表达式计算器IDC_STATIC1 待求表达式IDC_STATIC2 运算结果IDC_STATIC3 系统当前时间3)修改每个button的属性IDC_BUTTON1 等于(=)IDC_BUTTON2 全清(C)IDC_BUTTON3 清除(A) 结果如下图:4)修改每个button的处理机制在类向导Classwizard窗口中进行,如下图:其他button按钮的修改类似5)修改每个edit的类型和名称在类向导Classwizard窗口中进行:单击Add Variable按钮,在如下窗口中进行修改其他edit的修改类似最终结果如下:注:主要使用到Layout菜单中的Align功能对各个按钮进行对齐,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
6)系统菜单的添加在Menu的IDR_MENU1中添加系统菜单:同理在“帮助”菜单中添加“关于”。
二.设计步骤1. 添加头文件将Calculate.cpp(见附录)改为Calculate.h将其添加到计算器Dlg.cpp : implementation file中,如下:#include "Calculate.h"。
2.成员函数及其释义:void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyDlg dialogCMyDlg::CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg::IDD, pParent){//{{AFX_DATA_INIT(CMyDlg)// NOTE: the ClassWizard will add member initialization here //}}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_Control(pDX, IDC_EDIT3, m_time);DDX_Control(pDX, IDC_EDIT2, m_result);DDX_Control(pDX, IDC_EDIT1, m_input);//}}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_WM_TIMER()ON_BN_CLICKED(IDC_BUTTON3, OnButton3)ON_COMMAND(ID_ABOUT, OnAbout)ON_COMMAND(ID_QUIT, OnQuit)//}}AFX_MSG_MAPEND_MESSAGE_MAP()////////////////////////////////////////////////////////////////////////////// CMyDlg message handlers3.OnButton1()按钮的处理函数双击“等于(=)”按钮,添加如下代码:void CMyDlg::OnButton1(){// TODO: Add your control notification handler code hereCString str;char *ch;m_input.GetWindowText(str);ch = (LPSTR)(LPCTSTR)str;char ch2[50];strcpy(ch2,ch);Cal a(ch2);if(!a.OK){m_result.SetWindowText("表达式不合法!");// 表达式不合法,判别出来并给出相应的错误提示}else{if(a.Sign){m_result.SetWindowText("除数为零!");// 表达式不合法,可以判别出来并给出相应的错误提示}else{str.Format("%lf",a.GetV());m_result.SetWindowText(str);}}}以OnButton1()作为求值处理函数,函数的功能是单击等于(=)按钮,运算结果显示在IDC_EDIT2中4.OnButton2()按钮的处理函数双击“清除(C)”按钮,添加如下代码:void CMyDlg::OnButton2(){// TODO: Add your control notification handler code herem_result.SetWindowText("0");m_input.SetWindowText("");m_input.SetFocus();}//函数的功能是把上次输入的表达式清空5.OnButton3()按钮的处理函数双击“全清(A)”按钮,添加如下代码:void CMyDlg::OnButton3(){// TODO: Add your control notification handler code herem_input.SetWindowText("");m_input.SetFocus();}//函数的功能是把上次输入的表达式和运算结果都清除6.OnTimer(UINT nIDEvent)处理函数CWnd::SetTimer(1,500,NULL);//设置时间每隔500ms更新一次。
MFC实训_计算器
面向对象程序设计实训报告——简易计算器专业:电子信息工程学生姓名:唐伯虎学号: 9527指导教师:小行星2016年1月7 日1 总体设计1.1 设计任务使用Visual C++6.0 MFC编写一个计算器。
1.2 基本要求(1)按照题目要求独立设计计算器所需的所有按钮,并完成程序源码编写、调试及关键代码注释。
(40分)(2)能够实现+、-、*、/计算。
(10分)(3)能够实现对数及幂函数计算。
(15分)(4)能够实现三角函数及反三角函数计算。
(15分)1.3 发挥部分能够实现8,16,10,2进制之间相互转换。
(20分)2 方案设计2.1 需求性分析所谓计算器,就是要进行数值运算,提供1-9数字按键,让用户按下不同的数字键,可以是组合输入,然后再按下运算符按键实现两个或者多个数值的计算,因此在计算器中除了需要定义数字按键之外运算符按键也是必不可少的,但是运算符按键类型众多,实现的功能也是五花八门,有双目运算符,比如+ - * /这些,也有单目运算符,比如x^2,ln,sqrt,所针对的数字个数也不一样,因此在设计计算器之前需要明确好该计算器大致要实现怎样的功能,需要定义多少个按键,而不是什么按键都要添加,企图复杂化,这样一来,就会造成很多麻烦。
应该先从四则运算开始,然后逐一增加功能,循序渐进的进行,根据题目的要求,划分好制作的步骤先后顺序。
我在基本的要求基础上希望添加几个功能,分别是清除按键,这是少不了的,作用是初始化数据,清屏,然后是退格按键,在输入错误的情况下能够实现退格再输入;再次是Ans按键,用以保留上一次的运算结果,以备下次运算时需要;最后是圆周率PI,在需要用到圆周运算时不用输入3.1415……这么长的一段数值……但是这都是在完成基本功能的基础上添加的功能。
2.2 可行性分析本设计是简单计算器。
日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。
实验报告5:MFC计算器
计算机科学与技术系上机实验报告
课程名称:C++语言程序设计
班级:计科102
实验日期060075
指导教师:张永军
实验序号:05
实验成绩:
一、实验名称
MFC程序设计——计算器
二、实验目的及要求
本次上机实践所涉及并要求掌握的知识点
1.熟悉基于对话框形式的MFC程序设计
3.给按钮加上代码,设置属性
4.为实现操作添加必要函数
六、调试过程及实验结果
详细记录程序在调试过程中出现的问题及解决方法。
记录程序执行的结果。
对题目要求理解不好,导致开始没找到代码应添加的位置,没能加上计算结果功能,经重新审查得以解决。
七、总结
对上机实践结果进行分析,问题回答,上机的心得体会及改进意见。
2.熟悉对界面操作的基本属性
3.编写用户界面的计算器程序
三、实验环境
本次上机实践所使用的平台和相关软件
Vs2010
四、实验内容
上机实践内容等
创建一个简单的计算器,实现简单的运算操作。
五、算法描述及实验步骤
用算法表示方法,流程图等形式表达算法设计思想与算法实现步骤
1.创建一个基于对话框的项目
2.给对话框加入相应的操作按钮
还是不熟悉相应属性的设置,导致程序运行出错,还有就是希望能改进材料的详细过程。
八、附录
源程序(核心代码)清单或使用说明书,可另附纸
BOOL CDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Sav="0.00";
m_S1=m_S2=m_S3;
UpdateData(FALSE);
MFC计算器编程设计报告
MFC计算器编程设计报告地信091指导老师:2010.11.15一(题目:利用MFC框架编写简易计算器要求使用MFC框架在Visual Studio 6.0环境下编写一个简易的计算器,支持任意位数的加减乘数,正负转换,并且实现BackSpace CE C功能。
二(设计过程1. Windows消息处理机制的理解首先编写程序需要对Windows程序的消息处理机制(Message Handle)有个比较清晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
还有用户消息,比如鼠标的单击,双击,键盘的键入等。
2. 界面的设计仿照Windows附件里面的计算器,在资源视图中画好界面,如图:主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
3. 建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION Message Handler简易计算器 1.0 Beta1版 IDD_CALC_DIALOG N/A IDC_NUM0 0 OnNum0IDC_NUM1 1 OnNum1IDC_NUM2 2 OnNum2IDC_NUM3 3 OnNum3IDC_NUM4 4 OnNum4IDC_NUM5 5 OnNum5IDC_NUM6 6 OnNum6IDC_NUM7 7 OnNum7IDC_NUM8 8 OnNum8IDC_NUM9 9 OnNum9IDC_NEG +/- OnNegIDC_PT . OnPtIDC_DIV / OnDivIDC_MUL * OnMulIDC_MIN - OnMinIDC_ADD + OnAddIDC_BACKSPACE BACK OnBackspaceIDC_CE CE OnCeIDC_CLEAR C OnClearIDC_EQU = OnEquIDC_DIS N/A N/AOnCal(double num) 变量定义:double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。
mfc实验报告
mfc实验报告MFC实验报告引言:MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的C++类库,它提供了一套丰富的类和函数,使开发者能够更加方便地创建图形界面、处理用户输入和输出、管理窗口等。
本实验旨在通过使用MFC库来开发一个简单的图形界面应用程序,以展示MFC的基本功能和使用方法。
一、实验准备在开始实验之前,我们需要安装Visual Studio软件,该软件集成了MFC库。
通过Visual Studio,我们可以轻松创建一个MFC项目,并使用其中的工具和组件来开发我们的应用程序。
二、创建MFC项目1. 打开Visual Studio软件,选择“创建新项目”。
2. 在弹出的对话框中,选择“Visual C++” -> “MFC” -> “MFC应用程序”。
3. 输入项目名称和保存路径,点击“确定”按钮。
4. 在下一个对话框中,选择“单文档”或“多文档”应用程序,根据需要进行选择。
5. 点击“完成”按钮,Visual Studio将自动生成一个基本的MFC应用程序框架。
三、设计图形界面MFC提供了丰富的工具和组件,使我们能够轻松地设计出漂亮的图形界面。
在本实验中,我们将创建一个简单的计算器应用程序作为示例。
1. 在Visual Studio的资源视图中,找到“Dialog”文件夹,双击打开“MainDialog”对话框。
2. 在对话框上拖拽和调整按钮、文本框等控件,设计出计算器的布局。
3. 双击每个按钮控件,添加相应的点击事件处理函数,实现计算器的功能逻辑。
四、添加功能逻辑1. 在Visual Studio的“类视图”中,找到“MainDialog”类,双击打开对应的源文件。
2. 在源文件中,找到“BEGIN_MESSAGE_MAP”和“END_MESSAGE_MAP”之间的区域,在其中添加按钮点击事件的处理函数。
3. 在处理函数中,根据按钮的功能,编写相应的逻辑代码。
MFC简单计算器设计正文
MFC简单计算器设计正文实用计算器程序1.基本功能描述计算器是人们日常生活中非常实用的计算工具。
预期设计目标与实际计算器为标准,Windows 10系统提供的计算器为范例进行设计。
实用计算器要实现单目运算和双目运算。
单目运算主要包括阶乘、正弦、余弦;双目运算主要包括加、减、乘、除、乘幂等。
计算器要能够对输入的各种数据进行处理,包括小数、整数、负数等数据进行操作。
实际过程中要能够对不同的数据灵活判断执行。
同时要能够对不满足运算符的操作数,提示出错信息以方便用户进行处理。
用户的修改包括清屏和退格。
程序设计的重点和难点在于:第一,能够对于不同的操作数和操作符进行连续运算,运算过程中要有优先级的判断,根据优先级执行不同的运算顺序;第二,能够用一个编辑框实现运算表达式的显示和结果的输出。
编程环境采用Visual Studio 2017提供的MFC建立对话框应用程序,设计界面要简单大方,并提供程序所有功能的接口。
2.设计思路表1 操作符优先级设计优先级操作符1 阶乘、正弦、余弦2 乘幂3 乘、除4 加、减对对话框编辑框关联一个变量从中读取数据,按下数字键时对数据数组num[]进行更新,其中num[0]表示的是当前已经存储变量的个数。
由于算法设计为四层优先级,且单目运算的优先级最高。
当按下相应单目运算符,首先将当前数据数组的最后一个存储(防止按下Backspace退格发生错误),并将此位数据执行运算后重新赋值。
但按下双目运算符相应按键后,将计数num[0]++,同时将运算符的类型和位置记录。
当按下等于之前,这样就将一个单目双目混合的运算表达式转化为双目运算。
如果没有按下等号键,则继续执行循环。
在按下等号按钮之后,按照先乘幂、再乘除、后加减的运算顺序执行运算,将最后结果保存并显示。
(在实际的计算器中,执行完运算之后,按下运算符的操作键,最终结果将按照左操作数的形式出现,故需要保存变量。
)如果用户没有结束程序,在运行初始化程序,进行下一次运算,否则直接退出。
MFC计算器课程设计
计算器实验报告2013年6月11日星期二系统设计要求用MFC制作一个计算器,它能在实数范围内进行加、减、乘、除运算。
在运算时要考虑运算符的优先顺序。
要求能显示输入的算式和输出的结果。
设计思路充分利用CString 的功能:1.读入表达式在该过程中,只需要考虑会输入哪些算式,不需要考虑算式的合理性。
2.解析表达式2.1 将CString类的表达式转化为易操作的char类字符数组。
2.2 在运算时,要区分运算符和数字,将它们分别存到两个数组中,由于加减乘除运算符都是二元的,所以数字的个数一定比运算符的个数多一个。
3. 运算3.1 在运算时,第i 个运算符要做的是将第i 个数字与第i+1个数字相运算,运算完后将值赋给第i 个数字,而i 后面的每一个数字都可以往前面挪一个;运算符自运算过的运算符后的每一个都可以往前挪一个。
形象地表示为:在进行一次运算后,若后面补过来的运算符是与它同等级的,则此时的i 依旧没变,所以再对该i 进行运算。
3.2 运算符的优先级。
乘除的优先级大于加减,所以先对乘除进行以上的计算,同样同等级的i 不变,若变化后的b[i]不为乘除,则i++,看下一个运算符。
4.附加功能4.1 括号括号采用递归运算。
运算的函数得到一个CString类型的形参,返回一个float 型的值。
要处理括号,则截取括号里的字符串,递归调用运算的函数,将返回的值存到float 型的数组中去。
4.2 三角函数,指数函数,对数函数采用和括号相类似的方式,在解析时,若读到有三角函数,则递归计算三角函数括号内的式子,将返回的值用<cmath>中的函数计算。
4.3十进制与十六进制的转换将十六进制转化为十进制,只要从左向右,第i个数字乘以16的i-1次幂即可;将十进制转化为十六进制,则要将对16取模,再将得到的char数组倒置一下。
系统功能模块图系统流程图类的层次图关键程序代码1.显示输入UpdateData(true);m_strInput+="0";UpdateData(false);2.将CString转化为字符数组const int len=m_strInput.GetLength();char m[100];memcpy(m,m_strInput,len);3.将存在字符数组的数字转为float型数字存在float型的数组里for(i=0;i<len;){int c=0,j=i;if(m[j]>='0'&&m[j]<='9'){while(m[j]>='0'&&m[j]<='9'){num[countNum]=num[countNum]*10+(m[j]-'0');j++;c++;} //没有小数点的读法if(m[j]=='.'){c++;float t=static_cast<float>(0.1);j++;while((m[j]-'0'>=0)&&(m[j]-'0'<=9)){num[countNum]+=t*static_cast<float>(m[j]-'0');t*=static_cast<float>(0.1);j++;c++;}} //有小数点countNum++;}//取数字4.取运算符if(m[i]=='+'||m[i]=='-'||m[i]=='*'||m[i]=='/'){op[countOperator]=m[i];c++;countOperator++;} //取运算符5.运算(以乘法为例)for(i=0;i<countOperator;) //先计算乘除{if(op[i]=='*'||op[i]=='/'){if(op[i]=='*'){count1++;num[i]*=num[i+1];op[i]=op[i+1];int j;for(j=i+1;j<countNum-1;j++) //每算完一次后该数字后面的数字都往前挪一个,运算符也都往前挪一个{num[j]=num[j+1];}num[j]=0;for(j=i+1;j<countOperator-1;j++){op[j]=op[j+1];}op[j]='0';}}elsei++;6.遇括号和cmath中的函数递归(以括号为例)CString b=a;b = b.Left(b.Find(')'));b = b.Right(b.GetLength()-1-b.ReverseFind('('));num[countNum]=Processing(b);c+=2+b.GetLength();countNum++;7.左右括号不符合报错if(m_strInput.Find('(')*m_strInput.ReverseFind(')')<0)AfxMessageBox("Syntax Error!");总结1.功能:该计算器能在实数范围内进行加减乘除四则混合运算,并通过加括号改变运算次序,能计算三角函数值(弧度制),能计算指数函数和对数函数(以e为底),能将数字在十进制与十六进制间进行转化。
MFC计算器编程设计报告
MFC计算器编程设计报告地信091指导老师:2010.11.15一(题目:利用MFC框架编写简易计算器要求使用MFC框架在Visual Studio 6.0环境下编写一个简易的计算器,支持任意位数的加减乘数,正负转换,并且实现BackSpace CE C功能。
二(设计过程1. Windows消息处理机制的理解首先编写程序需要对Windows程序的消息处理机制(Message Handle)有个比较清晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
还有用户消息,比如鼠标的单击,双击,键盘的键入等。
2. 界面的设计仿照Windows附件里面的计算器,在资源视图中画好界面,如图:主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
3. 建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION Message Handler简易计算器 1.0 Beta1版 IDD_CALC_DIALOG N/A IDC_NUM0 0 OnNum0IDC_NUM1 1 OnNum1IDC_NUM2 2 OnNum2IDC_NUM3 3 OnNum3IDC_NUM4 4 OnNum4IDC_NUM5 5 OnNum5IDC_NUM6 6 OnNum6IDC_NUM7 7 OnNum7IDC_NUM8 8 OnNum8IDC_NUM9 9 OnNum9IDC_NEG +/- OnNegIDC_PT . OnPtIDC_DIV / OnDivIDC_MUL * OnMulIDC_MIN - OnMinIDC_ADD + OnAddIDC_BACKSPACE BACK OnBackspaceIDC_CE CE OnCeIDC_CLEAR C OnClearIDC_EQU = OnEquIDC_DIS N/A N/AOnCal(double num) 变量定义:double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。
基于MFC的简易计算器制作设计
《一个简单的计算器设计》课程设计报告学院:计算机工程学院学号: 2012304030223姓名: 朱钟雄专业年级:12计算机应用技术2班指导教师: 游明坤时 间: 2014年12月25日JINGCHU UNIVERSITY OF TECHNOLOGY基于对话框的计算器MFC方法实现随着社会的发展,人们在日常生活中经常需要用到计算器来进行简单或者复杂的运算,计算器在人们生活中的地位也越来越重要。
简单的计算器能实现加、减、乘、除、开方、平方等运算。
学习了C++的程序设计语言这门课程,可以利用基于VC的MFC方法制作一个简易的计算器,实现基本的运算功能,从而满足生活中的需要,降低计算的难度。
一。
面向对象的程序设计方法区别与面向过程的“先功能后数据”思想,面向对象的程序设计方法把状态(数据)和行为(功能)捆绑在一起,形成了对象.当遇到一个具体的问题时,我们只需要将一个系统分解成一个个的对象,同时将状态和行为封装在对象中。
面向对象的程序设计方法具有三个基本特点:封装、继承和多态。
(1)封装性封装是一个用来指代将对象的状态和行为捆绑到一个单一逻辑单元的机制的正式术语。
它不是面向对象语言所特有的,面向过程的C语言用结构封装了数据,函数封装了逻辑.但是面向对象封装了两者,从这种意义上来说,面向对象的封装更加完美。
出于一些安全性与方便性的考虑,对象经常会限制对它们特征(包括属性和方法)的访问,这种限制称为信息隐藏。
作为对象的抽象,类通常只公开对象可以公开的东西,主要是一个特定对象对系统的服务,而隐藏执行服务的内部细节和为了完成这些服务而设计的数据。
( 2)继承性继承是定义新类的一种机制,使用这种机制创建新类时只需要声明新类和已创建类之间的差别。
对于一个特定的继承关系,我们将创建的新类称为子类(subclass),被继承的原始类称为超类(superclass)。
子类可以使用超类定义属性和方法,也可以自己定义新的属性和方法.超类的特征不会受到子类的影响。
- 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刘砺锋。