C++课程设计报告计算器的设计与实现_第1页
C++课程设计报告计算器的设计与实现_第2页
C++课程设计报告计算器的设计与实现_第3页
C++课程设计报告计算器的设计与实现_第4页
C++课程设计报告计算器的设计与实现_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 源程序清单 .15C+课程设计报告(2011)计算器的设计与实现1 概述1.1

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

3、,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。要计算功能有以下几个方面:加法,减法,乘法,除法,求幂,求模,求平方根,求Sin ,求 Cos。2.2 主体功能1、十进制数的加、减、乘、除、乘方、取模等简单计算。2、科学计算函数,包括 ( 反) 正弦、 ( 反 ) 余弦、 ( 反) 正切、 ( 反 ) 余切、开方、指数等函数运算。3、以角度、弧度两种方式实现上述部分函数。2.3 开发环境VC+ 6.03计算器的设计与实现3 系统概要设计3.1 系统功能划分表 3-1 系统功能表序号文件名主要功能备注1+加法求和两个操作数2-减法求差两个操作数3*乘法求

4、积两个操作数4/除法求商两个操作数5%求模两个操作数6求 x 的 y 次幂两个操作数7S求平方根一个操作数8Sin求正弦一个操作数9Cos求余弦一个操作数10ln求对数一个操作数11n!求阶乘一个操作数12=等于13C寄存器清零1) 假设执行操作“ +”,先输入一个数,再输入“ +”,再输入另一个数,最后输入“ +”。整个功能“ +”就执行完毕。2)执行操作“ Sin ”, 先输入一个数,在输入“ Sin ”,整个功能“ Sin ”就执行完毕。3)执行操作“ n! ”,先输入一个数,再输入“n! ,整个功能“ n! ”执行4C+课程设计报告(2011)3.2 系统流程图开始输入第一个操作数选择

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

6、图 4-3 所示。6C+课程设计报告(2011)图 4-3 新建的对话框4.2 界面设计界面设计主要是创建控件, 在图 4-3 所示的 Resoure View 选项卡中打开 Dialog 资源组,双击 IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“ 1”为例进行介绍,其他按钮的创建可参照此进行操作。1)在图 4-3 中 Controls 的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时弹出Ed

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

8、shi结果显示按钮IDC_BUTTON00按钮IDC_BUTTON11按钮IDC_BUTTON22按钮IDC_BUTTON33按钮IDC_BUTTON44按钮IDC_BUTTON55按钮IDC_BUTTON66按钮IDC_BUTTON77按钮IDC_BUTTON88按钮IDC_BUTTON99按钮IDC_change+/-按钮IDC_point.按钮IDC_add+按钮IDC_difference-按钮IDC_chu/按钮IDC_tantan按钮IDC_expexp按钮IDC_multiply*按钮IDC_sqrtsqrt按钮IDC_daoshu1/x按钮IDC_jiechengn!按钮IDC

9、_lnln按钮IDC_sinsin按钮IDC_coscos按钮IDC_powxy按钮IDC_Onequal=8C+课程设计报告(2011)完成后界面如图4-6 所示。图 4-6 设计界面加入标准型和科学型按键:图 4-7加入标准型和科学型按键界面9计算器的设计与实现运行界面效果如图4-8 :图 4-8 科学型界面4.3 实现高级按钮控件类因为本程序大多使用按钮来完成我们所需的计算,所以在这里,我使用高级按钮控件来实现操作,具体过程如下:利用 ClassWizard 添加一个新类(1) 添加成员变量和成员函数添加成员变量:public:CRect m_ClientRect;/用来保存按钮的客户的

10、矩形区域CRgn m_ClientRgn ;/用来保存按钮的客户区域 , 非矩形UINT m_State;/ 按钮所处状态CPoint m_Point;/当前鼠标位置BOOL m_IsTimerOn;/标识计时器是否已经打开利用 ClassWizard 添加消息映射和响应函数:再利用 ClassWizard 覆盖父类中的两个关键的虚函数:/AFX_VIRTUAL(CAdvButton)public:virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); protected:virtual void PreSubclassWindow(

11、);/AFX_VIRTUAL10C+课程设计报告(2011)其中对于所有的对于按钮的绘制工作都是在DrawItem 函数中完成的。(2) 添加创建按钮控件代码按钮的创建分两步完成。首先,调用构造函数对按钮对象进行初始化;其次,调用 Create 函数创建按钮。(3) 屏蔽 Enter 键直到现在为止,虽然计算器的界面已经完成。 但是,它还有一个缺陷: 当 Enter键按下时,对话框应付突然关掉。这是因为对话框默认具有焦点的控件是OK 键,当 Enter 键按下时,框架会自动执行当前拥有焦点的控件的响应函数,所以对话框自然就关闭了。要屏蔽这一功能,只要执行下面的代码就可以。void CCalcu

