




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 论 文论文题目: 基于GUI的科学计算器设计 学 院: 0000000000000000000 学生姓名: 张0000000000000 学 号: 200000000000000000000 专业年级: 00000000000000000000000 课程名称: 工具软件 完成时间: 0000000000 成 绩: 教师签字: 0000000000 基于GUI的科学计算器设计摘要:随着信息技术的发展,数据变得越来越繁杂,所以计算器在我们日常生活学习中扮演越来越重要角色。本文基于MATLAB设计的GUI科学计算器,改进了以前功能较少的计算器,添加了平方求和、方差、均值、反三角函数、等常用数学运算。此科学计算器具有实用性强、功能强大、易操作、移植性好、占用资源少、执行效率高等优点。关键字:MTALAB; GUI; 科学计算器1.引言随着计算机科学和技术的发展,“计算的可视化”已成为科学计算的重要组成部分。与此同时数值计算软件的发展与成熟, 在强调数值计算方法的原理、思想和基本理论的同时, 适当淡化了算法的细节和繁杂的理论证明,并在一个通用的软件平台上开展。MATLAB 以强大的科学计算与可视化功能、简单易用、开放式可扩展环境,成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。MATLAB 的附带功能图形用户界面(GUI)更具有友好性、直观性、易懂性的优点而被广泛应用。本文根据人们需要方便快捷,通俗易懂的原则,设计了一个科学计算器的图像用户界面,在GUI上实现了加减乘除、三角函数、反三角函数、进制转化、逻辑与或非运算、求和运算、求解方差和均值等常见基本数学运算功能。2.设计过程Matlab的程序设计较为简便,首先建立一个GUI工程,然后用可视化界面,设计出科学计算器的大致外观,为每一个按键设置预计的功能,然后就是将对应的函数写到框架生成的程序中,然后每个按键就可以实现对应的功能。GUI设计的概括流程图:建立边框和显示文本输入的编辑框(设定默认值)建立输出窗口建立响应按钮建立退出按钮建立GUI窗口(用句柄语言控制) 设计的GUI界面如下图所示:.总结及心得体会本文是借助Matlab设计的GUI来实现科学计算器的众多功能,实现过程较为简单。首先建立一个GUI工程,然后用可视化界面,设计出计算器的大致外观,为每一个按键设置预计的功能,然后就是将对应的函数写到框架生成的程序中,然后每个按键就可以实现对应的功能。在设计的过程中还是遇到很多的困难的,首先就是程序的问题,搭建出计算器的外观以后,生成的框架程序是一个看似非常杂乱的程序,每个按键对应什么功能根本看不出来,于是我在原来的工程中修改了每一个按键的名称。编程的过程中,主要就是对全局变量和句柄的控制,对相应的值赋值以后,要返回给主程序,然后就可以在static text中显示出来的。句柄是一个很重要的概念,基本所有的操作都是通过句柄实现的,MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle)。句柄是图形对象的唯一标识符,不同对象的句柄不可能重复和混淆。例如:set(句柄,属性名1,属性值1,属性名2,属性值2,),基本所有关联到图形操作的函数语句都是这样的格式:函数名(句柄,进行的操作),因此句柄是一个图形的名称,是对图形进行操作的媒介。本文设计的科学计算器具有实用性强、功能强大、易操作、移植性好、占用资源少、执行效率高等优点。但是,也存在不足的方面;(1)可视化界面没有达到最佳效果;(2)对于方差的求解只能求解数组类,不具连续性。以后还需要进一步完善和改进。通过这次Matlab的GUI实验设计,使我对matlab的操作与GUI界面设计有了更深一步的理解和认识,学习到了以前未曾了解的知识,使我受益良多,收获颇丰。最后,感谢冯老师这学期的授课,在此说声:谢谢!.参考文献【1】 常巍,谢光军,黄朝峰.MATLABR2007基础与提高.北京:电子工业出版社 2007.9【2】 刘卫国.MATLAB程序设计与应用第2版.北京:高等教育出版社,2006.7【3】 张德喜等.MATLAB程序设计与教程.北京:中国铁道出版社,2006.6【4】 韩旭里,万中,刘金山.数值分析与实验.北京:科学出版社,2006【5】 董氏虹,高志,余啸海. Matlab,工具箱原理与应用.北京:国防工业出版社,2004.【6】 秦襄培.matlab图像处理与界而编程宝典M.北京:电子工业出版社,2009.【7】 郑斌祥,席裕庚,杜秀花.Matlab曲线绘制J.自动化学报,2004, 41(1):41-43.【8】 范明,孟小峰.Matlabd的GUI设计M.北京:机械工业出版社,2001.【9】 史东辉,蔡庆牛,倪志伟等.基于GUI的图像绘制方法J.计算机研究与发展,2000,37(9) : 1094-1100.附 录科学计算器GUI设计的源代码:function varargout = jisuanqi4(varargin)gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, jisuanqi4_OpeningFcn, . gui_OutputFcn, jisuanqi4_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before jisuanqi4 is made visible.function jisuanqi4_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;javaFrame = get(hObject,JavaFrame);javaFrame.setFigureIcon(javax.swing.ImageIcon(icon1.jpg);global opop=zeros(1,7);handles.exp= ;guidata(hObject, handles);function varargout = jisuanqi4_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output;% - Executes on button press in num7.function num7_Callback(hObject, eventdata, handles)global opm=7;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num8_Callback(hObject, eventdata, handles)global opm=8;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 %计算状态、其他进制、长度小于20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num9_Callback(hObject, eventdata, handles)global opm=9;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 %计算状态、其他进制、长度小于20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num4_Callback(hObject, eventdata, handles)global opm=4;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num5_Callback(hObject, eventdata, handles)global opm=5;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num6_Callback(hObject, eventdata, handles)global opm=6;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num2_Callback(hObject, eventdata, handles)global opm=2;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num3_Callback(hObject, eventdata, handles)global opm=3;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num0_Callback(hObject, eventdata, handles)global opm=0;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num1_Callback(hObject, eventdata, handles)global opm=1;n=m .;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 if (a(1)&(a(2) set(handles.xianshi,string,n) else set(handles.xianshi,string,m) endelseif (a(1)&(a(2) %计算状态%十进制 if length(str)20 %数的长度小于20 if a(6) %小数 set(handles.xianshi,string,str m) else %整数 set(handles.xianshi,string,str(1:end-1) n) end endelseif length(str)20 set(handles.xianshi,string,str m)enda(3 5)=0 1;op=a;function num_fuhao_Callback(hObject, eventdata, handles)global opstr=get(handles.xianshi,string);if strcmp(str(1),-) set(handles.xianshi,string,str(2:end)elseif (op(1)&(op(2) set(handles.xianshi,string,- str)endop(3)=0;function dot_Callback(hObject, eventdata, handles)global opif isequal(op(1 2 6),0 0 0) %十进制整数 op(6)=1;endop(5)=1;function numb_Callback(hObject, eventdata, handles)global opm=B;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 set(handles.xianshi,string,m) a(5)=1;elseif length(str)7 d(i)=rem(abs(b),8); i=i+1; res=floor(abs(b)/8); end d(i)=res; c=sprintf(%d,fliplr(d);endfunction xy_Callback(hObject, eventdata, handles)global opa=op;if isequal(a(1 2),0 0) returnenda(5 6)=0 1;b=get(handles.xianshi,string);num=str2val(b,a);exp=handles.exp;if a(4) if a(3) exp(end)=; else a(3)=1; exp=exp num2str(num) ; endelse a(4)=0; set(handles.secndf,visible,off) set(handles.radiobutton1,enable,on) set(handles.radiobutton2,enable,on) set(handles.radiobutton3,enable,on) if a(3) exp(end)=(-1); else a(3)=1; exp=exp num2str(num) (-1); endenda(5)=0;op=a;handles.exp=exp;guidata(hObject,handles) function minus_Callback(hObject, eventdata, handles)global opa=op;b=get(handles.xianshi,string);num=str2val(b,a);exp=handles.exp;if a(3) exp(end)=-;else a(3)=1; exp=exp num2str(num) -;enda(3 5 7)=1 0 0;op=a;handles.exp=exp;guidata(hObject,handles);function multiply_Callback(hObject, eventdata, handles)global opa=op;b=get(handles.xianshi,string);num=str2val(b,a);exp=handles.exp;if a(3) exp(end)=*;else exp=exp num2str(num) *;enda(3 5 7)=1 0 0;op=a;handles.exp=exp;guidata(hObject,handles);function divide_Callback(hObject, eventdata, handles)global opa=op;b=get(handles.xianshi,string);num=str2val(b,a);exp=handles.exp;if a(3) exp(end)=/;else exp=exp num2str(num) /;enda(3 5 7)=1 0 0;op=a;handles.exp=exp;guidata(hObject,handles);function numa_Callback(hObject, eventdata, handles)global opm=A;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 set(handles.xianshi,string,m) a(5)=1;elseif length(str)20 set(handles.xianshi,string,str m)enda(3,6)=0 0;op=a;function numc_Callback(hObject, eventdata, handles)global opm=C;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 set(handles.xianshi,string,m) a(5)=1;elseif length(str)20 set(handles.xianshi,string,str m)enda(3,6)=0 0;op=a;function numd_Callback(hObject, eventdata, handles)global opm=D;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 set(handles.xianshi,string,m) a(5)=1;elseif length(str)20 set(handles.xianshi,string,str m)enda(3,6)=0 0;op=a;function nume_Callback(hObject, eventdata, handles)global opm=E;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 set(handles.xianshi,string,m) a(5)=1;elseif length(str)20 set(handles.xianshi,string,str m)enda(3,6)=0 0;op=a;function numf_Callback(hObject, eventdata, handles)global opm=F;a=op;str=get(handles.xianshi,string);if a(5)%初始状态 set(handles.xianshi,string,m) a(5)=1;elseif length(str)20 set(handles.xianshi,string,str m)enda(3,6)=0 0;op=a;function pi_val_Callback(hObject, eventdata, handles)set(handles.xianshi,string,3.14159265)% - Executes on button press in lgx.function lgx_Callback(hObject, eventdata, handles)global opa=op;if isequal(a(1 2),0 0) returnenda(5 6)=0 1;handles.exp= ;str=get(handles.xianshi,string);if a(4) try format short res=eval(sprintf(log10(%s),str); set(handles.xianshi,string,num2str(res,%7.3f) catch a(5)=0; set(handles.xianshi,string,运算错误!) endelse a(4)=0; set(handles.secndf,visible,off) set(handles.radiobutton1,enable,on) set(handles.radiobutton2,enable,on) set(handles.radiobutton3,enable,on) try format short res=eval(sprintf(10(%s),str); set(handles.xianshi,string,num2str(res,%7.3f) catch a(5)=0; set(handles.xianshi,string,运算错误!) endendop=a;guidata(hObject,handles) function lnx_Callback(hObject, eventdata, handles)global opa=op;if isequal(a(1 2),0 0) returnenda(5 6)=0 1;handles.exp= ;str=get(handles.xianshi,string);if a(4) try format short res=eval(sprintf(log(%s),str); set(handles.xianshi,string,num2str(res,%7.3f) catch a(5)=0; set(handles.xianshi,string,运算错误!) endelse a(4)=0; set(handles.secndf,visible,off) set(handles.radiobutton1,enable,on) set(handles.radiobutton2,enable,on) set(handles.radiobutton3,enable,on) try format short res=eval(sprintf(exp(%s),str); set(handles.xianshi,string,num2str(res,%7.3f) catch a(5)=0; set(handles.xianshi,string,运算错误!) endendop=a;guidata(hObject,handles) function log2x_Callback(hObject, eventdata, handles)global opa=op;if isequal(a(1 2),0 0) returnenda(5 6)=0 1;handles.exp= ;str=get(handles.xianshi,string);if a(4) try format short res=eval(sprintf(log2(%s),str); set(handles.xianshi,string,num2str(res,%7.3f) catch a(5)=0; set(handles.xianshi,string,运算错误!) endelse a(4)=0; set(handles.secndf,visible,off) set(handles.radiobutton1,enable,on) set(handles.radiobutton2,enable,on) set(handles.radiobutton3,enable,on) try format short res=eval(sprintf(2(%s)(%s),str); set(handles.xianshi,string,num2str(res,%7.3f) catch a(5)=0; set(handles.xianshi,string,运算错误!) endendop=a;guidata(hObject,handles) function onc_Callback(hObject, eventdata, handles)global op set(handles.secndf,visible,off,string,2ndF)set(handles.radiobutton1,enable,on)set(handles.radiobutton2,enable,on)set(handles.radiobutton3,enable,on)if isequal(op(1 2),0 0) set(handles.xianshi,string,0.)else set(handles.xianshi,string,0)endop(3:7)=0;set(han
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年规划投资专业考试题库及答案
- 2025年广西中小学教师招聘考试教育综合知识试题及答案解析
- 化验员基础考试题及答案
- 芜职美育课考试题及答案
- 东北三省二模考试试题及答案
- 《科目一》机动车驾驶员考试试题与参考答案(2025年)
- 人力六大模块笔试题及答案
- 心力衰竭中医护理试题及答案2025年解析
- 渠道经理笔试题库及答案
- 2025年一建建筑工程真题答案21
- 医院财务管理年度工作报告
- 灌溉水量平衡分析报告
- 高标准基本农田建设项目初步验收报告
- (2025版)国内旅游“一日游”合同(示范文本)
- 连云港市辅警考试题库2025
- 乡村执业助理试题及答案
- 2025年成人高考专升本医学综合真题及答案
- 2025-2026学年一年级上册统编版道德与法治教学计划
- 国开2025年秋季《形势与政策》专题测验1-5答案
- 急性STEMI PCI术冠状动脉内溶栓共识解读
- 陪诊师备考指南试题及答案
评论
0/150
提交评论