收藏 分销(赏)

模拟计算器程序C++.doc

上传人:二*** 文档编号:4512176 上传时间:2024-09-26 格式:DOC 页数:31 大小:308KB
下载 相关 举报
模拟计算器程序C++.doc_第1页
第1页 / 共31页
本文档共31页,全文阅读请下载到手机保存,查看更方便
资源描述
.. - 课程设计 课程名称 C++程序设计课程设计 题目名称 模拟计算器程序 专业班级 2016级软件工程3班 学生 齐佳宁、江亮亮、余唐丽、小云 学 号 51602043027、51602043028、51602043008、51602043016 指导教师 华文立 二○一七年十二月二十五日 . . word.zl- .. - 学院计算机工程学院本科课程设计成绩评定表 工程 权重 分值 具体要求 得分 文献阅读与调查论证 0.20 100 能独立查阅文献和从事其它调研;有收集、加工各种信息的能力 设计质量 0.30 100 设计合理、功能齐备,程序运行正常,实验数据准确可靠;有较强的实际动手能力 论文撰写质量 0.20 100 设计说明书完全符合规化要求,用A4复印纸打印成文 学习态度 0.20 100 学习态度认真,科学作风严谨,严格按要求开展各项工作,按期完成任务 学术水平与创新 0.10 100 设计有创意,有一定的学术水平或实用价值 总分 评语: 等级: 指导教师: 年月日 . . word.zl- .. - 学院计算机工程学院课程设计任务书 课 程 C++程序设计课程设计 班级 2016级软件工程3班 指导教师 华文立 题 目 模拟计算器运行程序 完成时间 2017年12月20日至 2017年1月15日 主要容 要求完成以下功能: 1. 程序支持算数运算+、-、*、/、=,以及C〔清楚〕、A〔全清楚〕 2. 程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入“=〞符号后,窗口显示出结果 设计报告要求 1.封面: 2.课程设计任务书 3.课程设计报告: ⑴ 系统总体方案 ⑵设计思路和主要步骤 ⑶各功能模块和流程图 ⑷ 设计代码 ⑸ 心得体会和参考资料 说明:学生完成课程设计后,提交课程设计报告及软件,要求文字通畅、字迹工整〔可以打印〕,文字不少于5000 字,并装订成册。 版面要求 1. 题目用黑体三号,段后距18磅〔或1行〕,居中对齐; 2. 标题用黑体四号,段前、段后距6磅〔或0.3行〕; 3. 正文用小四号宋体,行距为1.25倍行距; 4. 标题按“一〞、“㈠〞、“1〞、“⑴〞顺序编号。 上机时间安排 2016级软件工程〔3〕班 10-18周, 周三1-2节 指导 地点 实验室〔B523〕 . . word.zl- .. - 分工协作说明 课题名称 学生 学号 所做的工作 文件加解密系统 江亮亮 51602043028 工程框架总体设计、整体工程指导、综合设计文档编写 齐佳宁 51602043027 需求分析、C++编码 余唐丽 51602043008 后台代码测试、整理资料、打印 小云 51602043016 局部代码编写、分模块测试 . . word.zl- .. - 摘 要 计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。要实现计算功能,可以用VC++的知识编写程序来解决此问题。该计算器大大的降低了数字计算的难度及提高了计算的准确度和准确度。该计算器使用非常简单和方便,对广阔中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用. 本课程设计将实现一个简单计算器。其类似于Windows 附件中自带的计算器。这个计算器不仅实现了简单的四那么运算功能,还实现了高级的科学计算功能,而且具有简洁大方的图文外观。它的设计按软件工程的方法进展, 系统具有良好的界面、必要的交互信息和较好的强健性使用人员能快捷简单地进展操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。在课程设计中,系统开发平台为Windows 2000XP,程序设计设计语言采用Visual C++,在程序设计中,采用了构造化与面向对象两种解决问题的方法。 关键词: 程序设计,计算器,MFC ,按钮控件 Summary Calculator is a very convenient and effective tool in daily life, which can add, subtract, multiply, divide, root, and calculate the simple operation of the reciprocal. To implement the calculation function, you can use the knowledge of VC + + to write a program to solve this problem. The calculator greatly reduces the difficulty of the numerical calculation and improves the accuracy and accuracy of the calculation. The calculator is very simple and easy to use, for the majority of primary and secondary school students to learn a great help, but also for the work of the staff a little Help.  This course design will implement a simple calculator. It is similar to a calculator that is included with the Windows attachment. This calculator not only realizes the simple operations function, but also realizes the advanced scientific putation function, and has the concise and elegant picture and text appearance. It is designed according to the method of software engineering , the system has a good interface, necessary interaction information and good robustness of the user can quickly and easily operate. The real-time and accurate calculation results can reduce the difficulty of digital calculation and save time, which will help people's life. In the course design, the system development platform is Windows 2000XP, the programming language adoptsVisual C + +, and in the programming, it adopts structured and object-oriented two kinds of problem solving methods.Tags: programming, calculator, MFC , button controls 目录 摘要…………………………………………………………………… 8 1.选题意义 1.1设计任务……………………………………………………… 12 1.2设计目标……………………………………………………… 12 1.3关于visual C++……………………………………………… 13 1.4可行性及需求分析…………………………………………… 14 二、系统功能与设计 2.1系统功能………………………………………………………15 2.2对话框界面设计………………………………………………18 2.3数值计算设计…………………………………………………19 三、主要成员函数关系图 四、源代码……………………………………………………………20 五、结语……………………………………………………………… 30 参考文献……………………………………………………………… 31 选题意义 1.1设计任务 此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握Visual C++应用程序。统地学习面向对象编程思想,了解 MFC架构,逐步熟悉可视化编程环境 Visual C++,并在此环境下设计并实现一个简单计算器系统。 该计算器应能实现如下功能: 1)、数的加、减、乘、除、乘方等简单计算 2)、科学计算函数,包括正弦、余弦、正切、余切、开方、对数、指数等函数运算 3)、具备历史计算的记忆功能。 1.2设计目标 (1)了解Windows编程的根底知识,掌握MFC应用程序的根本知识。 (2)理解需求分析过程,掌握需求分析文档编写。 (3)理解面向对象程序设计的根本思路和方法。 (4)掌握用VC++开发MFC应用程序的一般步骤和方法。 (5)掌握基于对话框的应用程序的编写,主要包括文本框和按钮等。 (6)掌握后缀表达式算法。 (7)掌握VC++开发工具的使用。包括资源管理,工程创立,运行调试等。 (8)完成表达式的计算器应用程序,实现根本的加、减、乘、除等四那么运算,且支持包括括号的表达式运算功能。 1.3关于 visualc++ Visual C++6.0 是 Microsoft 公司在 1998年推出的基Windows 9X和 WindowsN T 的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境, 程序员可以里利用该开发环境轻松地访问 C++源代码编辑器,资源编辑器和使用部调试器,并且可以创立工程文件。 Visual C++6.0 不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在 Visual C++6.0 集成环境中轻松地完成创立源文件, 编辑资源,以及对程序的编译,连接和调试等各项工作。VC++6.0是 Windows 9598、XP或 Windows NT下的一个应用程序,本身对软硬件没有特殊要求。就是说它对环境的要求与 Windows 9598、Windows NT要一致的。硬件要求:一般在 586以上的处理器、16MB以上存、100MB以上的硬盘。软件要求:Windows 9598 或 Windows NT3.51 以上版本。VC++6 .0 系统可以在一 CD盘上,也可以在“Visual Studio( Visual C++、Visual Foxpro) 〞等产品的第一 CD盘上。一般都有一个 VC的自动安装程序,也可以执行 VC6目录下的 setup.exe ,在安装包的提示下进展,对初学者可采用“典型安装〞方式。在安装好 VC 6.0 系统后,有时根据需要添加或删除某些部件,可插入 CD盘重新执setup.exe 安装程序,安装程序会检测当前系统安装 VC6的足件,用户单击“添加删除〞 按钮后,在“安装维护〞对话框中选定要添加的部件或取消选定要删除的部件。与一般的应用软件一样,有以下两种启动方式: (1)通过“开场〞按钮,选择“程序〞菜单,然后翻开“ Microsoft Visual studio 6.0 中文版〞子菜单中的“ Microsoft Visual C++ 6.0 中文版〞程序。 (2)用户也可以使用命令行启动 VC。单击“开场〞按钮后选择“运行〞命令,在“运行〞 对话框中输入 c:\Program Files\Microsoft Visual Studio\VC98\VC6.exe 〔按默认盘符和路径安装〕即可。 1.4可行性及需求分析 本设计是简单计算器。日常计算机使用中,常常涉及到一些有计算的问题,一个小型的计算器软件变得非常有用, 该校型计算器需要空间资源较少, 对电脑其他程序的应用影响较小。它的设计按软件工程的方法进展 , 系统具有良好的界面、必要的交互信息和较好的强健性;醒目美观的软件封面。使用人员能快捷简单地进展操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间, 对人们的生活有一定的帮助。本软件主要用于计算机 windows 2000XP 以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。 要程序能实现:加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。另外还可以实现多种科学计算的功能,如:三角函数的计算,弧度与角度间的转换,对数指数的计算等等。 系统功能与设计 2.1系统功能 1〕输入的符号,数字从右向左显示。 先输入“8〞 8 再输入“×〞 8* 点击“=〞输出结果,在输出行显示. 2)支持加减乘除运算. 输入行 a.乘法计算: 8*3 24 输出行 b. 加法计算 1+0 1 c. 减法计算 8-3 5 d.除法运算〔特殊情况见10.B〕 9/4 2.25 3)支持求次方(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对话框界面设计 2.3数值计算实现 例如:2×〔2+2〕=? 2 2*( 2*(2+2 2*(2+2) 2*〔2+2〕 8 源代码 源代码 #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(); } // puetrDlg.cpp : 实现文件 // #include "stdafx.h" #include "puetr.h" #include "puetrDlg.h" #include "counter.h" #include <string> #include ".\puetrdlg.h" using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #endif void CpuetrDlg::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(); } } // puetr.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "puetr.h" #include "puetrDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CpuetrApp BEGIN_MESSAGE_MAP(CpuetrApp, CWinApp) ON_MAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() // CpuetrApp 构造 CpuetrApp::CpuetrApp() { // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CpuetrApp 对象 CpuetrApp theApp; // CpuetrApp 初始化 BOOL CpuetrApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 Ctl32.dll 版本 6 或更高版本来启用可视化方式, //那么需要 InitmonControls()。否那么,将无法创立窗口。 InitmonControls(); CWinApp::InitInstance(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,那么应移除以下 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); CpuetrDlg 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; } 结语 课程设计到此已告一段落,经过团队的努力,在将近一个月的实践中课程设计根本完成了。从中学到很多有用的知识,也积累了不少珍贵的经历。从一开场对MFC这样一个陌生的类库名词,在不断的翻阅书籍学习中开场渐渐的有所了解,虽然在此次课程设计我们只是针对性的去学习对对话框应用程序的编程模式,但也体会到了MFC这类库的博大精深。想全部了解这样一个类库,今后还需多下功夫。 本次课程设计我们完成了一个简易计算器应用软件,在此期间,遇上了不少的技术难题,但是经过努力,通过查找资料,难题还是一个个被解决了,从中学到了许多课堂上没学到的东西,这是很值得快乐的。经过设计的各个环节,从中学到了很多,锻炼了系统的设计的能力,培养了团队分工合作精神。这样对我们以后在工作中或学习中得到很好的锻炼,为用VC++编辑软件奠定根底。 在本次实践期间对简易计算器的设计虽然大体实现各个控件的功能,但仍存在许多的缺乏与漏洞,还待以后的不断学习进一步完善。 参考文献: [1]?Visual C++ 7.0 起步进阶?,国防工业 武装 等编著 [2]?Visual C++ 根底教程?,电子科技大学,2006.6 开发环境: Microsoft Visual C++ 6.0 Microsoft Visual C++ 7.0 . . word.zl-
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服