C课程教学设计根据MFC的计算器.doc

上传人:小** 文档编号:2539157 上传时间:2020-04-19 格式:DOC 页数:30 大小:824.32KB
返回 下载 相关 举报
C课程教学设计根据MFC的计算器.doc_第1页
第1页 / 共30页
C课程教学设计根据MFC的计算器.doc_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《C课程教学设计根据MFC的计算器.doc》由会员分享,可在线阅读,更多相关《C课程教学设计根据MFC的计算器.doc(30页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、.-摘要随着科学的发展,计算机的应用越来越广泛,而运用计算机中的计算机语言C+写程序必然是很多的。C+是目前国内外最广泛使用的程序设计语言之一,它具有处理功能丰富、表达能力强、使用方便灵活、执行程序效率较高等优点。而且C+得是一种结构化程序设计语言;另外,C+的函数式结构也为实现程序化模块设计提供了强有力的保正。所以很多人都把C+作为编程的首选语言。本次课程设计就是利用C+的丰富表达能力来编写一个简单计算器,模拟windows系统的计算器进行简单的计算;在编写这次课程设计中要求利用MFC来画出计算器的图形界面,并且保证可以进行基本的计算。关键字:简单计算器 MFC 图形界面 基本计算课程设计任

2、务书设计题目:基于MFC的简单计算器设计学生姓名岑余霞课程名称面向对象程序设计课程设计专业班级计科1003班地 点I305/I306起止时间6月27日7月8日设计内容及要求以Windows Xp自带的计算器为蓝本,设计一个简单的10进制数计算器能进行实数(整数和浮点数)的算术运算(加、减、乘、除和求余数),要求在编辑框中输入运算量的输入。参考界面如下图所示,其中红色框标注的部分要求必须完成,蓝色框标注的部分属选作内容。该计算器主要进行实数的单目和双目运算,使用过程如下:1)单目运算,例如对于要求先输入数字,然后点击“ln”按钮,完成取对数运算并把结果显示在编辑框中。2)双目运算,例如进行加法要

3、求先输入第1加数,然后点击“+”按钮,再输入第2加数最后点击“=”按钮,完成计算并在编辑框中显示运算结果。注意:输入的浮点数中小数点不得超过1个;对、和取偶数次方根等4类功能要做数据的合法性检查。根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。设计参数(1)系统分析、设计正确。(2)结果以图型界面方式显示。(3)界面简洁、美观。(4)报告格式规范。进度要求6月28日第一大节、第二大节 讲解Windows程序设计的基础知识6月28日第三大节、第四大节 学生练习简单窗口程序设计6月30日第一大节、第二大节 讲解消息处理函数、消息传递机制6月30日第三大节、第四大节

4、 学生练习控件的使用6月31日第一大节、第二大节 学生实现第一阶段的阶段性成果6月31日第三大节、第四大节 学生实现第一阶段的阶段性成果7月3日第一大节、第二大节 讲解基于对话框的MFC程序的实现7月3日第三大节、第四大节 学生学习控件的使用7月4日第一大节、第二大节 讲解MFC封装的消息响应机制7月4日第三大节、第四大节 学生练习消息响应函数的编写7月5日第一大节、第二大节 学生选择第3阶段的题目7月5日第三大节、第四大节 规划设计方案7月6日第一大节、第二大节 编程实现7月6日第三大节、第四大节 编程实现7月7日第一大节、第二大节 编程实现7月7日第三大节、第四大节 程序测试7月8日第一大

5、节、第二大节 编写课程设计报告7月8日第三大节、第四大节 课程设计答辩参考资料1美帕罗塞斯.MFC Windows程序设计.清华大学出版社.20072 美Stanley.C+ Primer.人民邮电出版社.2006其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任: 指导教师:伍建全/陈应祖/焦小军/易军/张亚军 2011年6月22日目录摘要2课程设计任务书3第一章 设计内容及要求71.1 计算器的基本要求71.2 需实现的主要功能7第二章 需求分

6、析82.1 界面及布局设计82.2 简单计算的实现方法8第三章 系统设计93.1 总体功能图93.2 总体流程图9第四章 主要功能设计流程114.1 单目运算实现流程图114.2 双目运算流程图11第五章 代码实现135.1 代码的实现135.2 运行效果图13第六章 系统测试16致谢19参考文献:20附录:源程序代码21第一章 设计内容及要求1.1 计算器的基本要求(1) 设计MFC的计算器界面。计算器界面是基于MFC的Dialog bases所画出来的;其中界面主要由Edit properties和Push Button properties所组成。 通过鼠标点击按键即可在Edit中显示数

