MFC做的一个简单的计算器
mfc计算器程序设计详细
mfc计算器程序设计详细
MFC是Microsoft基础类的缩写,用于Windows下的GUI程序开发,封装了许多常用的功能,其中包括控件、多线程、消息传递等等。
下面我们将基于MFC来编写一个简单的计算器程序。
首先,我们需要创建一个MFC应用程序并添加一个对话框。
然后,我们需要在对话框中添加各种控件,比如按钮、文本框、标签等等。
在这个例子中,我们需要添加数字按钮、运算符按钮和一个显示结果
的文本框。
接着,我们需要定义各种事件函数,比如数字按钮的点击事件、
运算符按钮的点击事件等等。
在这些事件函数中,我们需要根据相应
的操作完成对应的计算,并将结果显示到文本框中。
当然,我们还需
要处理一些特殊情况,比如输入非法字符、除以0等等。
最后,我们需要将所有的控件和事件函数进行绑定,使得程序能
够正常地运行。
这个过程中,我们将使用MFC提供的消息映射机制来
处理鼠标和键盘事件,以及相应的消息传递机制来更新界面。
总之,在MFC的帮助下编写一个计算器程序不仅方便快捷,而且
代码逻辑清晰,可读性好。
MFC计算器介绍
MFC计算器介绍部门: xxx时间: xxx整理范文,仅供参考,可下载自行编辑基于对话框实验,写一个计算器,实验结果:工具:VS2018遇到的问题:编译遇到字符串不能转换为char *,在字符串前面加_T解决了。
1.首先新建一个MFC工程,在工具框里面拖出工具,摆好布局,修改caption和ID栏2.在头文件添加CString num1。
CString num2。
CStringm_result。
boolisresult。
int witch。
在初始化函数里面初始化// TODO: 在此添加额外的初始化代码num1=""。
num2=""。
isresult=false。
witch=0。
3.数字键代码voidCcalculatorDlg::OnBnClickednum1(>{// TODO: 在此添加控件通知处理程序代码if(isresult==false>{num1+="1"。
m_result=num1。
UpdateData(false>。
}if(isresult==true>{num2+="1"。
m_result=num2。
UpdateData(false>。
}}运算符键代码:voidCcalculatorDlg::OnBnClickedjia(>{// TODO: 在此添加控件通知处理程序代码isresult=true。
witch=1。
}等于键代码:voidCcalculatorDlg::OnBnClickeddengyu(> {// TODO: 在此添加控件通知处理程序代码UpdateData(true>。
double number1=_ttof(num1>。
double number2=_ttof(num2>。
double result=0.0。
switch(witch>{ case 1: result=number1+number2。
自编计算器步骤
自编计算器步骤1、打开VC++程序;2、点击文件下“新建”;3、选择“工程”属性页中的“MFC AppWizard(exe)”选项,在“工程”中输入工程名称,在“位置”中设置文件存放位置,如下图;4、点击“确定”按钮,进入下级界面,如下所示:选择“D基本对话”,点击“完成”按钮。
5、 如下图,建立程序界面;6、 用鼠标选择任意个输入对话框,按回车键,为每个输入框确定ID 值;如下:将每个输入框的ID 设置为易于识别的代号,如X 变量可设为IDC_EDIT_X ,流量Q 可设为IDC_EDIT_Q 等等;设置标签添加输入框7、建立好界面及自变量和因变量的ID之后,按Ctrl+W组合键,打开“建立类向导”对话框,或点击“查看”下的“建立类向导”,如下图:8、选择“Member Variables”属性页,为界面中所建立的输入框绑定程序中可以使用的变量。
用鼠标选择其中列出的Control IDs,然后点击右侧的“Add Variable…”按钮,为所选的输入框绑定变量,如下图所示:在Member variable name:中输入变量的名称,如m_x,m_前缀表示是变量。
Category选项选Value,表示该变量是值的形式,Variable type:选择该变量所属的数据类型,如float。
9、为每个界面中所建的输入框绑定各自的变量后,结果如下图:10、然后选择“新建类向导”中的“Message maps”属性页,如下:选择“Object IDs:”类表中的“IDOK”项,然后选择右侧的“BN_CLICKED”,单击右侧的“Add Function”按钮,为ID值IDOK 的按钮(即界面中的确定)添加单击时所要执行的函数。
11、点击“Add Function”按钮后显示如下对话框,单击即可。
12、然后单击“Edit Code”按钮,如下图:13、单击“Edit code”按钮后,屏幕显示如下:14、删除OnOK()函数中原有的“CDialog::OnOK()”一行。
MFC计算器
《C++面向对象程序设计》实验报告学院:信息科学与工程学院专业:学号:姓名:一.题目:利用MFC框架编写Windows附件中所示的简易计算器二.功能描述:1.能够实现最基本的加,减,乘,除四则基本运算。
2.界面有清空,退格按钮,方便用户计算使用。
3.此计算器具有开方,取倒数,求对数的高级运算。
三.概要设计:1.Windows消息处理机制通过对教材的阅读,对Windows程序的消息处理机制有个大致的了解。
Windows的程序都是通过消息来传送数据,并且存在异常处理等不需要用户参与的系统消息,用户消息就是鼠标的单击,双击等。
2.界面的设计如图,简易的计算器界面主要使用菜单中相关控件,并合理的布置各个按钮的位置,使得界面让用户看起来整洁简单。
3.框架描述Windows 简易计算器在资源视图画好界面添加控件的同时,通过属性修改名称为各个按钮和编辑框添加不同的函数四则运算+,-,*,/ 1/x,lgx等函数退格和清空键4.建立的变量和控件的命名,对应的消息处理函数命名表ID CAPTION Message Handler IDC_BUTTON0 0 OnButton0()IDC_BUTTON1 1 OnButton1()IDC_BUTTON2 2 OnButton2()IDC_BUTTON3 3 OnButton3()IDC_BUTTON4 4 OnButton4()IDC_BUTTON5 5 OnButton5()IDC_BUTTON6 6 OnButton6()IDC_BUTTON7 7 OnButton7()IDC_BUTTON8 8 OnButton8()IDC_BUTTON9 9 OnButton9()IDC_BUTTON10 . OnButton11()IDC_BUTTON11 = OnButtonequal() IDC_BUTTON12 + OnButtonadd()IDC_BUTTON13 - OnButtoncut()IDC_BUTTON14 * OnButtonmultiply() IDC_BUTTON15 / OnButtonremove() IDC_BUTTON16 1/x OnButton1x()IDC_BUTTON17 lg OnButtonlg()IDC_BUTTON18 sqrt OnButtonsqrt()IDC_BUTTON19 Backspace OnButtonbackspace() IDC_BUTTON20 C(清空) OnButtonclear()5.下图是基本对话框中所有的类四.详细设计:1.新建工程,选择MFC AppWizard[exe],并命名工程的名称为mycalculator2.选择基本对话框3.通过控件添加各种按钮和编辑框(对话框右边的“Controls”控件箱提供了可用于对话框的各种组建,在此次计算器中,基本上只用到上面四个控件,对话框只能通过控件来实现它们的功能,把控件中的数据保存在对话框类的数据成员中,应用程序才能通过这些数据成员获取控件中的数据)4.考虑用户们的习惯,把编辑框的显示的数字属性由靠左改成靠右(选中编辑框,右击选择属性-样式,排列文本改为向左)5.用同样的方法改变按钮的标题,其他按钮同理6.为美观改变对话框的标题为“计算器”7.右击编辑框添加类向导,添加变量m_result,且type为CString//可通过其改变类型和名称8.实现每个按钮的功能,双击按钮,为按钮添加函数,可以改变函数的名称① 0~9和小数点的函数大致类似void CMycalculatorDlg::OnButton1(){// TODO: Add your control notification handler code herem_result +=_T("1");UpdateData(FALSE);}函数_T()可以对字符串进行操作,UpdateData(FALSE)可以把数据传到文本框里面,小数点与数字同样这样处理。
可视化编程课程设计(含源码)计算器系统实现
设计题目:计算器系统实现1.分别用API与MFC编程来实现计算器的以下功能。
2.实现计算器的基本功能:连续数据的无优先级混合运算(加减乘除)3.可以实现其他附加功能:优先级运算,加入括号,加入其他函数运算功能等。
(不在要求范围之内)4.要求界面良好,功能完整。
一.基于MFC的简单计算器1.设计思路打开MFC应用操作界面,布局计算器界面,利用组框将计算器界面分为三个部分,一个是编辑输入,一个是数字界面,一个是功能键部分。
利用布局参考线对齐按钮,使界面美观。
然后就是对各个按钮进行属性设置,关联类设置,接着对各个按钮进行源代码编程。
最后,调试找出问题,解决问题,运行MFC成品计算器。
2.简单操作以及功能说明由于本人技术有限,所以本程序只能按照正确的计算运算顺序进行,该简单计算器能进行四则混合运算,除了加减乘除外,添加了一个括号,对于有些未知的错误,由于时间有限,并未来得及全面测试使用。
该简单计算器能实现四则运算,退格运算,清零运算,并且支持输出的结果保留给直接的下一个运算。
3.系统实现的各个模块1)编辑框模块由于编辑框模块需要连续输入字符串,所以在给编辑框建立类向导时,给编辑框定义的成员变量应该是字符串(String)变量。
编辑框模块用于运算算式的输入,以及结果的输出。
2)数字键模块数字键模块比较简单,该简单计算器数字键模块设置有0~9数字,还设置有小数点,以及正负数转换实现按钮。
数字键模块按钮在建立类向导时无需定义成员变量,但是需要定义按钮响应链接,用于实现点击按钮,在编辑框上显示点击按钮信息。
3)功能键模块功能键模块包括加减乘除基本按钮,以及一个输入错误是后能用于退格功能的退格键按钮,还有一个用于区别优先级运算的括号功能,当然有最重要的计算结果输入按钮,等于号按钮。
在编辑框附近还有一个功能键,就是清除功能键,用于清除编辑框,以便实现下一轮输入。
4.设计过程1)设计总流程图2)界面的设计3)建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION MessageHandler IDD_JISUANQI_DIALOG 简易计算器N/AIDC_NUM0 0 OnNum0IDC_NUM1 1 OnNum1IDC_NUM2 2 OnNum2IDC_NUM3 3 OnNum3IDC_NUM4 4 OnNum4IDC_NUM5 5 OnNum5IDC_NUM6 6 OnNum6IDC_NUM7 7 OnNum7IDC_NUM8 8 OnNum8IDC_NUM9 9 OnNum9IDC_OPER_ADD + OnOperAdd IDC_OPER_SUB - OnOperSub IDC_OPER_MULTI * OnOperMulti IDC_OPER_DIV / OnOperDiv IDC_ADD_SUB +/- OnAddSubIDC_POINT . OnPointIDC_EQUAL = OnEqualIDC_LBRACKET ( OnLbracket1)数字键模块void CJiSuanQiDlg::OnNum0(){if(calculated == TRUE) //已经按了等号,不让其再接受字符return;UpdateData(TRUE);//刷新编辑框界面calcutateString += "0";//存储输入的数字m_data += "0";//显示输入的数字UpdateData(FALSE);}2)功能键模块①加法功能键源程序void CJiSuanQiDlg::OnOperAdd(){if(calculated == TRUE)///其前一步按了= 号{calculated = FALSE;m_data = oldResult;double temp = atof(oldResult);//定义临时变量存储上一步结果if(temp < 0){calcutateString = "0" + oldResult;}else{calcutateString = oldResult;}calcutateString += "+";//存储做完该功能后的结果m_data += "+";//显示该步骤完成的结果UpdateData(FALSE);}else ///前一步不是={UpdateData(TRUE);calcutateString += "+";//直接存储此步操作m_data += "+";//直接显示此步操作UpdateData(FALSE);}}②退格功能键源程序void CJiSuanQiDlg::OnBackspeace(){if(calculated == FALSE){UpdateData(TRUE);int count = m_data.GetLength();if(count >= 1)//判断是否能执行退格操作{m_data = m_data.Left(count -1);count = calcutateString.GetLength();calcutateString = calcutateString.Left(count -1);UpdateData(FALSE);}}}③清除功能键源程序void CJiSuanQiDlg::OnClear(){// TODO: Add your control notification handler code herem_data = "";oldResult = "";calcutateString = "";calculated = FALSE;UpdateData(FALSE);}④括号功能键源程序void CJiSuanQiDlg::OnLbracket(){// TODO: Add your control notification handler code hereif(calculated == TRUE) ///已经按了等号,不让其再接受字符return;UpdateData(TRUE);calcutateString += "(";m_data += "(";UpdateData(FALSE);}⑤正负转换功能键源程序void CJiSuanQiDlg::OnAddSub(){// TODO: Add your control notification handler code hereif(calculated == FALSE){UpdateData(TRUE);calcutateString = calcutateString + "0" + "-";m_data += "-";UpdateData(FALSE);}}6.运行结果界面截图7.制作过程中所遇问题以及解决方法过程1)源代码编写错误通过查阅资料,请教同学,逐步一一解决。
基于MFC的一个简单计算器
基于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简单计算器实验报告.doc
计算机与信息工程学院《程序设计基础》课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:2011508154专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。
2. 能实现加、减、乘、除及乘方的运算。
3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色 例如:输入数字1 时,在计算器图形上的1键变为红色。
4. 屏幕、图形颜色、形状自定3 总体设计3.1 总体框架图1 系统框架开始结束键入第一个按钮键入第二个按钮 显 示 结 果加 法减 法乘 法除 法乘 方清 零3.2 系统功能说明在VC++6.0中绘制计算器界面,各控件的设置对0~9控件设定相应的ID和其他属性:图2 “1”控件设置对“+、-、*、\”控件设定相应的ID和其他属性:图2 “+”控件设置对其它控件设定相应的ID和其他属性:图3 其它控件设置主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
4 程序详细设计4.1系统主调模块图5 程序流程图4.2各模块详细设计 4.2.1 建立的变量,控件的命名,对应的消息处理函数对应表IDCAPTION Message Handler IDD_CALC_DIALOG 简易计算器 N/A IDC_NUM0 0 OnNum0 IDC_NUM1 1 OnNum1 IDC_NUM2 2 OnNum2 IDC_NUM3 3 OnNum3 IDC_NUM4 4 OnNum4 IDC_NUM5 5 OnNum5 IDC_NUM66OnNum6实现文件.cpp显示计算器界面开始执行工程全局对象资源文件.rc 模块定义文件.def头文件.h执行Afxmain()创建窗口实现窗口类注册SetwindowVoidVoid点击鼠标发出消息Void等待消息处理Void Void clc::onAdd()文本框中显示结果 程序运行结IDC_NUM7 7 OnNum7IDC_NUM8 8 OnNum8IDC_NUM9 9 OnNum9IDC_NEG +/- OnNegIDC_PT .OnPtIDC_DIV / OnDivIDC_MUL * OnMulIDC_MIN - OnMinIDC_ADD + OnAddIDC_BACKSPACE BACK OnBackspaceIDC_CE CE OnCeIDC_CLEAR C OnClearIDC_EQU = OnEquIDC_DIS N/A N/AOnCal(double num)变量定义:double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。
基于vc++mfc的科学计算器程序实验报告
实验报告课程名称: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、基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。
VC6.0制作简易计算器MFC[整理]
1、单击File(文件)菜单,选中New(新建),创建新工程。
2、选择工程栏中MFC AppWizard[exe]应用程序,并命名工程名称为calculator.(如图)3、选择MFC应用程序为“基于对话框”类型,其他选项默认。
单击完成(如图)4、修改界面。
经过前3步骤,VC6.0生成的工作界面如图所示。
先将对话框中的“TODO:在这里设置对话控制”静态文字控件和“确定”按钮控件删除,再使用工具箱将界面拖动控件修改为如图所示的界面。
该图所示是使用工具箱的控件拖放制作的计算器初始界面。
由于这些控件都有默认的名字,所以我们要对控件进行改名,右击Button1按钮,选中Properties(属性)选项以修改控件的属性,如图所示。
在弹出的对话框中,将Button1按钮的Caption(标题)属性修改为“+”,此时初始界面同时变成相应的“+”如下图所示。
修改后的界面如图所示,控件的Caption属性就是控件显示出来的值。
按照前文所讲述的方式,将界面上的按钮控件和静态文本控件的Caption属性都做相应的修改,修改后的界面如图所示。
5、为Edit(编辑)控件添加类的成员变量。
首先,右击Edit控件,选择ClassWizard(建立类向导)选项,如下图所示。
在弹出的对话框中,选择上方MemberVariables选项卡,选中DIC_EDIT1,然后单击单击右侧的Add Variable按钮,如图所示。
单击Add Variable按钮后会跳出,如图所示的对话框,该对话框是设置成员变量的命名和数据类型,在此可以命名为m_data1.注意:控件的ID只是标记一个控件,程序中不能直接控制ID,只能通过修改变量来改变控件的状态。
00相应的,再将另外两个Edit控件命名,本项目就将这3个Edit控件命名为:●IDC_EDIT1:m_data1,类型为double.●IDC_EDIT2:m_data2,类型为double.●IDC_EDIT3:m_result,类型为double.6、添加按钮控件的消息处理函数。
MFC下的科学计算器
MFC下的科学计算器MFC (Microsoft Foundation Classes) 是Microsoft在windows上用于构建图形用户界面 (GUI) 的一套类库。
在MFC下开发一个科学计算器,可以实现基本的数学运算,包括加、减、乘、除,以及科学计数、平方、开方等功能。
首先,我们需要创建一个新的MFC应用程序项目。
在Visual Studio中选择“新建项目”,然后选择“MFC应用程序”。
在项目向导中,选择“单文档”视图,点击“完成”创建项目。
在代码视图中,我们可以使用Class Wizard来添加的响应函数。
打开Class Wizard,切换到“消息映射”选项卡,在列表中选择“控件”和“消息”,然后点击“添加函数”来添加事件处理函数。
除了基本的加减乘除功能,我们还可以添加其他的科学计算功能,例如平方、开方、三角函数等。
这些功能使用C++的数学库函数实现。
在完成功能的设计和实现后,我们可以进行调试和优化。
在调试期间,我们可以使用断点来跟踪代码的执行过程,检查变量的值和程序的状态。
如果遇到错误或异常情况,可以使用调试工具和日志功能来定位和解决问题。
同时,我们还可以根据用户的反馈和需求,对功能和界面进行优化和改进。
最后,我们可以将应用程序编译成可执行文件,方便用户安装和使用。
可以使用发布功能来生成安装程序,然后将可执行文件和相关文件打包,发布给用户。
总结一下,使用MFC开发一个科学计算器需要以下几个步骤:创建MFC应用程序项目、设计用户界面、实现计算功能、调试和优化、发布应用程序。
通过这个过程,我们可以了解和掌握MFC开发的基本流程和技巧,进一步提升编程能力和开发经验。
MFC基于对话框设计的简易计算器源代码
return CDialog::PreTranslateMessage(pMsg);
}
void CCALDlg::OnButton9()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_edit3=m_edalse);
}
void CCALDlg::OnButton7()
{
// TODO: Add your control notification handler code here
if(m_edit1==0)
{
MessageBox("不能对0求倒数");
return;
}
m_edit3=1/m_edit1;
UpdateData(false);
}
void CCALDlg::OnButton6()
{
// TODO: Add your control notification handler code here
{
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN)
return TRUE;
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)
}
void CCALDlg::OnButton2()
{
// TODO: Add your control notification handler code here
简易计算器MFC程序
1、编写一个对话框应用程序,添加三按钮,三文本编辑框,实现加、减、乘、除简单运算,并实现编辑框的文本复制、粘贴、清空;程序代码:实验4View.cppvoid C实验4View::OnModelDialog(){CMyDlg dlg;dlg.DoModal();}void C实验4View::OnModellessDialog(){CMyDlg *pDlg=new CMyDlg;pDlg->Create(IDD_DIALOG1,this);pDlg->ShowWindow(SW_SHOW);}MyDlg.hpublic:CEdit m_edit1;CEdit m_edit2;CEdit m_edit3;CEdit m_edit4;CEdit m_edit5;afx_msg void OnBnClickedAdd();afx_msg void OnBnClickedSubtact();afx_msg void OnBnClickedMultiply();afx_msg void OnBnClickedDivide();afx_msg void OnBnClickedClearwrite();afx_msg void OnBnClickedClearsave();afx_msg void OnBnClickedCopy();afx_msg void OnBnClickedPaste();afx_msg void OnEnSetfocusEdit4();afx_msg void OnEnSetfocusEdit5();};MyDlg.cppint nEDITtemp;//全局变量BEGIN_MESSAGE_MAP(CMyDlg, CDialog)ON_BN_CLICKED(IDM_ADD, &CMyDlg::OnBnClickedAdd)ON_BN_CLICKED(IDM_SUBTACT, &CMyDlg::OnBnClickedSubtact)ON_BN_CLICKED(IDM_MULTIPLY, &CMyDlg::OnBnClickedMultiply)ON_BN_CLICKED(IDM_DIVIDE, &CMyDlg::OnBnClickedDivide)ON_BN_CLICKED(IDM_CLEARWRITE, &CMyDlg::OnBnClickedClearwrite) ON_BN_CLICKED(IDM_CLEARSAVE, &CMyDlg::OnBnClickedClearsave) ON_BN_CLICKED(IDM_COPY, &CMyDlg::OnBnClickedCopy)ON_BN_CLICKED(IIDM_PASTE, &CMyDlg::OnBnClickedPaste)ON_EN_SETFOCUS(IDC_EDIT4, &CMyDlg::OnEnSetfocusEdit4)ON_EN_SETFOCUS(IDC_EDIT5, &CMyDlg::OnEnSetfocusEdit5)END_MESSAGE_MAP()// CMyDlg 消息处理程序void CMyDlg::OnBnClickedAdd()//加法{// TODO: 在此添加控件通知处理程序代码double num1, num2, num3;int i=0;CString ch1, ch2, ch3;m_edit1.GetWindowText(ch1);m_edit2.GetWindowText(ch2);num1 =_tstof(ch1);num2 =_tstof(ch2);num3 = num1 + num2;ch3.Format(_T("%g"), num3);m_edit3.SetWindowText(ch3);}void CMyDlg::OnBnClickedSubtact()//减法{// TODO: 在此添加控件通知处理程序代码double num1, num2, num3;CString ch1, ch2, ch3;m_edit1.GetWindowText(ch1);m_edit2.GetWindowText(ch2);num1 = _tstof(ch1);num2 = _tstof(ch2);num3 = num1 - num2;ch3.Format(_T("%g"), num3);m_edit3.SetWindowText(ch3);}void CMyDlg::OnBnClickedMultiply()//乘法// TODO: 在此添加控件通知处理程序代码double num1, num2, num3;CString ch1, ch2, ch3;m_edit1.GetWindowText(ch1);m_edit2.GetWindowText(ch2);num1 = _tstof(ch1);num2 = _tstof(ch2);num3 = num1 * num2;ch3.Format(_T("%g"), num3);m_edit3.SetWindowText(ch3);}void CMyDlg::OnBnClickedDivide()//除法{// TODO: 在此添加控件通知处理程序代码double num1, num2, num3;CString ch1, ch2, ch3;m_edit1.GetWindowText(ch1);m_edit2.GetWindowText(ch2);num1 = _tstof(ch1);num2 = _tstof(ch2);num3 = num1 / num2;ch3.Format(_T("%g"), num3);m_edit3.SetWindowText(ch3);}void CMyDlg::OnBnClickedClearwrite()//初始化编辑框数据{// TODO: 在此添加控件通知处理程序代码m_edit1.SetSel(0,-1);m_edit1.Clear();m_edit2.SetSel(0,-1);m_edit2.Clear();m_edit3.SetSel(0,-1);m_edit3.Clear();}void CMyDlg::OnBnClickedClearsave()//初始化保存框数据{// TODO: 在此添加控件通知处理程序代码m_edit4.SetSel(0,-1);m_edit4.Clear();m_edit5.SetSel(0,-1);m_edit5.Clear();}void CMyDlg::OnBnClickedCopy()//复制// TODO: 在此添加控件通知处理程序代码m_edit3.SetSel(0,-1);m_edit3.Copy();}void CMyDlg::OnBnClickedPaste()//粘贴{// TODO: 在此添加控件通知处理程序代码if (nEDITtemp==1)m_edit4.Paste();else if(nEDITtemp==2)m_edit5.Paste();}void CMyDlg::OnEnSetfocusEdit4()//判断光标是否在SAVEREASULT1指示框中{// TODO: 在此添加控件通知处理程序代码nEDITtemp=1;}void CMyDlg::OnEnSetfocusEdit5()//判断光标是否在SAVEREASULT2指示框中{// TODO: 在此添加控件通知处理程序代码nEDITtemp=2;}运行结果:。
开发一个简单计算器程序
开发一个简单科学计算器(基于对话框模式的应用程序)一.开发目标及软件功能开发一个科学计算器程序,要求采用基于对话框模式的应用程序,至少具有加、减、乘、除四个基本功能,并在此基础上扩展平方、开方、三角函数等功能。
(1)仔细阅读操作过程,学习如何根据编译信息,定位语法错误。
(2)将瞥告与错误一律看作是错误。
(3)学习并模仿书上的程序书写风格。
二.编程步骤1.启动Visual C++6.0>选择File | new菜单项,弹出N HV对话框。
单击Projects选项卡, 项目类型选择MFC AppWizaid(exe),在Project name中填入工程名,在Location中填用户子目录路径(设置用户程序子目录的目的是,将所有编程时产生的中间文件和最终执行程序文件全部放在自己的目录中,以便管理)。
2.在程序向导的第1步选择建立一个基于对话框(Dialog based)的应用程序,点击“Finish” 结束向导。
3.在对话框上添加各类控件,设计对话框的界面如图所示。
在对话框中右键点击,弹出属性设置对话框(DialogProperties),标题(caption)中填入“迷你计算器”;其余各控件的参数设置如下表所示。
4.为对话框中的控件添加相应的成员变量:点击菜单“Vhw -^ClassWizard v,点击Member Variables"标签项,为对话框中的三个编辑框控件添加对应的成员变量如图所示。
添加成员变量的步骤为:选中'TDC_FIRSTS点击"Add Viarable",在弹出的对话框中,指定成员变量名为“m.first",分类为"Valued变量类型为"doubled点击“OK”确定。
其余依此类推。
5.为运算符按钮添加相应的消息映射函数:点击菜单“View —ClassWizaid”,选中**Message Maps” 标签,目标ID 号中选择“IDC—ADD”,在“Messages” 中选择“EN_CLICKED”,双击,弹出“添加成员函数”对话框,默认函数名为“OnAdd”,点击“OK”。
MFC计算器的实现
MFC计算器的实现MFC是Microsoft Foundation Classes的缩写,是一个框架,用于开发Windows平台上的应用程序。
在MFC框架下,我们可以很方便地实现计算器应用程序。
以下是一个基于MFC框架的简单计算器应用程序的实现。
1.首先,创建一个新的MFC应用程序项目,并选择创建一个对话框为基础的应用程序。
4. 创建一个新的类(例如名为CalculatorDlg)作为对话框的类派生自CDialog。
在类头文件中声明需要的成员变量和函数。
```cppclass CalculatorDlg : public CDialogpublic:CalculatorDlg(CWnd* pParent = nullptr);enum { IDD = IDD_DLG_CALC };protected:virtual void DoDataExchange(CDataExchange* pDX);protected:afx_msg void OnBnClickedButtonNumber(UINT nID); // 数字按钮点击事件处理函数afx_msg void OnBnClickedButtonOperator(UINT nID); // 运算符按钮点击事件处理函数afx_msg void OnBnClickedButtonClear(; // 清零按钮点击事件处理函数afx_msg void OnBnClickedButtonEqual(; //等于按钮点击事件处理函数DECLARE_MESSAGE_MAP};```5. 在类的.cpp文件中实现需要的成员函数和消息映射。
```cppIMPLEMENT_DYNAMIC(CalculatorDlg, CDialog)CalculatorDlg::CalculatorDlg(CWnd* pParent) :CDialog(IDD_DLG_CALC, pParent)//初始化成员变量m_hResultEdit = nullptr;void CalculatorDlg::DoDataExchange(CDataExchange* pDX)CDialog::DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CalculatorDlg, CDialog)ON_BN_CLICKED(IDC_BUTTON_0,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_1,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_2,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_3,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_4,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_5,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_6,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_7,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_8,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_9,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_ADD,&CalculatorDlg::OnBnClickedButtonOperator)ON_BN_CLICKED(IDC_BUTTON_SUBTRACT,&CalculatorDlg::OnBnClickedButtonOperator)ON_BN_CLICKED(IDC_BUTTON_MULTIPLY,&CalculatorDlg::OnBnClickedButtonOperator)ON_BN_CLICKED(IDC_BUTTON_DIVIDE,&CalculatorDlg::OnBnClickedButtonOperator)ON_BN_CLICKED(IDC_BUTTON_CLEAR,&CalculatorDlg::OnBnClickedButtonClear)ON_BN_CLICKED(IDC_BUTTON_EQUAL,&CalculatorDlg::OnBnClickedButtonEqual)END_MESSAGE_MAP``````cppvoid CalculatorDlg::OnBnClickedButtonNumber(UINT nID)//获取按钮上的数字CString strNumber;strNumber.Format(_T("%d"), nID - IDC_BUTTON_0);::SetWindowText(m_hResultEdit, strNumber);void CalculatorDlg::OnBnClickedButtonOperator(UINT nID) //获取按钮上的运算符TCHAR chOperator = '+';switch (nID)case IDC_BUTTON_ADD:chOperator = '+';break;case IDC_BUTTON_SUBTRACT:chOperator = '-';break;case IDC_BUTTON_MULTIPLY:chOperator = '*';break;case IDC_BUTTON_DIVIDE:chOperator = '/';break;}CString strOperator;strOperator.Format(_T("%c"), chOperator); ::SetWindowText(m_hResultEdit, strOperator); void CalculatorDlg::OnBnClickedButtonClear::SetWindowText(m_hResultEdit, _T(""));void CalculatorDlg::OnBnClickedButtonEqual//执行运算CString strExpression;::GetWindowText(m_hResultEdit, strExpression);//2.使用字符串解析和计算函数,计算结果//...//3.显示结果CString strResult;strResult.Format(_T("%f"), 123.456); // 替换为实际的计算结果::SetWindowText(m_hResultEdit, strResult);```请注意,在实际的计算过程中,您需要实现字符串解析和数学计算部分的代码。
用基于MFC对话框编写的计算器
用基于MFC对话框编写的计算器1.用MFC建立一个基于对话框的应用程序;2.程序主代码:// CalculatorDlg.h : 头文件#pragma once#include"afxwin.h"// CCalculatorDlg 对话框class CCalculatorDlg : public CDialog{// 构造public:CCalculatorDlg(CWnd* pParent = NULL);// 标准构造函数// 对话框数据enum { IDD = IDD_CALCULATOR_DIALOG };int sign, decimal;double m_Num;double num1, num2; //操作数char cal; //运算符号BYTE dotflag; //小数点标志BYTE dotflag1;BYTE numflag; //键入数字标志long quan2; //小数部分权值char cnum[20];CString csnum;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:afx_msg void OnBnClickedButton1Num0();afx_msg void OnBnClickedButton2Num1();afx_msg void OnBnClickedButton3Num2();afx_msg void OnBnClickedButton4Num3();afx_msg void OnBnClickedButton5Num4();afx_msg void OnBnClickedButton6Num5();afx_msg void OnBnClickedButton7Num6();afx_msg void OnBnClickedButton8Num7();afx_msg void OnBnClickedButton9Num8();afx_msg void OnBnClickedButton10Num9();afx_msg void OnBnClickedPoint();afx_msg void OnBnClickedEqual();afx_msg void OnBnClickedAdd();afx_msg void OnBnClickedSub();afx_msg void OnBnClickedMul();afx_msg void OnBnClickedDiv();afx_msg void OnBnClickedButtonEmpty();afx_msg void OnEnChangeEdit1();CEdit m_CResult;};// CalculatorDlg.cpp : 实现文件//#include"stdafx.h"#include"Calculator.h"#include"CalculatorDlg.h"//#include "math.h"#ifdef_DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的CAboutDlg 对话框class CAboutDlg : public CDialog{public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()// CCalculatorDlg 对话框CCalculatorDlg::CCalculatorDlg(CWnd* pParent/*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }void CCalculatorDlg::DoDataExchange(CDataExchange* pDX) {CDialog::DoDataExchange(pDX);DDX_Control(pDX, IDC_EDIT1, m_CResult);}BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog) ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON1_NUM0,&CCalculatorDlg::OnBnClickedButton1Num0) ON_BN_CLICKED(IDC_BUTTON2_NUM1,&CCalculatorDlg::OnBnClickedButton2Num1) ON_BN_CLICKED(IDC_BUTTON3_NUM2,&CCalculatorDlg::OnBnClickedButton3Num2) ON_BN_CLICKED(IDC_BUTTON4_NUM3,&CCalculatorDlg::OnBnClickedButton4Num3) ON_BN_CLICKED(IDC_BUTTON5_NUM4,&CCalculatorDlg::OnBnClickedButton5Num4) ON_BN_CLICKED(IDC_BUTTON6_NUM5,&CCalculatorDlg::OnBnClickedButton6Num5) ON_BN_CLICKED(IDC_BUTTON7_NUM6,&CCalculatorDlg::OnBnClickedButton7Num6)ON_BN_CLICKED(IDC_BUTTON8_NUM7, &CCalculatorDlg::OnBnClickedButton8Num7) ON_BN_CLICKED(IDC_BUTTON9_NUM8, &CCalculatorDlg::OnBnClickedButton9Num8) ON_BN_CLICKED(IDC_BUTTON10_NUM9, &CCalculatorDlg::OnBnClickedButton10Num9) ON_BN_CLICKED(IDC_POINT,&CCalculatorDlg::OnBnClickedPoint)ON_BN_CLICKED(IDC_EQUAL,&CCalculatorDlg::OnBnClickedEqual)ON_BN_CLICKED(IDC_ADD,&CCalculatorDlg::OnBnClickedAdd)ON_BN_CLICKED(IDC_SUB,&CCalculatorDlg::OnBnClickedSub)ON_BN_CLICKED(IDC_MUL,&CCalculatorDlg::OnBnClickedMul)ON_BN_CLICKED(IDC_DIV,&CCalculatorDlg::OnBnClickedDiv)ON_BN_CLICKED(IDC_BUTTON_EMPTY, &CCalculatorDlg::OnBnClickedButtonEmpty) ON_EN_CHANGE(IDC_EDIT1,&CCalculatorDlg::OnEnChangeEdit1)END_MESSAGE_MAP()// CCalculatorDlg 消息处理程序BOOL CCalculatorDlg::OnInitDialog(){CDialog::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。
VS2024下计算器的MFC编程实现
VS2024下计算器的MFC编程实现MFC(Microsoft Foundation Classes)是Windows 平台上的一个基础类库,用于创建界面友好的Windows应用程序。
通过MFC,我们可以使用C++语言来编写Windows应用程序,并且能够充分利用Windows操作系统的各种功能。
计算器是一个经典的应用程序,可以通过MFC来实现。
下面我们将通过以下步骤来编写一个简单的计算器程序。
1.创建一个新的MFC应用程序项目在Visual Studio 2024中,选择File -> New -> Project,然后选择Visual C++ -> MFC -> MFC Application,并设置相应的项目名称和位置。
点击OK按钮创建项目。
2.设计界面在资源视图中,打开Dialog文件夹,双击IDD_CALCULATOR_DIALOG查看对话框。
在对话框中,我们可以添加按钮、文本框等控件来设计计算器的界面。
3.添加控件和事件处理函数在对话框中添加控件,如按钮、文本框等。
为按钮添加事件处理函数,在事件处理函数中实现计算器的相应功能。
例如,我们可以添加以下按钮:-数字按钮0-9-运算符按钮+、-、*、/-清空按钮C-等号按钮=-小数点按钮.对于数字按钮0-9,我们可以为每个按钮添加一个点击事件处理函数,将对应的数字添加到文本框中。
对于运算符按钮,我们可以为每个按钮添加一个点击事件处理函数,根据当前点击的运算符更新计算器的状态。
对于清空按钮C,我们可以为其添加一个点击事件处理函数,在事件处理函数中清空文本框的内容。
对于等号按钮=,我们可以为其添加一个点击事件处理函数,在事件处理函数中根据计算器的状态进行相应的计算,并将结果显示在文本框中。
对于小数点按钮.,我们可以为其添加一个点击事件处理函数,在事件处理函数中向文本框中添加一个小数点。
4.实现计算功能在事件处理函数中,我们可以使用字符串转换函数和数学运算函数来实现计算器的相应功能。
基于MFC的简易计算器课程设计
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;
第二个MFC实例:GPA计算器
第⼆个MFC实例:GPA计算器⼀、⽬的:此⽂通过⼀个GPA计算器的制作,介绍基于对话框的应⽤程序的编程⽅法、常⽤控件的编程技巧以及控件外观的更改技巧。
⼆、功能描述:所谓GPA计算器,即进⾏GPA换算。
功能要求由如下⼏点: 1.学⽣成绩可以由⽂件导⼊。
2.GPA标准可以选择,也可以⼿动输⼊。
3.GPA的计算过程易于监督控制。
4.计算结果的可读性强。
三、关键技术与算法: 1.CFile和CArchive CFile是MFC的⽂件操作基本类,它直接⽀持⽆缓冲的⼆进制磁盘I/O操作,并通过其派⽣类⽀持⽂本⽂件、内存⽂件和Socket⽂件。
打开⽂件⽅法:CFile(LPCTSTR lpszFileName, UINT nOpenFlags);其中,lpszFileName表⽰要打开的⽂件名,可以是相对路径或绝对路径。
⼀个CArchive对象与⼀个⽂件相连,充当了⽂件与要读写的数据结构之间的桥梁和管道的⾓⾊。
它在⽂件和要读写的数据结构之间设置了⼀个缓冲区,提供数据缓冲机制。
CArchive的构造函数为:CArchive(CFile *pFile, UINT nMode, int nBufSize=4096, void *lpBuf=NULL)其中,pFile表⽰CArchive所基于的⽂件,nMode制定CArchive的存取模式。
本实例⽤上述两个类完成了对成绩⽂件的读取。
2.公共对话框 本实例⽤到了CFileDialog,它是⽂件对话框,提供从磁盘⽬录结构中选择⼀个⽂件的对话框界⾯(经常⽤于打开⽂件或保存⽂件)。
四、程序实现: 1.创建项⽬:项⽬名为GPACalculator,基于对话框,其他默认。
2.界⾯设计:打开对话框资源IDD_GPACALCULATOR_DIALOG,该对话框将是程序运⾏时的主界⾯。
2.1 下⾯按要求添加控件:控件类型 ID 属性设置Button IDC_BUTTON_OPEN Caption设为“浏览...”Button IDC_BUTTON_OK Caption设为“统计”Static Text 默认 Caption设为“参⽐标准”Static Text 默认 Caption设为“标准分”Static Text 默认 Caption设为“原始分”Static Text 默认 Caption设为“统计信息”Static Text 默认 Caption设为“分数列表”Static Text 默认 Caption设为“加权平均分”Static Text 默认 Caption设为“GPA”Static Text 默认 Caption设为“总学分”Edit Box IDC_EDIT_PATHNAME 默认Edit Box IDC_EDIT_S1 ReadOnlyEdit Box IDC_EDIT_S2 ReadOnlyEdit Box IDC_EDIT_S3 ReadOnlyEdit Box IDC_EDIT_S4 ReadOnlyEdit Box IDC_EDIT_S5 ReadOnlyEdit Box IDC_EDIT_S6 ReadOnlyEdit Box IDC_EDIT_S7 ReadOnlyEdit Box IDC_EDIT_O1 ReadOnlyEdit Box IDC_EDIT_O2 ReadOnlyEdit Box IDC_EDIT_O3 ReadOnlyEdit Box IDC_EDIT_O4 ReadOnlyEdit Box IDC_EDIT_O5 ReadOnlyEdit Box IDC_EDIT_O6 ReadOnlyEdit Box IDC_EDIT_O7 ReadOnlyEdit Box IDC_EDIT_O8 ReadOnlyEdit Box IDC_EDIT_AVERAGE ReadOnlyEdit Box IDC_EDIT_GPA ReadOnlyEdit Box IDC_EDIT_TOTAL ReadOnlyGroup Box 默认 Caption设为“第⼀步:载⼊分数⽂件”Group Box 默认 Caption设为“第⼆步:设置参⽐标准”Group Box 默认 Caption设为“第三步:统计并显⽰”Combo Box IDC_COMBO_STANDARD DropListList Box IDC_LIST_SCORE 默认看下效果图:这⾥需要说明⼏点:1>控件配置表与图⽚还是⽐较好对应的。
利用c++环境简单计算器的设计
面向对象程序设计利用c++环境简单计算器的设计利用c++环境设计简单计算器1.题目:简单计算器2.实验目的:模仿日常生活中所用的计算器,自行设计一个简单计算器程序,实现简单的计算功能。
3.实验主要硬件软件环境:Window 7 Visual C++ 6.04.实验内容:(1)体系设计:程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算。
(2) 设计思路:1)先在Visual C++ 6.0中建立一个MFC工程文件,名为CCalcDialog.2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单选框3)设计按钮,并修改其相应的ID与Caption.4)选择和设置各控件的单击鼠标事件。
5)为编辑框添加float类型的关联变量m_EDIT_OPERAND1.6)打开CCalDialog.cpp文件,在构造函数中,进行成员初始化和完善各控件的响应函数代码。
7)在CCalDialog.cpp中添加CalcDialog.h头文件。
(3)程序清单:添加public成员变量:float m_fOperand1; //储存中间变量1float m_fOperand2; //储存中间变量2int m_nOperator; //储存要进行的运算float m_fResult; //储存显示结果的值成员初始化:CCalcDialog::CCalcDialog(CWnd* pParent /*=NULL*/): CDialog(CCalcDialog::IDD, pParent){//{{AFX_DATA_INIT(CCalcDialog)m_fOperand1 = 0.0f;m_fOperand2 = 0.0f;m_nOperator = 0;m_fResult = 0.0f;//}}AFX_DATA_INIT}各控件响应函数代码:void CCalcDialog::OnBtnCalc(){UpdateData(TRUE);switch(m_nOperator){case 0:m_fResult=m_fOperand1+m_fOperand2;break;case 1:m_fResult=m_fOperand1-m_fOperand2;break;case 2:m_fResult=m_fOperand1*m_fOperand2;break;case 3:m_fResult=m_fOperand1/m_fOperand2;break;default:return;}UpdateData(FALSE);程序调试:小结:C++计算器设计到此已告一段落,经过团队的努力,此次设计基本完成了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一.设计题目。
(1)二.设计目的和内容。
(1)三.基本功能描述。
(2)四.设计思路。
(2)五.软件设计:设计步骤、界面设计、关键功能的实现。
(3)a)设计步骤。
(3)b)界面设计。
(4)c)关键功能的实现。
(5)六.附录。
(8)一.设计题目。
小型计算器程序的编写.二.设计目的和内容。
【设计目的】1学习Visual C++的MFC开发程序的步骤。
2综合运用所学的类、继承和多态的知识。
3进一步掌握程序的调试方法。
【设计内容】1利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件;第1页2实现算术加、减、乘、除等运算;3选做:三角函数的运算、对数运算、指数运算、进制转换等。
三.基本功能描述。
具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。
依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果,按‘C E’键清屏。
四.设计思路。
a)首先考虑对所有按键分为两类,数字类和符号类。
0,1,2,3,4,5,6,7,8,9为数字类,+,-,*,/为符号类。
数字在计算过程中最多需要保存两个,所以定义了两个double型变量num1和num2来进行存储,符号需要一个char型变量cal来存储。
b)为显示数字的编辑框设立一个double型的关联变量m_Num,为显示符号的编辑框设立一个CString型的关联变量m_result,设立一个int型的小数点标志dotflag,设立一个int型的键入数字标志numflag,设立一个long型的小数部分权值quan,最后为了防止用户输入错误,设立一个判断输入是否为数字的int型标志mark。
c)然后考虑到在计算过程中num1和num2的储存状态有三种,num1==0和num2==0,也就是程序开始运行还没有开始录入数字的状态;num1!=0和num2==0,也就是第一个数字已经录入,第二个数字还没有录入的状态这时候把m_Num的值赋给num1,m_Num归零;num1!=0和num2!=0,把m_Num的值赋给num2,m_Num归零,令m_Num等于num1和num2合并后的值。
五.软件设计:设计步骤、界面设计、关键功能的实现。
a)设计步骤。
1.添加头文件。
将test.cpp改为test.h将其添加到计算器Dlg.cpp : implementation file中,如下:#include "test.h"。
2.成员函数及其释义。
void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/): CDialog(CTestDlg::IDD, pParent){m_Num =0.0;m_result = _T("");m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CTestDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT_DISPLAY, m_Num);DDX_Text(pDX, IDC_EDIT2_SIGNS, m_result);}BEGIN_MESSAGE_MAP(CTestDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_NUM1, OnButtonNum1)ON_BN_CLICKED(IDC_BUTTON_NUM2, OnButtonNum2)ON_BN_CLICKED(IDC_BUTTON_NUM3, OnButtonNum3)ON_BN_CLICKED(IDC_BUTTON_NUM4, OnButtonNum4)ON_BN_CLICKED(IDC_BUTTON_NUM5, OnButtonNum5)ON_BN_CLICKED(IDC_BUTTON_NUM6, OnButtonNum6)ON_BN_CLICKED(IDC_BUTTON_NUM7, OnButtonNum7)ON_BN_CLICKED(IDC_BUTTON_NUM8, OnButtonNum8)ON_BN_CLICKED(IDC_BUTTON_NUM9, OnButtonNum9)ON_BN_CLICKED(IDC_BUTTON_ZHENGFU, OnButtonZhengfu)ON_BN_CLICKED(IDC_BUTTON_DENGYU, OnButtonDengyu)ON_BN_CLICKED(IDC_BUTTON_NUM0, OnButtonNum0)ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)ON_BN_CLICKED(IDC_BUTTON_MULTIPLY, OnButtonMultiply)ON_BN_CLICKED(IDC_BUTTON_DIVIDE, OnButtonDivide)ON_BN_CLICKED(IDC_BUTTON_PLUS, OnButtonPlus)ON_BN_CLICKED(IDC_BUTTON_MINUS, OnButtonMinus)ON_BN_CLICKED(IDC_BUTTON_DOT, OnButtonDot)//}}AFX_MSG_MAPEND_MESSAGE_MAP()b)界面设计。
1.仿照Windows附件里面的计算器,在资源视图中画好界面,如图1:图12.修改每个button的属性,如图2:图23.修改每个button的处理机制,如图:在类向导Classwizard窗口中进行,如下图3:图3其他button按钮的修改类似。
4.修改每个edit的类型和名称,如图4:在类向导Classwizard窗口中进行:图4单击Add Variable按钮,在如下窗口中进行修改,如图5:图5另一个edit的修改类似。
c)关键功能的实现。
1.OnButtonNum8()按钮的处理函数。
void CTestDlg::OnButtonNum8(){if(dotflag==1){quan= quan*10;m_Num += 8 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 8;}else m_Num = 8;}numflag = 1;mark=1;UpdateData(FALSE);}其他数字按钮的处理函数均与其类似。
2.OnButtonMultiply()按钮的处理函数。
void CTestDlg::OnButtonMultiply(){UpdateData();num1 = m_Num;cal = '*';numflag = 0;dotflag = 0;quan = 1;m_result='*';mark=0;UpdateData(FALSE);}其他符号按钮的处理函数均与其类似。
3.OnButtonDot()按钮的处理函数。
void CTestDlg::OnButtonDot(){UpdateData();dotflag = 1;m_Num += 0.0;m_result='.';}4.OnButtonClear()按钮的处理函数。
void CTestDlg::OnButtonClear(){UpdateData();m_Num =0;m_result=' ';num1 = 0;num2 = 0;numflag=0;dotflag=0;quan=1;mark=0;UpdateData(FALSE);}5.OnButtonDengyu()按钮的处理函数。
void CTestDlg::OnButtonDengyu(){if(mark==1){num2 = m_Num;switch(cal){case '+': m_Num = num1 + num2;cal=0;break;case '-': m_Num = num1 - num2;cal=0; break;case '*': m_Num = num1 * num2;cal=0;break;case '/': m_Num = num1 / num2;cal=0; break;}numflag = 0;dotflag = 0;quan = 1;UpdateData(FALSE);}elseMessageBox("error");}6.OnButtonZhengfu()按钮的处理函数。
void CTestDlg::OnButtonZhengfu(){UpdateData();m_Num = 0-m_Num;}六.附录。
1.调试。
图6图724/62.测试结果。
图8结果=4.3.关键源代码。
void CTestDlg::OnButtonNum1(){if(dotflag==1){quan=10*quan;m_Num += 1 / (double)quan;}else{if(numflag==1){m_Num = 10*m_Num+ 1;}else m_Num =1;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum2(){if(dotflag==1){quan = quan*10;m_Num += 2 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 2;}else m_Num = 2;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum3(){if(dotflag==1){quan= quan*10;m_Num += 3 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 3;}else m_Num = 3;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum4(){if(dotflag==1){quan= quan*10;m_Num += 4 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 4;}else m_Num = 4;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum5(){if(dotflag==1){quan= quan*10;m_Num += 5 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 5;}else m_Num = 5;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum6(){if(dotflag==1){quan= quan*10;m_Num += 6 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 6;}else m_Num = 6;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum7(){if(dotflag==1){quan= quan*10;m_Num += 7 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 7;}else m_Num = 7;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum8(){if(dotflag==1){quan= quan*10;m_Num += 8 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 8;}else m_Num = 8;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum9(){if(dotflag==1){quan= quan*10;m_Num += 9 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 9;}else m_Num = 9;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonNum0(){if(dotflag==1){quan= quan*10;m_Num += 0 / (double)quan;}else{if(numflag==1){m_Num = m_Num * 10 + 0;}else m_Num = 0;}numflag = 1;mark=1;UpdateData(FALSE);}void CTestDlg::OnButtonZhengfu(){UpdateData();m_Num = 0-m_Num;UpdateData(FALSE);}void CTestDlg::OnButtonDengyu(){if(mark==1){num2 = m_Num;switch(cal){case '+': m_Num = num1 + num2;cal=0;break;case '-': m_Num = num1 - num2;cal=0; break;case '*': m_Num = num1 * num2;cal=0;break;case '/': m_Num = num1 / num2;cal=0; break;}numflag = 0;dotflag = 0;quan = 1;UpdateData(FALSE);}elseMessageBox("error"); }void CTestDlg::OnButtonClear() {UpdateData();m_Num =0;m_result=' ';num1 = 0;num2 = 0;numflag=0;dotflag=0;quan=1;mark=0;UpdateData(FALSE);}void CTestDlg::OnButtonMultiply() {UpdateData();num1 = m_Num;cal = '*';numflag = 0;dotflag = 0;quan = 1;m_result='*';mark=0;UpdateData(FALSE);}void CTestDlg::OnButtonDivide() {UpdateData();num1 = m_Num;cal = '/';numflag = 0;dotflag = 0;quan = 1;m_result='/';mark=0;UpdateData(FALSE);}void CTestDlg::OnButtonPlus() {UpdateData();num1 = m_Num;cal = '+';numflag = 0;dotflag = 0;quan = 1;m_result='+';mark=0;UpdateData(FALSE);}void CTestDlg::OnButtonMinus() {UpdateData();num1 = m_Num;cal = '-';numflag = 0;dotflag = 0;quan = 1;m_result='-';mark=0;UpdateData(FALSE);}void CTestDlg::OnButtonDot() {UpdateData();dotflag = 1;m_Num += 0.0;m_result='.';UpdateData(FALSE);}class CTestDlg : public CDialog {public:int mark;long quan;int numflag;int dotflag;char cal;double num2;double num1;CTestDlg(CWnd* pParent = NULL); // standard constructor enum { IDD = IDD_TEST_DIALOG };double m_Num;CString m_result;protected:virtual void DoDataExchange(CDataExchange* pDX);// Implementationprotected:HICON m_hIcon;virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnButtonNum1();afx_msg void OnButtonNum2();afx_msg void OnButtonNum3();afx_msg void OnButtonNum4();afx_msg void OnButtonNum5();afx_msg void OnButtonNum6();afx_msg void OnButtonNum7();afx_msg void OnButtonNum8();afx_msg void OnButtonNum9();afx_msg void OnButtonZhengfu();afx_msg void OnButtonDengyu();afx_msg void OnButtonNum0();afx_msg void OnButtonClear();afx_msg void OnButtonMultiply();afx_msg void OnButtonDivide();afx_msg void OnButtonPlus();afx_msg void OnButtonMinus();afx_msg void OnButtonDot();DECLARE_MESSAGE_MAP()};。