小型计算器程序的编写.docx
《小型计算器程序的编写.docx》由会员分享,可在线阅读,更多相关《小型计算器程序的编写.docx(26页珍藏版)》请在冰点文库上搜索。
小型计算器程序的编写
目录一设计题目:
小型计算器程序的编写..................................................2
二设计目的和内容.................................................................................2
三:
基本功能描述.................................................................................3
四:
设计思路.........................................................................................3
五:
软件设计:
设计步骤、界面设计、关键功能的实现...................3
1设计步骤:
....................................................................................................................3
2界面设计........................................................................................................................4
3关键功能的实现............................................................................................................6
六:
结论与心得体会..............................................................................7
七.参考文献..........................................................................................7
八附录:
.............................................................................................8
设计题目:
小型计算器程序的编写一二设计目的和内容
【设计目的】开发程序的步骤。
的MFC学习1VisualC++2综合运用所学的类、继承和多态的知识。
3进一步掌握程序的调试方法。
【设计内容】
1利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件;
2实现算术加、减、乘、除等运算;
3选做:
三角函数的运算、对数运算、指数运算、进制转换等。
界面参考
三:
基本功能描述
程序运行时,显示一个MFC程序窗口,等待用户输入,用户可以单击鼠标输入要计算的表达式,输入的表达式在窗口中,用户键入“=”符号后,窗口显示出结果,该计算器实现了加减乘除以及求倒数运算。
设计思路四:
1Windows消息处理机制的理解
首先编写程序需要对Windows程序的消息处理机制(MessageHandle)有个比较清
晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
还有用户消息,比如鼠标的单击,双击,键盘的键入等。
2.界面的设计,对需要的各种运算符在窗口中划出,然后定义各个的属性
3成员函数及其定义,首先对编辑框的相关变量进行定义,定义为m_edit,将消息框和函数联系起来,然后进行编写相应函数。
4运行结果并测试
软件设计:
设计步骤、界面设计、关键功能的实现五:
1设计步骤:
1).添加头文件
将Calculate.cpp(见附录)改为Calculate.h将其添加到计算器Dlg.cpp:
implementationfile中,如下:
椣据畬敤尠慃捬汵瑡?
屨。
2.):
成员函数及其释义
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnChangeEdit1();
afx_msgvoidOn1();
afx_msgvoidOn2();
afx_msgvoidOn3();
afx_msgvoidOn4();
afx_msgvoidOn5();
afx_msgvoidOn6();
afx_msgvoidOn7();
afx_msgvoidOn8();
afx_msgvoidOn9();
afx_msgvoidOn0();
afx_msgvoidOnequal();
afx_msgvoidOnadd();
afx_msgvoidOnmin();
afx_msgvoidOnplus();
afx_msgvoidOndiv();
afx_msgvoidOndelete();
afx_msgvoidOncountdown();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
界面设计21)界面的初步设计
仿照Windows附件里面的计算器,在资源视图中画好界面。
2)修改每个static的属性
IDCAPTION
IDD_STATIC4简易表达式计算器
IDC_STATIC1待求表达式
IDC_STATIC2运算结果
3)修改每个button的属性
IDC_BUTTON1等于(=)
IDC_BUTTON2全清(CE)
IDC_BUTTON3清除(C)
4)修改每个button的处理机制
在类向导Classwizard窗口中进行,如下图:
其button按钮的修改类似
5)修改每个edit的类型和名称
在类向导Classwizard窗口中进行:
单击AddVariable按钮,在如下窗口中进行修改
其他edit的修改类似
最终结果如下:
关键功能的实现31).OnButton1()按钮的处理函数
voidCMy1Dlg:
:
On1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_jisuan=m_jisuan+;
UpdateData(FALSE);
}
其他数字按钮类似
2)运算符按钮的处理函数
voidCMy1Dlg:
:
Onadd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
sign=1;
data=atof(m_jisuan);
m_jisuan=+;
UpdateData(FALSE);
m_jisuan=\;
}
3)等号的按钮的处理函数
voidCMy1Dlg:
:
Onequal()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
switch(sign){
case1:
data=data+atof(m_jisuan);
break;
case2:
data=data-atof(m_jisuan);
break;
case3:
data=data*atof(m_jisuan);
break;
case4:
if(atof(m_jisuan)==0)
{
MessageBox(ERROR);
break;
}
else
{
data=data/atof(m_jisuan);
break;
}
}
charDrray[50];
memset(Drray,0,50);
sprintf(Drray,%f,data);
m_jisuan=Drray;
UpdateData(FALSE);
}
4)编辑框的按钮的处理函数
voidCMy1Dlg:
:
OnChangeEdit1()
{
//TODO:
IfthisisaRICHEDITcontrol,thecontrolwillnot
//sendthisnotificationunlessyouoverridetheCDialog:
:
OnInitDialog()
//functionandcallCRichEditCtrl().SetEventMask()
//withtheENM_CHANGEflagORedintothemask.
//TODO:
Addyourcontrolnotificationhandlercodehere
}
六:
结论与心得体会
这次课程设计用MFC的相关知识编写一个小型计算器,刚开整个始感觉这个题目挺新鲜,很想好好尝试下,平时只知道用计算器,其中的原理却不甚了解。
此次课程设计没有像上次那样尴尬,不知从何做起,可能是有了上次的经验。
老师开始的讲解感觉作用挺大的,知道了从那块着手,编写的过程中不断出错,写的源代码总是找不到头文件,这是最让人郁闷的了。
和同学的交流,探讨过程,是我对这学期学的类有了更深刻的了解。
身边有很多高手的存在,通过他们的讲解很容易对整个过程熟悉,比上次好多了。
七.参考文献
实战入口VisualC++7.0
八附录:
调试及测试结果如上,关键源代码如下:
#if!
defined(AFX_1DLG_H__B53FAC72_C8D2_473B_BF3F_DF4E3D42EB50__INCLUDED_)
#defineAFX_1DLG_H__B53FAC72_C8D2_473B_BF3F_DF4E3D42EB50__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
/////////////////////////////////////////////////////////////////////////////
//CMy1Dlgdialog
classCMy1Dlg:
publicCDialog
{
//Construction
public:
doubledata;
intsign;
CMy1Dlg(CWnd*pParent=NULL);//standardconstructor
//DialogData
//{{AFX_DATA(CMy1Dlg)
enum{IDD=IDD_MY1_DIALOG};
CStringm_jisuan;
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CMy1Dlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV
support
//}}AFX_VIRTUAL
//Implementation
protected:
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CMy1Dlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnChangeEdit1();
afx_msgvoidOn1();
afx_msgvoidOn2();
afx_msgvoidOn3();
afx_msgvoidOn4();
afx_msgvoidOn5();
afx_msgvoidOn6();
afx_msgvoidOn7();
afx_msgvoidOn8();
afx_msgvoidOn9();
afx_msgvoidOn0();
afx_msgvoidOnequal();
afx_msgvoidOnadd();
afx_msgvoidOnmin();
afx_msgvoidOnplus();
afx_msgvoidOndiv();
afx_msgvoidOndelete();
afx_msgvoidOncountdown();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediately
beforethepreviousline.
#endif
//!
defined(AFX_1DLG_H__B53FAC72_C8D2_473B_BF3F_DF4E3D42EB50__INCLUDED_)
voidCMy1Dlg:
:
OnChangeEdit1()
{
//TODO:
IfthisisaRICHEDITcontrol,thecontrolwillnot
//sendthisnotificationunlessyouoverridethe
CDialog:
:
OnInitDialog()
//functionandcallCRichEditCtrl().SetEventMask()
//withtheENM_CHANGEflagORedintothemask.
//TODO:
Addyourcontrolnotificationhandlercodehere
}
CPP文件中关键代码:
//计算器1Dlg.cpp:
implementationfile
//
#includestdafx.h
椣据畬敤尠计算器1.h
椣据畬敤尠计算器1Dlg.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/DDV
support
//}}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()
/////////////////////////////////////////////////////////////////////////////
//CMy1Dlgdialog
CMy1Dlg:
:
CMy1Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMy1Dlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMy1Dlg)
m_jisuan=_T(\);
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconin
Win32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCMy1Dlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMy1Dlg)
DDX_Text(pDX,IDC_EDIT1,m_jisuan);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMy1Dlg,CDialog)
//{{AFX_MSG_MAP(CMy1Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_EDIT1,OnChangeEdit1)
ON_BN_CLICKED(IDC_1,On1)
ON_BN_CLICKED(IDC_2,On2)
ON_BN_CLICKED(IDC_3,On3)
ON_BN_CLICKED(IDC_4,On4)
ON_BN_CLICKED(IDC_5,On5)
ON_BN_CLICKED(IDC_6,On6)
ON_BN_CLICKED(IDC_7,On7)
ON_BN_CLICKED(IDC_8,On8)
ON_BN_CLICKED(IDC_9,On9)
ON_BN_CLICKED(IDC_0,On0)
ON_BN_CLICKED(IDC_equal,Onequal)
ON_BN_CLICKED(IDC_add,Onadd)
ON_BN_CLICKED(IDC_min,Onmin)
ON_BN_CLICKED(IDC_plus,Onplus)
ON_BN_CLICKED(IDC_div,Ondiv)
ON_BN_CLICKED(IDC_delete,Ondelete)
ON_BN_CLICKED(IDC_countdown,Oncountdown)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMy1Dlgmessagehandlers
BOOLCMy1Dlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//AddAbout...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