7、据和进行运算。(2) 程序要求用户在运行过程中注意不同函数的定义域,若用户按键的数值不符合要求,计算器则会弹出一个提醒你的对话框。(3) 用户在计算一次以后,可以通过按键AC清空以前记录,进行下一次的计算。1.2 需实现的主要功能(1) 需完成简单的双目运算,例如加、减、乘、除等。(2) 需完成三角函数sin,cos,tan的计算,并且要注意其定义域。(3) 需完成简单的与,或,非,异或等简单运算。(4) 需完成对数函数以10为底的log,ln,及简单的阶乘运算。(5) 需完成任意数的开根和次方,并且要注意数值要求。(6) 还需完成对数值的清除及清除全部内容的功能。第二章 需求分析2.1 界面

8、及布局设计系统布局主要采用了MFC的Dialog的对话框,运用了文本框、按键、面板等组件;文本框的主要功能:联系按键,通过增加文本框的成员,将按键运用按键函数和文本框联系起来,即按键即可在文本框中显示相应的数值。按键功能:按键用于调用按键函数,通过按键函数来实现计算器相应的计算步骤。2.2 简单计算的实现方法该计算器的简单计算实现是基于switch case 语句,定义一个全局变量flag,通过对flag赋值调用相应的case语句实现相应的计算。(1) 加减乘除运算的实现。该计算主要以简单的运算符+、-、*、/来实现。(2) 较复杂的运算的实现,例如简单的对数运算,与或非运算,开根和次方。该计

9、算主要运用math.h中的函数调用实现的,不同的运算调用相应的函数来实现,但是需注意的就是相应的函数就只能进行运算而已,而数值是否符合该函数就需要自己进行判断,如若数值不符合函数定义域,计算则会出现错误。(3) 阶乘运算的实现。该运算的实现运用了递归,较为方便的写出递归函数即可进行阶乘运算。 第三章 系统设计3.1 总体功能图根据需求所作的分析,需要完成简单的双目运算,例如加、减、乘、除等;需完成三角函数sin,cos,tan的计算,并且要注意其定义域; 需完成简单的与,或,非,异或等简单运算;需完成对数函数以10为底的log,ln,及简单的阶乘运算;需完成任意数的开根和次方,并且要注意数值要

10、求;还需完成对数值的清除及清除全部内容的功能。三角函数平方立方开二次根阶乘运算求1/xE的n次方log/ln运算按键输入数字与或非X的n次方X的n次根求余加减乘除双目运算单目运算按键输入数字主界面根据系统需求,计算器的总功能图如图3-1所示:图3-1 计算机总功能图3.2 总体流程图根据对计算器的功能分析,设计得到计算器总流程,如图3-2所示:开始计算器界面输入数字是否符合条件 否 switch 是 单目运算 双目运算 输入数字是否符合条件 否 是在文本框中显示结果清零图3-2 计算器流程图 第4章 主要功能设计流程4.1 单目运算实现流程图根据对单目运算的分析,可得单目运算流程图,如图4-1

11、所示:开始计算器界面输入数字是否符合条件 否 是switch输出结果清零结束图4-1 单目运算流程图4.2 双目运算流程图根据对双目运算的分析,可得双目运算流程图,如图4-2所示:开始计算器界面输入第一个数字是否符合条件 否输入第二个数字 是是否符合条件 否 switch 是 输出结果清零结束图4-2 双目运算流程图第5章 代码实现5.1 代码的实现该计算器是基于MFC下创立的,MFC会给出一部分程序代码;计算器所要编写的类就只有文件所给出的CAboutDlg类。在CAboutDlg类中,存在某一部分的函数代码,而我们所要增加的就是和界面相联系的按键的按键函数,即对那件数字上的显示和运算的执行

12、。首先,画好基本的计算器图,如图5-1所示:图5-1 运算器基本架构图5.2 运行效果图开始主界面:图5-2 计算器主界面运行时界面,以求4的阶乘为例子:图5-3 运行时计算器界面(1)图5-3 运行时计算器界面(2)图5-3 运行时计算器界面(3)第六章 系统测试1、void CCalcutorDlg:OnBUTTONFushu( );用例1: input:12 output:-12用例2: input:-12 output:122、 void CCalcutorDlg:OnBackSpace( );用例:input:123 output:123、 void CCalcutorDlg:OnB

13、UTTONjia( ); void CCalcutorDlg:OnBUTTONdengyu( );/加法用例: input:1 2 output:34、 void CCalcutorDlg:OnBUTTONjin( ); void CCalcutorDlg:OnBUTTONdengyu();/减法用例: input:5 4 output:15、 void CCalcutorDlg:OnBUTTONcheng( ); void CCalcutorDlg:OnBUTTONdengyu();/乘法用例: input:5 4 output:206、 void CCalcutorDlg:OnBUTTON

