收藏 分享(赏)

C++课程设计报告 计算器的设计与实现.doc

上传人:精品资料 文档编号:8998457 上传时间:2019-07-19 格式:DOC 页数:24 大小:680KB
下载 相关 举报
C++课程设计报告 计算器的设计与实现.doc_第1页
第1页 / 共24页
C++课程设计报告 计算器的设计与实现.doc_第2页
第2页 / 共24页
C++课程设计报告 计算器的设计与实现.doc_第3页
第3页 / 共24页
C++课程设计报告 计算器的设计与实现.doc_第4页
第4页 / 共24页
C++课程设计报告 计算器的设计与实现.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、C+课 程 设 计 报 告( 20 - 20 年度第 学期)计算器的设计与实现专业 计算机科学与技术学生姓名班级学号指导教师完成日期C+课程设计报告(2011 )目 录1 概 述 .31.1 课程设计目的 31.2 课程设计内容 32 系统需求分析 32.1 系统目标 32.2 主体功能 32.3 开发环境 33 系统概要设计 43.1 系统功能划分 43.2 系统流程图 54系统详细设计 54.1 设计步骤 54.2 界面设计 74.2 实现高级按钮控件类 105 测试 115.1 测试方案 .115.2 测试结果 .116 小结 12参考文献 .14附 录 15附录 1 源程序清单 .15

2、C+课程设计报告(2011 )3计算器的设计与实现1 概 述 1.1 课程设计目的1、巩固并加深学生对 C+语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用 VC+ 6.0 集成开发环境;4、提高运用 C+语言解决实际问题的能力; 5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的 MIS 系统;6、掌握书写程序设计开发文档的能力(书写课程设计实验报告) 。1.2 课程设计内容课题名称:计算器的实现说明:实现一个计算器。要求: 1)用“计算器”的标准视图执行简单的计算。2)用其科学型视图执行高级的科学计

3、算。2 系统需求分析2.1 系统目标我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。要计算功能有以下几个方面:加法,减法,乘法,除法,求幂,求模,求平方根,求 Sin,求 Cos。2.2 主体功能1、十进制数的加、减、乘、除、乘方、取模等简单计算。2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算。3、以角度、弧度两种方式实现上述部分函数。2.3 开发环境VC+ 6.0计算器的设计与实现43 系统概要设计3.1 系统功能划分表 3-1 系统功能表1) 假设执行操作“+”

4、 ,先输入一个数,再输入“+” ,再输入另一个数,最后输入“+” 。整个功能“+”就执行完毕。2)执行操作“Sin”,先输入一个数,在输入“Sin” ,整个功能“Sin”就执行完毕。3)执行操作“n!” ,先输入一个数,再输入“n! ,整个功能“n!”执行序号 文件名 主要功能 备注1 + 加法求和 两个操作数2 - 减法求差 两个操作数3 * 乘法求积 两个操作数4 / 除法求商 两个操作数5 % 求模 两个操作数6 求 x 的 y 次幂 两个操作数7 S 求平方根 一个操作数8 Sin 求正弦 一个操作数9 Cos 求余弦 一个操作数10 ln 求对数 一个操作数11 n! 求阶乘 一个操

5、作数12 = 等于13 C 寄存器清零C+课程设计报告(2011 )53.2 系统流程图图 3-1 系统流程图4系统详细设计4.1 设计步骤打开 Microsoft Visual C+ 6.0,在文件中点击新建,在弹出框内选择 MFC AppWizardexe工程,输入工程名 cao 及其所在位置,点击确定,如图 4-1 所示。加法减法乘法除法求幂求模寄存器清零开方正弦余弦对数输入第二个操作数显示结果结束开始输入第一个操作数选择一种计算方法计算器的设计与实现6图 4-1 新建 MFC AppWizardexe工程将弹出 MFC AppWizard-step 1 对话框,选择基本对话框,点击完成

6、,如图 4-2所示。图 4-2 基本对话框这样,MFC AppWizard 就建立了一个基于对话窗口的程序框架,如图 4-3 所示。C+课程设计报告(2011 )7图 4-3 新建的对话框4.2 界面设计界面设计主要是创建控件,在图 4-3 所示的 Resoure View 选项卡中打开Dialog 资源组,双击 IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。1)在图 4-3 中 Controls 的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠

7、标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时弹出 Edit 属性对话框,如图 4-4 所示,在该对话框中输入 ID 属性。 图 4-4 Edit 属性对话框计算器的设计与实现82)在图 4-2 中 Controls 的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出 Push Button 属性对话框,如图 4-5 所示,在该对话框中输入控件的 ID 值和标题属性。图 4-5 Push Button 属性按照上

