资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
浙江工商大学C+课程设计报告1课程设计实验报告课程设计实验报告题题 目目 学学 院院 专专 业业 班班 级级 课程名称课程名称 学学 号号 学生姓名学生姓名 指导教师指导教师 成成绩绩 二二一三年一月一三年一月浙江工商大学C+课程设计报告2目目 录录1 1 概述概述1.1 课程设计目的 1.2 课程设计内容 1.3 课程设计思想2 2 系统需求分析系统需求分析2.1 系统目标 2.2 主体功能 2.3 开发环境3 3 系统概要分析系统概要分析3.1 设计步骤 3.2 界面设计 3.3 主要代码4 4 结论与心得体会结论与心得体会4.1 遇到的问题与解决方法 4.2 心得5 5 附录附录5.1 测试 5.2 程序源代码浙江工商大学C+课程设计报告31 概述概述1.1 课程设计目的课程设计目的 面向对象程序设计是一门实践性很强的计算机专业基础课程,课程设 计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深 学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用 C+语言 进行面向对象设计的基本方法,提高运用面向对象方法分析实际问题、解决实 际问题的能力。1、巩固并加深学生对 C+语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用 VS 2010 集成开发环境;4、提高运用 C+语言解决实际问题的能力; 5、掌握书写程序设计开发文档的能力(书写课程设计实验报告) 。 1.2 课程设计内容课程设计内容 课题名称:课题名称:功能齐全的计算器 说明:说明:利用 MFC 实现一个功能齐全的计算器 要求:要求: 1、实现的基本功能有:加、减、乘、除、计算带括号的运算式; 2、扩展功能有开平方、求三角函数、阶乘、自然底数 e 的幂、10 的幂和普通 数的幂、进制的转化等; 3、输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个编辑框中;4、计算功能基本上是用系统内部函数; 5、“归零”按钮可以清除所有已输入的数据从头计算; 6、“”按钮可以退位。 1.3 课程设计思想课程设计思想 如流程图 1 所示,先在编辑框中输入运算式,通过 IsChar()函数判断表达式中是 否有复杂的运算符。若无,则进行简单的双目运算;若有,则通过 String_Replace()函数将 IsChar()函数无法识别的运算符或字符用一定方式或浮点 数替换,再进行简单的双目运算。浙江工商大学C+课程设计报告4开开 始始键入运算式,按下键入运算式,按下=键键输入运算式字符串输入运算式字符串IsChar();是否含有;是否含有 复杂运算符?复杂运算符?简单计算简单计算 Simple()读入运算符和运算符读入运算符和运算符 前后两个浮点数前后两个浮点数返回结果(返回结果(double 型)型)递归计算括号内递归计算括号内 的值的值替换函数替换函数 String_replace()() ;把;把 无意义的字符换成有意义的浮点无意义的字符换成有意义的浮点 数数gcvt()函数转化成字符串函数转化成字符串用用SetDlgItemText()SetDlgItemText() 在对话框中输出在对话框中输出结束结束NY图 1浙江工商大学C+课程设计报告52 2 系统需求分析系统需求分析2.12.1 系统目标系统目标我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。要计算功能有以下几个方面:加法,减法,乘法,除法,求幂,求平方根,求 Sin,求 Cos。2.22.2 主体功能主体功能1、十进制数的加、减、乘、除、乘方、阶乘等简单计算。2、科学计算函数,包括正弦、余弦、正切、开方、指数等函数运算。3、实现括号的优先级判断。4、将编辑框里的内容以转化成二、八、十六进制。2.32.3 开发环境开发环境Windows 操作系统,Microsoft Visual Studio 2010。3 3 系统详细设计系统详细设计3.13.1设计步骤设计步骤打开 VS2010,在文件中点击新建,在弹出框内选择 MFC AppWizardexe工程,输入工程名 Calculator 及其所在位置,点击确定,如图 2 所示。图 2 新建 MFC AppWizardexe工程选择基于对话框,如图 3 所示浙江工商大学C+课程设计报告6图 3 基于对话框3.23.2界面设计界面设计设计如图 4 所示的计算机界面,右击创建类向导,如表 1 所示,为每个控件添加 ID 号和单击响应事件的消息处理(BN_CLICKED) 。浙江工商大学C+课程设计报告7图 4 计算机主界面对象ID标题或说明编辑框IDC_EDIT1结果显示按钮IDC_BTNCLEAR归零按钮IDC_BTNBACK 按钮IDC_BUTTON00按钮IDC_BUTTON11按钮IDC_BUTTON22按钮IDC_BUTTON33按钮IDC_BUTTON44按钮IDC_BUTTON55按钮IDC_BUTTON66按钮IDC_BUTTON77按钮IDC_BUTTON88按钮IDC_BUTTON99按钮IDC_BUTTONPOINT.按钮IDC_BTNADD+按钮IDC_BTNSUB-按钮IDC_BTNPLUS*按钮IDC_BTNDIV/按钮IDC_BTNFACTORIALn!按钮IDC_BTNAQRTsqrt按钮IDC_BTNCENTMod按钮IDC_BTNLOGlog按钮IDC_BTNLNln按钮IDC_BTNSINsin按钮IDC_BTNCOScos按钮IDC_BTNTANtan按钮IDC_BTNEXPEXP按钮IDC_BTNEQUAL=按钮IDC_BTNPOWERxy按钮IDC_BTNLBRACK(按钮IDC_BTNRBRACK)按钮IDC_BTNPI 单选IDC_RADIO1二单选IDC_RADIO2八单选IDC_RADIO3十单选IDC_RADIO4十六表 1 各按钮和编辑框等对象的属性如图 5 所示,为 IDC_EDIT1 和 IDC_RADIO1 添加变量。浙江工商大学C+课程设计报告8图 5 添加变量3.3 主要代码主要代码1)“=”键单击响应代码void CCalculatorVersion3Dlg:OnBtnequal()UpdateData();m_str = m_string;while ( ! IsChar(m_str)/ 判断表达式中是否有其他字符Calculate(m_str);double sum = Simple( m_str );if( sum -9.9002032198673601e-10 char answer30 ;gcvt(sum, 20, answer); /把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针SetDlgItemText(IDC_EDIT1,answer);2)简单双目运算double CCalculatorVersion3Dlg:Simple(string str)double a = 0 ;double b,c;char op;istringstream sin( str ); /定义字符流浙江工商大学C+课程设计报告9for ( sin b ; sinopc; ) /分别读入运算符和运算符前后两个浮点数switch( op )case -: / 减法运算c = - c;case +: / 加法运算a += b;b = c;break;case *: / 乘法运算b *= c;break;case /: / 除法运算if ( c = 0 )MessageBox(“Cant be divided by zero“);break;b = b / c ;break;case %: / double 数据的取模if ( (long)c != 0 )b = fmod( b , c );break;default:break;return a + b;3)判断是否有简单双目运算以外的字符或运算符BOOL CCalculatorVersion3Dlg:IsChar(string str)int i;for ( i = 0 ; i = 0 char ch520;gcvt(c5,20,ch5);String_replace(m_str,str.substr(m5,r5-m5+1),ch5);while ( str.find (“cos“) != -1 )int m6 = str.find (“cos“);int r6 = FindRight(m6 + 2);double c6 = cos(atof(str.substr(m6 + 3,r6-m6-2).c_str()/180*pi);if( c6 -9.9002032198673601e-10 char ch620;gcvt(c6,20,ch6);String_replace(m_str,str.substr(m6,r6-m6+1),ch6);while ( str.find (“tan“) != -1 )int m7 = str.find (“tan“);int r7 = FindRight(m7 + 2);double c7 = tan(atof(str.substr(m7 + 3,r7-m7-2).c_str()/180*pi);if( c7 -9.9002032198673601e-10 char ch720;浙江工商大学C+课程设计报告13gcvt(c7,20,ch7);String_replace(m_str,str.substr(m7,r7-m7+1),ch7);/ 是否有“”while ( str.find (“) != -1 )int md = str.find(“);int left = FindLeft(md);int right = FindRight(md);char c20;double aa, bb; aa = atof(str.substr(left,md - left ).c_str();bb = atof(str.substr (md + 1, right - md ).c_str();gcvt( pow( aa ,bb ),20,c);String_replace(m_str, str.substr(left,right - left + 1 ), c);return 0;6)小数点的左部和右部int CCalculatorVersion3Dlg:FindLeft(int m)for ( int i = m - 1; i = 0 ; i - )if ( ! ( m_stri = 0 #define pi 3.141592653579893const char * PI = “3.
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号