14、除( ); void CCalcutorDlg:OnBUTTONdengyu();/除法用例1: input:16 4 output:4用例2: input:16 0 output除数不能为零!7、 void CCalcutorDlg:OnBUTTONsin( ); void CCalcutorDlg:OnBUTTONdengyu();/sin用例: input:30 output:0.58、 void CCalcutorDlg:OnBUTTONcos( ); void CCalcutorDlg:OnBUTTONdengyu();/cos用例: input:60 output:0.59、voi

15、d CCalcutorDlg:OnBUTTONtan( ); void CCalcutorDlg:OnBUTTONdengyu();/tan用例1: input:45 output:110、void CCalcutorDlg:OnBUTTONlog( ); void CCalcutorDlg:OnBUTTONdengyu( );/log以10为底用例: input:10 output:1用例2: input:-1 output:真数必须大于零!11、void CCalcutorDlg:OnBUTTONln( ); void CCalcutorDlg:OnBUTTONdengyu( );/ln用

16、例1: input:1 output:0用例2: input:-1 output:真数必须大于零!12、void CCalcutorDlg:OnBUTTONn( ); void CCalcutorDlg:OnBUTTONdengyu( );/阶乘用例: input:4 output:2413、void CCalcutorDlg:OnBUTTONxy( ); void CCalcutorDlg:OnBUTTONdengyu( );/x的y次方用例: input:5 2 output:2514、void CCalcutorDlg:OnBUTTONxx( ); void CCalcutorDlg:O

17、nBUTTONdengyu( );/x的平方用例: input:2 output:415、void CCalcutorDlg:OnBUTTONxxx( ); void CCalcutorDlg:OnBUTTONdengyu( );/x的立方用例: input:2 output:816、void CCalcutorDlg:OnBUTTONmod( ); void CCalcutorDlg:OnBUTTONdengyu( );/求余数mod用例: input:9 10 output:917、void CCalcutorDlg:OnBUTTONXor( ); void CCalcutorDlg:On

18、BUTTONdengyu( );/异或用例: input:1 0 output:118、void CCalcutorDlg:OnBUTTONexp( ); void CCalcutorDlg:OnBUTTONdengyu( );/E的多少次方用例: input:1 output:2.71828219、void CCalcutorDlg:OnBUTTONor( ); void CCalcutorDlg:OnBUTTONdengyu( );/或用例: input:1 0 output:120、void CCalcutorDlg:OnBUTTONand( ); void CCalcutorDlg:O

19、nBUTTONdengyu( );/且用例: input:1 0 output:021、void CCalcutorDlg:OnBUTTONx( ); void CCalcutorDlg:OnBUTTONdengyu( );/ 1 / x用例1: input:10 output:0.1用例2: input:0 output:分母不能为零!22、void CCalcutorDlg:OnBUTTONlog( ); void CCalcutorDlg:OnBUTTONdengyu( );/开2次根号用例1: input:100 output:10用例2: input:-100 output:不符合定

20、义域!23、void CCalcutorDlg:OnBUTTONlog( ); void CCalcutorDlg:OnBUTTONdengyu( );/x开y次根号用例1: input:8 3 output:2用例2: input:-8 3 output:-2致谢在本次课程设计中,我想如果没有老师耐心的指导,我是很难才会把这个程序写出来的;在这里我要忠心地感谢老师对我们的帮助,还有老师对我们的监督,如果没有老师,我想我们很多同学都不会那么有耐心的把程序写出来的。其次,我要感谢的是我的朋友和同学,因为没有他们细心的帮我讲解,我想我是不可能这么快的就把程序写出来的。 最后所要感谢的就是学校,因为

21、这几天来重庆的温度都是很高的,学校给了我们一个舒适的环境,好让我们可以好好的写程序。签名:XXX 日期:2011年7月日参考文献:1 熊歆斌. Visual C+程序设计培训教程. 北京:清华大学出版社 2002.72 李英. Visual C+编程与项目开发. 上海:华东理工大学出版社 2008.1 附录:源程序代码/ calcutorDlg.cpp : implementation file/#include stdafx.h#include calcutor.h#include calcutorDlg.h#include math.h#define PI 3.14159265358979

22、32384626433832795#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function

23、overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDat

