基于MFC的科学计算器编程
c面向对象程序设计MFC简单计算器实验报告
c面向对象程序设计M F C简单计算器实验报告Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#计算机与信息工程学院《程序设计基础》课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。
2. 能实现加、减、乘、除及乘方的运算。
3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字1 时,在计算器图形上的1键变为红色。
4. 屏幕、图形颜色、形状自定3 总体设计总体框架图1 系统框架系统功能说明在VC++中绘制计算器界面,各控件的设置对0~9控件设定相应的ID和其他属性:图2 “1”控件设置对“+、-、*、\”控件设定相应的ID和其他属性:图2 “+”控件设置对其它控件设定相应的ID和其他属性:图3 其它控件设置主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
4 程序详细设计系统主调模块图5 程序流程图各模块详细设计建立的变量,控件的命名,对应的消息处理函数对应表double poz; 按钮的处理函数void CCalcDlg::OnPt(){point_flag=TRUE; && buffer[i+1]==0)之前那位}m_Dis=strtod(buffer,NULL);整个大的程序的实现分8个功能,每个功能都通过一个相应的函数来实现.在调试时分别进行调试,使得调试更方便些.在编写各个函数只是按着题目要求的去完成,后来经指导老师指导后,发现了很多自己欠缺的地方,又一次将程序整体进行调试.最后把程序完善了许多。
C++-MFC计算器编程课程设计实践报告
中南大学本科生课程设计(实践)设计报告(程序设计基础)题MFC编程科学计算器目学生1104120502学号学生郭斌繁姓名指导蔡旭晖教师学院交通运输工程学院专业交通运输类1205班班级计算机基础教学实验中心2013年7月1日程序设计(C++)实践报告1.引言C++语言的主要特点表现在两个方面,一是全面兼容C语言,二是支持面向对象的程序:(1) C++是一个更好的C,它保持了C S言的优点,大多数的C程序代码略作修改或不作修改就可在C++的集成环境下调试和运行。
这对于继承和开发当前已在广泛的软件是非常重要的,可以节省大量的人力和物力。
(2) C++是一种面向对象的程序设计语言它使得程序的各个模块的独立性更强,程序的可读性和可移植性更强,程序代码的结构更加合理,程序的扩充性更强。
这对于设计、编制和调试一些大型的软件尤为重要。
⑶C++集成环境不仅支持C++程序的编译和调试,而且也支持C程序的编译和调试。
通常,C++ 程序环境约定:当源程序文件的扩展名为c.时,则为C程序;而当源程序文件的扩展名为cpp.时,则为C++?序。
(4)C++语句非常简练,对语法限制比较宽松,因此C++语法非常灵活。
其优点是给用户编程带来书写上的方便。
其缺点是由于编译时对语法限制比较宽松,许多逻辑上的错误。
次课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。
并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。
(1).设计目标利用MFC程序开发工具设计一款可以进行简单计算及部分科学计算的计算器。
在设计当中将综合“面向对象程序设计与结构化程序设计”的思想方法和知识点,编制一个小型的应用程序系统。
通过此设计进一步提高自己的动手能力,并能使自己清楚的知道开发一个应用程序的思想、方法和流程。
(2).选题分析此次实践所选题目中除了简单的加减乘除运算程序之外还包括了余弦函数、双曲余弦函数、度分秒的转换和X的y次方及y次根号下x的运算程序。
MFC计算器
《C++面向对象程序设计》实验报告学院:信息科学与工程学院专业:学号:姓名:一.题目:利用MFC框架编写Windows附件中所示的简易计算器二.功能描述:1.能够实现最基本的加,减,乘,除四则基本运算。
2.界面有清空,退格按钮,方便用户计算使用。
3.此计算器具有开方,取倒数,求对数的高级运算。
三.概要设计:1.Windows消息处理机制通过对教材的阅读,对Windows程序的消息处理机制有个大致的了解。
Windows的程序都是通过消息来传送数据,并且存在异常处理等不需要用户参与的系统消息,用户消息就是鼠标的单击,双击等。
2.界面的设计如图,简易的计算器界面主要使用菜单中相关控件,并合理的布置各个按钮的位置,使得界面让用户看起来整洁简单。
3.框架描述Windows 简易计算器在资源视图画好界面添加控件的同时,通过属性修改名称为各个按钮和编辑框添加不同的函数四则运算+,-,*,/ 1/x,lgx等函数退格和清空键4.建立的变量和控件的命名,对应的消息处理函数命名表ID CAPTION Message Handler IDC_BUTTON0 0 OnButton0()IDC_BUTTON1 1 OnButton1()IDC_BUTTON2 2 OnButton2()IDC_BUTTON3 3 OnButton3()IDC_BUTTON4 4 OnButton4()IDC_BUTTON5 5 OnButton5()IDC_BUTTON6 6 OnButton6()IDC_BUTTON7 7 OnButton7()IDC_BUTTON8 8 OnButton8()IDC_BUTTON9 9 OnButton9()IDC_BUTTON10 . OnButton11()IDC_BUTTON11 = OnButtonequal() IDC_BUTTON12 + OnButtonadd()IDC_BUTTON13 - OnButtoncut()IDC_BUTTON14 * OnButtonmultiply() IDC_BUTTON15 / OnButtonremove() IDC_BUTTON16 1/x OnButton1x()IDC_BUTTON17 lg OnButtonlg()IDC_BUTTON18 sqrt OnButtonsqrt()IDC_BUTTON19 Backspace OnButtonbackspace() IDC_BUTTON20 C(清空) OnButtonclear()5.下图是基本对话框中所有的类四.详细设计:1.新建工程,选择MFC AppWizard[exe],并命名工程的名称为mycalculator2.选择基本对话框3.通过控件添加各种按钮和编辑框(对话框右边的“Controls”控件箱提供了可用于对话框的各种组建,在此次计算器中,基本上只用到上面四个控件,对话框只能通过控件来实现它们的功能,把控件中的数据保存在对话框类的数据成员中,应用程序才能通过这些数据成员获取控件中的数据)4.考虑用户们的习惯,把编辑框的显示的数字属性由靠左改成靠右(选中编辑框,右击选择属性-样式,排列文本改为向左)5.用同样的方法改变按钮的标题,其他按钮同理6.为美观改变对话框的标题为“计算器”7.右击编辑框添加类向导,添加变量m_result,且type为CString//可通过其改变类型和名称8.实现每个按钮的功能,双击按钮,为按钮添加函数,可以改变函数的名称① 0~9和小数点的函数大致类似void CMycalculatorDlg::OnButton1(){// TODO: Add your control notification handler code herem_result +=_T("1");UpdateData(FALSE);}函数_T()可以对字符串进行操作,UpdateData(FALSE)可以把数据传到文本框里面,小数点与数字同样这样处理。
visual 2015 mfc 计算器 代码
以下是一个简单的 Visual Studio 2015 MFC 计算器的示例代码。
它包括两个窗口,一个用于输入和显示数字,另一个用于显示结果。
```cpp// MainFrm.cpp : implementation of the CMainFrame class //#include "pch.h"#include "framework.h"#include "Calculator.h"#include "MainFrm.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()ON_WM_DESTROY()ON_COMMAND(ID_APP_ABOUT,&CMainFrame::OnAppAbout)ON_COMMAND(ID_FILE_NEW, &CMainFrame::OnFileNew) ON_COMMAND(ID_FILE_EXIT, &CMainFrame::OnFileExit) ON_COMMAND(ID_EDIT_CLEAR,&CMainFrame::OnEditClear)ON_COMMAND(ID_EDIT_COPY,&CMainFrame::OnEditCopy)ON_COMMAND(ID_EDIT_PASTE,&CMainFrame::OnEditPaste)ON_COMMAND(ID_VIEW_SPLIT,&CMainFrame::OnViewSplit)ON_COMMAND(ID_VIEW_FULL,&CMainFrame::OnViewFull)ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR,&CMainFrame::OnUpdateEditClear)ON_UPDATE_COMMAND_UI(ID_EDIT_COPY,&CMainFrame::OnUpdateEditCopy)ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE,&CMainFrame::OnUpdateEditPaste)END_MESSAGE_MAP()static UINT indicators[] ={ID_SEPARATOR, // status line indicatorID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};CMainFrame::CMainFrame() : CFrameWndEx(){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}CMainFrame::~CMainFrame(){}int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)return -1;// Create a view to host the client window. This object will be responsible for drawing the client area.// Set initial host view properties.CView* pView = new CView;if (!pView)return -1;pView->Create(_T("Calculator"), WS_CHILD | WS_VISIBLE | WS_BORDER | 500, CRect(0, 0, 200, 200), this);m_viewList.AddTail(pView);// m_pActiveView = pView;// m_bIsSplitterBar = TRUE;// m_bIsHorzSplit = TRUE;// m_bIsVerSplit = FALSE;// m_bIsDocTemplate = TRUE;// Create a toolbar control and initialize it.CToolBarCtrl mtbBarCtrl;// Create a command bar control and initialize it.CCommandBarCtrl commandBarCtrl; // Create a status bar control and initialize it. // Create a menu control and initialize it. CMenu menuBar;menuBar.CreateMenu();menuBar.AppendMenu(MF_POPUP, IDM_FILE, _T("&File"));menuBar.AppendMenu(MF_POPUP, IDM_EDIT, _T("&Edit")); menuBar.AppendMenu(MF_POPUP,IDM_VIEW, _T("&View")); menuBar.AppendMenu(MF_POPUP, IDM_INSERT, _T("&Insert")); menuBar.AppendMenu(MF_POPUP, IDM_FORMAT, _T("&Format")); menuBar.AppendMenu。
基于vc++mfc的科学计算器程序实验报告
实验报告课程名称:windows软件开发实习实验项目:科学计算器工业大学实验报告(适用计算机程序设计类)专业班级:软件1006 学号:101201622 :鑫可实验名称:附件A 工业大学实验报告(适用计算机程序设计类)专业班级:软件1006 学号:101201622 :鑫可实验步骤或程序:一、关于Visual C++:Visual C++6.0由Microsoft开发, 它不仅是一个C++ 编译器,而且是一个基于Windows 操作系统的可视化集成开发环境(integrated development environment,IDE)。
Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。
这些组件通过过一个名为Developer Studio的组件集成为和谐的开发环境。
Microsoft的主力软件产品。
Visual C++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。
所以实际中,更多的是以Visual C++6.0为6平台。
Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。
这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。
二、设计要点1、基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。
VC6.0制作简易计算器MFC[整理]
1、单击File(文件)菜单,选中New(新建),创建新工程。
2、选择工程栏中MFC AppWizard[exe]应用程序,并命名工程名称为calculator.(如图)3、选择MFC应用程序为“基于对话框”类型,其他选项默认。
单击完成(如图)4、修改界面。
经过前3步骤,VC6.0生成的工作界面如图所示。
先将对话框中的“TODO:在这里设置对话控制”静态文字控件和“确定”按钮控件删除,再使用工具箱将界面拖动控件修改为如图所示的界面。
该图所示是使用工具箱的控件拖放制作的计算器初始界面。
由于这些控件都有默认的名字,所以我们要对控件进行改名,右击Button1按钮,选中Properties(属性)选项以修改控件的属性,如图所示。
在弹出的对话框中,将Button1按钮的Caption(标题)属性修改为“+”,此时初始界面同时变成相应的“+”如下图所示。
修改后的界面如图所示,控件的Caption属性就是控件显示出来的值。
按照前文所讲述的方式,将界面上的按钮控件和静态文本控件的Caption属性都做相应的修改,修改后的界面如图所示。
5、为Edit(编辑)控件添加类的成员变量。
首先,右击Edit控件,选择ClassWizard(建立类向导)选项,如下图所示。
在弹出的对话框中,选择上方MemberVariables选项卡,选中DIC_EDIT1,然后单击单击右侧的Add Variable按钮,如图所示。
单击Add Variable按钮后会跳出,如图所示的对话框,该对话框是设置成员变量的命名和数据类型,在此可以命名为m_data1.注意:控件的ID只是标记一个控件,程序中不能直接控制ID,只能通过修改变量来改变控件的状态。
00相应的,再将另外两个Edit控件命名,本项目就将这3个Edit控件命名为:●IDC_EDIT1:m_data1,类型为double.●IDC_EDIT2:m_data2,类型为double.●IDC_EDIT3:m_result,类型为double.6、添加按钮控件的消息处理函数。
MFC下的科学计算器
MFC下的科学计算器MFC (Microsoft Foundation Classes) 是Microsoft在windows上用于构建图形用户界面 (GUI) 的一套类库。
在MFC下开发一个科学计算器,可以实现基本的数学运算,包括加、减、乘、除,以及科学计数、平方、开方等功能。
首先,我们需要创建一个新的MFC应用程序项目。
在Visual Studio中选择“新建项目”,然后选择“MFC应用程序”。
在项目向导中,选择“单文档”视图,点击“完成”创建项目。
在代码视图中,我们可以使用Class Wizard来添加的响应函数。
打开Class Wizard,切换到“消息映射”选项卡,在列表中选择“控件”和“消息”,然后点击“添加函数”来添加事件处理函数。
除了基本的加减乘除功能,我们还可以添加其他的科学计算功能,例如平方、开方、三角函数等。
这些功能使用C++的数学库函数实现。
在完成功能的设计和实现后,我们可以进行调试和优化。
在调试期间,我们可以使用断点来跟踪代码的执行过程,检查变量的值和程序的状态。
如果遇到错误或异常情况,可以使用调试工具和日志功能来定位和解决问题。
同时,我们还可以根据用户的反馈和需求,对功能和界面进行优化和改进。
最后,我们可以将应用程序编译成可执行文件,方便用户安装和使用。
可以使用发布功能来生成安装程序,然后将可执行文件和相关文件打包,发布给用户。
总结一下,使用MFC开发一个科学计算器需要以下几个步骤:创建MFC应用程序项目、设计用户界面、实现计算功能、调试和优化、发布应用程序。
通过这个过程,我们可以了解和掌握MFC开发的基本流程和技巧,进一步提升编程能力和开发经验。
MFC计算器介绍
基于对话框实验,写一个计算器,实验结果:工具:VS2010遇到的问题:编译遇到字符串不能转换为char *,在字符串前面加_T解决了。
1.首先新建一个MFC项目,在工具框里面拖出工具,摆好布局,修改caption和ID栏2.在头文件添加CString num1;CString num2;CStringm_result;boolisresult;int witch;在初始化函数里面初始化// TODO: 在此添加额外的初始化代码num1="";num2="";isresult=false;witch=0;3.数字键代码voidCcalculatorDlg::OnBnClickednum1(){// TODO: 在此添加控件通知处理程序代码if(isresult==false){num1+="1";m_result=num1;UpdateData(false);}if(isresult==true){num2+="1";m_result=num2;UpdateData(false);}}运算符键代码:voidCcalculatorDlg::OnBnClickedjia(){// TODO: 在此添加控件通知处理程序代码isresult=true;witch=1;}等于键代码:voidCcalculatorDlg::OnBnClickeddengyu(){// TODO: 在此添加控件通知处理程序代码UpdateData(true);double number1=_ttof(num1);double number2=_ttof(num2);double result=0.0;switch(witch){ case 1: result=number1+number2;break;case 2: result=number1+number2;break;case 3: result=number1+number2;break;case 4: result=number1+number2;break;}m_result="";m_result.Format(_T("%lf"),result);UpdateData(false);}点号代码:voidCcalculatorDlg::OnBnClickeddot(){if(isresult==false){num1+=".";m_result=num1;UpdateData(false);}if(isresult==true){num2+=".";m_result=num2;UpdateData(false);}}3.这些函数是双击相应键添加框架,自己完善细节的。
用c语言编写的计算器源代码
作品:科学计算器作者:欧宗龙编写环境:vc++6.0语言:c#include"stdafx.h"#include<stdio.h>#include<windows.h>#include<windowsx.h>#include"resource.h"#include"MainDlg.h"#include<math.h>#include<string.h>#definePI3.141593BOOLA_Op=FALSE;BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam) {switch(uMsg){HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);}returnFALSE;}BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam){returnTRUE;}voidTrimNumber(chara[])//判断并删除小数点后无用的零{for(unsignedi=0;i<strlen(a);i++){if(a[i]=='.'){for(unsignedj=strlen(a)-1;j>=i;j--){if(a[j]=='0'){a[j]='\0';}elseif(a[j]=='.'){a[j]='\0';}elsebreak;}}}}doubleOperate(charOperator,doublen1,doublen2)//判断符号,进行相应的运算{if(Operator=='0'){}if(Operator=='+'){n2+=n1;}if(Operator=='-'){n2=n1-n2;}if(Operator=='*'){n2*=n1;}if(Operator=='/'){n2=n1/n2;}if(Operator=='^'){n2=pow(n1,n2);}return n2;}////////////////////////////////////////////////voidIntBinary(chara[],intn){if(n>1)IntBinary(a,n/2);sprintf(a,"%s%i",a,n%2);}voiddecimal(chara[],doublem){if(m>0.000001){m=m*2;sprintf(a,"%s%d",a,(long)m);decimal(a,m-(long)m);}}voidBinary(chara[],doubleNum){charDecP[256]="";doublex,y;double*iptr=&y;x=modf(Num,iptr);decimal(DecP,x);IntBinary(a,(int)y);strcat(a,".");strcat(a,DecP);}////////////////////////////////////voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify) {staticDELTIMES=0;staticcharstr[256];staticcharOperator='0';staticdoubleRNum[3];switch(id){caseIDC_BUTTONN1://数字1{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"1");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN2://数字2{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"2");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN3://数字3{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"3");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN4://数字4{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"4");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN5://数字5{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"5");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN6://数字6{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"6");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN7://数字7{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"7");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN8://数字8{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"8");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN9://数字9{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"9");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN0://数字0{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"0");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;case{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));if(DELTIMES==0){strcat(str,".");}DELTIMES++;SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=FALSE;}break;caseIDC_BUTTONADD://加法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='+';DELTIMES=0;A_Op=TRUE;}break;caseIDC_BUTTONSUB://减法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);DELTIMES=0;A_Op=TRUE;Operator='-';}break;caseIDC_BUTTONMUL://乘法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='*';DELTIMES=0;A_Op=TRUE;}break;caseIDC_BUTTONDIV://除法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='/';DELTIMES=0;A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='^';DELTIMES=0;}break;caseIDC_BUTTONPI://圆周率PI,弧度{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));if(atof(str)!=0){RNum[2]=atof(str)*PI;sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);}else{sprintf(str,"%f",PI);SetDlgItemText(hwnd,IDC_EDIT,str);}A_Op=TRUE;}break;caseIDC_BUTTONSQRT://开根号{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=sqrt(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONSIN://三角函数sin函数{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=sin(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=cos(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=tan(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONSQ://平方{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str)*atof(str);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str)*atof(str)*atof(str);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=exp(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=pow(10,atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONLN://lnx{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=log(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONLOG10://log10{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=log10(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONBINARY://十进制转换为二进制{chara[256]="";GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str);Binary(a,RNum[2]);strcpy(str,a);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{DELTIMES=0;Operator='0';RNum[0]=RNum[1]=RNum[2]=0;memset(str,0,sizeof(str));SetDlgItemText(hwnd,IDC_EDIT,NULL);A_Op=FALSE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));inti=strlen(str);str[i-1]='\0';SetDlgItemText(hwnd,IDC_EDIT,str);}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='0';DELTIMES=0;}break;default:break;}}voidMain_OnClose(HWNDhwnd){EndDialog(hwnd,0);}本人拙作,如有不足之处请谅解。
mfc设计科学计算器课程设计
mfc设计科学计算器课程设计一、课程目标知识目标:1. 让学生掌握MFC(Microsoft Foundation Classes)的基本概念和原理,理解其在设计科学计算器中的应用。
2. 使学生了解科学计算器的基本功能,如标准运算、三角函数、对数等,并运用MFC实现这些功能。
3. 帮助学生掌握Visual C++编程环境中MFC的使用方法,培养其运用MFC 进行软件开发的能力。
技能目标:1. 培养学生运用MFC设计界面、处理用户输入和输出结果的能力。
2. 让学生学会使用MFC中的事件处理机制,实现科学计算器的功能按键响应。
3. 提高学生的问题分析能力,使其能够根据实际需求设计合理的MFC程序结构。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养其主动学习和探究的精神。
2. 培养学生的团队协作意识,使其在编程实践中学会与他人分享和交流。
3. 引导学生认识到科技发展对社会进步的重要性,激发其创新精神和责任感。
课程性质:本课程为实践性较强的课程,结合理论讲解和实际操作,帮助学生掌握MFC设计科学计算器的技能。
学生特点:学生具备一定的C++编程基础,对MFC有一定了解,但实际应用能力较弱。
教学要求:结合学生特点,注重理论与实践相结合,强调动手实践,提高学生的实际编程能力。
在教学过程中,将目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. MFC基础回顾:重温MFC的基本概念、框架结构和主要类的功能,重点掌握CWnd、CDialog、CString等类的使用方法。
相关教材章节:第一章 MFC概述,第二章 MFC类和对象。
2. 科学计算器功能设计:介绍科学计算器的基本功能,如标准运算、三角函数、对数等,并分析如何利用MFC实现这些功能。
相关教材章节:第三章 MFC控件编程,第四章 MFC绘图与界面设计。
3. 界面设计与实现:讲解如何使用MFC设计科学计算器的界面,包括窗口、菜单、按钮等控件的使用方法。
MFC基于对话框设计的简易计算器源代码
return CDialog::PreTranslateMessage(pMsg);
}
void CCALDlg::OnButton9()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_edit3=m_edalse);
}
void CCALDlg::OnButton7()
{
// TODO: Add your control notification handler code here
if(m_edit1==0)
{
MessageBox("不能对0求倒数");
return;
}
m_edit3=1/m_edit1;
UpdateData(false);
}
void CCALDlg::OnButton6()
{
// TODO: Add your control notification handler code here
{
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN)
return TRUE;
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)
}
void CCALDlg::OnButton2()
{
// TODO: Add your control notification handler code here
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为底),能将数字在十进制与十六进制间进行转化。
VC++6.0 MFC基于对话框简单计算器设计
VC++MFC基于对话框简单计算器设计1 实现计算器功能如图:用VC++建立MFC基于对话框的简单计算器。
简易计算器设计说明:1.三个编辑窗口:(1)其中两个为输入操作窗口:数1、数2,一个结果输出窗口。
(2)只有一个操作数时在第一操作窗口输入。
(3)键盘输入数据,运算符按钮输出结果。
2.多个运算操作按钮:(1)实现加减乘除的基本计算器功能。
(2)实现三角函数、对数、阶乘等的数值函数运算。
3.计算器设计过程:(1)首先建立MFC的基于对话框程序,命名为“TEST1”然后在对话框中加入三个编辑框,并用快捷键CTRL+W组合键打开MFC ClassWizard 切换到Member Variables中其中找到IDC_EDIT1、IDC_EDIT2、IDC_EDIT3分别添加对应的3个double型关联变量m_EDIT1_NUM、m_EDIT2_NUM、m_EDIT3_NUM。
关联变量:在后双击编辑框改变编辑框函数名并添加函数:UpdateData(TRUE);其他两个编辑框均进行此操作。
(2)在对话框中的适当位置添加20个按钮控件实现运算操作:a.操作说明按钮:鼠标放在按钮控件上,右击鼠标点击属性,改变按钮属性标题为“操作说明”,然后双击控件改变函数名并点击“确定”添加函数代码:void CTEST1Dlg::OnINTR() //计算器操作说明{// TODO: Add your control notification handler code hereMessageBox("例如M+N=?,在第一个编辑框输入M,第二个编辑框输入N,然后再点击运算符输出结果,减法、乘法、除法、取余等两个数运算的同理。
只有一个数进行运算的时候,在第一个编辑框输入数,然后点击运算符输出结果!");}b.两个数运算的按钮:与添加“操作说明”按钮类似,比如加法,改变按钮属性标题为“+”,然后双击控件添加函数代码:void CTEST1Dlg::OnADD() //加法运算:m+n{// TODO: Add your control notification handler code herem_EDIT3_NUM=m_EDIT1_NUM+m_EDIT2_NUM; //m_EDIT3_NUM、m_EDIT1_NUM、m_EDIT2_NUM为三个编辑框的对应关联变量GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW); //当执行双数运算时,重新显示第二个编辑框UpdateData(FALSE);}其他的两个数运算的同理。
MFC计算器
基于VC的MFC计算器案例步骤及源代码基于VC的MFC计算器案例详细步骤有图有代码,图中右边的各个函数也都能实现:清除,加,减,乘,除,倒数,e的x次方,以e为底x的对数,10的x次方,以10为底x的对数,余弦,反余弦,双曲余弦值,正弦,反正弦,双曲正弦值,正切,反正切,双曲正切值,x的y次方,2的x次方,n(n为整数)的阶乘。
如图:步骤:1.创建一个基于对话框的应用程序(这一步应该都会吧!),命名为dckCalculator;2.打开资源视图->点击“dckCalculator”左边的“+”->点击“dckCalculator.rc”左边的“+”->点击“Dialog”左边的“+”->双击“IDD_DCKCALCULATOR_DIALOG”->去除“确定”“取消”“TODO:在此放置对话框控件。
”几个组件(全选。
然后右击选择“删除”即可):3.按照我们想要的效果给对话框添加组件->编辑各个组件的显示名字->改变其ID属性4.将编辑框的属性中的Align Text设置为right,如图:5.设置相关属性(每次改变ID都要保存一下):6.将编辑框中属性的“read only”设置为ture!7.在类视图中给CdckCalculatorDlg类添加成员变量:int m_duType;初始值为0,用来作为判定弧度还是角度的变准;double m_first;//存储一次运算的第一个操作数及一次运算的结果double m_second;//存储一次运算的第二个操作数CString m_operator;//存储运算符double m_coff;//存储小数点的系数权值8.给编辑框添加关联变量:(右击编辑框->添加变量)CString m_display;//编辑框IDC_DISPLAY的关联变量,显示计算结果(注意最右边选择“value”)9.双击“弧度”给其添加事件响应(等价于右击然后添加事件处理器);同理双击“角度”添加代码://弧度处理函数void CdckCalculatorDlg::OnBnClickedHudu(){m_duType=0;//系统默认m_duType为,这里为刚好可以为计算器默认为弧度计算}//角度处理函数void CdckCalculatorDlg::OnBnClickedJiaodu(){m_duType=1;//当选择角度处理函数的时候,m_duType为;这哥主要是作为以后函数算法的判断标准}10.在对话框类的构造函数中,初始化成员变量:// CdckCalculatorDlg 对话框的构造函数CdckCalculatorDlg::CdckCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CdckCalculatorDlg::IDD, pParent), m_duType(0), m_first(0.0), m_second(0.0), m_operator(_T("+")), m_coff(0), m_display(_T("0.0"))······11.类视图里手动为对话框添加2个函数:void UpdateDisplay(double dck)——用于编辑框显示数据Void Calculate(void)——用于计算结果代码如下(由于在代码中要用到fabs,要在CdckCalculatorDlg.cpp 里添加一个库:#include"math.h")://在编辑框中显示数据void CdckCalculatorDlg::UpdateDisplay(double dck){m_display.Format(_T("%f"),dck);int i=m_display.GetLength();while(m_display.GetAt(i-1)=='0') //格式化输出,将输出结果后的零截去{ m_display.Delete(i-1,1); i--; }UpdateData(false);//更新编辑框变量m_display}//计算结果void CdckCalculatorDlg::Calculate(void){//将前一次数据与当前数据进行运算,作为下次的第一操作数,并在编辑框显示。
VS2024下计算器的MFC编程实现
VS2024下计算器的MFC编程实现MFC(Microsoft Foundation Classes)是Windows 平台上的一个基础类库,用于创建界面友好的Windows应用程序。
通过MFC,我们可以使用C++语言来编写Windows应用程序,并且能够充分利用Windows操作系统的各种功能。
计算器是一个经典的应用程序,可以通过MFC来实现。
下面我们将通过以下步骤来编写一个简单的计算器程序。
1.创建一个新的MFC应用程序项目在Visual Studio 2024中,选择File -> New -> Project,然后选择Visual C++ -> MFC -> MFC Application,并设置相应的项目名称和位置。
点击OK按钮创建项目。
2.设计界面在资源视图中,打开Dialog文件夹,双击IDD_CALCULATOR_DIALOG查看对话框。
在对话框中,我们可以添加按钮、文本框等控件来设计计算器的界面。
3.添加控件和事件处理函数在对话框中添加控件,如按钮、文本框等。
为按钮添加事件处理函数,在事件处理函数中实现计算器的相应功能。
例如,我们可以添加以下按钮:-数字按钮0-9-运算符按钮+、-、*、/-清空按钮C-等号按钮=-小数点按钮.对于数字按钮0-9,我们可以为每个按钮添加一个点击事件处理函数,将对应的数字添加到文本框中。
对于运算符按钮,我们可以为每个按钮添加一个点击事件处理函数,根据当前点击的运算符更新计算器的状态。
对于清空按钮C,我们可以为其添加一个点击事件处理函数,在事件处理函数中清空文本框的内容。
对于等号按钮=,我们可以为其添加一个点击事件处理函数,在事件处理函数中根据计算器的状态进行相应的计算,并将结果显示在文本框中。
对于小数点按钮.,我们可以为其添加一个点击事件处理函数,在事件处理函数中向文本框中添加一个小数点。
4.实现计算功能在事件处理函数中,我们可以使用字符串转换函数和数学运算函数来实现计算器的相应功能。
基于MFC的简易计算器课程设计
switch(nID)
{
case IDCumber;
if(NumberState==1)
number1=m_number;
else number2=m_number;
UpdateData(FALSE);
break;
case IDC_NUMBER12:
m_number=(int)m_number/10;
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;
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_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;
number1=m_number;break;
可视化编程课程设计(含源码)计算器系统实现
设计题目:计算器系统实现1.分别用API与MFC编程来实现计算器的以下功能。
2.实现计算器的基本功能:连续数据的无优先级混合运算(加减乘除)3.可以实现其他附加功能:优先级运算,加入括号,加入其他函数运算功能等。
(不在要求范围之内)4.要求界面良好,功能完整。
一.基于MFC的简单计算器1.设计思路打开MFC应用操作界面,布局计算器界面,利用组框将计算器界面分为三个部分,一个是编辑输入,一个是数字界面,一个是功能键部分。
利用布局参考线对齐按钮,使界面美观。
然后就是对各个按钮进行属性设置,关联类设置,接着对各个按钮进行源代码编程。
最后,调试找出问题,解决问题,运行MFC成品计算器。
2.简单操作以及功能说明由于本人技术有限,所以本程序只能按照正确的计算运算顺序进行,该简单计算器能进行四则混合运算,除了加减乘除外,添加了一个括号,对于有些未知的错误,由于时间有限,并未来得及全面测试使用。
该简单计算器能实现四则运算,退格运算,清零运算,并且支持输出的结果保留给直接的下一个运算。
3.系统实现的各个模块1)编辑框模块由于编辑框模块需要连续输入字符串,所以在给编辑框建立类向导时,给编辑框定义的成员变量应该是字符串(String)变量。
编辑框模块用于运算算式的输入,以及结果的输出。
2)数字键模块数字键模块比较简单,该简单计算器数字键模块设置有0~9数字,还设置有小数点,以及正负数转换实现按钮。
数字键模块按钮在建立类向导时无需定义成员变量,但是需要定义按钮响应链接,用于实现点击按钮,在编辑框上显示点击按钮信息。
3)功能键模块功能键模块包括加减乘除基本按钮,以及一个输入错误是后能用于退格功能的退格键按钮,还有一个用于区别优先级运算的括号功能,当然有最重要的计算结果输入按钮,等于号按钮。
在编辑框附近还有一个功能键,就是清除功能键,用于清除编辑框,以便实现下一轮输入。
4.设计过程1)设计总流程图2)界面的设计3)建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION MessageHandler IDD_JISUANQI_DIALOG 简易计算器N/AIDC_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_OPER_ADD + OnOperAdd IDC_OPER_SUB - OnOperSub IDC_OPER_MULTI * OnOperMulti IDC_OPER_DIV / OnOperDiv IDC_ADD_SUB +/- OnAddSubIDC_POINT . OnPointIDC_EQUAL = OnEqualIDC_LBRACKET ( OnLbracket1)数字键模块void CJiSuanQiDlg::OnNum0(){if(calculated == TRUE) //已经按了等号,不让其再接受字符return;UpdateData(TRUE);//刷新编辑框界面calcutateString += "0";//存储输入的数字m_data += "0";//显示输入的数字UpdateData(FALSE);}2)功能键模块①加法功能键源程序void CJiSuanQiDlg::OnOperAdd(){if(calculated == TRUE)///其前一步按了= 号{calculated = FALSE;m_data = oldResult;double temp = atof(oldResult);//定义临时变量存储上一步结果if(temp < 0){calcutateString = "0" + oldResult;}else{calcutateString = oldResult;}calcutateString += "+";//存储做完该功能后的结果m_data += "+";//显示该步骤完成的结果UpdateData(FALSE);}else ///前一步不是={UpdateData(TRUE);calcutateString += "+";//直接存储此步操作m_data += "+";//直接显示此步操作UpdateData(FALSE);}}②退格功能键源程序void CJiSuanQiDlg::OnBackspeace(){if(calculated == FALSE){UpdateData(TRUE);int count = m_data.GetLength();if(count >= 1)//判断是否能执行退格操作{m_data = m_data.Left(count -1);count = calcutateString.GetLength();calcutateString = calcutateString.Left(count -1);UpdateData(FALSE);}}}③清除功能键源程序void CJiSuanQiDlg::OnClear(){// TODO: Add your control notification handler code herem_data = "";oldResult = "";calcutateString = "";calculated = FALSE;UpdateData(FALSE);}④括号功能键源程序void CJiSuanQiDlg::OnLbracket(){// TODO: Add your control notification handler code hereif(calculated == TRUE) ///已经按了等号,不让其再接受字符return;UpdateData(TRUE);calcutateString += "(";m_data += "(";UpdateData(FALSE);}⑤正负转换功能键源程序void CJiSuanQiDlg::OnAddSub(){// TODO: Add your control notification handler code hereif(calculated == FALSE){UpdateData(TRUE);calcutateString = calcutateString + "0" + "-";m_data += "-";UpdateData(FALSE);}}6.运行结果界面截图7.制作过程中所遇问题以及解决方法过程1)源代码编写错误通过查阅资料,请教同学,逐步一一解决。
vs2021 MFC计算器制作
vs2021 MFC计算器制作制作计算器本文采用动态创建控件的方法,使用 vs2021 MFC,仿照windows自带的计算器进行制作。
通过这个程序可以使你了解: 1 如何使用文本框、按钮2 如何通过控件的ID获取控件指针3 得到控件指针后可以对控件做些什么4 字符串如何处理(拼接、查找、转换等)5 如何给控件绑定响应事件6 如何重载原有的函数 7 其他自己体会界面分析:不要上面的菜单栏,也不要第一排的按钮,这些按钮都不要,只要一个文本框和下面右图中的按钮,布局方式也按照这个图布局。
仔细数一数,共有23个按钮和一个编辑框。
功能分析:用一下windows的计算器,可以发现: 1. 初始状态为02. 如果按下数字键,这个0就会变成相应的数字,如果按下小数点,就会变为“0.”3. 除数不能为04. 连续按下多个运算符,以最后一个计算符为准5. 每次按下运算符都会把之前的结果先经行计算,例如:你已经输入了 1+ 1 此时再按下“+”,就会先把1+1进行计算,保存结果2.6. 这个计算器分两行显示,上面一行显示算式,下面显示结果.7. 当你输入一个数字和一个运算符就按下“=”时,第二个数默认和第一个相同,例如:“3*”按下“=”,显示“9” 8. 开平方不能是负数 9. 其它异常暂不处理新建项目这里我给项目命名为:Calculator应用程序的类型选择基于对话框,点击完成完成之后,先来观察一下项目中都有哪些东西:资源视图(下面右图)是我们的界面,解决方案中的是我们的源文件(下面左图)。
我们的代码主要写在中,.h文件中主要定义一些东西,.cpp文件中写具体的东西。
和准备知识初始界面打开界面,可以看到,上面已经给我们放上去了两个按钮―确定和取消。
由于我们建立的是对话框应用程序,这两个按钮的功能就是接受Enter键和ESC键的响应。
先不要删除它,不然会造成不必要的麻烦:例如如果你删除了这两个按钮,当你在界面上按下回车时,程序找不到响应的控件,就会导致异常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
else
{
} } 若原字符串为“2+sqrt4x3”,经过运算后变为“2+2x3”; (4)处理获得的字符串,将数值(都是非负数)存储在数组 Num[],运算符存储在数组 cha[]。 代码如下:
int m = 0;
float Num[100];
//数值数目的上限
float rate=10.0f,itemp=0.0f;
Num[m] = itemp;
itemp = 0;
m = m + 1;
Cha[m] = '/';
m = m + 1;
rate = 10.0f;
mark = 0;
}
else
{
Cha[m] = '/';
m = m + 1;
}
}
else if(m_stringcal.GetAt(i)=='^')
{
if(mark == 1)
char Cha[100];
//运算符数目的上限
int mark;
//标记符
for(int t = 0;t<100;t++) //初始化字符数组和数值数组
{
Num[t] = 0.0f;
Cha[t] = ' ';
}
for(i=0;i<m_stringcal.GetLength();i++) //捕捉
{
正数或负数;
2.两个数值中间是两个相连的运算符,若后一个运算符为‘+’或者‘-’,则处理方法
同 1;
以处理‘+’为例,代码如下:
if(Cha[0] == '+')
//处理第一个‘+’
{
if(Cha[1] == ' ')
{
Num[1] = (+1)*Num[1];
for(int p = 0;p<m;p++)
}
else if((i+4) == m_stringcal.GetLength())
{
AfxMessageBox("ERROR!");
CString str;
str = "wrong";
return str;
}
else if(m_stringcal[i+4]!='0'
&&
m_stringcal[i+4]!='1'
&&
m_stringcal[i+4]!='2'
&&
m_stringcal[i+4]!='3'
&&
m_stringcal[i+4]!='4'
&&
m_stringcal[i+4]!='5'
&&
m_stringcal[i+4]!='6'
&&
m_stringcal[i+4]!='7'
&&
m_stringcal[i+4]!='8'
if(m_stringcal[i] == 's') //计算根号 {
if(m_stringcal[i+1] == 'q')
{
if(m_stringcal[i+2] == 'r')
{
if(m_stringcal[i+3] == 't')
{
if( i!=0
&&
m_stringcal[i-1]!='+'
rate = rate/10;
mark = 1;
}
}
else if(m_stringcal.GetAt(i)=='.')
{
rate=0.1f;
mark = 1;
}
else if(m_stringcal.GetAt(i)=='+')
{
if(mark == 1)
{
Num[m] = itemp;
itemp = 0;
图 1 科学计算器界面效果图 (2)功能按钮介绍 DEL:删除光标左侧第一个字符,若光标左侧为 sqrt,则点击一次 DEL 按钮即可删除 sqrt 四个 字符,便于用户操作,同理,对于 log、ln、sin、cos、tan 和 Pi,也可以实现上述功能;若 光标位于字符串最左端,则不进行任何操作。 AC:清空编辑框内的字符串。 PRE:点击一次 PRE 按钮,显示上一次运算的计算结果,点击两次,则显示再上一次的运算 结果,依次类推,直到显示第一次的运算结果,之后再点击 PRE 按钮,不进行任何操作。 Sci:用科学计数法表示当前显示的运算结果。 Pi:表示圆周率 π。
1.若算式里包含“Pi”,则以数值“3.142592653”取代“Pi”; 2.若算式包含“sqrt+数值”,则进行二次根号运算,以获得的数值结果取代原先的“sqrt+
数值”; 3.若算式包含“sin+数值”,同“sqrt+数值”类似,计算出正弦值后,替换掉算式(字
符串)的“sin+数值”部分,需要注意的是,“sin+数值”里面的数值可以使负数, 此处需要对负数做出进一步判断; 4.同理处理“cos+数值”,“tan+数值”; 5.同理处理“lg+数字”、“ln+数值”的情况(数值不能为负,否则报错); 经过以上步骤的处理,原先的无括号算式只包含数值与运算符“+”、“-”、“x”、“/”、 “^”。 以计算“sqrt+数值”为例,代码如下(包含报错功能): for(i=0;i<m_stringcal.GetLength();i++) {
{
if(Cha[i+2] == ' ' &&
Cha[i-1] == ' ')
{
for(int t = i+1;t<m;t++)
{
Num[t] = Num[t+1];
Cha[t] = Cha[t+1];
}
m = t - 1;
}
else
{
AfxMessageBox("ERROR!");
return "wrong";
{
if(isdigit(m_stringcal.GetAt(n)))
{
if(rate==10.0)
itemp = itemp*rate+(m_stringcal.GetAt(n)-'0');
else
{
itemp = itemp+rate*(m_stringcal.GetAt(n)-'0');
rate = rate/10;
基于 MFC 的科学计算器编程
南京航空航天大学 赵祥成 一,总体功能设计要求
(1)实现带括号的四则混合运算以及幂、三角函数、根号、对数的运算; (2)显示上一次的计算结果; (3)采用科学计数法表示当前计算结果; (4)若输入的算式不符合运算规则,计算器能够自动报错。
二,界面设计
(1)界面效果图 采用基于对话框的 MFC 编程编辑科学计算器的界面,界面效果如图 1。
m = m + 1;
Cha[m] = '+';
m = m + 1;
rate = 10.0f;
mark = 0;
}
else
{
Cha[m] = '+'; m = m + 1; } } else if(m_stringcal.GetAt(i)=='-') { if(mark == 1) { Num[m] = itemp; itemp = 0; m = m + 1; Cha[m] = '-'; m = m + 1; rate = 10.0f; mark = 0; } else { Cha[m] = '-'; m = m + 1; } } else if(m_stringcal.GetAt(i)=='x') { if(mark == 1) { Num[m] = itemp; itemp = 0; m = m + 1; Cha[m] = 'x'; m = m + 1; rate = 10.0f; mark = 0; } else { Cha[m] = 'x'; m = m + 1; } } else if(m_stringcal.GetAt(i)=='/') { if(mark == 1) {
&&
m_stringcal[i-1]!='-'
&&
m_stringcal[i-1]!='x'
&&
m_stringcal[i-1]!='/'
&&
m_stringcal[i-1]!='^' )
{
AfxMessageBox("ERROR!");
CString str;