基于vcmfc的科学计算器程序实验报告
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下的科学计算器

《VC++程序设计》实验报告题目科学计算器院、系(部)计算机科学与技术学院专业及班级学号姓名日期2012年11月11日1 题目要求仿照Windows系统自带计算器做的一个小型科学计算器。
2 功能需求整个系统具有的功能:响应各个数字键,实现加、减、乘、除、x^y、lnx、x!、sinx、cosx、tanx、二进制、二进制转换八进制、清空、求倒数等基本功能;3 总体设计3.1 系统模块3.2 系统业务处理流程整体流程图4 详细设计1)在对话框类的头文件“CalculatorDlg.h”头部添加:#include "math.h“2)在对话框类的定义中添加下列函数声明:afx_msg void OnNumberKey(UINT nID);//处理数字键单击事件的消息响应函数afx_msg void OnOperationKey(UINT nID);//处理操作键单击事件的消息响应函数3)在对话框的可执行文件的消息映射中添加如下代码:ON_COMMAND_RANGE(IDC_NUMBER1,IDC_NUMBER10,OnNumberKey)ON_COMMAND_RANGE(IDC_NUMBER_PlusMinus,IDC_NUMBER_Equal ,OnOperationKey)4)在对话框的可执行文件中添加OnNumberKey(UINT nID)和OnOperationKey(UINT nID)的实现代码5)在对话框类中定义如下变量:double number1,number2;//number1和number1用于存储将要进行运算的数字int NumberState,OperationState;//NumberState用于标示是将数值赋给number1或是number1//OperationState用于表示计算器所要执行的操作6)为IDC_EDIT_PUTOUT添加映射变量m_Cnumber7)在对话框的构造函数中初始化变量m_number = 0.0;NumberState=1;8)为对话框添加计算函数void cal(),用于计算void CCalculatorDlg::cal() //计算函数{m_number=atof(m_Cnumber);switch(OperationState){case 1:m_number=(double)number1/number2; NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;case 2:m_number=number1*number2;NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;case 3:m_number=number1+number2;NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;case 4:m_number=number1-number2;NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;case 5:m_number=pow(number1,number2);NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;}number1=m_number;OperationState=0;}9)OnNumberKey(UINT nID)函数void CCalculatorDlg::OnNumberKey(UINT nID) {CString n;switch (nID){case IDC_BUTTON1:n="1";break;case IDC_BUTTON2:n="2";break;case IDC_BUTTON3:n="3";break;case IDC_BUTTON4:n="4";break;case IDC_BUTTON5:n="5";break;case IDC_BUTTON6:n="6";break;case IDC_BUTTON7:n="7";break;case IDC_BUTTON8:n="8";break;case IDC_BUTTON9:n="9";break;case IDC_BUTTON0:n="0";break;}if (NumberState==1){m_Cnumber=m_Cnumber+n;number1=atof(m_Cnumber);UpdateData(FALSE);}else{m_Cnumber=m_Cnumber+n;number2=atof(m_Cnumber);UpdateData(FALSE);}//处理除数为零的情况,如果显示除,则零按钮不显示,否则显示if (Zero=FALSE){Zero=TRUE;m_Zero.ShowWindow(SW_SHOW);}else{m_Zero.ShowWindow(SW_SHOW);}}10)OnOperationKey(UINT nID)函数void CCalculatorDlg::OnOperationKey(UINT nID){m_number=atof(m_Cnumber);switch(nID){case IDC_BUTTON_PlusMinus:m_number=-m_number;if (NumberState==1){number1=m_number;}else{number2=m_number;}m_Cnumber.Format("%g",m_number);UpdateData(FALSE);case IDC_BUTTON_BackSpace:int n;n=m_Cnumber.GetAllocLength();m_Cnumber=m_Cnumber.Left(n-1);UpdateData(FALSE);break;case IDC_BUTTON_Divide:cal();if (Zero=TRUE){m_Zero.ShowWindow(SW_HIDE);Zero=FALSE;}OperationState=1;m_number=0;m_Cnumber="";NumberState=2;break;case IDC_BUTTON_Multiply:cal();OperationState=2;m_number=0;m_Cnumber="";NumberState=2;break;case IDC_BUTTON_Add:cal();OperationState=3;m_number=0;m_Cnumber="";NumberState=2;case IDC_BUTTON_Subtract:cal();OperationState=4;m_number=0;m_Cnumber="";NumberState=2;break;case IDC_CIFANG:cal();OperationState=5;m_number=0;m_Cnumber="";NumberState=2;break;case IDC_BUTTON_Clear:number1=number2=m_number=0;m_Cnumber.Format("%g",m_number);UpdateData(FALSE);m_Cnumber="";NumberState=1;break;case IDC_BUTTON_Sqrt:number1=m_number=sqrt(number1);m_Cnumber.Format("%g",m_number);UpdateData(FALSE);break;case IDC_BUTTON_Derivative:number1=m_number=(double)1/number1;m_Cnumber.Format("%g",m_number);UpdateData(FALSE);break;case IDC_BUTTON_Equal:cal();break;}}11)添加剩余的操作按键,(此处只写一个,如tan(),cos(),n!,x^y等详细函数看源代码void CCalculatorDlg::OnSin(){// TODO: Add your control notification handler code herem_number=atof(m_Cnumber);m_number=sin(m_number*3.1415926/180);m_Cnumber.Format("%g",m_number);UpdateData(FALSE);}12)二进制转换核心代码void CCalculatorDlg::OnBinary(){// TODO: Add your control notification handler code hereconst int size=sizeof(int)*8; //转换成4*8=32位二进制char str[size+1]; //来存储二进制转换结果m_number=atof(m_Cnumber);bit(m_number,str,size);m_Cnumber.Format("%s",str);UpdateData(FALSE);}char *CCalculatorDlg::bit(int m_number,char*array,int size){for(int i=size-1;i>=0;i--,m_number>>=1) //m_number>>=1向右移一位array[i]='0'+(1&m_number); //判断每一位是0还是1 array[size]='\0';return array;}13)二进制转换八进制核心代码void CCalculatorDlg::OnOctal(){// TODO: Add your control notification handler code hereUpdateData(TRUE);int i,j,m;int sum;sum=0;m = m_Cnumber.GetLength();for(i=m-1; i>=0; i-- )sum+= ((m_Cnumber[i]-'0')<<(m-i-1));//<<是位操作符,表示二进制数向左移位,如001变为010,等效于sum+=((s[i]-'0')*2^(m-i-1));这样应该清楚了,如0101==0*2^3+1*2^2+0*2^1+1*2^0;即转为十进制if(sum==0){m_Cnumber = "0";}int a[10];i=0;while(sum){a[i]=sum%8;//这部分是十进制转八进制的,原理同上。
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,在其中输入函数名即可。
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语言实验报告计算器

