小型计算器程序的编写.docx
《小型计算器程序的编写.docx》由会员分享,可在线阅读,更多相关《小型计算器程序的编写.docx(21页珍藏版)》请在冰豆网上搜索。
小型计算器程序的编写
一设计题目:
小型计算器程序的编写
二设计目的和内容
【设计目的】
1学习VisualC++的MFC开发程序的步骤。
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中,如下:
#include"Calculate.h"。
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
}
2界面设计
1)界面的初步设计
仿照Windows附件里面的计算器,在资源视图中画好界面。
2)修改每个static的属性
ID
CAPTION
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的修改类似
最终结果如下:
3关键功能的实现
1).OnButton1()按钮的处理函数
voidCMy1Dlg:
:
On1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_jisuan=m_jisuan+"1";
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/DDVsupport
//}}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++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.