ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:128.37KB ,
资源ID:11956988      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11956988.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(可视化程序编程环境实验.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

可视化程序编程环境实验.docx

1、可视化程序编程环境实验可视化程序编程环境实验报告项目名称 科学计算器的设计与实现 学 院 计算机学院 专业班级 软件工程0603 学 号 3206007036 姓 名 莫燕嫦 指导教师 黄益民 2008 年 12 月 31 日广东工业大学课程设计任务书题目名称一个简单计算器的设计学生学院计算机学院专业班级软件工程0603姓 名莫燕嫦学 号3206007036一、课程设计的内容系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C+,并在此环境下设计并实现一个简单计算器系统,该计算器应能实现如下功能:1、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等

2、简单计算2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算3、以角度、弧度两种方式实现上述部分函数4、具备历史计算的记忆功能5、对不正确的表达式能指出其错误原因要求整理上机步骤、完成实验报告、提交可运行的程序,给出实验数据和实验结果。二、课程设计的要求与数据1、能独立搭建可视化程序编程环境,掌握Visual C+6的安装、运行和使用。2、总体要求:用面向对象编程的思想与方法,实现一个简单计算器的分析与设计阶段的开发工作,开发工具使用Visual C+6。3、具体要求:本系统为简单计算器程序开发,实现基本的算术运算以及科学计算,具备计算历史的查询功能,并能

3、检查算术表达式中的错误,分别以二进制、十进制等数制的计算。4、编写设计方案,设计过程,源程序文件结构,分析实验方案,并对实验做出总结。三、课程设计应完成的工作学习面向对象程序设计,学习可视化编程环境的应用。系统分析、系统设计、编程、调试、功能测试、系统测试、编写实验报告。四、课程设计进程安排序号设计各阶段内容地点起止日期1学习C+,逐步熟悉VC+编程环境,掌握利用VC+6.0进行面向对象程序设计的基本方法。教室上课及课后自学710周2对系统进行概要设计。运用VC+向导创建对话框程序,根据要求,初步设计简单计算器的界面。学生宿舍11周3学习消息映射方法,对系统进行详细设计。学生宿舍12、13周4

4、为计算器添加科学计算函数,以及进制转换等功能,注意程序的健壮性。学生宿舍1416周5系统调试、功能测试、增加输入错误判断,进一步完善系统。工学1号馆4楼软件实验室41517周6系统测试及完善,整理代码和测试数据,编写实验报告。工学1号馆4楼软件实验室41517周7提交源代码、可执行程序、电子和纸质实验报告工学1号馆62318周五、应收集的资料及主要参考文献实验教材:郑阿奇主编. Visual C+教程. 北京:机械工业出版社, 2005.3实验参考书:1)陈维兴等编著. C+面向对象程序设计教程上机指导. 北京:清华大学出版社, 2001. 2)郑莉编著. C+语言程序设计(含实验指导书).

5、北京:清华大学出版社, 2001.6 3)戴锋编著. Visual C+程序设计基础. 北京:清华大学出版社, 2001.4 4)龚沛曾等编著. C/C+程序设计教程. 北京:高等出版社, 2004.9发出任务书日期:2008 年 10 月 10 日 指导教师签名:黄益民计划完成日期: 2008 年 12 月 31 日 基层教学单位责任人签章:主管院长签章:一个简单计算器的设计一、 实验目的与要求:(一)实验目的:目标是使学生了解可视化程序设计语言的基础知识,掌握面向对象编程的分析设计方法,以及与面向对象技术相关的一些软件开发技术,掌握在 VisualC+6环境下进行可视化程序设计技术。通过实

6、践具体的项目,为他们进一步开展相关领域的学习和科研打下良好的基础。(二)实验要求:1. 二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算2. 科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行3. 以角度、弧度两种方式实现上述部分函数4. 具备历史计算的记忆功能5. 对不正确的表达式能指出其错误原因6. 整理上机步骤、完成实验报告、提交可运行的程序,给出实验数据和实验结果。二、 需求分析:1. 程序主要实现数字科学计算的功能,以及二进制、八进制、十进制及十六进制数之间的转换和历史记忆等功能;2. 本程序运行的硬件环境:P4 2.0/5

7、12M/以上;软件环境:Windows操作系统,Visual C+63. 本程序由一个主程序CalculatorDlg及其子程序Calculation、Calculator、CFUNC、CNUM、COP、StdAfx构成;4. 本程序由用户通过鼠标或键盘交互的方式执行,并可对键盘中的字母键进行屏蔽。5. 用户界面如下:三、系统设计1、总体设计方案(1)用MFC AppWizard(exe)创建一个基于对话框应用程序框架。在Resource View 文件窗口中的主对话框资源IDD_CALCULATOR_DIALOG,利用控件工具栏添加各类按钮控件设计界面。该计算器由四个对话框组成,一个为主对话