c语言实验报告计算器C 语言实验报告计算器一、实验目的本次 C 语言实验的主要目的是通过编写程序实现一个简单的计算器功能,加深对 C 语言基本语法、数据类型、控制结构和函数的理解和运用,提高编程能力和解决实际问题的能力。
二、实验要求1、实现基本的四则运算(加、减、乘、除)功能。
2、能够处理用户输入的合法表达式,并输出计算结果。
3、具备错误处理能力,如除数为 0 、输入不合法等情况。
三、实验环境本次实验使用的编程环境是 Visual Studio Code,编译器为 GCC。
四、算法设计与思路(一)整体思路首先,需要从用户那里获取输入的表达式。
然后,对表达式进行解析和计算。
在计算过程中,需要根据运算符的优先级进行相应的运算。
为了实现这个过程,可以使用栈来存储运算符和操作数。
(二)具体算法1、定义一个栈来存储运算符,另一个栈来存储操作数。
2、逐字符读取输入的表达式。
如果是数字字符,则将其转换为数字并压入操作数栈。
如果是运算符,则根据运算符的优先级进行处理。
如果当前运算符的优先级高于栈顶运算符的优先级,则将其压入运算符栈。
否则,从操作数栈中弹出两个操作数,从运算符栈中弹出一个运算符,进行相应的运算,并将结果压入操作数栈。
3、当表达式读取完毕后,依次从运算符栈和操作数栈中弹出元素进行计算,直到运算符栈为空,此时操作数栈中的唯一元素即为表达式的计算结果。
五、代码实现```cinclude <stdioh>include <stdlibh>include <ctypeh>//定义栈的最大容量define MAX_SIZE 100//定义操作符栈typedef struct {char itemsMAX_SIZE;int top;} OperatorStack;//定义操作数栈typedef struct {double itemsMAX_SIZE;int top;} OperandStack;//初始化操作符栈void initOperatorStack(OperatorStack stack) {stack>top =-1;}//初始化操作数栈void initOperandStack(OperandStack stack) {stack>top =-1;}//判断操作符栈是否为空int isOperatorStackEmpty(OperatorStack stack) {return stack>top ==-1;}//判断操作数栈是否为空int isOperandStackEmpty(OperandStack stack) {return stack>top ==-1;}//操作符入栈void pushOperator(OperatorStack stack, char op) {if (stack>top < MAX_SIZE 1) {stack>items++stack>top = op;} else {printf("Operator stack overflow!\n");exit(1);}}//操作数入栈void pushOperand(OperandStack stack, double num) {if (stack>top < MAX_SIZE 1) {stack>items++stack>top = num;} else {printf("Operand stack overflow!\n");exit(1);}}//操作符出栈char popOperator(OperatorStack stack) {if (!isOperatorStackEmpty(stack)){return stack>itemsstack>top;} else {printf("Operator stack underflow!\n");exit(1);}}//操作数出栈double popOperand(OperandStack stack) {if (!isOperandStackEmpty(stack)){return stack>itemsstack>top;} else {printf("Operand stack underflow!\n");exit(1);}}//获取操作符的优先级int getPriority(char op) {switch (op) {case '+':case '':return 1;case '':case '/':return 2;default:return -1;}}//计算表达式double calculate(char expression) {OperatorStack opStack;OperandStack numStack; initOperatorStack(&opStack);initOperandStack(&numStack);int i = 0;while (expressioni!='\0'){if (isdigit(expressioni)){double num = 0;while (isdigit(expressioni)){num = num 10 +(expressioni '0');i++;}if (expressioni ==''){double fraction = 01;i++;while (isdigit(expressioni)){num +=(expressioni '0') fraction; fraction /= 10;i++;}}pushOperand(&numStack, num);} else if (expressioni =='('){pushOperator(&opStack, expressioni);i++;} else if (expressioni ==')'){while (opStackitemsopStacktop!='('){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}popOperator(&opStack);i++;} else {while (!isOperatorStackEmpty(&opStack) &&getPriority(opStackitemsopStacktop) >= getPriority(expressioni)){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}pushOperator(&opStack, expressioni);i++;}}while (!isOperatorStackEmpty(&opStack)){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}return popOperand(&numStack);}int main(){char expression100;printf("Enter an expression: ");scanf("%s", expression);double result = calculate(expression);printf("Result: %f\n", result);return 0;}```六、实验结果与分析(一)测试用例及结果以下是一些测试用例及其对应的结果:1、输入:"2 + 3",输出:50000002、输入:"5 2",输出:30000003、输入:"3 4",输出:120000004、输入:"6 / 2",输出:30000005、输入:"2 + 3 4",输出:140000006、输入:"(2 + 3) 4",输出:200000007、输入:"5 / 0",输出:Division by zero!(二)结果分析从测试结果来看,程序能够正确计算基本的四则运算表达式,包括有括号的情况。
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的运算程序。
C++语言计算器的实验报告