8、面的操作过程编辑其他按钮和编辑框等对象的属性。表 4-1 各按钮和编辑框等对象的属性对象 ID 标题或说明编辑框 IDC_xianshi 结果显示按钮 IDC_BUTTON0 0按钮 IDC_BUTTON1 1按钮 IDC_BUTTON2 2按钮 IDC_BUTTON3 3按钮 IDC_BUTTON4 4按钮 IDC_BUTTON5 5按钮 IDC_BUTTON6 6按钮 IDC_BUTTON7 7按钮 IDC_BUTTON8 8按钮 IDC_BUTTON9 9按钮 IDC_change +/-按钮 IDC_point .按钮 IDC_add +按钮 IDC_difference -按钮 ID

9、C_chu /按钮 IDC_tan tan按钮 IDC_exp exp按钮 IDC_multiply *按钮 IDC_sqrt sqrt按钮 IDC_daoshu 1/x按钮 IDC_jiecheng n!按钮 IDC_ln ln按钮 IDC_sin sin按钮 IDC_cos cos按钮 IDC_pow xy按钮 IDC_Onequal =C+课程设计报告(2011 )9完成后界面如图 4-6 所示。图 4-6 设计界面加入标准型和科学型按键:图 4-7 加入标准型和科学型按键界面计算器的设计与实现10运行界面效果如图 4-8:图 4-8 科学型界面4.3 实现高级按钮控件类因为本程序大多使

10、用按钮来完成我们所需的计算,所以在这里,我使用高级按钮控件来实现操作,具体过程如下:利用 ClassWizard 添加一个新类(1)添加成员变量和成员函数 添加成员变量:public:CRect m_ClientRect; /用来保存按钮的客户的矩形区域CRgn m_ClientRgn ; /用来保存按钮的客户区域,非矩形UINT m_State; /按钮所处状态CPoint m_Point; /当前鼠标位置BOOL m_IsTimerOn; /标识计时器是否已经打开利用 ClassWizard 添加消息映射和响应函数:再利用 ClassWizard 覆盖父类中的两个关键的虚函数:/AFX_V

11、IRTUAL(CAdvButton)public:virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);protected:virtual void PreSubclassWindow();/AFX_VIRTUALC+课程设计报告(2011 )11其中对于所有的对于按钮的绘制工作都是在 DrawItem 函数中完成的。(2)添加创建按钮控件代码按钮的创建分两步完成。首先,调用构造函数对按钮对象进行初始化;其次,调用 Create 函数创建按钮。(3)屏蔽 Enter 键直到现在为止,虽然计算器的界面已经完成。但是,它还有一个缺陷:当E

12、nter 键按下时,对话框应付突然关掉。这是因为对话框默认具有焦点的控件是OK 键,当 Enter 键按下时,框架会自动执行当前拥有焦点的控件的响应函数,所以对话框自然就关闭了。要屏蔽这一功能,只要执行下面的代码就可以。void CCalculatorDlg:OnOK() /CDialog:OnOK(); /屏蔽掉此句代码5 测试5.1 测试方案先用标准型进行简单的四则运算:+ - * /,测试完成后。再用科学型进行稍复杂的运算:sin,cos,tan,log,ln,n!等,核对其计算结果的正确性。5.2 测试结果经测试标准型计算器,进行简单的四则运算,结果均正确,如图 5-1 所示。图 5-

13、1 四则运算测试结果图测试科学型计算器,进行 sin,cos,tan,log,ln,n!等运算,结果均正确,求计算器的设计与实现12sin30(如图 5-2 所示)。图 5-2 求 sin30 测试结果图(一)图 5-3 求 sin30 测试结果图(二)6 小结通过一个多星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。看着劳动成果,很欣慰!刚开始,可以说是完全没有头绪,于是上网查,找到了些与我题目相似的源代码,然后对之进行修改,测试,最后得到我这次课程设计所需要的代码.通过计算器的设计这一课题的设计和实现,我对简单的 C 语言编程有了进一C+课程设计报告(2011 )13步的认

14、识,对 Microsoft Visual C+ 6.0 这个程序的操作更加熟练了一些。回顾此次的课程设计,我学到了很多东西不仅巩固了书本的知识并且与实践相结合提高具体操作能力,在设计的过程中发现自己的不足,有些知识掌握的不够牢靠,通过这次的课程设计之后我把前面所学的知识又重新温故了一遍。同时,在老师和同学身上我学到了很多非常实用的知识,在此对给过我帮助的同学和老师表示由衷的感谢! 计算器的设计与实现14参考文献1谭浩强.C 程序设计(第三版)M.北京:清华大学出版社,2005. 2谭浩强.C 程序设计题解与上机指导(第三版)M.北京:清华大学出版社,2005.3 甄炜.C+语言和面向对象程序设

