c++实现计算器课程设计报告.doc
《c++实现计算器课程设计报告.doc》由会员分享,可在线阅读,更多相关《c++实现计算器课程设计报告.doc(21页珍藏版)》请在咨信网上搜索。
程序设计综合训练1 课程设计报告 得分: 信电工程学院 课程设计报告 基于VC的表达式计算器软件设计 课程: 程序设计综合训练1 班级: 12软嵌2班 学号: 20120509223 姓名: 谢文靖 指导教师: 朱丽 2013年 6 月28日 目 录 1引言-———---—--——-—--——-——————-—-—---—-—-----—--—-——----—--—--—--——---——----——--—--— 1 1。1课题背景—-——————-—-—-—-——--—-—--------—----—-------—--—-—-———-—--—-—-——-—2 1.2课程设计目的—-—--——-—-—-—-—-—---—----—------—---——---—--————---————-—--3 2需求分析--—--————-——————--—-——————————-—--—--—-—-————-——-——-——-—-——--—-——---—-———5 2.2系统功能模块—---—————--——--——----——-———---—--—-—---———--————-—-—-———-—-5 2。3设计要求—--—------————--———------—-—--—-—-———-—-—--——-—————---—————--————6 3系统实现 —----——-——--—-—--—-—-—--—---—--—--—-——————-——-————---——--—--—----———-———8 3.1 对话框界面设计---—---——-————---—-—--——---—--—--—-——-——---——-——-—--—--8 3。2 数值计算功能的实现-—--———-—————---—----—————-—--——----——-———---——10 4程序关键代码及运行结果 —--——-—-—--——--————-—---———-—-———-—--————-—-———--12 5总结与体会 --——-—----—---—-—-—-———-—-—-———-—-—-———————--——----—--——--——---——-15 1 引言 1.1 课题背景 计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具.要实现计算功能,可以用VC++的知识编写程序来解决此问题。该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度.该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。 1.2 课程设计目的 本课程是一门实践性很强的课程,既要熟练掌握相关概念,又要动手编程,还要上机调试运行。同时,本课程也注重提高学生编写技术文档和技术文档阅读的能力.学生通过本课程的学习实践,将学习和强化软件开发的能力、文档写作能力、英语阅读能力、软件使用能力等。为今后计算机编程的学习和工作打下良好、扎实的理论实践基础. 2 需求分析 2.1系统功能模块 1)输入的符号,数字从左向右显示; 点击“="输出结果,在输出行显示 2)支持加减乘除运算; 3)支持“xˆy”的运算; 4) 括号“("“)”的使用; 5)支持混合运算; 6)功能键“ANS" ,“CLEAR" ,“BACKSPACE”的使用; 7)计算器的输入方式:支持鼠标点击计算器键输入; 8)计算器计算结果的输出方式:在计算器窗口的输出行显示 9)算数运算的数据类型:整数和浮点数; 10)特殊情况的计算; 11)以上所有的运算都是在10进制下进行. 1)输入的符号,数字从右向左显示. 先输入“8” 8 再输入“×” 8* 点击“="输出结果,在输出行显示。 2)支持加减乘除运算。 输入行 a。乘法计算: 8*3 24 输出行 b。 加法计算 1+0 1 c。 减法计算 8—3 5 d。除法运算(特殊情况见10。B) 9/4 2.25 2) 支持求次方(x ˆy)运算. 求次方(x ˆy)运算: “ˆ”为次方(x ˆy)在输入行中的显示符号 4ˆ2 16 4)“(”“)"的使用。(括号的使用) 要使用“("“)”的时候,先点击“(”,再输入数字或符号,内容输入完毕以后,点击“)”,完成“(”“)"的所有功能. 例如:2×(2+2)=? 2 2*( 2*(2+2 2*(2+2) 2*(2+2) 8 5)支持混合运算。 附:运算符的优先级表 优先级 功能键 显示 结合律 从 高 到 低 ( 、 ) ( 、 ) 自左向右 xˆy、1/x ˆ、~ 自左向右 ×、÷ *、/ 自左向右 ﹢﹣ ﹢﹣ 自左向右 例如:(5+2)×5=? 混合运算则按优先级表中的运算符优先顺序从左向右计算 (5+2)*5 35 6)功能键“CLEAR"及“BACKSPACE"的使用。 a.“CLEAR"为清0键。只要按下“CLEAR”键,输入行所有字符清0,输出行回到原始状态。 输入前: (5+2)*5 输入后: 0 b.“BACKSPACE"为退格键。当输入任何数字或运算符,只要按下“BACKSPACE”键,字符位自右向左消去一位。(注:初始的“0”不能被删除) 输入前: (5+2)*5 输入后: (5+2)* C.“ANS”为变量储存器。当一次结果被清除后,只要按下“ANS"键就会显示这个结果。 如: 5+2 7 按“CLEAR”键后,再按“ANS”键就会这样 77 7 7)计算器的输入方式:只支持鼠标点击计算器键输入; 8)计算器计算结果的输出方式:在计算器窗口的输出行显示。 9)算数运算的数据类型:整数和浮点数。 a.输入行最大显示的字符数32位,每个运算符算一位; b.“(”,“)"各占一个字符位; c。输出行最大显示的字符数为32位; d。纯小数显示的最大字符数为小数点后30位,整数及小数点各占一位; 若纯小数为负数,则显示最大字符数为小数点后29位,“—”占一位; e.输入行在未输入任何数字的时候,显示“0”,只占一个字符位;当输入任何数字时。“0”消失,输入的的数字取代“0”;当输入任何运算符时.默认之前输入数字“0”; f。点击“=”键后方可显示数字或字母或汉字。 10)特殊情况的运算 A.运算结果整数部分超出32位,显示Infinity(无穷大);出现运算异常! 9999999999999999*99999999 Infinity B。除数为0的情况,提示用户被除数不能为零! 1/0 除零错误 C.在运算时,若结果为纯小数,小数位超过30位,则超出的字符舍弃。 2/3 0 .6666666666666666666666666 若舍弃超出部位后,结果全为0,则结果为0 1/99^99 0 D.在运算时,若结果的整数位不为0 a.总位数在最大字符位内,则直接显示; b.总位数在最大字符位以外,整数部分在最大字符位以内,则只优先显示整数部位,弃掉32位以后的字符 5/3 1.6666 E.当用户输入“^0”时,若“^0”之前的算式或数字的值为0,点击“=”后,输出界面显示“底数不能为0” 11) 以上所有的运算都是在10进制下进行 2.2设计要求 (1) 了解Windows编程的基础知识,掌握MFC应用程序的基本知识。 (2) 理解需求分析过程,掌握需求分析文档编写。 (3) 理解面向对象程序设计的基本思路和方法. (4) 掌握用VC++开发MFC应用程序的一般步骤和方法。 (5) 掌握基于对话框的应用程序的编写,主要包括文本框和按钮等. (6) 掌握后缀表达式算法。 (7) 掌握VC++开发工具的使用。包括资源管理,项目创建,运行调试等. (8) 完成表达式的计算器应用程序,实现基本的加、减、乘、除等四则运算,且支持包括括号的表达式运算功能。 3系统实现 3。1对话框界面设计 3.2数值计算实现 例如:2×(2+2)=? 2 2*( 2*(2+2 2*(2+2) 2*(2+2) 8 4程序关键代码及运行结果 #include <iostream> #include 〈string> #include ”Stack。h” #include <cmath> using namespace std; bool jisuan(double a,double b,char c,double& d) { switch (c) { case '+’: d=a+b; //cout<<a〈〈"+"〈〈b〈<endl; return true; case ’-': d=a—b; //cout<<a〈<"-"〈〈b〈〈endl; return true; case ’*’: d=a*b; //cout〈〈a〈<”*”<〈b<〈endl; return true; case ’/’: if(b==0) throw CString(”除零错误!”); //cout〈〈a<〈"/”<〈b<〈endl; d=a/b; return true; case ’,': //cout〈<a〈<",”<〈b〈<endl;//乘方操作 d=pow(a,b); return true; default: return false; } } if(array[num—40][pre-40]〉0)//将符号压栈 { op.Add((char)num); } else { char mid; while(array[num-40][pre-40]〈=0) { if(pre==40&&num==41)//排除(数字)情况,保留数字()非法情况 { if(i>0) { int MyCheck=(int)name.at(i-1); if(MyCheck<=57&&MyCheck>=48||MyCheck==41) { break; } else throw CString(”括号中的表达式不合法”); } else throw CString(”出现未匹配的)”); } try { op。Delete(mid); } catch(CString e) { throw CString(”出现未匹配的)”); } double data1,data2; try { data。Delete(data2); data。Delete(data1); } catch(CString e) { throw CString(”缺少操作数”); } if(!jisuan(data1,data2,mid,data1)) { result=0; throw CString("表达式异常”); } data.Add(data1); pre=(int)op.Top(); } // CompuetrDlg。cpp : 实现文件 // #include "stdafx.h” #include ”Compuetr.h" #include ”CompuetrDlg.h” #include "counter.h" #include <string〉 #include "。\compuetrdlg。h" using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #endif void CCompuetrDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM〉(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中 int 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; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CRect rect; CPaintDC dc(this); GetClientRect(rect); dc.FillSolidRect(rect,RGB(255,0,0));//设置背景颜色 CDialog::OnPaint(); CDialog::OnPaint(); } } // Compuetr.cpp : 定义应用程序的类行为。 // #include ”stdafx.h” #include "Compuetr.h" #include ”CompuetrDlg。h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CCompuetrApp BEGIN_MESSAGE_MAP(CCompuetrApp, CWinApp) ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() // CCompuetrApp 构造 CCompuetrApp::CCompuetrApp() { // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CCompuetrApp 对象 CCompuetrApp theApp; // CCompuetrApp 初始化 BOOL CCompuetrApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControls()。否则,将无法创建窗口。 InitCommonControls(); CWinApp::InitInstance(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); CCompuetrDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg。DoModal(); if (nResponse == IDOK) { // TODO: 在此放置处理何时用“确定”来关闭 //对话框的代码 } else if (nResponse == IDCANCEL) { // TODO: 在此放置处理何时用“取消”来关闭 //对话框的代码 } // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵. return FALSE; } //stack #include〈iostream〉 #include<string〉 #include〈new> using namespace std; template <class T〉 class LinkedStack; template 〈class T〉 class Node { friend LinkedStack〈T>; private: T data; Node<T> *link; }; template <class T> class LinkedStack { public: LinkedStack(){top=0;length=0;} ~LinkedStack(); bool isEmpty()const { return top==0; } bool isFull()const; T Top() const; LinkedStack〈T〉&Add(const T& x); LinkedStack<T>&Delete(T& x); int getLength(){return length;} private: Node〈T> *top; int length; }; template 〈class T> LinkedStack<T〉::~LinkedStack() { Node〈T〉 *next; while(top) { next=top—>link; delete top; top=next; } } template 〈class T〉 bool LinkedStack<T〉::isFull()const { try { Node<T> *p=new Node〈T>; delete p; return false; } catch(bad_alloc& e) { return true; } } template <class T> T LinkedStack<T>::Top()const { if(isEmpty()) throw CString(”堆栈空异常!”); return top-〉data; } template 〈class T> LinkedStack<T>& LinkedStack<T〉::Add(const T& x) { Node〈T> *p=new Node〈T>; p-〉data=x; p->link=top; top=p; length++; return *this; } template <class T〉 LinkedStack<T>& LinkedStack〈T>::Delete(T& x) { if(isEmpty()) throw CString("堆栈空异常!"); x=top-〉data; Node〈T〉 *p=top; top=top->link; delete p; length—-; return *this; } 5总结与体会 计算器虽然是我们生活中常见的一样工具,但不知道实现这样一个工具,说实话不是很简单,对于我这个学习一般的人来说,很难!!计算器虽小,但包含了一些简单却又重要的功能,包括加减乘除,次方,括号等一些基本功能,它方便了大众的日常生活中遇到的计算问题。完成这个任务,说实话很艰难,但挺了过来,坚持了过来,所谓凡事贵在坚持,所以要学会坚持,坚持就是胜利。一个人的力量是有限的,学会与人合作,积极请教他人谦虚学习是必要的,它只会让你更加的进步,会更好.所以这个任务让我学到了很多,坚持,努力,合作,进取,积极向上,天下无难事,只要肯用心!! 第 16 页- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 实现 计算器 课程设计 报告
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文