8、框即计算对话框,一个为函数对话框,一个是数字对话框,另一个是操作符对话框。计算基本操作用按钮实现,改变其ID的值即可。在该计算器中一共有六个类,除CcalculatorApp每个类的主要功能如下:CCalculatorDlg是计算器的主要界面,它用来调用管理按键资源CCalculation是计算表达式的算法类,是该计算器的内核部分。CFUN类主要用来控制函数按键及其资源。CNUM类用来控制数字按键CCOP类用来控制操作符按键(2) 按钮控件的消息和消息映射处理:在CalculatorDlg.cpp:implementation file 文件中的BEGIN_MESSAGE_MAP(CCalcu

9、latorDlg, CDialog)处添加宏映射定义,在该程序中使用它进行按键消息处理,故在CCalculatorDlg类用了以下消息映射进行消息响应处理。(3)对各消息处理函数实现功能:A、数字按钮函数:1)利用宏映射定义,很容易就可以实现对数字键的消息映射处理,通过获取按钮的ID号,然后就可以在按数字按钮的的时候将按钮上的数字显示到显示框上。B、操作符按钮操作函数:1)基本运算符操作主要有:加()、减()、乘(*)、除(/)、平方(x2)、倒数(1/x)、求余(%)。2)科学计算运算符操作主要有:正弦(Sin)、余弦(Cos)、正切(Tan)、余切(Cot)、反正弦(Sin-1)、反余弦(

10、Cos-1)、反正切(Tan-1)、反余切(Cot-1)、开方(Sqrt)、指数(log和ln)、ex(exp)。科学计算主要是调用math.h库函数里的现成函数就可以实现C、 数字进制函数:void CCalculatorDlg:OnBtnConvert() 数字进制有四种:十六进展、十进制、八进制、二进制。还有两种实现科学计算函数的方式选择:角度和弧度。D、运算处理函数:void CCalculatorDlg:OnOK() 实现了对待计算的表达式是否合法的检查并反馈出错信息,对各种进制的计算和转换,并对计算的结果进行优化和科学计数法。运算过程中要对一些函数进行报错处理,比如倒数(1/x)的