1. 3.
单的计算器程序,实现简单的计算功能。 实验主要硬件软件环境:Window 7Visual C++ 6.0
4. 实验内容:
(1) 体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、 乘、除等算术运算,能进行简单三角运算,运算结果能正确显 示,可以清楚数据等。 (2) 设计思路: 1) 先在Visual C++ 6.0中建立一个MFC工程文件,名为 calculator. 2) 在对话框中添加适当的编辑框、按钮、静态文件、复选框 和单选框 3) 设计按钮,并修改其相应的ID与Caption. 4) 选择和设置各控件的单击鼠标事件。 5) 为编辑框添加double类型的关联变量m_edit1. 6) 在calculatorDlg.h中添加math.h头文件,然后添加public成 员。 7) 打开calculatorDlg.cpp文件,在构造函数中,进行成员初始 化和完善各控件的响应函数代码。 (3) 程序清单: 添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法 2.减法 3.乘法 4.除法 int append; //判断后面是否添加数字 成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT
VC之基于MFC的简易计算器

程序设计报告课程名称:面向对象技术与Visual C++ 设计题目:基于MFC的简易计算器专业:信息与计算科学班级:信122 姓名:学号:2012314233任课教师:二○一五年五月注:本设计报告中各个部分如果页数不够,请大家自行扩页,原则是一定要把报告写详细,能说明设计的成果和特色。
报告中应该叙述设计中的每个模块。
三、系统分析与设计1系统功能1.1系统功能图1.2系统功能划分1.2系统功能划分对象ID 标题或说明编辑框IDC_EDIT2 显示按钮IDC_BUTTON10 0按钮IDC_BUTTON1 1按钮IDC_BUTTON2 2按钮IDC_BUTTON3 3按钮IDC_BUTTON4 4按钮IDC_BUTTON5 5按钮IDC_BUTTON6 6按钮IDC_BUTTON7 7按钮IDC_BUTTON8 8按钮IDC_BUTTON9 9按钮IDC_point .按钮IDC_BUTTON13 +按钮IDC_BUTTON14 -按钮IDC_BUTTON15 *按钮IDC_BUTTON16 /按钮IDC_Btn_sqrt sqrt按钮IDC_Btn_lg lg按钮IDC_Btn_jiecheng n!按钮IDC_Btn_sin sin按钮IDC_Btn_cos cos按钮IDC_Btn_tan tan按钮IDC_Btn_erjinzhi 二进制按钮 IDC_BUTTON12 = 按钮IDC_BUTTON18CE2系统流程图1.3 计算器界面1.4总体代码(1)数字键代码(仅以1为例) void CJisuanqiDlg::OnButton1() { num[i]=num[i]+"1";开始输入数据加法减法乘法除法求开方求对数求阶乘求正弦求余弦求正切输入第二个数据 结果进制转换结束五、系统运行报告(测试的结果)(1)加法(2)减法(3)乘法(4)除法(5)二进制(6)正弦(7)余弦(8)正切(9)对数(10)阶乘(11)开方。
基于mfc的计算器实践报告(vs2010)

目录1 基本功能描述 (2)2 设计思路 (2)3 软件设计 (5)3.1 设计步骤 (5)3.2 界面设计 (6)3.3 关键功能的实现 (8)4 结论与心得体会 (8)5 附录 (9)5.1 调试报告 (9)5.2 测试结果 (9)5.3 关键源代码 (10)1 基本功能描述简单计算器包括双目运算和单目运算功能。
双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。
可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。
出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。
2 设计思路如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。
子程序开始时m_num为零。
按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。
回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num 存入num1,按下输入第二个操作数并算出结果。
若按下的是单目运算符,则直接对其处理得出结果。
若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。
算出后把结果保存至num1。
若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。
输入数据子函数N图1 输入数据子函数流程图突起图2 简单计算器总流程图3.1 设计步骤打开Microsoft Visual Studio2010,在文件中点击新建,在弹出框内选择MFC 应用程序工程,输入工程名Calculate及其所在位置,点击确定,如图3所示。
图3 新建MFC应用程序工程这样在MFC应用程序下建立了一个基于对话窗口的程序框架,如图4所示。
图4 新建的对话框1、创建控件在图4所示的在资源视图选项卡中打开Calculate资源组,双击IDD_Calculate_DIALOG,在右边的窗口中显示出待编辑的对话框。
MFC计算器设计实验报告.

计算机学院课程设计报告课程名称:面向对象程序设计课程设计课程设计题目:基于Winform的多功能计算器的设计与实现姓名:专业:软件工程年级:08软件学号:指导教师:2010年12 月20 日目录1.设计目的 (3)2.设计要求 (3)3.设计方案 (3)(1)计算器的用例图: (3)(2)计算器的类图: (6)(3)计算器的顺序图: (6)(4)计算器协作图 (7)(5)计算器的状态图: (7)(6)计算器的活动图: (8)(7)计算器系统框图: (8)4设计内容: (9)(1)创建工程: (9)(2) 设计用户界面 (9)(3)添加代码 (11)5 测试结果: (15)6 总结: (17)7.参考文献: (17)1.设计目的利用C++语言,编写一个类似windows XP系统的计算器,实现计算器的基本功能,从而利用这次的设计,达到更加了解C++语言,了解面向对象的设计方法,加深对面向对象设计过程的了解等目的。
2.设计要求(1)利用面向对象的知识并参照Windows XP系统附件下的“科学型计算器”设计开发一个多功能的计算器;(2)不限制采用的开发平台和编程语言;(3)要求用UML描述设计过程;(4)要求用系统/程序运行时的截图描述实现的测试过程,系统的功能说明;(5)用原代码(加注释)描述主要的功能实现过程及算法;(6)提交纸质打印课程设计报告及项目工程原代码(所有人刻录在一张光碟中,两份,一份用以存档)。
3.设计方案(1)计算器的用例图:用例名称:四则运算。
参与执行者:用户。
前置条件:计算器已开启。
主事件流:用户输入操作数一。
用户选择加、减、乘、除四则运算中的一种算法。
用户输入操作数二,计算出结果,作为下一次计算的操作数一。
后置条件:显示计算结果。
用例名称:三角函数。
参与执行者:用户。
前置条件:计算器已开启。
主事件流:用户输入操作数一。
选择所要操作的三角函数,计算出结果。
所得的结果作为下一次计算的操作数一。
C++-MFC计算器编程课程设计实践报告

中南大学本科生课程设计(实践)设计报告(程序设计基础)题MFC编程科学计算器目学生1104120502学号学生郭斌繁姓名指导蔡旭晖教师学院交通运输工程学院专业交通运输类1205班班级计算机基础教学实验中心2013 年 7 月1日程序设计(C++)实践报告1.引言C++语言的主要特点表现在两个方面,一是全面兼容C语言,二是支持面向对象的程序:(1)C++是一个更好的C,它保持了C语言的优点,大多数的C程序代码略作修改或不作修改就可在C++的集成环境下调试和运行。
这对于继承和开发当前已在广泛的软件是非常重要的,可以节省大量的人力和物力。
(2)C++是一种面向对象的程序设计语言它使得程序的各个模块的独立性更强,程序的可读性和可移植性更强,程序代码的结构更加合理,程序的扩充性更强。
这对于设计、编制和调试一些大型的软件尤为重要。
(3)C++集成环境不仅支持C++程序的编译和调试,而且也支持C程序的编译和调试。
通常,C++程序环境约定:当源程序文件的扩展名为c.时,则为C程序;而当源程序文件的扩展名为cpp.时,则为C++程序。
(4)C++语句非常简练,对语法限制比较宽松,因此C++语法非常灵活。
其优点是给用户编程带来书写上的方便。
其缺点是由于编译时对语法限制比较宽松,许多逻辑上的错误。
次课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。
并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。
(1).设计目标利用MFC程序开发工具设计一款可以进行简单计算及部分科学计算的计算器。
在设计当中将综合“面向对象程序设计与结构化程序设计”的思想方法和知识点,编制一个小型的应用程序系统。
通过此设计进一步提高自己的动手能力,并能使自己清楚的知道开发一个应用程序的思想、方法和流程。
(2).选题分析此次实践所选题目中除了简单的加减乘除运算程序之外还包括了余弦函数、双曲余弦函数、度分秒的转换和X的y次方及y次根号下x的运算程序。
VC版科学计算器程序实验报告

西安科技大学《程序设计方法与优化》实验报告题目科学计算器院、系(部)计算机科学与技术学院专业及班级软件工程1101班姓名张XX 日期 2013/04/24一.功能需求:1.能进行加、减、乘、除运算:这时最基本的计算器功能。
2.还能进行以下的数值计算:函数名:ln在数学中ln(x)是以e为底的x的对数。
e是一个常数函数名: exp功能: 指数函数exp就是以e为底的指数,exp(0)=1, exp(1)=e, exp(2)=en!代表一个数的阶乘,例如:5!就是5*4*3*2*1;sta代表统计算法;x^3代表x的3次方;x^y代表x的y次方。
sin正弦,cos余弦,tan正切,dms度分秒切换Lsh左移ln自然对数,F-E科学计数法开关,Xor异或,Int整数部分,Exp允许输入用科学计数法表示的数字1/x倒数,log常用倒数mod余数Pi是圆周率,Exp是科学计数法exp代表以e为幂指数函数例如:exp10就是e的10次方;ln是以e为底的对数函数例如:ln10就是以e为底10的对数;M+是计算结果并加上已经储存的数;M-是计算结果并用已储存的数字减去目前的结果;MR是读取储存的数据;MC是清除储存数据;AC,CE归零是有一个是清除现有数据重新输入,另一个是清除全部数据结果和运算符.数学计算度量衡换算百度计算器为用户提供常用的数学计算功能。
您可在任何地方的网页搜索栏内,输入需要计算的数学表达式(例如:3+2),点击搜索,即可获得结果。
百度计算器支持实数范围内的计算,支持的运算包括:加法(+或+),减法(-或-),乘法(*或×),除法(/),幂运算(^),阶乘(!或!)。
支持的函数包括:正弦,余弦,正切,对数。
支持上述运算的混合运算。
例:加法:3+2减法:3-2乘法:3*2除法:3/2阶乘:4! 4的阶乘电脑自带计算器开根号:1,调到科学型。
2,开方:(1)选一下INV这个。
(2)按一个数字。
VC++实验报告模板

VC++ 课程实验报告专业班级:地图学与地理信息系统研09级10班学号:200910492报告人:吴少华VC++课程实验报告一、实验题目:科学计算器程序应用VC++语言的实现。
二、功能描述:科学计算器可以使用对话框(dialog box)实现,对话框是Windows应用程序中的一种常用的输入、输出界面,是用户与应用程序进行交互的窗口。
为了方便实现对话框功能,MFC提供了一系列对话框类,其中最重要的对话框类是Cdialog类。
本次实验的目的就是掌握 MFC 的CDialog 类和其运行机制,并同时掌握几种常用控件的使用。
三、算法设计与实验步骤本实验的任务是实现一个科学计算器,该计算器具有加减乘除平方以及一些三角运算功能。
该计算器具体实现步骤如下:(1)启动 AppWizard,建立一个基于对话框的 MFC 应用程序 Calculator。
(2)修改对话框资源,按图1的方式添加控件对象。
Edit 的ID是IDC_EDIT_PUTOUT,风格属性是 Number 和 Read-Only,在“Extended Styles”属性中选择“RightAligned Text”。
表1是按钮控件的 ID 标识和标题。
图1 编辑对话框资源界面(3)在对话框类的头文件(CalculatorDlg.h)中添加用于数学计算的头文件:#include "math.h"(4)添加按钮消息映射,在对话框类的定义中添加如下函数声明:afx_msg void OnNumberKey(UINT nID);//处理数字键单击事件的消息响应函数afx_msg void OnOperationKey(UINT nID);//处理操作键单击事件的消息响应函数(5)在对话框的实现文件消息映射中添加如下代码:BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)//{{AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAP//添加代码ON_COMMAND_RANGE(IDC_NUMBER1,IDC_NUMBER_Dot,OnNumberKey)ON_COMMAND_RANGE(IDC_NUMBER_BackSpace,IDC_NUMBER_PI,OnOperationKe y)END_MESSAGE_MAP()(6)在对话框的实现文件中添加 OnNumberKey(UINT nID)和 OnOperationKey(UINT nID)的实现代码。
c++面向对象程序设计MFC简单计算器试验报告

计算机与信息工程学院《程序设计基础》课程设计报告题目名称: 60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。
2. 能实现加、减、乘、除及乘方的运算。
3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字1 时,在计算器图形上的1键变为红色。
屏幕、图形颜色、形状自定4.3 总体设计3.1 总体框架开始键入第一个按钮键入第二个按结系统框架1 图 3.2 系统功能说明在VC++6.0中绘制计算器界面,各控件的设置ID0~9对控件设定相应的和其他属性:“1”控件设置2 图 -+对“、、ID”控件设定相应的和其他属性:*、\“图 2 +”控件设置和其他属性:对其它控件设定相应的ID其它控件设置3图使界面更加整洁。
Align菜单中的Layout主要使用到功能对各个按钮进行对其,控件用于处理鼠标的ButtonEdit拖出的控件有上面的一个控件用于显示数字,消息。
4 程序详细设计系统主调模块4.1.图5 程序流程图4.2各模块详细设计变量定义:double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。
double m_Dis; //Edit控件上需要显示的数字BOOL point_flag; //小数点表示位,判定是否是小数,是小数为1,不是小数为0。
double numfirst; //保存计算过程中的前一个数字,double numsecond;//保存计算过程中的第二个数字char op;//记录当前的计算符号,可以为'+','-','*','/','=','c','n'变量初始化:poz=1;m_Dis = 0.0;numfirst=0;numsecond=0;op=0;4.4.2 设计思路a)首先考虑对所有按键分为两类,数字类和符号类,0,1,2,3,4,5,6,7,8,9为数字类,+,-,*,/,=为符号类。
基于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、基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。
基于MFC的科学计算器课程设计实验报告

课程设计实验报告题目学院专业班级课程名称学号学生姓名指导教师成绩二○一三年一月目录1 概述1.1 课程设计目的1.2 课程设计内容1.3 课程设计思想2 系统需求分析2.1 系统目标2.2 主体功能2.3 开发环境3 系统概要分析3.1 设计步骤3.2 界面设计3.3 主要代码4 结论与心得体会4.1 遇到的问题与解决方法4.2 心得5 附录5.1 测试5.2 程序源代码1 概述1.1课程设计目的《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用C++语言进行面向对象设计的基本方法,提高运用面向对象方法分析实际问题、解决实际问题的能力。
1、巩固并加深学生对C++语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VS 2010集成开发环境;4、提高运用C++语言解决实际问题的能力;5、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。
1.2课程设计内容课题名称:功能齐全的计算器说明:利用MFC实现一个功能齐全的计算器要求:1、实现的基本功能有:加、减、乘、除、计算带括号的运算式;2、扩展功能有开平方、求三角函数、阶乘、自然底数e的幂、10的幂和普通数的幂、进制的转化等;3、输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个编辑框中;4、计算功能基本上是用系统内部函数;5、“归零”按钮可以清除所有已输入的数据从头计算;6、“←”按钮可以退位。
1.3课程设计思想如流程图1所示,先在编辑框中输入运算式,通过IsChar()函数判断表达式中是否有复杂的运算符。
若无,则进行简单的双目运算;若有,则通过String_Replace()函数将IsChar()函数无法识别的运算符或字符用一定方式或浮点数替换,再进行简单的双目运算。
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 可行性分析本设计是简单计算器。
日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。
VC++科学计算器实验报告

西安科技大学《VC++语言程序设计》实验报告题目科学计算器院、系(部)计算机科学与技术学院专业及班级软工1203班学号 1208010324 姓名李文日期 2013.11.09一、实验内容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_CALCULATOR_DIALOG,在右边的窗口中显示出待编辑的对话框。
开始摆放控件,包括编辑框和按钮的创建。
按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。
1)在图1-4中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。
在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图4-4所示,在该对话框中输入ID属性。
图1-4 Edit属性对话框2)在图1-4中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图1-5所示,在该对话框中输入控件的ID值和标题属性。
C++_MFC计算器编程课程设计--MFC编程科学计算器

