mfc计算器实验报告.docx

上传人:b****2 文档编号:23153879 上传时间:2023-05-08 格式:DOCX 页数:29 大小:54.62KB
下载 相关 举报
mfc计算器实验报告.docx_第1页
第1页 / 共29页
mfc计算器实验报告.docx_第2页
第2页 / 共29页
mfc计算器实验报告.docx_第3页
第3页 / 共29页
mfc计算器实验报告.docx_第4页
第4页 / 共29页
mfc计算器实验报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

mfc计算器实验报告.docx

《mfc计算器实验报告.docx》由会员分享,可在线阅读,更多相关《mfc计算器实验报告.docx(29页珍藏版)》请在冰豆网上搜索。

mfc计算器实验报告.docx

mfc计算器实验报告

C++程序设计设计性实验报告

实验项目名称:

高级计算器设计与开发

专业班级:

;姓名:

;学号:

实验起止日期:

起于年月日止于年月日

实验目的:

学会用C++语言和数据结构知识实现表达式的解析与计算;学会使用动态链接库技术进行编程;学会编辑、编译、运行MFC应用程序的基本过程.学会MFC可视化编程技术。

实验要求:

1.能完成双精度型数值的加、减、乘、除计算;编程中使用了动态连接库技术.

2.能完成双精度型数值的加、减、乘、除计算;编程中使用了动态连接库技术;能实现表达式的输入,解析与计算

实验内容:

1.C++语言的顺序结构,分支结构,循环结构,函数,结构体,指针,MFC可视化编程技术。

2.数据结构中的二叉树数据组织、存贮、后序遍历及其操作。

3.使用动态链接库进行函数模块的设计,实现计算功能。

实验具体方案:

按照系统设计要求,用VisualC++设计和开发一个MFC应用程序---高级计算器。

计算器的界面设计、计算功能实现、算式计算和动态链接库的使用等。

提交由需求分析:

系统设计说明、系统技术文档、系统使用说明书和源程序代码为附录构成的实验报告。

需求分析:

系统设计说明

1.计算器界面

计算器界面包括主题“高级计算器”和背景图片以及电子日历。

在计算区上有显示文本框和数字按钮以及运算符按钮。

在计算区上部分有运算模式选择模块和小提示语句。

2.模块功能简介

系统分为多个模块,分别为计算模块、错误分析模块、界面显示模块和模式选择模块。

其中计算模块用来进行各种基本的加、减、乘、除的运算并且显示运算结果;错误分析模块用来进行错误处理;界面显示模块用来美化计算器界面;模式选择模块用来进行运算模式的选择和切换,以实现不同的运算要求。

3.系统结构图

 

系统技术文档

1.系统各模块主要流程图

(1)单步运算流程图

 

(2)算式运算流程图

 

2.软件总体测试方案与测试记录

运行程序,然后查看计算器界面和设计是否相同,进行运算模式的切换,看是否能正确的进行模式切换,查看日历显示是否正确。

经测试没有发现错误,系统运行正常。

3.局部测试方案与测试记录

运行程序,在不同的运算模式下输入数据然后进行调试。

在单步运算模式下应分别测试加、减、乘、除以及除数为0和被除数小于除数这两种特殊情况。

在算式运算模式下除了要测试与单步运算相同的内容外,还应注意算术优先级是否正确,运算结果是否正确。

注意清零功能是否能够正确实现。

经测试没有发现错误,系统运行正常。

系统运行结果和记录

1.软件运行界面图

2.软件运行数据输入和结果界面图

(1)单步运算界面图

1单步运算模式显示界面

2计算5.6÷9的输入过程和结果界面

3清零时的界面

4除数为0时的错误判断界面

(2)算式运算界面图

1算式运算模式显示界面

2计算2.3+3.6÷6-2×6.5+66.8的输入过程和结果界面

3清零时的界面

4除数为0时的错误判断界面

系统使用说明书:

首先进行模式选择,在单步运算时,先点击下一个数字,再点击运算符,再点击下一个数字,然后点击等于号显示结果,如果被除数为零,则提示错误,按清零键后重新输入。

在算式运算时,随便输入一个算式,计算器可识别算式错误不显示,显示的就是输入的算式,点等于号后显示结果,如果被除数为零,则提示错误,按清零键后重新输入,如果输入一个运算符后,只能输入数字不能再输入运算符,如果此时点击运算符,则不会显示在算式中。

C++程序设计设计性实验收获与总结:

1.通过这次实验,我进一步了解并掌握了MFC控件的基本用法,在之前制作简单计算器的基础上,增加了新的功能,制作了高级计算器。

2.在制作算式运算模式的过程中,由于涉及到算术优先级和运算符号的匹配问题,因此用到了二叉树的数据存储结构,通过对数据组织、存储、以及二叉树的后序遍历及其它操作实现了算式运算的识别和计算。

3.通过使用动态链接库,将计算器的基本计算功能在程序外进行实现,使得整个程序结构化更加鲜明,也使得程序的修改和维护更加方便简单。

4.通过这次实验,使我对C++语言有了更深的掌握,提高了我的编程能力和VisualC++的使用能力。

5.在这次的高级计算器制作之后,我掌握了面向对象技术相关的一些软件开发技术,包括利用MFC开发Windows应用程序以及使用动态链接库。

参考文献

1.谭浩强编著《C程序设计(第三版)》北京清华大学出版社2005

2.谭浩强编著《C程序设计题解与上机指导(第三版)》北京清华大学出版社2005

3.Decoder编著《C/C++程序设计》北京中国铁路出版社2002

4.朱站立编著《数据结构(C语言版)》西安西安交通大学出版社2006