15、计教程M.北京:机械工业出版社,2005.C+课程设计报告(2011 )15附 录附录 1 源程序清单/ CalculatorDlg.cpp : implementation file#include “stdafx.h“#include “Calculator.h“#include “CalculatorDlg.h“#include “math.h“#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Abou

16、tclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprot

17、ected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_

18、MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalculatorDlg dialog计算器的设计与实现16CCalculatorDlg:CCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CCalculatorDlg:IDD, pParent)/AFX_DATA_INIT(CCalculatorDlg)m_result = _T(“);m_isDegree = -1;m_sentific = -1;/AFX_DATA_INIT/ Note that LoadI

19、con does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);m_hAccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDD);DtoR=1;m_coff=0.1;m_bCoff=0;m_errorState = ErrNone;m_bOperandAvail=FALSE;m_operator=OpNone;void CCalculatorDlg:DoDataExchange(C

20、DataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCalculatorDlg)DDX_Text(pDX, IDC_DISPLAY, m_result);DDX_Radio(pDX, IDC_DEGREE, m_isDegree);DDX_Radio(pDX, IDC_SENTIFIC, m_sentific);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)/AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_P

21、AINT()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, OnSig

22、n)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_SENTIFIC, OnSentific)ON_BN_CLICKED(IDC_SIN, O

23、nSin)ON_BN_CLICKED(IDC_SQUAR, OnSquar)ON_BN_CLICKED(IDC_TAN, OnTan)ON_BN_CLICKED(IDC_STANDARD, OnStandard)ON_BN_CLICKED(IDC_DEGREE, OnDegree)ON_BN_CLICKED(IDC_RAD, OnRad)ON_BN_CLICKED(IDC_COS, OnCos)/AFX_MSG_MAPEND_MESSAGE_MAP()C+课程设计报告(2011 )17/ CCalculatorDlg message handlersBOOL CCalculatorDlg:On

24、InitDialog()CDialog:OnInitDialog();/ Add “About.“ menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does

25、 this automatically/ 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 hereGetWindowRect(rcSentific);CWnd* m_pMark=GetDlgItem(IDC_DISPLAY);ASSERT(m_pMark);CRect rect;m_pMark-GetWindowRect(r

26、ect);rcStandard=rcSentific;rcStandard.right=rect.right+5;m_bIsExpand=0;m_sentific=1;OnStandard();m_result=“0.“;m_isDegree=1;UpdateData(FALSE);return TRUE; / return TRUE unless you set the focus to a controlvoid CCalculatorDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID dlgAbout.DoModal();elseCDialo

27、g: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 done for you by the framework.计算器的设计与实现18void CCalculatorDlg:OnPaint() if (IsIconic()CPaintDC dc(this)

28、; / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIc

29、on + 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 CCalculatorDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CCalculatorDlg:OnOperandInput(UINT nID)ASSERT(nID = IDC

30、_0 i-)m_operand*=i;UpdateDisplay();/ m_func=FuncNone;void CCalculatorDlg:OnDegree() / TODO: Add your control notification handler code herem_isDegree=0;DtoR=(2*PI)/360;UpdateData(FALSE);void CCalculatorDlg:OnRad() / TODO: Add your control notification handler code herem_isDegree=1;DtoR=1;UpdateData(

31、TRUE);void CCalculatorDlg:OnCos() / TODO: Add your control notification handler code herem_func=FuncCos;Run_Func();void CCalculatorDlg:ExpandToSentific()if(m_bIsExpand)SetWindowPos(NULL,0,0,rcSentific.Width(),rcSentific.Height(),SWP_NOMOVE|SWP_NOZORDER);SetVisibleCtrl();elseSetWindowPos(NULL,0,0,rcS

32、tandard.Width(),rcSentific.Height(),SWP_NOMOVE|SWP_NOZORDER);SetVisibleCtrl();UpdateData(FALSE);void CCalculatorDlg:SetVisibleCtrl()CWnd* pCtrl=GetWindow(GW_CHILD);CRect rcTest;CRect rcControl;计算器的设计与实现24CRect rcShow;GetWindowRect(rcShow);while(pCtrl!=NULL)pCtrl-GetWindowRect(rcControl);if(rcTest.IntersectRect(rcShow,rcControl)pCtrl-EnableWindow(TRUE);elsepCtrl-EnableWindow(FALSE);pCtrl=pCtrl-GetWindow(GW_HWNDNEXT);

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报