毕业设计基于oop技术的计算器设计.docx
- 文档编号:25026667
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:36
- 大小:514.13KB
毕业设计基于oop技术的计算器设计.docx
《毕业设计基于oop技术的计算器设计.docx》由会员分享,可在线阅读,更多相关《毕业设计基于oop技术的计算器设计.docx(36页珍藏版)》请在冰豆网上搜索。
毕业设计基于oop技术的计算器设计
基于OOP技术的计算器设计
摘要:
OOP编程技术以其良好的共享性、可维持性被逐步广泛采用。
本文以OOP技术理念,采用OOP方法,利用VisualC++6.0集成开发工具,制作了一个简易计算器。
为深入理解OOP概念,熟练操作开发环境作了有益的尝试。
关键词:
OOPVC++类
1引言
1.1OOP概念
OOP(ObjectOrientedProgramming)即面向对象程序设计,是通过为数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。
面向对象是将世界看成是由一组彼此相关并能相互通信的实体即对象组成的。
程序中的对象映射现实世界中对象。
在面向对象的程序中,对象之间只能通过函数调用相互通信。
本文通过设计制作一个简易计算器来实践面向对象程序设计方法。
1.2VisualC++6.0简介
VisualC++6.0是微软公司推出的开发Win32应用程序的、面向对象的可视化集成工具,环境提供了功能强大的MFC(MicrosoftFoundationClasses)类库。
MFC是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,是一个很大的C++类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。
本设计利用集成环境的MFCApp向导来生成程序主框架,大大提高了开发效率。
2系统目标
2.1良好的人机界面
为使操作简洁,用户易学易用,便于人机交互,程序采用如图一所视GUI界面。
图一运行界面
2.2需要实现的功能
1.四则运算作为计算器的最基本功能必需具备,要完整支持小数操作。
2.在日常工作中,要经常进行三角函数运算,因此程序要有基本的三角函数运算功能。
3.用户使用计算器时,都习惯用数字键区操作,程序除使用鼠标操作外,要能接收键盘输入以实现四则运算。
2.3使用面向对象技术
OOP技术是C++的灵魂,整个设计要能较好的体现C++的技术特性。
3程序功能与结构
3.1系统功能分析
3.1.1加、减、乘、除四则运算
1.操作数的输入。
2.实现指定的四则运算。
3.结果的显示。
包括输入操作数、运算结果、及出错信息的显示
3.1.2三角函数运算
1.操作数的输入。
2.实现指定的三角函数运算。
3.结果的显示。
包括输入操作数、运算结果及出错信息的显示
4系统实现
4.1开发平台的确定
微软的MicrosoftVC++6.0集成开发环境全面支持OOP编程,并且有强大的MFC,是目前比较流行的C++开发环境,本设计选用MicrosoftVC++6.0作为编程环境。
4.2应用程序设计
4.2.1、整体思路
1、本程序界面相对较为简单,从CDialog类直接派生出计算器对话框类CCalculatorDlg。
2、在IDD_CALCULATOR_DIALOG对话框上添加操作控件,作为人机交互。
3、实现CCalculatorDlg类。
4.2.2、CCalculatorDlg类的设计
1、通过MFCAppWizard(EXE)新建一个基于对话框的工程,工程名为:
Calculator,向导会生成CAboutDlg,CCalculatorApp,CCalculatorDlg三个类,并自动添加初始代码,此时的CCalculatorDlg类骨架已由系统生成,下段将按我们的功能要求来逐步完善这个类。
2、将对话框IDD_CALCULATOR_DIALOG按照计算器界面要求进行布局。
图二界面布局
3、定义程序操作状态中用到的数据类型;
①在计算器四则运算中,运算操作主要有加、减、乘、除。
//运算类型
enumOperator{OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide};
②常用的三角函数运算有正弦、余弦、正切等,其他函数主要有对数、阶乘等。
//函数类型
enumFunc{FuncSin,FuncTan,FuncCos,FuncSqrt,FuncSqre,FuncLn,FuncLog,FuncN,FuncRec,FuncExp,FuncNone};
③四则运算中存在的错误主要是除零等。
//运算错误类型
enumCalcError{ErrNone,ErrDivideByZero};
4、在CCalculatorDlg类中添加成员变量及方法。
根据类封装性要求,成员尽量定义为私有类型。
图三CCalculatorDlg类定义
为Edit编辑框及角度选框按钮添加成员变量m_result,m_iDegree,以进行界面与数据交互。
图四添加成员变量
系统自动生成的代码如下所示
图五生成的成员变量
在类CCalculatorDlg构造函数中初始化各变量
图六CCalculatorDlg类构造函数
在BOOLCCalculatorDlg:
:
OnInitDialog()方法中加入如下代码
图七对话框初始化
4.2.3重要功能的代码分析
1.运算操作数输入voidCCalculatorDlg:
:
OnOperandInput(UINTnID)
图八操作数输入方法
方法根据数字0-9按钮的ID号,将其转换成操作数。
2.显示结果方法voidCCalculatorDlg:
:
UpdateDisplay()
图九更新显示方法
先将要显示的内容赋给成员变量m_result,再调用UpdateData(FALSE)函数,将m_result的内容在Edit编辑框中显示出来。
3.函数运算过程voidCCalculatorDlg:
:
Run_Func()
图十函数运算方法
类成员函数根据成员变量m_func的内容,选择不同的分支执行,最后调用UpdateDisplay()将执行结果进行显示。
4.四则运算过程voidCCalculatorDlg:
:
Calculate()
图十一四则运算方法
方法根据成员变量m_operator中的内容,选择不同的操作进行运算,最后调用UpdateDisplay()方法,进行结果显示。
5.键盘输入的实现
⑴插入一个新的Accelerator到资源里,将键盘与对应的响应控件关联
图十二添加Accelerator资源
⑵ 在类CCalculatorDlg中进行声明:
图十三申明资源
⑶ 在类CCalculatorDlg构造函数中初始化m_hAccel。
图十四资源初始化
⑷重载类CCalculatorDlg的PreTranslateMessage函数
图十五重载PreTranslateMessage函数
⑸在类CCalculatorDlg中加入消息处理方法定义
图十六定义消息
⑹在类CCalculatorDlg实现中,加入如下代码:
图十七键盘输入处理方法
方法根据按键来选择执行分支,完成不同的运算。
5程序源代码(部分)
5.1CalculatorDlg类定义单元
////////////////////////////////////////////////////////////////////////////////
//文件名:
CalculatorDlg.h
//功能:
定义CalculatorDlg类
//程序设计:
杨斌峰
//编码时间:
2008/10/12
////////////////////////////////////////////////////////////////////////////////
#if!
defined(AFX_CALCULATORDLG_H__8F15023D_4EA7_11D3_860D_A73AED693C48__INCLUDED_)
#defineAFX_CALCULATORDLG_H__8F15023D_4EA7_11D3_860D_A73AED693C48__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
//运算类型
enumOperator{OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide};
//函数类型
enumFunc{FuncSin,FuncTan,FuncCos,FuncSqrt,FuncSqre,FuncLn,FuncLog,
FuncN,FuncRec,FuncExp,FuncNone};
//运算错误类型
enumCalcError{ErrNone,ErrDivideByZero};
#definePI3.1415926//定义π值
classCCalculatorDlg:
publicCDialog
{
private:
doublem_dOperand;//操作数
doublem_dTempOperand;//操作数或结果暂存
BOOLm_bDecimally;//小数标志
doublem_dRatio;//小数倍率
doublem_dDegToRad;//角度转弧度
Operatorm_operator;//操作类型{OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide}
Funcm_func;//当前函数
CalcErrorm_errorState;//出错类型
BOOLm_bOperandAvail;//操作数可用标志
voidCalculate();//四则运算
voidRun_Func();//函数计算
voidUpdateDisplay();//更新显示内容
protected:
HICONm_hIcon;
HACCELm_hAccel;//资源申明
//Generatedmessagemapfunctions
//{{AFX_MSG(CCalculatorDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnOperandInput(UINTnID);
afx_msgvoidOnAdd();
afx_msgvoidOnMinus();
afx_msgvoidOnDivid();
afx_msgvoidOnMultiply();
afx_msgvoidOnEqual();
afx_msgvoidOnSqrt();
afx_msgvoidOnSign();
afx_msgvoidOnReciprocal();
afx_msgvoidOnPoint();
afx_msgvoidOnClear();
afx_msgBOOLKeyboard(LPCTSTRszButton);
afx_msgvoidOnLog();
afx_msgvoidOnLn();
afx_msgvoidOnFactorial();
afx_msgvoidOnExp();
afx_msgvoidOnSin();
afx_msgvoidOnSquar();
afx_msgvoidOnTan();
afx_msgvoidOnDegree();
afx_msgvoidOnRad();
afx_msgvoidOnCos();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
CCalculatorDlg(CWnd*pParent=NULL);//standardconstructor
//DialogData
//{{AFX_DATA(CCalculatorDlg)
enum{IDD=IDD_CALCULATOR_DIALOG};
CStringm_result;//待显示字符串
intm_iDegree;
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CCalculatorDlg)
public:
virtualBOOLPreTranslateMessage(MSG*pMsg);
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
};
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.
#endif//!
defined(AFX_CALCULATORDLG_H__8F15023D_4EA7_11D3_860D_A73AED693C48__INCLUDED_)
5.2CalculatorDlg类实现单元
////////////////////////////////////////////////////////////////////////////////
//文件名:
CalculatorDlg.cpp
//功能:
CalculatorDlg类实现
//程序设计:
杨斌峰
//编码时间:
2008/10/12
////////////////////////////////////////////////////////////////////////////////
#include"stdafx.h"
#include"Calculator.h"
#include"CalculatorDlg.h"
#include"math.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CCalculatorDlgdialog
CCalculatorDlg:
:
CCalculatorDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CCalculatorDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CCalculatorDlg)
m_result=_T("");//运算结果属性
m_iDegree=-1;//角度弧度指示属性
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hAccel=LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDD));
m_dDegToRad=(2*PI)/360;//初始时为角度,1角度相当于(2*PI)/360弧度
m_dRatio=0.1;//小数输入时初始倍率
m_bDecimally=false;//非小数
m_errorState=ErrNone;//运算无错误
m_bOperandAvail=FALSE;//操作数不可用
m_operator=OpNone;//运算不可用
}
voidCCalculatorDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCalculatorDlg)
DDX_Text(pDX,IDC_DISPLAY,m_result);
DDX_Radio(pDX,IDC_DEGREE,m_iDegree);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCalculatorDlg,CDialog)
//{{AFX_MSG_MAP(CCalculatorDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND_RANGE(IDC_0,IDC_9,OnOperandInput)
ON_BN_CLICKED(IDC_ADD,OnAdd)
ON_BN_CLICKED(IDC_MINUS,OnMinus)
ON_BN_CLICKED(IDC_DIVID,OnDivid)
ON_BN_CLICKED(IDC_MULTIPLY,OnMultiply)
ON_BN_CLICKED(IDC_EQUAL,OnEqual)
ON_BN_CLICKED(IDC_SQRT,OnSqrt)
ON_BN_CLICKED(IDC_SIGN,OnSign)
ON_BN_CLICKED(IDC_RECIPROCAL,OnReciprocal)
ON_BN_CLICKED(IDC_POINT,OnPoint)
ON_BN_CLICKED(IDC_CLEAR,OnClear)
ON_BN_CLICKED(IDC_LOG,OnLog)
ON_BN_CLICKED(IDC_LN,OnLn)
ON_BN_CLICKED(IDC_FACTORIAL,OnFactorial)
ON_BN_CLICKED(IDC_EXP,OnExp)
ON_BN_CLICKED(IDC_SIN,OnSin)
ON_BN_CLICKED(IDC_SQUAR,OnSquar)
ON_BN_CLICKED(IDC_TAN,OnTan)
ON_BN_CLICKED(IDC_DEGREE,OnDegree)
ON_BN_CLICKED(IDC_RAD,OnRad)
ON_BN_CLICKED(IDC_COS,OnCos)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CCalculatorDlgmessagehandlers
BOOLCCalculatorDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Thefram
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 基于 oop 技术 计算器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)