C++_MFC计算器编程课程设计--MFC编程科学计算器本科生课程设计(实践)设计报告( 程序设计基础)MFC编程科学计算器题目1104120502 学生学号郭斌繁学生姓名蔡旭晖指导教师交通运输工程学院学院交通运输类1205 班专业班级计算机基础教学实验中心2013 年7 月1 日程序设计(C++) 实践报告1.引言C++语言的主要特点表现在两个方面,一是全面兼容C语言,二是支持面向对象的程序:(1)C++是一个更好的C,它保持了C语言的优点,大多数的C程序代码略作修改或不作修改就可在C++的集成环境下调试和运行。
这对于继承和开发当前已在广泛的软件是非常重要的,可以节省大量的人力和物力。
(2)C++ 是一种面向对象的程序设计语言它使得程序的各个模块的独立性更强,程序的可读性和可移植性更强,程序代码的结构更加合理,程序的扩充性更强。
这对于设计、编制和调试一些大型的软件尤为重要。
(3)C++集成环境不仅支持C++程序的编译和调试,而且也支持C程序的编译和调试。
通常,C++!序环境约定:当源程序文件的扩展名为c(时,则为C程序; 而当源程序文件的扩展名为cpp(时,则为C++程序。
⑷C++语句非常简练,对语法限制比较宽松,因此C++语法非常灵活。
其优点是给用户编程带来书写上的方便。
其缺点是由于编译时对语法限制比较宽松,许多逻辑上的错误。
次课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。
并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。
(1). 设计目标利用MFC程序开发工具设计一款可以进行简单计算及部分科学计算的计算器。
在设计当中将综合“面向对象程序设计与结构化程序设计”的思想方法和知识点,编制一个小型的应用程序系统。
通过此设计进一步提高自己的动手能力,并能使自己清楚的知道开发一个应用程序的思想、方法和流程。
基于mfc的计算器实践报告(vs2010)

基于mfc的计算器实践报告(vs2010)⽬录1 基本功能描述 (2)2 设计思路 (2)3 软件设计 (5)3.1 设计步骤 (5)3.2 界⾯设计 (6)3.3 关键功能的实现 (8)4 结论与⼼得体会 (8)5 附录 (9)5.1 调试报告 (9)5.2 测试结果 (9)5.3 关键源代码 (10)1 基本功能描述简单计算器包括双⽬运算和单⽬运算功能。
双⽬运算符包含基本的四则运算及乘幂功能,单⽬运算符包含正余弦,阶乘,对数,开⽅,倒数等运算。
可对输⼊任意操作数,包括⼩数和整数及正数和负数进⾏以上的所有运算并能连续运算。
出现错误会给出相应提⽰,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。
2 设计思路如图是整个计算器的流程图,打开计算器程序,输⼊数据,调⽤输⼊数据⼦程序。
⼦程序开始时m_num为零。
按下数字按钮后,判断m_num的正负号,对其进⾏相关处理,然后在判断是否有⼩数点,处理后输出结果。
回到总流程图中,输完第⼀个操作数后,若按下双⽬运算符,则把m_num 存⼊num1,按下输⼊第⼆个操作数并算出结果。
若按下的是单⽬运算符,则直接对其处理得出结果。
若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显⽰范围,以做出相关提⽰,按下清零。
算出后把结果保存⾄num1。
若需⽤算出的结果继续运算则回到输⼊完第⼀个操作数后,若不需要则判断试否需要开始新⼀轮的运算,不需要则结束。
输⼊数据⼦函数N图1 输⼊数据⼦函数流程图突起图2 简单计算器总流程图3.1 设计步骤打开Microsoft Visual Studio2010,在⽂件中点击新建,在弹出框内选择MFC 应⽤程序⼯程,输⼊⼯程名Calculate及其所在位置,点击确定,如图3所⽰。
图3 新建MFC应⽤程序⼯程这样在MFC应⽤程序下建⽴了⼀个基于对话窗⼝的程序框架,如图4所⽰。
图4 新建的对话框1、创建控件在图4所⽰的在资源视图选项卡中打开Calculate资源组,双击IDD_Calculate_DIALOG,在右边的窗⼝中显⽰出待编辑的对话框。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告 课程名称: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。
所以实际中,更多的是以Visua l C++6.0为6平台。
Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。
这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。
二、设计要点1、基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。
2、创新要求:在基本要求达到后,进行创新设计。
3、对系统进行功能模块分析、控制流程分析正确。
4、系统设计要实用,编程简练,可用,功能全面,并有一定的容错能力。
5、说明书、流程图要清楚6、要求程序设计合理,用户界面良好,如采用菜单工作方式。
三、实验步骤:1、首先利用MFC AppWinzard生成计算器应用程序框架具体步骤如下:执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name 文本框中输入cyyJSQ 。
Lacation文本框是指项目的本地路径。
2、界面设计在界面中添加按钮,编辑框等相应控件,并合理摆放,使用户能更加方便的使用。
具体设计如下图所示:3、绑定控件通过如下方式绑定控件。
具体绑定如下表所示:按钮控件资源清单4、逐步实现代码①按钮1-9的实现文本编辑框的类型为string型,所以若按下数字1按钮时只需在数组尾部添加“1”即可其他代码如此类推,具体代码如下:void CMyDlg::OnButton0(){// 数字0this->check() ;CString tmp = num_buffer ;// 当为小数点后或其前面有不为零的数时允许输入零if ( tmp.ReverseFind('.') != -1 || tmp.FindOneOf( "123456789" ) != -1 ){num_buffer += "0" ;}else{num_buffer = "0" ;}GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ;}void CMyDlg::OnButton1(){// 数字1this->check() ;num_buffer += "1" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ;}void CMyDlg::OnButton2(){// 数字2this->check() ;num_buffer += "2" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ;}void CMyDlg::OnButton3(){// 数字3this->check() ;num_buffer += "3" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ;}void CMyDlg::OnButton4(){// 数字4this->check() ;num_buffer += "4" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ; }void CMyDlg::OnButton5(){// 数字5this->check() ;num_buffer += "5" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ; }void CMyDlg::OnButton6(){// 数字6this->check() ;num_buffer += "6" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ; }void CMyDlg::OnButton7(){// 数字7this->check() ;num_buffer += "7" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ; }void CMyDlg::OnButton8(){// 数字8this->check() ;num_buffer += "8" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ; }void CMyDlg::OnButton9(){// 数字9this->check() ;num_buffer += "9" ;GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ; }void CMyDlg::OnButtonDot(){// 小数点if ( num_buffer.IsEmpty() ){num_buffer = "0." ;}else if ( num_buffer.ReverseFind('.') == -1 ){num_buffer += "." ;}GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ;}// 求相反数void CMyDlg::OnButtonNI(){// 正负处理m_num = - atof( num_buffer ) ;// 转化为字符串num_buffer.Format( _T("%lf"), m_num );GetDlgItem( IDC_EDIT_SHOW )->SetWindowText( num_buffer ) ;}运行结果如下:②加减乘除代码的实现:通过控件的绑定以及传值函数,以指针调用的方式进行赋值,并将结果保存在num_buff er中,与下一次输入的num2进行新的一元运算并给result赋值,通过Updatedata()函数反应到文本编辑框中,具体代码如下://加void CMyDlg::OnButtonAdd(){this->num1 = atof( num_buffer ) ;this->num_buffer.Empty() ;this->operation_type = ADD ;}// 减void CMyDlg::OnButtonSub() {this->num1 = atof( num_buffer ) ;this->num_buffer.Empty() ;this->operation_type = SUB ;}// 乘void CMyDlg::OnButtonMul() {this->num1 = atof( num_buffer ) ;this->num_buffer.Empty() ;this->operation_type = MUL ;}// 除void CMyDlg::OnButtonDiv(){this->num1 = atof( num_buffer ) ;this->num_buffer.Empty() ;this->operation_type = DIV ;}void CMyDlg::OnButtonRes() {const double EPSINON = 0.00001 ;bool error = false ;this->num2 = atof( num_buffer ) ;this->num_buffer.Empty() ;switch( this->operation_type ){case ADD :this->m_num = num1 + num2 ;break;case SUB :this->m_num = num1 - num2 ;break;case MUL :this->m_num = num1 * num2 ;break;case DIV :if ( (num2 > -EPSINON ) && (num2 <= EPSINON) ){num_buffer = "除数不能为零" ;error = true ;}else{this->m_num = num1 / num2 ;}break;default:this->m_num = this->num2 ;break;}结果如下图所示③科学性运算按钮的处理:只需根据数值分析等为按钮进行算法的合理设计,正确赋值即可,具体代码如下:// 自然底数evoid CScience::OnButtonEConst(){this->check() ;num_buffer.Format(_T("%lf") , M_E) ;fresh() ;}// 圆周率∏void CScience::OnButtonPai(){this->check() ;num_buffer.Format(_T("%lf") , M_PI) ;fresh() ;}void CScience::OnButtonNi(){// 正负处理m_result = - atof( num_buffer ) ;// 转化为字符串num_buffer.Format( _T("%lf"), m_result );fresh() ;}void CScience::OnButtonMutInv(){this->unary_operation = true ;const double EPSINON = 0.00001 ;this->m_result = atof( num_buffer ) ;if ( (this->m_result >= - EPSINON) && (this->m_result <= EPSINON) ){GetDlgItem(IDC_EDIT_SHOW)->SetWindowText("0 的倒数没有定义\n") ;}else{this->m_result = 1.0 / m_result ;num_buffer.Format( _T("%lf"), m_result );fresh() ;this->unary_operation = false ;}}void CScience::OnButtonPercent(){this->unary_operation = true ;CString tmp = num_buffer ;this->m_result = atof(num_buffer) ;tmp.Format(_T("%lf") , this->m_result * 100 ) ;tmp += "%" ;fresh(tmp) ;this->unary_operation = false ;}void CScience::OnButtonSqr(){this->unary_operation = true ;this->m_result = atof(num_buffer) ;this->m_result = sqrt(m_result) ;num_buffer.Format(_T("%lf") , this->m_result) ;fresh() ;this->unary_operation = false ;}void CScience::OnButtonSin(){CString tmp ;this->unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp = "Sin(" + num_buffer + ") =" ;this->m_result = sin(m_result) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;}void CScience::OnButtonCos(){CString tmp ;this->unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp = "Cos(" + num_buffer + ") =" ;this->m_result = cos(m_result) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;}void CScience::OnButtonTan(){CString tmp ;const double EPSINON = 0.00001 ;this->unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp = "tan(" + num_buffer + ") =" ;if ( (cos(m_result) >= -EPSINON) && (cos(m_result) <= EPSINON) ) {error() ;}else{this->m_result = tan(m_result) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;}}void CScience::OnButtonCot(){CString tmp ;const double EPSINON = 0.00001 ;this->unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp = "cot(" + num_buffer + ") =" ;if ( (sin(m_result) >= -EPSINON) && (sin(m_result) <= EPSINON) ) {error() ;}else{this->m_result = cos(m_result)/sin(m_result) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;}}void CScience::OnButtonLn(){CString tmp ;const double EPSINON = 0.00001 ;this->unary_operation = true ;this->m_result = atof(num_buffer) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp = "ln(" + num_buffer + ") =" ;if ( m_result <= EPSINON ){error("参数必须大于0") ;}else{this->m_result = log(m_result) ;num_buffer.Format(_T("%lf") , this->m_result) ;tmp += num_buffer ;fresh(tmp) ;this->unary_operation = false ;}}运行结果如下:④进制间的转换:1.按钮A-F的实现与,进制运算时,按钮条件的设置。