




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
vc+mfc基于对话框简单计算器设计 1 实现计算器功能如图:用vc+建立mfc基于对话框的简单计算器。简易计算器设计说明:1.三个编辑窗口: (1)其中两个为输入操作窗口:数1、数2,一个结果输出窗口。 (2)只有一个操作数时在第一操作窗口输入。 (3)键盘输入数据,运算符按钮输出结果。2.多个运算操作按钮: (1)实现加减乘除的基本计算器功能。 (2)实现三角函数、对数、阶乘等的数值函数运算。3.计算器设计过程: (1)首先建立mfc的基于对话框程序,命名为“test1” 然后在对话框中加入三个编辑框,并用快捷键ctrl+w组合键打开mfc classwizard切换到member variables中其中找到idc_edit1、idc_edit2、idc_edit3分别添加对应的3个double型关联变量m_edit1_num、m_edit2_num、m_edit3_num。关联变量:在后双击编辑框改变编辑框函数名并添加函数:updatedata(true);其他两个编辑框均进行此操作。(2)在对话框中的适当位置添加20个按钮控件实现运算操作:a.操作说明按钮:鼠标放在按钮控件上,右击鼠标点击属性,改变按钮属性标题为“操作说明”,然后双击控件改变函数名并点击“确定”添加函数代码:void ctest1dlg:onintr() /计算器操作说明/ todo: add your control notification handler code heremessagebox(例如m+n=?,在第一个编辑框输入m,第二个编辑框输入n,然后再点击运算符输出结果,减法、乘法、除法、取余等两个数运算的同理。只有一个数进行运算的时候, 在第一个编辑框输入数,然后点击运算符输出结果!);b.两个数运算的按钮:与添加“操作说明”按钮类似,比如加法, 改变按钮属性标题为“+”,然后双击控件添加函数代码:void ctest1dlg:onadd() /加法运算:m+n/ todo: add your control notification handler code herem_edit3_num=m_edit1_num+m_edit2_num; /m_edit3_num、m_edit1_num、m_edit2_num为三个编辑框的对应关联变量getdlgitem(idc_edit2)-showwindow(sw_show); /当执行双数运算时,重新显示第二个编辑框updatedata(false);其他的两个数运算的同理。注意: getdlgitem(idc_edit2)-showwindow(sw_show);我设计想法是当只有一个操作数运算时隐藏第二个编辑框,此函数就是隐藏与显示的功能。idc_edit2是编辑框的关联地址;sw_show便是执行显示编辑框,此外sw_hide是执行隐藏功能后面会用到。c.只有一个数运算的按钮:操作与上面一样,比如x2, 改变按钮属性标题为“x2”,然后双击控件添加函数代码:void ctest1dlg:onpf() /平方运算:x2/ todo: add your control notification handler code herem_edit3_num=m_edit1_num*m_edit1_num;getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);其他的一个数运算的同理。d.第二个编辑框被隐藏后重新显示函数:void ctest1dlg:onupdateedit1show()/ todo: if this is a richedit control, the control will not/ send this notification unless you override the cdialog:oninitdialog()/ function to send the em_seteventmask message to the control/ with the enm_update flag ored into the lparam mask./ todo: add your control notification handler code here/getdlgitem(idc_edit2)-enablewindow(true); /激活编辑框getdlgitem(idc_edit2)-showwindow(sw_show); /当第一个编辑框重新输入数据时,重新显示第二个编辑框updatedata(true);注意: 这个函数要执行的功能是,当第二个编辑框被隐藏时,在第一个编辑框重新输入数据的同时,重新激活第二个编辑框。如果想简单设计的话,之前的所有编辑框隐藏和显示函数就不用添加。e.三角函数的弧度制与角度制的切换:在对话框中添加两个选择控件:degree和rad,第一个选择控件关联变量为m_cdr,添加方法和上面添加编辑框关联变量一样(注意:要关联变量必须把选择控件属性中的组勾选,不然找不到选择控件的地址),并初始化为m_cdr = 0;为零时选择框默认被选中。两个选择控件是互斥的,当选中rad时m_cdr = 0,从而判断是执行角度制还是弧度制,然后双击选择控件,添加代码updatedata(true);以sin(x)为例添加代码:void ctest1dlg:onsin() /正弦函数运算:sin(x)/ todo: add your control notification handler code hereif(m_cdr = 1)m_fdr=1; /m_cdr单选框关联变量,角度运算elsem_fdr=(2*pi)/360; /弧度运算m_edit3_num=sin(m_edit1_num*m_fdr);getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false); 变量m_fdr添加方法:在右侧classview中的caboutdlg鼠标右击选择add member variable.变量类型为:double,变量名为:m_fdr 同时记得添加头文件math.h(3)在bool ctest1dlg:oninitdialog()函数中加入setwindowtext(_t(计算器); 改窗口标题为“计算器”。 (4)完成程序编写后,编译执行。2 计算界面演示:加法:倒数:除法:3 程序清单:#include math.h /数学函数运算头文件#define pi 3.1415926535897932384626433832795 /宏定义在bool ctest1dlg:oninitdialog()函数中加入setwindowtext(_t(计算器); 改窗口标题为“计算器”;void ctest1dlg:onno1() /第一个数字输入框/ todo: if this is a richedit control, the control will not/ send this notification unless you override the cdialog:oninitdialog()/ function and call cricheditctrl().seteventmask()/ with the enm_change flag ored into the mask./ todo: add your control notification handler code hereupdatedata(true);void ctest1dlg:onno2() /第二个数字输入框/ todo: if this is a richedit control, the control will not/ send this notification unless you override the cdialog:oninitdialog()/ function and call cricheditctrl().seteventmask()/ with the enm_change flag ored into the mask./ todo: add your control notification handler code hereupdatedata(true);void ctest1dlg:onno3() /运算结果显示框/ todo: if this is a richedit control, the control will not/ send this notification unless you override the cdialog:oninitdialog()/ function and call cricheditctrl().seteventmask()/ with the enm_change flag ored into the mask./ todo: add your control notification handler code hereupdatedata(true);void ctest1dlg:onintr() /计算器操作说明/ todo: add your control notification handler code heremessagebox(例如m+n=?,在第一个编辑框输入m,第二个编辑框输入n,然后再点击运算符输出结果,减法、乘法、除法、取余等两个数运算的同理。只有一个数进行运算的在第一个编辑框输入数,然后点击运算符输出结果!);void ctest1dlg:onadd() /加法运算:m+n/ todo: add your control notification handler code herem_edit3_num=m_edit1_num+m_edit2_num; /m_edit3_num、m_edit1_num、m_edit2_num为三个编辑框的对应关联变量getdlgitem(idc_edit2)-showwindow(sw_show); /当执行双数运算时,重新显示第二个编辑框updatedata(false);void ctest1dlg:onsub() /减法运算:m-n / todo: add your control notification handler code herem_edit3_num=m_edit1_num-m_edit2_num;getdlgitem(idc_edit2)-showwindow(sw_show); /当执行双数运算时,重新显示第二个编辑框updatedata(false);void ctest1dlg:onmul() /乘法运算:x*y/ todo: add your control notification handler code herem_edit3_num=m_edit1_num*m_edit2_num;getdlgitem(idc_edit2)-showwindow(sw_show); /当执行双数运算时,重新显示第二个编辑框updatedata(false);void ctest1dlg:ondiv() /除法运算:x/y/ todo: add your control notification handler code hereif(m_edit2_num = 0) messagebox(错误!除数不能为零,请检查); /除数为零时,弹出警告elsem_edit3_num=m_edit1_num/m_edit2_num;getdlgitem(idc_edit2)-showwindow(sw_show); /当执行双数运算时,重新显示第二个编辑框updatedata(false);void ctest1dlg:onmod() /取余运算:x%y/ todo: add your control notification handler code hereif(m_edit2_num = 0)messagebox(错误!除数不能为零!); /除数为零时,弹出警告else m_edit3_num=fmod(m_edit1_num,m_edit2_num);getdlgitem(idc_edit2)-showwindow(sw_show); /当执行双数运算时,重新显示第二个编辑框updatedata(false);void ctest1dlg:onds() /求倒数运算:1/x/ todo: add your control notification handler code hereif(m_edit1_num = 0)messagebox(错误!请输入不为零的数!); /除数为零时,弹出警告else m_edit3_num=1/m_edit1_num;/getdlgitem(idc_edit2)-enablewindow(true); /激活编辑框/getdlgitem(idc_edit2)-enablewindow(false); /失效编辑框/getdlgitem(idc_edit2)-showwindow(sw_show); /显示编辑框getdlgitem(idc_edit2)-showwindow(sw_hide); /隐藏编辑框/getdlgitem(idc_static2)-showwindow(sw_hide);updatedata(false);void ctest1dlg:onsqrt() /开平方运算:sqrt(x)/ todo: add your control notification handler code hereif(m_edit1_num showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:onpf() /平方运算:x2/ todo: add your control notification handler code herem_edit3_num=m_edit1_num*m_edit1_num;getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:onlf() /立方运算:x3/ todo: add your control notification handler code herem_edit3_num=m_edit1_num*m_edit1_num*m_edit1_num;getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:onlog() /以10为底的对数运算:log(x)/ todo: add your control notification handler code hereif(m_edit1_num showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:onln() /以e为底的对数运算:ln(x) / todo: add your control notification handler code hereif(m_edit1_num showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:onexp() /以e为底的指数运算:ex/ todo: add your control notification handler code herem_edit3_num=exp(m_edit1_num);getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:ontenx() /以10为底的指数运算:10x / todo: add your control notification handler code herem_edit3_num=pow(10,m_edit1_num);getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:onnn() /n的阶乘运算:n!/ todo: add your control notification handler code hereint i,j=1;if(m_edit1_num =1;i-)j*=i;m_edit3_num=j;getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:onxy() /x的y次方运算:xy/ todo: add your control notification handler code herem_edit3_num=pow(m_edit1_num,m_edit2_num);getdlgitem(idc_edit2)-showwindow(sw_show); /当执行双数运算时,重新显示第二个编辑框updatedata(false);void ctest1dlg:onsin() /正弦函数运算:sin(x) / todo: add your control notification handler code hereif(m_cdr = 1)m_fdr=1; /m_fdr单选框关联变量,角度运算elsem_fdr=(2*pi)/360; /弧度运算m_edit3_num=sin(m_edit1_num*m_fdr);getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:oncos() /余弦函数运算:cos(x)/ todo: add your control notification handler code hereif(m_cdr = 1)m_fdr=1;elsem_fdr=(2*pi)/360;m_edit3_num=cos(m_edit1_num*m_fdr);getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:ontan() /正切函数运算:tan(x)/ todo: add your control notification handler code hereif(m_cdr = 1)m_fdr=1;elsem_fdr=(2*pi)/360;m_edit3_num=tan(m_edit1_num*m_fdr);getdlgitem(idc_edit2)-showwindow(sw_hide); /在只有一个操作数时,隐藏第二个编辑框updatedata(false);void ctest1dlg:oncot() /余切函数运算:cot(x)/ todo: add your control notification handler code hereif(m_cdr = 1)m_fdr=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025劳动合同书范本模板
- 2025河南开封市中心医院住院医师规范化培训基地招收模拟试卷完整答案详解
- 2025江西赣州市会昌县正源建设有限责任公司招聘劳务派遣人员1人考前自测高频考点模拟试题附答案详解
- 2025江苏盐城工学院招聘7人考前自测高频考点模拟试题及一套参考答案详解
- 2025广东佛山市顺德区公办中小学招聘教师92人(编制)考前自测高频考点模拟试题及答案详解(历年真题)
- 2025年丽水市直事业单位公开选聘人员24人模拟试卷及答案详解(夺冠系列)
- 2025年甘肃省平凉市灵台县第二批城镇公益性岗位人员招聘114人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025餐饮用品采购合同
- 2025合同样本:餐厅家具采购合同范本
- 2025年阜阳颍上县人民医院引进博士研究生2人考前自测高频考点模拟试题含答案详解
- 2024年山西省成考(专升本)大学政治考试真题含解析
- 最高法院第一巡回法庭关于行政审判法律适用若干问题的会议纪要
- 《病历书写基本规范》课件
- 足球场的运营可行性方案
- 重庆市面向西南大学定向选调2024届大学毕业生2024年国家公务员考试考试大纲历年真题3453笔试难、易错历年高频考点荟萃附带答案解析(附后)
- GB/T 2881-2023工业硅
- 小学生电力科普小讲座(课件)-小学常识科普主题班会
- 有限合伙份额质押合同完整版(包含质押登记公证手续)
- GB/T 43299-2023机动车玻璃电加热性能试验方法
- 防水卷材项目可行性研究报告
- 肠道微生态与人体健康
评论
0/150
提交评论