C++课程设计:计算器.doc_第1页
C++课程设计:计算器.doc_第2页
C++课程设计:计算器.doc_第3页
C++课程设计:计算器.doc_第4页
C++课程设计:计算器.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

课 程 设 计 报 告 课程名称: 面向对象程序设计C+ 设计题目: 计算器课程设计 专 业: 计算机科学与技术2013级 姓 名: 学 号: 指导教师: 李晓虹 2016 年 1 月 8 日1背景与目的 随着科技的发展,人们在很多地方都要用到计算器来进行工程和商业上的运算,计算器在日常生活中的重要地位已经举足轻重。计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、等简单运算的工具。计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。要实现计算功能,可以用VC+的知识编写程序来解决此问题。简单计算器包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C+程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束2需求分析本软件主要用于计算机windows2007/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。要程序能实现:加,减,乘,除,开方;还要实现数据的输入,输出,计算,显示及程序退出等功能。另外还可以实现多种科学计算的功能,如:正负数的运算,还有分数与小数的转化。3详细设计3.1设计目标了解Windows应用程序的结构与DOS程序的不同,掌握应用MFC类库编写Windows应用程序的基本模式。3.2设计内容以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C+类的学习及应用。3.3设计思想基于MFC库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。3.4设计说明 (1)包含的功能有:加、减、乘、除运算,开方等功能。 (2)计算器上数字09为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算3.5设计模块图图3-1功能模块图 图3-1简单计算器模块程图3.5设计总流程图 图3-2设计总流程图4详细设计4.1设计步骤(1) 选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为Caa,按确定。在弹出界面选择创建对话框,单击Finish按钮 (2) 在生成的设计界面中加入控件,得到计算器应用界面。如图:图4-1计算器应用界面(3) 为控件编辑框编辑ID,如图:(4) 进入ClassWizard界面选择Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。如图: 图4-2ClassWizard界面(5) 进入ClassWizard界面Message Varibles为编辑框添加成员变量m_result用以显示结果。如图:图4-3添加成员变量界面(6) 在CaaDlg.h中加入在主要成员函数和成员变量的申明在CaaDlg.cpp中加入主要成员函数实现过程和成员变量的初始化(代码片段将于后面介绍)4.2主要成员函数关系图 图4-4成员函数关系图5计算器的测试结果5.1测试一点击“12.5”“+”“8”“=”,运算结果20.5,与实际结果相同。图5-1 测试运算结果5.2测试二点击“4”,再点击“sqrt”,结果为2,与实际结果相符。图5-2 测试运算结果5.3测试三点击“50”与“-”“*”“2”“=”,结果为-100,与实际结果相符。图5-3 测试运算结果6结果分析通过对计算器的功能测试,各类运算功能都已经实现,只是当输入的数据很大或者很小时,会致使结果很大或者很小,此时,若是结果的大小超过数据类型的表示范围,那么就会产生错误,并且显示错误信息。若是没有超出数据的表示范围,那么就会用浮点数来表示比较大或者比较小的数据。但总体来说本计算器完全可以运用到实际生活中去为人们带来方便。7总结经过多次测试,得出结论为设计的计算器基本完成功能描述内容中的全部功能。尽管还有一小部分的功能没有实现,但是收获很大。这样不仅能加深我们对MFC程序设计的掌握,而且还及时、真正的做到了学以致用。同时这次课程设计也让我学到了很多,不仅是巩固了先前学的MFC程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。也要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。7附源代码#include stdafx.h#include #include #include resource.h#include MainDlg.h#include TCHAR text50;TCHAR opt=c;BOOL have=FALSE,enable=TRUE;double num1=0,num2=0;BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch(uMsg) HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); return FALSE;BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)memset(text,0,sizeof(TCHAR)*50);SetDlgItemText(hwnd,IDC_EDIT,TEXT(0.); return TRUE;void trim()int i=0,j=0;for (i=0;ilstrlen(text);i+)if (texti!=0&texti!=0)j=i;for (j=j+1;jlstrlen(text);j+)textj=0;void AppendText(HWND hwnd,TCHAR c)if (lstrlen(text)=1&text0=0&c!=.)text0=c;elsetextlstrlen(text)=c;SetDlgItemText(hwnd,IDC_EDIT,text);void result(HWND hwnd)switch(opt)case +:num2=num2+num1;break;case -:num2=num2-num1;break;case *:num2=num1*num2;break;case /:if (num1=0)SetDlgItemText(hwnd,IDC_EDIT,TEXT(除数不能为零.);enable=FALSE;return; elsenum2=num2/num1;break;default:num2=num2+num1;break;num1=0;sprintf(text,TEXT(%f),num2);trim();SetDlgItemText(hwnd,IDC_EDIT,text);void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)TCHAR c2; switch(id) case IDC_0:case IDC_1:case IDC_2:case IDC_3:case IDC_4:case IDC_5:case IDC_6:case IDC_7:case IDC_8:case IDC_9:if (enable)GetDlgItemText(hwnd,id,c,2);AppendText(hwnd,c0);break;case IDC_DOT:if (!have&enable)have=TRUE;if (lstrlen(text)=0)AppendText(hwnd,0);AppendText(hwnd,.);break;case IDC_PLUSS:case IDC_SUB:case IDC_MUL:case IDC_DIV:if(enable)if (lstrlen(text)!=0)num1=atof(text);result(hwnd);GetDlgItemText(hwnd,id,c,2);opt=c0;memset(text,0,sizeof(TCHAR)*50);have=FALSE; elseGetDlgItemText(hwnd,id,c,2);opt=c0;break;case IDC_EQUAL:if (lstrlen(text)!=0&enable)num1=atof(text);result(hwnd);memset(text,0,sizeof(TCHAR)*50);have=FALSE;break;case IDC_C:memset(text,0,sizeof(TCHAR)*50);num1=0;num2=0;have=FALSE;enable=TRUE;opt=c;SetDlgItemText(hwnd,IDC_EDIT,TEXT(0.);break;case IDC_CE:memset(text,0,sizeof(TCHAR)*50);num1=0;have=FALSE;enable=TRUE;SetDlgItemText(hwnd,IDC_EDIT,TEXT(0.);break;case IDC_CHANGE:if (strlen(text)!=0&enable)num1=atof(text);num1=-num1;sprintf(text,TEXT(%f),num1);trim();SetDlgItemText(hwnd,IDC_EDIT,text);break;case IDC_1CX:if (enable)num1=atof(text);if (num1=0)SetDlgItemText(hwnd,IDC_EDIT,TEXT(除数不能为零.);enable=FALSE; elsenum1=1.0/num1;sprintf(text,TEXT(%f),num1);trim();SetDlgItemText(hwnd,IDC_EDIT,text);break;case IDC_BFH:break;case IDC_SQRT:if (enable)num1=atof(text);if (num10&enable)textlstrlen(text)-1=0;if (lstrlen(text)=0)SetDlgItemText(hwnd,IDC_EDIT,TEXT(0.); elseSetDlgItemText(hwnd,IDC_EDIT,text);bre

温馨提示

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

评论

0/150

提交评论