11、时候,x为0是就要报错。E、历史计算的记忆功能函数:void CCalculatorDlg:OnBtnHistrexp() 2、详细设计四则运算函数的实现过程:bool CCalculation:IsDigital(CString str)/判断表达式中是否有函数或运算符 while(str.GetAt(0)=-) str.Delete(0); for(int i=0;iFUNCNUM;i+) if(str.Find(opti)!=-1) return 0; for(i=0;iIsEmpty() *strExp=ERROR_函数表达式为空_; if(IsDigital(*strExp) ret

12、urn; while(1)/*处理所有的一元运算*/ for(int i=0;iFind(opti); if(pos!=-1) CString str=strExp-Right(strExp-GetLength()-pos-opti.GetLength(); double dx=StoN(str); if(m_strTmp=str) *strExp=ERROR+str+_无法识别的函数_;return; strExp-Delete(pos,strExp-GetLength()-pos); *strExp+=SingleE(opti,dx)+m_strTmp; MinusMinus(strExp

13、); if(pos=1) char ch=strExp-GetAt(pos-1); if(ch=48 & chFind(); if(pos=-1) break; else Calcu(strExp,pos); while(1) pos=strExp-Find(/); if(pos=-1) break; else Calcu(strExp,pos); while(1) pos=strExp-Find(*); if(pos=-1) break; else Calcu(strExp,pos); while(1) pos=strExp-Find(%); if(pos=-1) break; else C

14、alcu(strExp,pos); pos=0; if(strExp-GetAt(0)=- |strExp-GetAt(0)=+) strExp-Insert(0,0); while(1) int tmpos=strExp-Right(strExp-GetLength()-pos).Find(-); if(tmpos=-1) break; else pos+=tmpos; if(pos=0 & strExp-GetAt(pos+1)=- | pos0) if(strExp-GetAt(pos+1)=+) strExp-Delete(pos+1); pos=0; continue; /*处理连减

15、(如:-1)的情况*/ int nCount=0; while(1) if(+pos0) if(strExp-GetAt(pos)!=-) break; else nCount+; else break; if(nCount0) strExp-Delete(pos-nCount-1,nCount+1); if(nCount%2=0) strExp-Insert(pos-nCount-1,-); else if(pos-nCount-10) strExp-Insert(pos-nCount-1,+); pos=0; continue; else pos-; /*/ if(pos0 & strEx

16、p-GetAt(pos-1)=+) pos+; continue; Calcu(strExp,pos); else pos+; pos=0; while(1) pos=strExp-Find(+); if(pos=-1) break;if(pos=0 & strExp-GetAt(pos+1)=+ | pos0) /*处理连加(如:+1)的情况*/ int nCount=0; while(1) if(+pos0) if(strExp-GetAt(pos)!=+) break; else nCount+; else break; if(nCount0) strExp-Delete(pos-nCo

17、unt-1,nCount+1); strExp-Insert(pos-nCount-1,+); pos=0; continue; else pos-; /*/ Calcu(strExp,pos); else pos+; void CCalculation:Calcu(CString *strExp,int pos)/判断表达式是否合法 char ch; for(int j=pos-1;j=0;j-) ch=strExp-GetAt(j); if(ch=+ |ch=- |ch=*|ch=/ |ch=% |ch= ) if(j=0 & ch!=-) *strExp=ERROR_缺少参数_;retu

18、rn; if(j=0 & ch=-) j=-1;/防止把负号误判为减号 else if(j0 & ch=- & !IsDigital(strExp-Mid(j-1,1) j-; break; for(int k=pos+1;kGetLength();k+) ch=strExp-GetAt(k); if(ch=+ |ch=- |ch=*|ch=/ |ch=% |ch= ) if(ch=- & kpos+1) break; if(ch=- & k0 & IsDigital(strExp-Mid(k+1,1) ) k+; else break; CString strExp2=strExp-Mid(

19、j+1,k-j-1); *strExp=strExp-Left(j+1)+TwoE(strExp2)+strExp-Right(strExp-GetLength()-k); if(strExp-Find(#IN)!=-1) *strExp=ERROR_结果有溢出或值域越界_;return; if(!SynRes(strExp) *strExp=ERROR_缺少运算符_;return; MinusMinus(strExp);CString CCalculation:MainPro(CString strExp)/主处理函数 if(strExp.IsEmpty() return 表达式不能为空;

20、Macro(&strExp); strExp.MakeLower(); /表达式全部小写 /*给表达式加上保护括号*/ strExp.Insert(0,(); strExp+=); /*/ int pos=strExp.Find( ); int n=BraCheck(strExp); CString str; str.Format(%d,abs(n); if(n=1) strExp+=); else if(n=-1) strExp.Insert(0,(); else if(n0) return 缺少+str+个右括号; else if(n、等实现并扩展了C语言的scanf和printf函数的功

21、能。 2、C+关键字由C语言的32个增加到46个; 3、C+的注释在C语言的/*/基础上增加了/开头的行注释; 4、C+基本数据类型增加了一个布尔型(bool); 5、C+增加支持面向对象的Class(类)数据类型; 6、C+增加模板库类型和名字空间;3. 如何根据软件开发需要创建类?这些类的层次具有什么关系?答:用户可以得用微软提供的MFC类库进行软件开发,在MFC中封装了大量的类库供用户使用,从而使代码重用,缩短了软件的开发时间和开发周期。这些类中出现了大量的派生关系和继承关系,类与类之间的相互调用,互相帮助关系。4. 如何建立类的属性成员、方法成员?如何确定成员私有、公有或继续关系?答:

22、类有三种属性,即private,protect,public ,为类建立属性成员只需在类的声明中根据你的需要加入属性成员,选择三种属性中的一个,对于方法成员,则需要给出函数的声明及属性。类的三种属性的使用方法各不相同,将成员声明为private表示该成员只能由该类的成员函数访问,其它对象无权访问,显示了类的数据封装性。声明为protect属性则一般用于该成员可以给该类的派生类访问,public属性则表示该属性作为该类的一个对外接口,可以供该类以外的成员进行访问。 5. 对比实验2与实验3,控制台程序与MFC在编程上有何区别?答:控制台程序是面向过程的编程,而MFC是面向对象的编程;这两者有很大

23、的区别,首先,控制台程序是与DOS环境下相似的环境,但它比DOS环境下强一些,它基于面向过程设计,可视化程度不高。MFC编程基于面向对象编程,可视化程度高。其次,两者虽然使用的都是C+语言进行程序的编写,但控制台程序使用的是纯正的C+,而MFC则是使用了大量由API函数封装好的MFC类库进行程序编写。6. 在MFC程序中如何根据软件需要定制类?答:按软件需要划分为功能独立的几个部分,分别建类!MFC提供了三种软件开发类,基于单文档,多文档和对话框应用程序,用户可以根据需要通过VC+的classwizard进行适当的选择7. 模态对话框窗口与非模态对话框窗口有何不同?答:非模态对话框不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互。模态对话框以一种排它的方式工作,当模态对话框出现时,虽然用户可以看到应用程序的其他界面对象(如菜单,工具栏等),但必须关闭模态对话框后才能对他们进行操作。而非模态对话框则以非排它的方式工作,非

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

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