附录:

源程序代码

(1)动态链接库源程序代码

_declspec(dllexport)doubleAdd(doublea,doubleb)

{returna+b;}

_declspec(dllexport)doubleSub(doublea,doubleb)

{returna-b;}

_declspec(dllexport)doubleMultiply(doublea,doubleb)

{returna*b;}

_declspec(dllexport)doubleDivide(doublea,doubleb)

{returna/b;}

(2)计算器源程序代码

#include"stdafx.h"

#include"MyGrant_Caculator.h"

#include"MyGrant_CaculatorDlg.h"

//#include

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

charoper,ch[20];

intdian=0,q=0;

CStrings1,stri;

intm=0,k=0,n=0,a=0;

//m=0输入单步运算,m=1输入算式运算

CStringtt,aa,ss;

CStringstr,num[20];

doubleaaa;

ints=0,i=0,j,www;

doublex1,x2,x;

_declspec(dllexport)doubleAdd(doublea,doubleb);

_declspec(dllexport)doubleSub(doublea,doubleb);

_declspec(dllexport)doubleMultiply(doublea,doubleb);

_declspec(dllexport)doubleDivide(doublea,doubleb);

/////////////////////////////////////////////////////////////////////////////

//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()

/////////////////////////////////////////////////////////////////////////////

//CMyGrant_CaculatorDlgdialog

CMyGrant_CaculatorDlg:

:

CMyGrant_CaculatorDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CMyGrant_CaculatorDlg:

:

IDD,pParent)

{//{{AFX_DATA_INIT(CMyGrant_CaculatorDlg)

m_text=_T("");

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCMyGrant_CaculatorDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMyGrant_CaculatorDlg)

DDX_Text(pDX,IDC_EDIT1,m_text);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMyGrant_CaculatorDlg,CDialog)

//{{AFX_MSG_MAP(CMyGrant_CaculatorDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_num1,Onnum1)

ON_BN_CLICKED(IDC_num2,Onnum2)

ON_BN_CLICKED(IDC_num3,Onnum3)

ON_BN_CLICKED(IDC_num4,Onnum4)

ON_BN_CLICKED(IDC_num5,Onnum5)

ON_BN_CLICKED(IDC_num6,Onnum6)

ON_BN_CLICKED(IDC_num7,Onnum7)

ON_BN_CLICKED(IDC_num8,Onnum8)

ON_BN_CLICKED(IDC_num9,Onnum9)

ON_BN_CLICKED(IDC_Dian,OnDian)

ON_BN_CLICKED(IDC_num0,Onnum0)

ON_BN_CLICKED(IDC_Add,Onadd)

ON_BN_CLICKED(IDC_Sub,Onsub)

ON_BN_CLICKED(IDC_Multiply,Oncheng)

ON_BN_CLICKED(IDC_Divide,Onchu)

ON_BN_CLICKED(IDC_Deng,OnDeng)

ON_BN_CLICKED(IDC_Esc1,OnEsc1)

ON_BN_CLICKED(IDC_RADIO1,OnRadio1)

ON_BN_CLICKED(IDC_RADIO2,OnRadio2)

ON_BN_CLICKED(IDC_EDIT2,OnEdit2)

ON_NOTIFY(DTN_CLOSEUP,IDC_DATETIMEPICKER1,OnCloseupDatetimepicker1)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CMyGrant_CaculatorDlgmessagehandlers

BOOLCMyGrant_CaculatorDlg:

:

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.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

//TODO:

Addextrainitializationhere

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

voidCMyGrant_CaculatorDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow

//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

//thisisautomaticallydoneforyoubytheframework.

voidCMyGrant_CaculatorDlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

//Centericoninclientrectangle

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//Drawtheicon

dc.DrawIcon(x,y,m_hIcon);

}

else

{

CDialog:

:

OnPaint();

}

}

//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags

//theminimizedwindow.

HCURSORCMyGrant_CaculatorDlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

voidCMyGrant_CaculatorDlg:

:

Onnum1()

{//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"1";

m_text=s1;

}

elseif(m==1)

{q=0;

num[i]=num[i]+"1";

m_text=m_text+"1";

}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

Onnum2()

{//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"2";

m_text=s1;

}

elseif(m==1)

{

num[i]=num[i]+"2";

m_text=m_text+"2";

q=0;

}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

Onnum3()

{//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"3";

m_text=s1;

}

elseif(m==1)

{

num[i]=num[i]+"3";

m_text=m_text+"3";

q=0;

}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

Onnum4()

{//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"4";

m_text=s1;

}

elseif(m==1)

{num[i]=num[i]+"4";

m_text=m_text+"4";

q=0;

}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

Onnum5()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"5";

m_text=s1;

}

elseif(m==1)

{q=0;

num[i]=num[i]+"5";

m_text=m_text+"5";

}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

Onnum6()

{//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"6";

m_text=s1;

}

elseif(m==1)

{num[i]=num[i]+"6";

m_text=m_text+"6";

q=0;

}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

Onnum7()

{//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"7";

m_text=s1;

}

elseif(m==1)

{num[i]=num[i]+"7";

m_text=m_text+"7";

q=0;}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

Onnum8()

{//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"8";

m_text=s1;

}

elseif(m==1)

{num[i]=num[i]+"8";

m_text=m_text+"8";

q=0;}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

Onnum9()

{//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{

s1=s1+"9";

m_text=s1;

}

elseif(m==1)

{

num[i]=num[i]+"9";

m_text=m_text+"9";

q=0;

}

UpdateData(false);

}

voidCMyGrant_CaculatorDlg:

:

OnDian()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

if(m==0)

{if(dian==

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1