C++课程设计基于MFC的计算器
基于MFC的计算器设计
![基于MFC的计算器设计](https://img.taocdn.com/s3/m/00314c43b307e87101f69612.png)
中南大学本科生课程设计(实践)任务书、设计报告(C++程序设计)题目基于MFC的计算器设计学生姓名李扬洁指导教师刘雄鹰学院物理与电子学院专业班级1107学生学号1404110736计算机基础教学中心2012年 6 月 27 日基于MFC的计算器设计摘要:经过一个学期48个课时的《C++程序设计基础》学习后,展开了为期两周的计算机程序设计实践课程。
如今,在我们的日常生活中,会遇到很多的简单的却不断重复的计算,通过设计一个简单的计算器来完成这些计算不失为一个好方法。
在之前的计算机语言的学习中,已经学过相当多的关于各种计算的函数,把这些函数所解决的各种运算放入到计算器的设计之中,即可做出一个具有简单功能的计算器。
经过一段时间的努力,一个比较简单的加、减、乘、除、开方、归零等六个基本功能的计算器便随之做了出来,并实现了其功用。
通过计算机程序实践所做出来的一个简单计算器,对于多次重复的繁琐的计算起到了一定程度上的帮助作用。
关键词:计算器,简单设计,功能,实践一、计算器开发设计思想要制作一个比较简单的能对多项运算都能进行的一个计算器并不是一件很容易的事情,也需要有一定的流程和步骤,需要有一个合理的严谨的开发设计思想。
计算器所涉及的加、减、乘、除、开方、归零这六个基本功能都对应着六个运算函数,同时,基于MFC,设计出一个简洁的界面,把这些都综合并连接在一起的时候,才能够做出一个简单的计算器。
在这次的计算器程序设计实践中,我的开发设计思想主要是以下五个方面:1、通过学习程序设计实践理论课上的一些入门知识,在平时涉猎一些有关于计算器设计的相关知识,在程序设计实践上机课上进行具体操作。
制定一个可行的分步骤的实施方案,在遇到疑难的时候与同学交流或直接请教老师,从而一步一步制作出这个简单的计算器,达到计算机程序设计实践课的要求。
2、该简单的计算器应该要具有以下几个功能:加,减,乘,除,开方,归零。
这六项基本功能对应这六项基本运算,而这六项基本运算有时我们日常生活中最经常会涉及到的简单计算。
北邮基于MFC的计算器设计
![北邮基于MFC的计算器设计](https://img.taocdn.com/s3/m/a09d58227375a417866f8fbe.png)
1.课题概述1.1课题目标和主要内容本次课题以编写基于MFC的简易计算器为例,重点是学习如何使用MFC消息响应机制完成一个windows下的交互式软件。
本实验以visual studio 2008为平台。
1.2系统的主要功能基本功能单击数字键,显示当前数值单击“+”、“-”、“*”、“/”建进行运算单击“=”,显示运算结果单击“C”,清除已有结果扩展功能进行浮点运算进行倒数、开方运算2. 系统设计2.1 系统总体框架2.2 系统详细设计[1] 模块划分图及描述(1)对话框:实现与用户的交互,使用了两类控件:显示框和按钮。
(2)事件驱动函数:处理由鼠标单击响应到程序的问题,主要有映射和消息处理函数组成。
例如:void CCalculatorDlg::OnBnClickedButtonPoint(){m_coff = 0.1 ;}(3)运算函数:实现逻辑运算以及数据交换。
例如:void CCalculatorDlg::OnBnClickedButtonSqrt(){if( m_second==0){ m_first=sqrt(m_first);UpdateDisplay(m_first); }else{ m_second=sqrt(m_second);UpdateDisplay(m_second); }}[2] 类关系图及描述class CCalculatorDlg : public CDialogEx{// 构造public:CCalculatorDlg(CWnd* pParent = NULL); // 标准构造函数//对话框数据enum { IDD = IDD_CALCULATOR_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:int m_duType; //角度和弧度判断double m_first; //存储一次运算的第一个操作数及一次运算的结果double m_second; //存储一次运算的第二个操作数CString m_operator; //存储运算符double m_coff; //存储小数点的系数权值CString m_display; //编辑框IDC_DISPLAY的关联变量,显示计算结果afx_msg void OnBnClickedHudu();afx_msg void OnBnClickedJiaodu();void UpdateDisplay(double dck);void Calculate(void);void onButtonN(int n);afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton3();afx_msg void OnBnClickedButton4();afx_msg void OnBnClickedButton5();afx_msg void OnBnClickedButton6();afx_msg void OnBnClickedButton7();afx_msg void OnBnClickedButton8();afx_msg void OnBnClickedButton9();afx_msg void OnBnClickedButton0();afx_msg void OnBnClickedButtonPoint();afx_msg void OnBnClickedButtonSign();afx_msg void OnBnClickedButtonAdd();afx_msg void OnBnClickedButtonMinus();afx_msg void OnBnClickedButtonMutiply();afx_msg void OnBnClickedButtonDiv();afx_msg void OnBnClickedButtonClear();afx_msg void OnBnClickedButtonSqrt();afx_msg void OnBnClickedButtonReci();afx_msg void OnBnClickedButtonEqual(); [3] 程序流程图及描述(2.3 关键算法分析算法1:UpdateDisplay[1] 算法功能:更新显示数据。
c面向对象程序设计MFC简单计算器实验报告
![c面向对象程序设计MFC简单计算器实验报告](https://img.taocdn.com/s3/m/9fb3a55d0740be1e640e9a17.png)
c面向对象程序设计M F C简单计算器实验报告Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#计算机与信息工程学院《程序设计基础》课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。
2. 能实现加、减、乘、除及乘方的运算。
3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字1 时,在计算器图形上的1键变为红色。
4. 屏幕、图形颜色、形状自定3 总体设计总体框架图1 系统框架系统功能说明在VC++中绘制计算器界面,各控件的设置对0~9控件设定相应的ID和其他属性:图2 “1”控件设置对“+、-、*、\”控件设定相应的ID和其他属性:图2 “+”控件设置对其它控件设定相应的ID和其他属性:图3 其它控件设置主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
4 程序详细设计系统主调模块图5 程序流程图各模块详细设计建立的变量,控件的命名,对应的消息处理函数对应表double poz; 按钮的处理函数void CCalcDlg::OnPt(){point_flag=TRUE; && buffer[i+1]==0)之前那位}m_Dis=strtod(buffer,NULL);整个大的程序的实现分8个功能,每个功能都通过一个相应的函数来实现.在调试时分别进行调试,使得调试更方便些.在编写各个函数只是按着题目要求的去完成,后来经指导老师指导后,发现了很多自己欠缺的地方,又一次将程序整体进行调试.最后把程序完善了许多。
基于MFC简易计算器
![基于MFC简易计算器](https://img.taocdn.com/s3/m/289a82f0941ea76e58fa046e.png)
上机指导书一、对话框编程1、建立一个基于对话框的应用程序Calculator;2、为CCalculatorDlg建立对话框资源,如下图所示3、为CCalculatorDlg添加成员变量:char m_buffer[100];//用来存贮需要显示的数字CString m_StrBegin;//记录初始操作数的字符串double m_end;//记录结果操作数double m_begin;//记录初始操作数int m_bit;//记录运算符int m_IsCheckPoint;//判断是否按下了小数点符号,当其为0时,表示没有按下4、为应用程序添加CEdit类的派生类CAdvEdit,并为该类添加三个成员函数:其中OnPaint()为虚函数。
这三个函数的函数体如下:void CAdvEdit::OnDisplay(LPCTSTR lpszStr){m_Caption=lpszStr; OnDraw();}void CAdvEdit::OnDraw(){CRect rect; GetClientRect(&rect);CDC *pDC=GetDC(); pDC-> SetBkMode(TRANSPARENT);CBrush *pBrush=new CBrush(RGB(255,255,255));pDC-> FillRect(&rect,pBrush); pDC-> SetTextColor(RGB(92,92,92));pDC-> DrawText(m_Caption,rect,DT_SINGLELINE|DT_VCENTER|DT_RIGHT);}void CAdvEdit::OnPaint(){CPaintDC dc(this); // device context for paintingOnDraw();}5、对话框资源中的编辑框添加控件类型的成员变量:CAdvEdit m_DspEdit;6、为应用程序CCalculatorDlg类添加成员函数Result()/,来处理运算符操作:void CCalculatorDlg::Result()//用来处理按下符号键时的函数,是计算的核心函数{m_IsCheckPoint = false;m_begin = atof(m_StrBegin);switch(m_bit){ case 1: m_end += m_begin; break; //处理+号case 2: m_end -= m_begin; break; //处理-号case 3: m_end *= m_begin; break; //处理*号,即乘法case 4: //处理/号,即除法if (m_begin==0) { m_DspEdit.OnDisplay("除数不能为零!"); return; }m_end /= m_begin; break;case 5: //处理sqrt号,即开方if (m_end<0) { m_DspEdit.OnDisplay("函数输入无效!"); return; }m_end = sqrt(m_end); break;case 6: //处理1/x号,即求倒数m_end = 1/m_end; break;default: m_end = m_begin; break;}m_begin = 0.0; m_bit = 0; m_StrBegin = "";int i = sprintf(m_buffer,"%10.12f",m_end);//将结果转换为字符串TrimZero(m_buffer,i); //去掉字符串尾部多余的零m_DspEdit.OnDisplay(m_buffer);}7、为对话框的运算符按钮添加消息处理函数:void CCalculatorDlg::AdvButtonPoint() //按下.键时的处理函数{ if (!m_IsCheckPoint && m_StrBegin != ""){ m_StrBegin = m_StrBegin+"."; m_DspEdit.OnDisplay(m_StrBegin);m_IsCheckPoint = true; } }void CCalculatorDlg::AdvButtonAdd(){ Result(); m_bit = 1; }void CCalculatorDlg::AdvButtonSub(){ Result(); m_bit = 2; }void CCalculatorDlg::AdvButtonMul(){ Result(); m_bit = 3; }void CCalculatorDlg::AdvButtonDiv(){ Result(); m_bit = 4; }void CCalculatorDlg::AdvButtonClear(){ m_IsCheckPoint = false; m_StrBegin = "";m_begin = 0.0; m_end = 0.0; m_bit = 0; m_DspEdit.OnDisplay("0."); }void CCalculatorDlg::AdvButtonSqrt(){ Result(); m_bit = 5; }void CCalculatorDlg::AdvButtonReverse(){ Result(); m_bit = 6; }void CCalculatorDlg::AdvButtonEqu() //按下=键时的处理函数{ Result(); m_bit = 7; }8、为对话框的数字按钮添加消息处理函数:void CCalculatorDlg::Button0()//按下0键时的处理函数{ m_StrBegin = m_StrBegin+"0";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button1(){ m_StrBegin = m_StrBegin+"1";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button2(){ m_StrBegin = m_StrBegin+"2";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button3(){ m_StrBegin = m_StrBegin+"3";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button4(){ m_StrBegin = m_StrBegin+"4";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button5(){ m_StrBegin = m_StrBegin+"5";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button6(){ m_StrBegin = m_StrBegin+"6";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button7(){ m_StrBegin = m_StrBegin+"7";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::vButton8(){ m_StrBegin = m_StrBegin+"8";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::vButton9(){ m_StrBegin = m_StrBegin+"9";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }9、为应用程序CCalculatorDlg类添加成员函数TrimZerot()/,来去掉字符串尾部多余的零:void CCalculatorDlg::TrimZero(char *pStr,int iLen)//用于去掉字符串尾部多余的零。
基于mfc的计算器设计文档
![基于mfc的计算器设计文档](https://img.taocdn.com/s3/m/4e44d2db50e2524de5187e5e.png)
工程名称:calculator学院:信息科学与工程学院班级:计本08-1班姓名:明康注学号:3081817131开始时间:2010-11-13完成时间:2010-12-04一、需求分析使用面向对象编程语言(MFC)设计一个计算器,点击各按钮将按钮所对应的信息显示在编辑框中,可以进行十进制下的四则运算(加、减、乘、除)和清零及删减等功能,当遇到错误输入时(即不能形成一个算术表达式时或其他情况下),提示错误信息。
二、项目概要与详细设计1、项目概要添加类CCalculatorDlg来为各个按钮添加响应函数,完成对算术表达式的输入,添加类CCalculate分析所输入的表达式,完成十进制下的四则运算(加、减、乘、除),内包含小数点,括号等符号,含有清零,删减等功能。
2、详细设计本程序采用MFC编程语言开发,利用MFC编程语言的布局管理器设计所需要的界面,并利用MFC的事件监听处理机制对用户请求的事件进行处理,以及响应用户的操作。
代码简洁,易维护,易扩展,可读性强。
主界面如下:此界面风格简洁,为科学计算,实现功能清晰明了,对于一般运算均能胜任,为用户基本运算所用。
三、关键函数或功能的实现步骤或思路1、关键函数(1)、按钮响应函数:void CCalculatorDlg::OnBadd() //按下+按钮void CCalculatorDlg::OnBdiv() //按下÷按钮void CCalculatorDlg::OnBflo() //按下. 按钮void CCalculatorDlg::OnBmul() //按下×按钮void CCalculatorDlg::OnBsub() //按下- 按钮void CCalculatorDlg::OnBval() //按下= 按钮void CCalculatorDlg::OnButton0() //按下数字0按钮void CCalculatorDlg::OnButton1() //按下数字1按钮void CCalculatorDlg::OnButton2() //按下数字2按钮void CCalculatorDlg::OnButton3() //按下数字3按钮void CCalculatorDlg::OnButton4() //按下数字4按钮void CCalculatorDlg::OnButton5() //按下数字5按钮void CCalculatorDlg::OnButton6() //按下数字6按钮void CCalculatorDlg::OnButton7() //按下数字7按钮void CCalculatorDlg::OnButton8() //按下数字8按钮void CCalculatorDlg::OnButton9() //按下数字9按钮void CCalculatorDlg::OnBclear() //按下“清零”按钮void CCalculatorDlg::OnBbackspace() //按下“←”按钮void CCalculatorDlg::OnButton10() //按下“(“按钮void CCalculatorDlg::OnButton11() //按下“)”按钮(2)、字符串处理函数:void CCalculate::init() //初始化编辑框int CCalculate::yylex() // 词法分析,读入一个记号void CCalculate::Match(int t) // 匹配函数,若当前记号与参数相//则读入下一个记号2、实现步骤(简易步骤)按下“等号”按钮响应void CCalculatorDlg::OnBval()函数,判断编辑框中的输入串是否为空,若为空,则按下“等号”按钮后,编辑框消息映射变量m_result赋为空,若不为空,则调用E(),E()、E_()、T()、S()、T_()、G()、S_()、F()、G_()、Match()、yylex()等函数嵌套、递归调用来分析输入串,判断输入算术表达式是否有错误,若有错误,则在编辑框中输出“ERROR!!!”,若无错误,则输入运算结果显示到编辑框中。
基于MFC的一个简单计算器
![基于MFC的一个简单计算器](https://img.taocdn.com/s3/m/9407405f842458fb770bf78a6529647d272834b4.png)
基于MFC的⼀个简单计算器写⼀个简单的计算器并不是什么很难的事,主要⽬的是要通过这个程序来学习和分析其中的核⼼算法。
这个简易计算器的核⼼部分就是对输⼊的表达式的正确性判断与求值,其中包括对表达式的解析、中缀表达式转后缀表达式、后缀表达式求值等等⼏个⽅⾯。
⼀、封装核⼼代码《》和《》这两篇⽂章已经对核⼼算法部分进⾏了讲解,并附有源码。
在此基础上制作⼀个简单计算器,我们要做的仅仅是封装核⼼代码并加⼊MFC⼯程中。
下⾯是我封装的⼀个 Expression 类:Expression.h#pragma once#include <iostream>#include <sstream>#include <string>#include <vector>#include <stack>#include <utility>using namespace std;class Expression{public:Expression(string str);bool test(); // 外部接⼝,判断表达式是否合法double calculate(); // 外部接⼝,计算表达式的值private:vector<pair<string, int>> word;string expr; // 算术表达式int idx; // word下标int sym; // 单词种别编码int err; // 错误int word_analysis(vector<pair<string, int>>& , const string);void Next();void E();void T();void F();bool Right; // 保存表达式test结果private:int prior(int); // 获取运算符的优先级bool isOperator(int); // 通过种别编码判定是否是运算符vector<pair<string,int>> getPostfix(const vector<pair<string,int>>&); // 中缀转后缀void popTwoNumbers(stack<double>&, double&, double&); // 从栈中连续弹出两个操作数double stringToDouble(const string&); // 把string转换为doubledouble expCalculate(const vector<pair<string, int>>&); // 计算后缀表达式的值};Expression.cpp#include "Expression.h"// 构造函数Expression::Expression( string str ):expr(str),idx(0),err(0),Right(true){}// 外部接⼝bool Expression::test(){return Right;}int err_num = word_analysis(word, expr);if (-1 == err_num){Right = false;}else{// 词法正确,进⾏语法分析Next();E();if (sym == 0 && err == 0) // 注意要判断两个条件Right = true;elseRight = false;}return Right;}// 外部接⼝double Expression::calculate(){if (test()){return expCalculate(getPostfix(word));}else{exit(0);}}/*--------------------------------词法分析----------------------------*/int Expression::word_analysis(vector<pair<string, int>>& word, const string expr) {for(int i=0; i<expr.length(); ++i){// 如果是 + - x ÷ ( )if(expr[i] == '(' || expr[i] == ')' || expr[i] == '+'|| expr[i] == '-' || expr[i] == '*' || expr[i] == '/'){string tmp;tmp.push_back(expr[i]);switch (expr[i]){case '+':word.push_back(make_pair(tmp, 1));break;case '-':word.push_back(make_pair(tmp, 2));break;case '*':word.push_back(make_pair(tmp, 3));break;case '/':word.push_back(make_pair(tmp, 4));break;case '(':word.push_back(make_pair(tmp, 6));break;case ')':word.push_back(make_pair(tmp, 7));break;}}// 如果是数字开头else if(expr[i]>='0' && expr[i]<='9'){string tmp;while(expr[i]>='0' && expr[i]<='9'){tmp.push_back(expr[i]);++i;}if(expr[i] == '.'){++i;if(expr[i]>='0' && expr[i]<='9'){tmp.push_back('.');tmp.push_back(expr[i]);++i;}}else{return -1; // .后⾯不是数字,词法错误}}word.push_back(make_pair(tmp, 5));--i;}// 如果以.开头else{return -1; // 以.开头,词法错误}}return 0;}/*--------------------------------语法分析----------------------------*/ // 读下⼀单词的种别编码void Expression::Next(){if(idx < word.size())sym = word[idx++].second;elsesym = 0;}// E → T { +T | -T }void Expression::E(){T();while(sym == 1 || sym == 2){Next();T();}}// T → F { *F | /F }void Expression::T(){F();while(sym == 3 || sym == 4){Next();F();}}// F → (E) | dvoid Expression::F(){if (sym == 5){Next();}else if(sym == 6){Next();E();if (sym == 7){Next();}else{err = -1;}}else{err = -1;}}/*--------------------------------求值部分----------------------------*/ int Expression::prior(int sym){case 1:case 2:return 1;case 3:case 4:return 2;default:return 0;}}bool Expression::isOperator(int sym){switch (sym){case 1:case 2:case 3:case 4:return true;default:return false;}}vector<pair<string,int>> Expression::getPostfix( const vector<pair<string,int>>& expr){vector<pair<string, int>> output; // 输出stack<pair<string, int>> s; // 操作符栈for(int i=0; i<expr.size(); ++i){pair<string, int> p = expr[i];if(isOperator(p.second)){while(!s.empty() && isOperator(s.top().second) && prior(s.top().second)>=prior(p.second)) {output.push_back(s.top());s.pop();}s.push(p);}else if(p.second == 6){s.push(p);}else if(p.second == 7){while(s.top().second != 6){output.push_back(s.top());s.pop();}s.pop();}else{output.push_back(p);}}while (!s.empty()){output.push_back(s.top());s.pop();}return output;}void Expression::popTwoNumbers( stack<double>& s, double& first, double& second ){first = s.top();s.pop();second = s.top();s.pop();}double Expression::stringToDouble( const string& str ){double d;stringstream ss;ss << str;ss >> d;return d;double Expression::expCalculate( const vector<pair<string,int>>& postfix ){double first,second;stack<double> s;for(int i=0; i<postfix.size(); ++i){pair<string,int> p = postfix[i];switch (p.second){case 1:popTwoNumbers(s, first, second);s.push(second+first);break;case 2:popTwoNumbers(s, first, second);s.push(second-first);break;case 3:popTwoNumbers(s, first, second);s.push(second*first);break;case 4:popTwoNumbers(s, first, second);s.push(second/first);break;default:s.push(stringToDouble(p.first));break;}}double result = s.top();s.pop();return result;}使⽤⽅法(测试):int main(){Expression e("(1.5+2.5)*2+0.53");if(e.test()) // 判断表达式是否合法cout << e.calculate() << endl;return 0;}⼆、加⼊MFC⼯程OK,核⼼代码(表达式的合法性判断与求值)已经封装到 Expression 类中,下⾯要做的就是新建⼀个 MFC ⼯程,并把 Expression 类加⼊⼯程⾥,并实现按钮的功能就⾏了。
C语言MFC基础之计算器详解
![C语言MFC基础之计算器详解](https://img.taocdn.com/s3/m/248398d8db38376baf1ffc4ffe4733687e21fca6.png)
C语⾔MFC基础之计算器详解⽬录基于MFC计算器(基础点)需求:把计算器运算的过程呈现出来。
基础点总结基于MFC计算器(基础点)主要是在实现MFC计算器的过程中碰到的⼀些问题,和补充的⼀些知识。
需求:把计算器运算的过程呈现出来。
想法:利⽤两个队列,⼀个存储输⼊的字符串(表达式),⼀个存放结果。
分别命名为queue1,和myqueue,让字符串从左到右依次⼊队列。
但之后按照⾃⼰的思路去推演,发现如果进⼊队列的是1+23,如果下⼀个字符⼊队的是“+”,那么先计算23的结果⼊队myqueue中,⽽queue1中还储存1,但下⼀个“+”⼊ queue1之后,此时queue1中包含1+,最后把myqueue中的元素和queue1结合,最终在编辑框⽂本中显⽰的是:1+6;如果下⼀个运算符是“*”,那么直接输出队列中的字符串。
在实现的过程中会涉及到类型转换,⽐如CString转换成浮点型。
⽬前还没有实现,主要原因在于对基础的语法不熟悉,还不太会使⽤先总结前⼀段时间碰到的⼀些问题,和解决⽅案。
基础点stack,queue,⽽map函数映射库是char到int的映射,实现了优先级的定义。
C++中的compare():涌来进⾏字符串以及⼦串之间的⽐较。
getline():读整⾏,包括前导和嵌⼊的空格并将其储存在字符串对象中。
length=strlen():遍历字符串strlen():可以做⼀个计数器,从内存的某个位置扫描,直到碰到第⼀个字符串结束符‘\0'为⽌,返回计算器值bool类型做判断:true,falsef分别是:对错,是⾮,正反atof():把字符转化为浮点数ofstream():写操作ofstream fout:是对C++SIT中对⽂件操作的合集,包含了常⽤的所有⽂件操作:插⼊器,析取器fout.open(“txt”,ios::out):打开⽂件流ifstream():读操作,从硬盘到内存fstream():同时进⾏读写ios:in,⽂件以输⼊的⽅式打开。
VC之基于MFC的简易计算器
![VC之基于MFC的简易计算器](https://img.taocdn.com/s3/m/b6fc8bb93b3567ec112d8a9e.png)
程序设计报告课程名称:面向对象技术与Visual C++ 设计题目:基于MFC的简易计算器专业:信息与计算科学班级:信122 姓名:学号:2012314233任课教师:二○一五年五月注:本设计报告中各个部分如果页数不够,请大家自行扩页,原则是一定要把报告写详细,能说明设计的成果和特色。
报告中应该叙述设计中的每个模块。
三、系统分析与设计1系统功能1.1系统功能图1.2系统功能划分1.2系统功能划分对象ID 标题或说明编辑框IDC_EDIT2 显示按钮IDC_BUTTON10 0按钮IDC_BUTTON1 1按钮IDC_BUTTON2 2按钮IDC_BUTTON3 3按钮IDC_BUTTON4 4按钮IDC_BUTTON5 5按钮IDC_BUTTON6 6按钮IDC_BUTTON7 7按钮IDC_BUTTON8 8按钮IDC_BUTTON9 9按钮IDC_point .按钮IDC_BUTTON13 +按钮IDC_BUTTON14 -按钮IDC_BUTTON15 *按钮IDC_BUTTON16 /按钮IDC_Btn_sqrt sqrt按钮IDC_Btn_lg lg按钮IDC_Btn_jiecheng n!按钮IDC_Btn_sin sin按钮IDC_Btn_cos cos按钮IDC_Btn_tan tan按钮IDC_Btn_erjinzhi 二进制按钮 IDC_BUTTON12 = 按钮IDC_BUTTON18CE2系统流程图1.3 计算器界面1.4总体代码(1)数字键代码(仅以1为例) void CJisuanqiDlg::OnButton1() { num[i]=num[i]+"1";开始输入数据加法减法乘法除法求开方求对数求阶乘求正弦求余弦求正切输入第二个数据 结果进制转换结束五、系统运行报告(测试的结果)(1)加法(2)减法(3)乘法(4)除法(5)二进制(6)正弦(7)余弦(8)正切(9)对数(10)阶乘(11)开方。
软件课程设计基于MFC的多功能计算器样本
![软件课程设计基于MFC的多功能计算器样本](https://img.taocdn.com/s3/m/a8312db110a6f524cdbf8580.png)
题目基于MFC的多功能计算器设计一、设计目标编写一个计算器。
二、语言环境编程语言: C++开发环境: VS目标软件运行平台: Windows 64位机三、软件功能:1.图形化界面。
2.实现计算器的功能。
3.输入加减乘除表示式, 能够计算其结果。
4.基本功能: 计算表示式, 计算阶乘, 计算组合数, 次幂, 求次幂后取余, 简单的分数加减乘除计算。
5.扩展功能: 在以上功能完成的基础上, 可完成更高精度的计算,实现简单高精度的加减乘除阶乘运算。
基于MFC的多功能计算器设计摘要计算器是人们日常生活中常见的电子产品之一, 在人们的生活中有着非常广泛的应用, 随着科学的进步, 计算器的种类和功能也更加丰富。
本次课程设计旨在基于MFC框架设计一个多功能计算器, 能够实现含括号的表示式计算, 三角函数、开方、阶乘、排列组合等数学计算, 进制转换, 超过long long范围的整数运算以及简单的分数四则运算。
此次设计的多功能计算器是基于MFC的框架, 以C++编程语言完成的, 计算器使用中缀表示式求值的算法计算含括号的表示式, 使用C++标准库函数进行相应的数学计算, 利用Boost库实现高精度的整数运算。
本计算器不但功能丰富, 而且具有美观、功能清晰且操作方便的界面。
经多次测试, 本计算器能即时准确地获得所需的计算结果, 而且能在输入错误时进行相应处理, 充分降低了计算时的难度, 节约了时间。
经过本次课程设计, 掌握了MFC基本框架, 对基本算法有了更加深入的了解。
关键词: 多功能计算器; MFC; C++编程语言; 表示式计算; 高精度目录课题分析 (4)总体设计 (5)详细设计 (6)3.1普通计算与科学计算 (6)3.2高精度计算 (10)3.3其他计算 (11)3.3.1分数计算 (11)3.3.2组合数计算 (11)3.3.3进制转换 (12)程序调试与问题解决 (12)4.1输入表达式错误引发程序异常 (12)4.2输入表达式格式有误 (13)4.3计算排列组合溢出 (14)运行结果 (14)总结 (17)课题分析本次设计为多功能计算器, 需要实现多种功能, 为了使界面更加美观, 功能更加清晰明了, 也为了让使用者便于操作, 因此本计算器使用MFC中的Tab Control控件对计算器进行分页[1], 将计算器分为了四个板块, 分别为: 普通计算、科学计算、高精度计算和其它计算。
基于vc++mfc的科学计算器程序实验报告
![基于vc++mfc的科学计算器程序实验报告](https://img.taocdn.com/s3/m/101ef14ad0d233d4b04e6949.png)
实验报告课程名称:windows软件开发实习实验项目:科学计算器工业大学实验报告(适用计算机程序设计类)专业班级:软件1006 学号:101201622 :鑫可实验名称:附件A 工业大学实验报告(适用计算机程序设计类)专业班级:软件1006 学号:101201622 :鑫可实验步骤或程序:一、关于Visual C++:Visual C++6.0由Microsoft开发, 它不仅是一个C++ 编译器,而且是一个基于Windows 操作系统的可视化集成开发环境(integrated development environment,IDE)。
Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。
这些组件通过过一个名为Developer Studio的组件集成为和谐的开发环境。
Microsoft的主力软件产品。
Visual C++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。
所以实际中,更多的是以Visual C++6.0为6平台。
Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。
这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。
二、设计要点1、基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。
基于MFC的科学计算器课程设计实验报告
![基于MFC的科学计算器课程设计实验报告](https://img.taocdn.com/s3/m/5f307eb0b90d6c85ec3ac6a6.png)
课程设计实验报告题目学院专业班级课程名称学号学生姓名指导教师成绩二○一三年一月目录1 概述1.1 课程设计目的1.2 课程设计内容1.3 课程设计思想2 系统需求分析2.1 系统目标2.2 主体功能2.3 开发环境3 系统概要分析3.1 设计步骤3.2 界面设计3.3 主要代码4 结论与心得体会4.1 遇到的问题与解决方法4.2 心得5 附录5.1 测试5.2 程序源代码1 概述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()函数无法识别的运算符或字符用一定方式或浮点数替换,再进行简单的双目运算。
mfc设计科学计算器课程设计
![mfc设计科学计算器课程设计](https://img.taocdn.com/s3/m/cb0a78998ad63186bceb19e8b8f67c1cfbd6ee7d.png)
mfc设计科学计算器课程设计一、课程目标知识目标:1. 让学生掌握MFC(Microsoft Foundation Classes)的基本概念和原理,理解其在设计科学计算器中的应用。
2. 使学生了解科学计算器的基本功能,如标准运算、三角函数、对数等,并运用MFC实现这些功能。
3. 帮助学生掌握Visual C++编程环境中MFC的使用方法,培养其运用MFC 进行软件开发的能力。
技能目标:1. 培养学生运用MFC设计界面、处理用户输入和输出结果的能力。
2. 让学生学会使用MFC中的事件处理机制,实现科学计算器的功能按键响应。
3. 提高学生的问题分析能力,使其能够根据实际需求设计合理的MFC程序结构。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养其主动学习和探究的精神。
2. 培养学生的团队协作意识,使其在编程实践中学会与他人分享和交流。
3. 引导学生认识到科技发展对社会进步的重要性,激发其创新精神和责任感。
课程性质:本课程为实践性较强的课程,结合理论讲解和实际操作,帮助学生掌握MFC设计科学计算器的技能。
学生特点:学生具备一定的C++编程基础,对MFC有一定了解,但实际应用能力较弱。
教学要求:结合学生特点,注重理论与实践相结合,强调动手实践,提高学生的实际编程能力。
在教学过程中,将目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. MFC基础回顾:重温MFC的基本概念、框架结构和主要类的功能,重点掌握CWnd、CDialog、CString等类的使用方法。
相关教材章节:第一章 MFC概述,第二章 MFC类和对象。
2. 科学计算器功能设计:介绍科学计算器的基本功能,如标准运算、三角函数、对数等,并分析如何利用MFC实现这些功能。
相关教材章节:第三章 MFC控件编程,第四章 MFC绘图与界面设计。
3. 界面设计与实现:讲解如何使用MFC设计科学计算器的界面,包括窗口、菜单、按钮等控件的使用方法。
VC++MFC计算器课程设计
![VC++MFC计算器课程设计](https://img.taocdn.com/s3/m/f1f61753804d2b160b4ec0ee.png)
Windows程序设计作业报告设计题目:MFC计算器系别:信息与自动化工程专业:电子与通信工程姓名:高小雨学号:2013704011一、设计目的及要求1.1设计目的能够熟练掌握MFC中的各个控件,消息的处理与添加,能够独立完成一些简单的算法,并且能够具体实现一些功能,真正可以利用功能比较强大的MFC 编译出较好的程序代码。
本设计完成的是一个具有比较齐全运算功能的计算器。
1.2设计要求利用Microsoft Visual C++的MFC制作一个多功能计算器,要求:(1)能够实现最基本的加、减、乘、除四则基本运算;(2)添加了计算类型,分别是弧度制、度数制;(3)界面有正负、清空、等于方便用户计算使用;(4)重点是此计算器具有倒数、多次方、开方、三角函数、反三角函数、指数、阶乘等高级运算。
1.3软件、硬件环境本程序采用Microsoft Visual C++6.0的英文版本进行编译。
VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。
二、课程设计步骤2.1 Windows消息处理机制的理解首先编写程序需要对Windows程序的消息处理机制有个比较清晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
2.2界面的设计仿照Windows附件里面的计算器,在Dialog视图中画好界面,主要使用的菜单中的相关控件,并合理布置各个按钮的位置,使界面更加整洁。
在各个控件的属性里依次定义好名称,之后屏幕显示的就是如图一样的可视计算器界面:三、课程设计内容3.1 概要设计依次将各个功能按钮设置相关的ID和控件类,一下为各类按键的一个举例,以下为数字0的属性设置,及其ID和标题名称,其余数字键属性设置与其相似。
基于MFC的科学计算器编程
![基于MFC的科学计算器编程](https://img.taocdn.com/s3/m/3a9cc530ee06eff9aef80764.png)
三,特殊功能介绍
(1)屏蔽键盘信息,代码如下: CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDT_OUTPUT); pEdit->SetReadOnly(true); //将编辑框设置为只读模式(屏蔽键盘消息) 之后添加消息处理函数 BOOL CCalculator::PreTranslateMessage(MSG* pMsg)实现捕捉键盘信 息的功能(仅限于数字)。 (2)动态改变光标位置,将编辑框上显示的字符串定义为 m_string,以当前光标所在位置
}
}
else if(m_stringcal.GetAt(n)=='.')
{
rate=0.1f;
}
else
{
break;
}
}
float intempcal = sqrtf(itemp);
CString strtempr =
m_stringcal.Right(m_stringcal.GetLength()-n);
m = m + 1;
Cha[m] = '+';
m = m + 1;
rate = 10.0f;
mark = 0;
}
else
{
Cha[m] = '+'; m = m + 1; } } else if(m_stringcal.GetAt(i)=='-') { if(mark == 1) { Num[m] = itemp; itemp = 0; m = m + 1; Cha[m] = '-'; m = m + 1; rate = 10.0f; mark = 0; } else { Cha[m] = '-'; m = m + 1; } } else if(m_stringcal.GetAt(i)=='x') { if(mark == 1) { Num[m] = itemp; itemp = 0; m = m + 1; Cha[m] = 'x'; m = m + 1; rate = 10.0f; mark = 0; } else { Cha[m] = 'x'; m = m + 1; } } else if(m_stringcal.GetAt(i)=='/') { if(mark == 1) {
C++课程设计基于MFC的计算器
![C++课程设计基于MFC的计算器](https://img.taocdn.com/s3/m/b02f7c994b35eefdc9d333be.png)
v .. . ..摘要随着科学的发展,计算机的应用越来越广泛,而运用计算机中的计算机语言C++写程序必然是很多的。
C++是目前国内外最广泛使用的程序设计语言之一,它具有处理功能丰富、表达能力强、使用方便灵活、执行程序效率较高等优点。
而且C++得是一种结构化程序设计语言;另外,C++的函数式结构也为实现程序化模块设计提供了强有力的保正。
所以很多人都把C++作为编程的首选语言。
本次课程设计就是利用C++的丰富表达能力来编写一个简单计算器,模拟windows系统的计算器进行简单的计算;在编写这次课程设计中要求利用MFC来画出计算器的图形界面,并且保证可以进行基本的计算。
关键字:简单计算器MFC 图形界面基本计算课程设计任务书设计题目:基于MFC的简单计算器设计该计算器主要进行实数的单目和双目运算,使用过程如下:张亚军2011年6月22日目录摘要 (1)课程设计任务书 (2)第一章设计内容及要求 (7)1.1 计算器的基本要求 (7)1.2 需实现的主要功能 (7)第二章需求分析 (8)2.1 界面及布局设计 (8)2.2 简单计算的实现方法 (8)第三章系统设计 (9)3.1 总体功能图 (9)3.2 总体流程图 (9)第四章主要功能设计流程 (12)4.1 单目运算实现流程图 (12)4.2 双目运算流程图 (13)第五章代码实现 (14)5.1 代码的实现 (14)5.2 运行效果图 (15)第六章系统测试 (17)致谢 (20)参考文献: (22)附录:源程序代码 (23)第一章设计内容及要求1.1 计算器的基本要求(1) 设计MFC的计算器界面。
计算器界面是基于MFC的Dialog bases所画出来的;其中界面主要由Edit properties和Push Button properties所组成。
通过鼠标点击按键即可在Edit中显示数据和进行运算。
(2) 程序要求用户在运行过程中注意不同函数的定义域,若用户按键的数值不符合要求,计算器则会弹出一个提醒你的对话框。
C++_MFC计算器编程课程设计--MFC编程科学计算器
![C++_MFC计算器编程课程设计--MFC编程科学计算器](https://img.taocdn.com/s3/m/4f54b968763231126edb11ff.png)
C++_MFC计算器编程课程设计--MFC编程科学计算器本科生课程设计(实践)设计报告( 程序设计基础)MFC编程科学计算器题目1104120502 学生学号郭斌繁学生姓名蔡旭晖指导教师交通运输工程学院学院交通运输类1205 班专业班级计算机基础教学实验中心2013 年7 月1 日程序设计(C++) 实践报告1.引言C++语言的主要特点表现在两个方面,一是全面兼容C语言,二是支持面向对象的程序:(1)C++是一个更好的C,它保持了C语言的优点,大多数的C程序代码略作修改或不作修改就可在C++的集成环境下调试和运行。
这对于继承和开发当前已在广泛的软件是非常重要的,可以节省大量的人力和物力。
(2)C++ 是一种面向对象的程序设计语言它使得程序的各个模块的独立性更强,程序的可读性和可移植性更强,程序代码的结构更加合理,程序的扩充性更强。
这对于设计、编制和调试一些大型的软件尤为重要。
(3)C++集成环境不仅支持C++程序的编译和调试,而且也支持C程序的编译和调试。
通常,C++!序环境约定:当源程序文件的扩展名为c(时,则为C程序; 而当源程序文件的扩展名为cpp(时,则为C++程序。
⑷C++语句非常简练,对语法限制比较宽松,因此C++语法非常灵活。
其优点是给用户编程带来书写上的方便。
其缺点是由于编译时对语法限制比较宽松,许多逻辑上的错误。
次课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。
并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。
(1). 设计目标利用MFC程序开发工具设计一款可以进行简单计算及部分科学计算的计算器。
在设计当中将综合“面向对象程序设计与结构化程序设计”的思想方法和知识点,编制一个小型的应用程序系统。
通过此设计进一步提高自己的动手能力,并能使自己清楚的知道开发一个应用程序的思想、方法和流程。
基于MFC的简易计算器课程设计
![基于MFC的简易计算器课程设计](https://img.taocdn.com/s3/m/f734e4f0c8d376eeaeaa310b.png)
switch(nID)
{
case IDCumber;
if(NumberState==1)
number1=m_number;
else number2=m_number;
UpdateData(FALSE);
break;
case IDC_NUMBER12:
m_number=(int)m_number/10;
case IDC_NUMBER3:n=3;break;
case IDC_NUMBER4:n=4;break;
case IDC_NUMBER5:n=5;break;
case IDC_NUMBER6:n=6;break;
case IDC_NUMBER7:n=7;break;
case IDC_NUMBER8:n=8;break;
if(NumberState==1)
number1=m_number;
else number2=m_number;
UpdateData(FALSE);
break;
case IDC_NUMBER13:
OperationState=1;m_number=0;UpdateData(FALSE);NumberState=2;break;
case IDC_NUMBER9:n=9;break;
case IDC_NUMBER10:n=0;break;
}
if (NumberState==1)
{
if(point_1==1)
{
m_number=m_number+n*pow(0.1,point_1);
point_1++;
number1=m_number;
number1=m_number;break;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要随着科学的发展,计算机的应用越来越广泛,而运用计算机中的计算机语言C++写程序必然是很多的。
C++是目前国内外最广泛使用的程序设计语言之一,它具有处理功能丰富、表达能力强、使用方便灵活、执行程序效率较高等优点。
而且C++得是一种结构化程序设计语言;另外,C++的函数式结构也为实现程序化模块设计提供了强有力的保正。
所以很多人都把C++作为编程的首选语言。
本次课程设计就是利用C++的丰富表达能力来编写一个简单计算器,模拟windows 系统的计算器进行简单的计算;在编写这次课程设计中要求利用MFC来画出计算器的图形界面,并且保证可以进行基本的计算。
关键字:简单计算器MFC 图形界面基本计算课程设计任务书设计题目:基于MFC的简单计算器设计张亚军2011年6月22日目录摘要 (1)课程设计任务书 (2)第一章设计内容及要求 (6)1.1 计算器的基本要求 (6)1.2 需实现的主要功能 (6)第二章需求分析 (7)2.1 界面及布局设计 (7)2.2 简单计算的实现方法 (7)第三章系统设计 (8)3.1 总体功能图 (8)3.2 总体流程图 (8)第四章主要功能设计流程 (10)4.1 单目运算实现流程图 (10)4.2 双目运算流程图 (10)第五章代码实现 (12)5.1 代码的实现 (12)5.2 运行效果图 (12)第六章系统测试 (15)致谢 (18)参考文献: (19)附录:源程序代码 (20)第一章设计内容及要求1.1 计算器的基本要求(1) 设计MFC的计算器界面。
计算器界面是基于MFC的Dialog bases所画出来的;其中界面主要由Edit properties和Push Button properties所组成。
通过鼠标点击按键即可在Edit中显示数据和进行运算。
(2) 程序要求用户在运行过程中注意不同函数的定义域,若用户按键的数值不符合要求,计算器则会弹出一个提醒你的对话框。
(3) 用户在计算一次以后,可以通过按键AC清空以前记录,进行下一次的计算。
1.2 需实现的主要功能(1) 需完成简单的双目运算,例如加、减、乘、除等。
(2) 需完成三角函数sin,cos,tan的计算,并且要注意其定义域。
(3) 需完成简单的与,或,非,异或等简单运算。
(4) 需完成对数函数以10为底的log,ln,及简单的阶乘运算。
(5) 需完成任意数的开根和次方,并且要注意数值要求。
(6) 还需完成对数值的清除及清除全部内容的功能。
第二章需求分析2.1 界面及布局设计系统布局主要采用了MFC的Dialog的对话框,运用了文本框、按键、面板等组件;文本框的主要功能:联系按键,通过增加文本框的成员,将按键运用按键函数和文本框联系起来,即按键即可在文本框中显示相应的数值。
按键功能:按键用于调用按键函数,通过按键函数来实现计算器相应的计算步骤。
2.2 简单计算的实现方法该计算器的简单计算实现是基于switch case 语句,定义一个全局变量flag,通过对flag赋值调用相应的case语句实现相应的计算。
(1) 加减乘除运算的实现。
该计算主要以简单的运算符+、-、*、/来实现。
(2) 较复杂的运算的实现,例如简单的对数运算,与或非运算,开根和次方。
该计算主要运用math.h中的函数调用实现的,不同的运算调用相应的函数来实现,但是需注意的就是相应的函数就只能进行运算而已,而数值是否符合该函数就需要自己进行判断,如若数值不符合函数定义域,计算则会出现错误。
(3) 阶乘运算的实现。
该运算的实现运用了递归,较为方便的写出递归函数即可进行阶乘运算。
第三章系统设计3.1 总体功能图根据需求所作的分析,需要完成简单的双目运算,例如加、减、乘、除等;需完成三角函数sin,cos,tan的计算,并且要注意其定义域;需完成简单的与,或,非,异或等简单运算;需完成对数函数以10为底的log,ln,及简单的阶乘运算;需完成任意数的开根和次方,并且要注意数值要求;还需完成对数值的清除及清除全部内容的功能。
根据系统需求,计算器的总功能图如图3-1所示:图3-1 计算机总功能图3.2 总体流程图根据对计算器的功能分析,设计得到计算器总流程,如图3-2所示:图3-2 计算器流程图第四章主要功能设计流程4.1 单目运算实现流程图根据对单目运算的分析,可得单目运算流程图,如图4-1所示:图4-1 单目运算流程图4.2 双目运算流程图根据对双目运算的分析,可得双目运算流程图,如图4-2所示:图4-2 双目运算流程图第五章代码实现5.1 代码的实现该计算器是基于MFC下创立的,MFC会给出一部分程序代码;计算器所要编写的类就只有文件所给出的CAboutDlg类。
在CAboutDlg类中,存在某一部分的函数代码,而我们所要增加的就是和界面相联系的按键的按键函数,即对那件数字上的显示和运算的执行。
首先,画好基本的计算器图,如图5-1所示:图5-1 运算器基本架构图5.2 运行效果图开始主界面:图5-2 计算器主界面运行时界面,以求4的阶乘为例子:图5-3 运行时计算器界面(1)图5-3 运行时计算器界面(2)图5-3 运行时计算器界面(3)第六章系统测试1、void CCalcutorDlg::OnBUTTONFushu( );用例1:input:12 output:-12用例2:input:-12 output:122、void CCalcutorDlg::OnBackSpace( );用例:input:123 output:123、void CCalcutorDlg::OnBUTTONjia( );void CCalcutorDlg::OnBUTTONdengyu( );//加法用例:input:1 2 output:34、void CCalcutorDlg::OnBUTTONjin( );void CCalcutorDlg::OnBUTTONdengyu();//减法用例:input:5 4 output:15、void CCalcutorDlg::OnBUTTONcheng( );void CCalcutorDlg::OnBUTTONdengyu();//乘法用例:input:5 4 output:206、void CCalcutorDlg::OnBUTTON除( );void CCalcutorDlg::OnBUTTONdengyu();//除法用例1:input:16 4 output:4用例2:input:16 0 output除数不能为零!7、void CCalcutorDlg::OnBUTTONsin( );void CCalcutorDlg::OnBUTTONdengyu();//sin 用例:input:30 output:0.58、void CCalcutorDlg::OnBUTTONcos( );void CCalcutorDlg::OnBUTTONdengyu();//cos 用例:input:60 output:0.59、void CCalcutorDlg::OnBUTTONtan( );void CCalcutorDlg::OnBUTTONdengyu();//tan用例1:input:45 output:110、void CCalcutorDlg::OnBUTTONlog( );void CCalcutorDlg::OnBUTTONdengyu( );//log以10为底用例:input:10 output:1用例2:input:-1 output:真数必须大于零!11、void CCalcutorDlg::OnBUTTONln( );void CCalcutorDlg::OnBUTTONdengyu( );//ln用例1:input:1 output:0用例2:input:-1 output:真数必须大于零!12、void CCalcutorDlg::OnBUTTONn( );void CCalcutorDlg::OnBUTTONdengyu( );//阶乘用例:input:4 output:2413、void CCalcutorDlg::OnBUTTONxy( );void CCalcutorDlg::OnBUTTONdengyu( );//x的y次方用例:input:5 2 output:2514、void CCalcutorDlg::OnBUTTONxx( );void CCalcutorDlg::OnBUTTONdengyu( );//x的平方用例:input:2 output:415、void CCalcutorDlg::OnBUTTONxxx( );void CCalcutorDlg::OnBUTTONdengyu( );//x的立方用例:input:2 output:816、void CCalcutorDlg::OnBUTTONmod( );void CCalcutorDlg::OnBUTTONdengyu( );//求余数mod 用例:input:9 10 output:917、void CCalcutorDlg::OnBUTTONXor( );void CCalcutorDlg::OnBUTTONdengyu( );////异或用例:input:1 0 output:118、void CCalcutorDlg::OnBUTTONexp( );void CCalcutorDlg::OnBUTTONdengyu( );//E的多少次方用例:input:1 output:2.71828219、void CCalcutorDlg::OnBUTTONor( );void CCalcutorDlg::OnBUTTONdengyu( );////或用例:input:1 0 output:120、void CCalcutorDlg::OnBUTTONand( );void CCalcutorDlg::OnBUTTONdengyu( );//且用例:input:1 0 output:021、void CCalcutorDlg::OnBUTTONx( );void CCalcutorDlg::OnBUTTONdengyu( );// 1 / x用例1:input:10 output:0.1用例2:input:0 output:分母不能为零!22、void CCalcutorDlg::OnBUTTONlog( );void CCalcutorDlg::OnBUTTONdengyu( );//开2次根号用例1:input:100 output:10用例2:input:-100 output:不符合定义域!23、void CCalcutorDlg::OnBUTTONlog( );void CCalcutorDlg::OnBUTTONdengyu( );////x开y次根号用例1:input:8 3 output:2用例2:input:-8 3 output:-2致谢在本次课程设计中,我想如果没有老师耐心的指导,我是很难才会把这个程序写出来的;在这里我要忠心地感谢老师对我们的帮助,还有老师对我们的监督,如果没有老师,我想我们很多同学都不会那么有耐心的把程序写出来的。