24、aExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalcutorDlg dialogCCalcutorDlg:CCalcutorDlg(CWnd* pParent /*=NULL*/): CDialog(CCalcutorDlg:ID

25、D, pParent)/AFX_DATA_INIT(CCalcutorDlg)m_a = _T();/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CCalcutorDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCalcutorDlg)DDX_Text(pDX

26、, IDC_EDIT1, m_a);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCalcutorDlg, CDialog)/AFX_MSG_MAP(CCalcutorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_1, OnButton1)ON_BN_CLICKED(IDC_BUTTON_2, OnButton2)ON_BN_CLICKED(IDC_BUTTON_0, OnButton0)ON_BN_CLICKED(IDC_BUTTON_3, OnButton3

27、)ON_BN_CLICKED(IDC_BUTTON_4, OnButton4)ON_BN_CLICKED(IDC_BUTTON_5, OnButton5)ON_BN_CLICKED(IDC_BUTTON_6, OnButton6)ON_BN_CLICKED(IDC_BUTTON_7, OnButton7)ON_BN_CLICKED(IDC_BUTTON_8, OnButton8)ON_BN_CLICKED(IDC_BUTTON_9, OnButton9)ON_BN_CLICKED(IDC_BUTTON_dot, OnBUTTONdot)ON_BN_CLICKED(IDC_BUTTON_Fush

28、u, OnBUTTONFushu)ON_BN_CLICKED(IDC_BUTTON_jia, OnBUTTONjia)ON_BN_CLICKED(IDC_BUTTON_dengyu, OnBUTTONdengyu)ON_BN_CLICKED(IDC_BUTTON_jin, OnBUTTONjin)ON_BN_CLICKED(IDC_BUTTON_cheng, OnBUTTONcheng)ON_BN_CLICKED(IDC_BUTTON_chu, OnBUTTONchu)ON_BN_CLICKED(IDC_BackSpace, OnBackSpace)ON_BN_CLICKED(IDC_BUTT

29、ON_sin, OnBUTTONsin)ON_BN_CLICKED(IDC_BUTTON_cos, OnBUTTONcos)ON_BN_CLICKED(IDC_BUTTON_tan, OnBUTTONtan)ON_BN_CLICKED(IDC_AC, OnAc)ON_BN_CLICKED(IDC_BUTTON_log, OnBUTTONlog)ON_BN_CLICKED(IDC_BUTTON_ln, OnBUTTONln)ON_BN_CLICKED(IDC_BUTTON_n, OnBUTTONn)ON_BN_CLICKED(IDC_BUTTON_xy, OnBUTTONxy)ON_BN_CLI

30、CKED(IDC_BUTTON_xx, OnBUTTONxx)ON_BN_CLICKED(IDC_BUTTON_xxx, OnBUTTONxxx)ON_BN_CLICKED(IDC_BUTTON_mod, OnBUTTONmod)ON_BN_CLICKED(IDC_BUTTON_XOR, OnButtonXor)ON_BN_CLICKED(IDC_BUTTON_PI, OnButtonPi)ON_BN_CLICKED(IDC_BUTTON_exp, OnBUTTONexp)ON_BN_CLICKED(IDC_C, OnC)ON_BN_CLICKED(IDC_BUTTON_or, OnBUTTO

31、Nor)ON_BN_CLICKED(IDC_BUTTON_and, OnBUTTONand)ON_BN_CLICKED(IDC_BUTTON_x, OnBUTTONx)ON_BN_CLICKED(IDC_BUTTON_squareRoot, OnBUTTONsquareRoot)ON_BN_CLICKED(IDC_BUTTON_nRoot, OnBUTTONnRoot)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalcutorDlg message handlersBOOL CCalcutorDlg:OnInitDialog()CDialog:OnInitDialog()

32、;/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this auto

33、matically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization heren = 0;n1 = 0;n2 = 0;flag = 0;return TRUE; / return TRUE unless you set the focus to a controlvoid CCalcutorDlg:OnSysCommand(UI

34、NT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically

35、 done for you by the framework.void CCalcutorDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRec

36、t rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CCalcutorDlg:OnQuery

37、DragIcon()return (HCURSOR) m_hIcon;void CCalcutorDlg:OnButton1() m_a += 1;UpdateData(FALSE);void CCalcutorDlg:OnButton2() m_a += 2;UpdateData(FALSE);void CCalcutorDlg:OnButton0() m_a += 0;UpdateData(FALSE);void CCalcutorDlg:OnButton3() m_a += 3;UpdateData(FALSE);void CCalcutorDlg:OnButton4() m_a +=

38、4;UpdateData(FALSE);void CCalcutorDlg:OnButton5() m_a += 5;UpdateData(FALSE);void CCalcutorDlg:OnButton6() m_a += 6;UpdateData(FALSE);void CCalcutorDlg:OnButton7() m_a += 7;UpdateData(FALSE);void CCalcutorDlg:OnButton8() m_a += 8;UpdateData(FALSE);void CCalcutorDlg:OnButton9() m_a += 9;UpdateData(FALSE);void CCalcutorDlg:OnBUTTONdot() if( n = 0 )m_a += .;n = 1;UpdateData(FALSE);void CCalcutorDlg:OnBackSpace() int len = m_a.GetLe

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com