12、latorDlg:OnOK()/CDialog:OnOK(); /屏蔽掉此句代码5 测试5.1 测试方案先用标准型进行简单的四则运算:+ - * /,测试完成后。再用科学型进行稍复杂的运算: sin,cos,tan,log,ln,n!等,核对其计算结果的正确性。5.2 测试结果经测试标准型计算器,进行简单的四则运算,结果均正确,如图5-1 所示。图 5-1 四则运算测试结果图测试科学型计算器,进行sin,cos,tan,log,ln,n!等运算,结果均正确,求11计算器的设计与实现sin30( 如图 5-2 所示 ) 。图 5-2求 sin30 测试结果图(一)图 5-3求 sin30 测试结

13、果图(二)6 小结通过一个多星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。看着劳动成果,很欣慰!刚开始,可以说是完全没有头绪,于是上网查,找到了些与我题目相似的源代码,然后对之进行修改,测试,最后得到我这次课程设计所需要的代码.通过计算器的设计这一课题的设计和实现,我对简单的C 语言编程有了进一步12C+课程设计报告(2011)的认识,对 Microsoft Visual C+ 6.0这个程序的操作更加熟练了一些。回顾此次的课程设计,我学到了很多东西不仅巩固了书本的知识并且与实践相结合提高具体操作能力,在设计的过程中发现自己的不足,有些知识掌握的不够牢靠,通过这次的课程设计之

14、后我把前面所学的知识又重新温故了一遍。同时,在老师和同学身上我学到了很多非常实用的知识,在此对给过我帮助的同学和老师表示由衷的感谢!13计算器的设计与实现参考文献1 谭浩强 .C 程序设计 ( 第三版 )M. 北京:清华大学出版社, 2005.2 谭浩强 .C 程序设计题解与上机指导 ( 第三版 )M. 北京:清华大学出版社, 2005.3 甄炜 .C+语言和面向对象程序设计教程 M. 北京:机械工业出版社, 2005.14C+课程设计报告(2011)附录附录 1 源程序清单/ CalculatorDlg.cpp : implementation file #include stdafx.h#

15、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 Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_D

16、ATA/ ClassWizard generated virtual function 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(C

17、AboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(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()/ CCalculatorDlg dialog15计算器的设计与实现CCalculatorDlg:CCal

18、culatorDlg(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 LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);m_hAccel = LoadAc

19、celerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDD); DtoR=1;m_coff=0.1; m_bCoff=0; m_errorState = ErrNone;m_bOperandAvail=FALSE; m_operator=OpNone;void CCalculatorDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCalculatorDlg)DDX_Text(pDX, IDC_DISPLAY, m_result);D

20、DX_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_PAINT()ON_WM_QUERYDRAGICON()ON_COMMAND_RANGE(IDC_0, IDC_9, OnOperandInput)ON_BN_CLICKED(IDC_ADD, OnAdd)ON_BN_CLICK

21、ED(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, OnSign)ON_BN_CLICKED(IDC_RECIPROCAL, OnReciprocal)ON_BN_CLICKED(IDC_POINT, OnPoint)ON_BN_CLICKED(IDC_CLEAR, OnClear)ON

22、_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, OnSin)ON_BN_CLICKED(IDC_SQUAR, OnSquar)ON_BN_CLICKED(IDC_TAN, OnTan)ON_BN_CLICKED(IDC_STANDARD, OnStandard)ON_BN_C

23、LICKED(IDC_DEGREE, OnDegree)ON_BN_CLICKED(IDC_RAD, OnRad)ON_BN_CLICKED(IDC_COS, OnCos)/AFX_MSG_MAPEND_MESSAGE_MAP()16C+课程设计报告(2011)/ CCalculatorDlg message handlers BOOL CCalculatorDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system com

24、mand 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 automatically/ when the applications main window is not a dialogSetIcon(m_hIcon,

25、TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization here GetWindowRect(rcSentific);CWnd* m_pMark=GetDlgItem(IDC_DISPLAY); ASSERT(m_pMark);CRect rect;m_pMark-GetWindowRect(rect); rcStandard=rcSentific; rcStandard.right=rect.right+5; m_bIsExpand=0; m_sentific=1

26、;OnStandard(); m_result=0.; m_isDegree=1; UpdateData(FALSE);return TRUE;/ return TRUEunless you set the focus to a controlvoid CCalculatorDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add

27、 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.17计算器的设计与实现void CCalculatorDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessag

28、e(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icon dc.Dr

29、awIcon(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_0 & nID = 0 & szButton0 =1;i-)m_operand*=i;UpdateDisplay();/ m_func=FuncNo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论