1、 1 1.需求分析 洗手 本次的实验要求是设计一个计算器 , 吃饭 主要功能如下 : beef洗手 ( 1)实现基本数学运算(加减乘除等) , 吃饭 而且要能进行混合运算 洗手 ( 2)实现部分函数功能 , 吃饭 如求平方根 、 beef求倒数等 洗手 ( 3)能实现小数运算 洗手 界面与标准计算器界面类似 洗手 根据要求以及以前的学习情况 , 吃饭 决定使用 matlab 进行编程 。 洗手 Matlab 强大的计算功能以及便捷的 GUI 设计 , 吃饭 可以较为简便的实现所要求的功能 。 洗手 按照要求 , 吃饭 数据输入和输出支持小数点 , 吃饭 支持四则混合运算 , 吃饭 决定使用如下
2、几个数据进行 分析 : beef洗手 ( 1+3) *5 洗手 Sqrt( 4) 洗手 1/2 洗手 Sin4 洗手 用以检验是否可以进行加减乘除四则运算 、 b eef平方根 、 beef倒数 、 beef正弦的运算 。 洗手洗手 2.程序设计 洗手 Matlab 的程序设计较为简便 , 吃饭 用 GUI 设计出一个计算器的模型 , 吃饭 然后系统会自动生成一个框架 , 吃饭 在框架中 , 吃饭 写入每一个按键对应的程序就可以实现功能 。 洗手洗手 3.调式分析 洗手 编程的过程中遇到的问题不是很多 , 吃饭 基本就是找要实现各个功能的子程序 , 吃饭 通过上网和去图书馆 , 吃饭 加上自己
3、的编写 , 吃 饭 终于实现了实验要求的功能 。 洗手 但是有一点很重要 , 吃饭matlab 不支持中文 , 吃饭 所以从路径到文件名必须是全英文的 , 吃饭 不然就无法识别 。 洗手 此外 , 吃饭给每个按键命名也是很重要的 , 吃饭 不然在生成的程序框架里面 , 吃饭 就无法识别各个按键的作用 , 吃饭 编写程序的时候也就无法做到一一对应 。 洗手洗手 4.使用说明 洗手 程序的使用比较简单 , 吃饭 由于是可视化界面 , 吃饭 直接打开 matlab, 吃饭 然后建立一个 GUI 工程 ,吃饭 再打开 生成的 fig 文件 , 吃饭 就是一个计算器的界面 , 吃饭 直接按照市面上卖的计
4、算器的方法 ,吃饭 按键使用即可 。 洗 手洗手 5.测试结果 洗手 2 洗手 计算结果为 20 洗手 4sqrt=2 洗手 Sin4 结果为 洗手 1/2=0.5 洗手 经过计算 , 吃饭 这些结果均与实际结果相吻合 , 吃饭 计算器的功能实现的较为完好 。 洗手洗手 6.心得体会 洗手 本 次试验由于不限制语言 , 吃饭 于是计算功能强大 , 吃饭 操作简便的 matlab 变成了首选 , 吃饭 matlab的 GUI 设计 , 吃饭 操作是较为简单的 , 吃饭 首先建立一个 GUI 工程 , 吃饭 然后用可视化界面 , 吃饭 设计出计算器的大致外观 , 吃饭 为每一个按键设置预计的功能
5、, 吃饭 然后就是将对应的函数写到框架生成的程序中 , 吃 饭然后每个按键就可以实现对应的功能 。 洗手洗手 在设计的过程中还是遇到很多的困难的 , 吃饭 首先就是程序的问题 , 吃饭 搭建出计算器的外观以后 , 吃饭 生成的框架程序是一个看似非常杂乱的程序 , 吃饭 每个按键对应什么功能根本看不出来 ,吃饭 于是我在原来的工程中修改了每一个按键的名称 。 洗手 编程的过程中 , 吃饭 主要就是对全局变量和句柄的控制 , 吃饭 对相应的值赋值以后 , 吃饭 要返回给主程序 , 吃饭 然后就可以在 static text 中显示出来的 。 洗手 句柄是一个很重要的概念 , 吃饭 基本所有的操作都
6、是通过句柄实现的 , 吃饭 MATLAB在创建每一个图形 对象时 , 吃饭 都为该对象分配唯一的一个值 , 吃饭 称其为图形对象句柄3 (Handle)。 洗手 句柄是图形对象的唯一标识符 , 吃饭 不同对象的句柄不可能重复和混淆 。 洗手 例如 :beefset(句柄 , 吃饭 属性名 1, 吃饭 属性值 1, 吃饭 属性名 2, 吃饭 属性值 2, 吃饭 ) , 吃饭 基本所有关联到图形操作的函数语句都是这样的格式 : beef函数名(句柄 , 吃饭 进行的操作) , 吃饭 因此句柄是一个图形的名称 , 吃饭 是对图形进行操作的媒介 。 洗手洗手 此外 , 吃饭 由于 matlab 是全英
7、文的操作环境 , 吃饭 所以所有的中文路径和中文的文件夹名称均不支持 , 吃饭 不然就 会在程序中报错 , 吃饭 虽然可以打开 , 吃饭 但是按键不可以实现功能 , 吃饭 这点是要特别留意的 , 吃饭 一般情况下 , 吃饭 直接将文件保存在默认的 work 路径下即可 。 洗手洗手 经过老师的指点 , 吃饭 我修改了界面 , 吃饭 使其更加美观 , 吃饭 可惜的是 matla 无法实现一个窗口的单独计算器 , 吃饭 这不得不说是一个遗憾吧 。 洗手洗手 本次试验本来打算使用 VB进行编程的 , 吃饭 但是 VB 的计算功能不够强大 , 吃饭 所以在处理四则运算的时候比较麻烦 , 吃饭 于是最后
8、还是决定选择 matlab, 吃饭 经过这次实习 , 吃饭 我对 matlab 的操作与 GUI 界面射界有了更深 一步的理解 , 吃饭 知道了回调函数的基本写法以及各个功能的基本函数的内容 , 吃饭 感觉受益匪浅 。 洗手洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 附录 A 洗手 程序以及注释( 注 : b eef前面带有 %的句子是程序自动生成的框架程序 ) 洗手 %定义函数 洗手 function varargout = untitled(varargin)洗手 % Last Modified by GUIDE v2.5 29-Jun-2009 1
9、6:06:25 洗手 洗手 % Begin initialization code - DO NOT EDIT 洗手 gui_Singleton = 1;beef洗手 gui_State = struct(gui_Name, mfilename, .洗手 gui_Singleton, gui_Singleton, .洗手 gui_OpeningFcn, untitled_OpeningFcn, .洗手 gui_OutputFcn, untitled_OutputFcn, .洗手 gui_LayoutFcn, , .洗手 gui_Callback, );beef洗手 if nargin bef洗
10、手 end 洗手 洗手 4 if nargout 洗手 varargout1:nargout = gui_mainfcn(gui_State, varargin:);beef洗手 else 洗手 gui_mainfcn(gui_State, varargin:);beef洗手 end 洗手 % End initialization code - DO NOT EDIT 洗手 洗手 洗手 function untitled_OpeningFcn(hObject, eventdata, handles, varargin)洗手 handles.output = hObject;beef洗手 % U
11、pdate handles structure 洗手 guidata(hObject, handles);beef洗手 % UIWAIT makes untitled wait for user response (see UIRESUME)洗手 % uiwait(handles.figure1);beef洗手 % 定义全局变量 jj, 吃饭 shift 用于数字的设定 洗手 global jj shift 洗手 %设置句柄 , 吃 饭用于将按键接收的值返回给主程序 洗手 set(handles.text1,String,0.);bef 洗手 jj=0;beef洗手 shift=0;beef洗
12、手 洗手 % - Outputs from this function are returned to the command line.洗手 function varargout = untitled_OutputFcn(hObject, eventdata, handles) 洗手 varargout1 = handles.output;beef洗手 洗手 洗手 洗手 % - Executes during object creation, after setting all properties.洗手 function edit1_CreateFcn(hObject, eventdata
13、, handles)洗手 % hObject handle to edit1 (see GCBO)洗手 % eventdata reserved - to be defined in a future version of MATLAB 洗手 % handles empty - handles not created until after all CreateFcns called 洗手 洗手 洗手 % - 按键 2 响应 洗手 function pushbutton2_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textStri
14、ng = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)beef洗手 else 洗手 textString =strcat(textString,2);beef洗手 set(handles.text1,String,textString)洗手 end 洗手 5 jj=0;beef洗手 洗手 % - 按键 3 响应 洗手 function pushbutton3_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.tex
15、t1,String);beef洗手 if(strcmp(textString,0.)=1)beef洗手 else 洗手 textString =strcat(textString,3);beef洗手 set(handles.text1,String,textString)洗手 end 洗手 jj=0;beef洗手 洗手 洗手 % - 按键 4 响应 洗手 function pushbutton4_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.text1,String);beef洗手 i
16、f(strcmp(textString,0.)=1)beef洗手 else 洗手 textString =strcat(textString,4);beef洗手 set(handles.text1,String,textString)洗手 end 洗手 jj=0;beef洗手 洗手 洗手 % - 按键 5 响应 洗手 function pushbutton5_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString
17、,0.)=1)beef洗手 else 洗手 textString =strcat(textString,5);beef洗手 set(handles.text1,String,textString)洗手 end 洗手 jj=0;beef洗手 洗手 % - 按键 6 响应 洗手 function pushbutton6_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.text1,String);beef洗手 6 if(strcmp(textString,0.)=1)beef洗手 else 洗
18、手 textString =strcat(textString,6);beef洗手 set(handles.text1,String,textString)洗手 end 洗手 jj=0;beef洗手 洗手 洗手 洗手 % - 按键 7 响应 洗手 function pushbutton7_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)beef洗手 else 洗手 textString =st
19、rcat(textString,7);beef洗手 set(handles.text1,String,textString)洗手 end 洗手 jj=0;beef洗手 洗手 洗手 % - 按键 8 响应 洗手 function pushbutton8_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)beef洗手 else 洗手 textString =strcat(textString,8);
20、beef洗手 set(handles.text1,String,textString)洗手 end 洗手 jj=0;beef洗手 洗手 洗手 % - 按键 9 响应 洗手 function pushbutton9_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)beef洗手 else 洗手 textString =strcat(textString,9);beef洗手 7 set(handle
21、s.text1,String,textString)洗手 end 洗手 jj=0;beef洗手 洗手 洗手 % - 按键 0 响应 洗手 function pushbutton0_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)bef洗手 else 洗手 textString =strcat(textString,0);beef洗手 set(handles.text1,String,textS
22、tring)洗手 end 洗手 jj=0;beef洗手 洗手 洗手 % - 按键 1 响应 洗手 function pushbutton1_Callback(hObject, eventdata, handles)洗手 global jj 洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)beef洗手 else 洗手 textString =strcat(textString,1);beef洗手 set(handles.text1,String,textString)洗手 end 洗手 jj=
23、0;beef洗手 洗手 洗手 % - 按键 + 响应 洗手 function pushbuttonadd_Callback(hObject, eventdata, handles)洗手 textString = get(handles.text1,String);beef洗手 textString =strcat(textString,+);bef洗手 set(handles.text1,String,textString)洗手 洗手 洗手 % - 按键 - 响应 洗手 function pushbuttonsub_Callback(hObject, eventdata, handles)洗手
24、 textString = get(handles.text1,String);beef洗手 textString =strcat(textString,-);bef洗手 set(handles.text1,String,textString)洗手 洗手 洗手 8 % - 按 * 响应 洗手 function pushbuttonmul_Callback(hObject, eventdata, handles)洗手 % hObject handle to pushbuttonmul (see GCBO)洗手 % eventdata reserved - to be defined in a f
25、uture version of MATLAB 洗手 % handles structure with handles and user data (see GUIDATA)洗手 textString = get(handles.text1,String);beef洗手 textString =strcat(textString,*);beef洗手 set(handles.text1,String,textString)洗手 洗手 洗手 % - 按键 / 响应 洗手 function pushbuttonchu_Callback(hObject, eventdata, handles)洗手 t
26、extString = get(handles.text1,String);beef洗手 textString =strcat(textString,/);bef洗手 set(handles.text1,String,textString)洗手 洗手 洗手 % - 按键 = 响应 洗手 function pushbuttonequal_Callback(hObject, eventdata, handles)洗手 textString = get(handles.text1,String);beef洗手 % if(strcmp(textString,0.)=1)洗手 % set(handles
27、.text1,String,0.) ;beef洗手 % else 洗手 % pushbutton20 b c = strread(textString, %f %c %f);bef洗手 % clear ans;beef洗手 % 洗手 % switch b 洗手 % case *洗手 % ans=pushbutton20*c;beef洗手 % case /洗手 % if (c=0)洗手 % ans=Error Divided by zero;beef洗手 % else 洗手 % ans=pushbutton20/c;beef洗手 % end 洗手 % case -洗手 % ans=pushbut
28、ton20-c;bef洗手 % case +洗手 % ans=pushbutton20+c;beef洗手 % 洗手 % end 洗手 %这是系统自带的一个回调函数 , 吃饭 回调函数是 已经 编写 好的 , 吃饭 提供给系统调用的函数 洗手 关于 eval 函数的理解就是 EVAL 函数相当于将函数中的字符串 , 吃饭 放到命令行中执行 。 洗手 写 eval 的字符串的时候注意单引号的表达就 OK 了 洗手 9 textString = get(handles.text1,String);beef洗手 ans =eval(textString);beef洗手 set(handles.text
29、1,String,ans)洗手 洗手 洗手 % - 按键 ( 响应 洗 手 function pushbutton18_Callback(hObject, eventdata, handles)洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)洗手 set(handles.text1,String,() ;bef洗手 else 洗手 textString =strcat(textString,();bef洗手 set(handles.text1,String,textString)洗手 end
30、 洗手 洗手 洗手 % - 按键 ) 响应 洗手 function pushbutton19_Callback(hObject, eventdata, handles)洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)洗手 set(handles.text1,String,) ;bef洗手 else 洗手 textString =strcat(textString,);bef洗手 set(handles.text1,String,textString)洗手 end 洗手 洗手 % - 按键 s
31、in 响应 洗手 function pushbuttonsin_Callback(hObject, eventdata, handles)洗手 textString = get(handles.text1,String);beef洗手 %strcmp(textString,0.)洗手 if(strcmp(textString,0.)=1)洗手 set(handles.text1,String,0.) ;bef洗手 else 洗手 a = strread(textString, %f);bef洗手 a=sin(a);beef洗手 set(handles.text1,String,a)洗手 end
32、 洗手 洗手 洗手 % - 按键 cos 响应 洗手 function pushbuttoncos_Callback(hObject, eventdata, handles)洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)洗手 set(handles.text1,String,0.) ;bef洗手 10 else 洗手 a = strread(textString, %f);bef洗手 a=cos(a);beef洗手 set(handles.text1,String,a)洗手 end 洗手
33、洗手 洗手 % - Executes on button press in pushbutton22.洗手 textString = get(handles.text1,String);beef洗手 %strcmp(textString,0.)洗手 if(strcmp(textString,0.)=1)洗手 set(handles.text1,String,0.) ;bef洗手 else 洗手 a = strread(textString, %f);bef洗手 a=0-a;beef洗手 set(handles.text1,String,a)洗手 end 洗手 洗 手 洗手 % - 按键 cle
34、ar 响应 洗手 function pushbuttoncl_Callback(hObject, eventdata, handles)洗手 set(handles.text1,String,0.) ;bef洗手 洗手 % - 按键 x2 响应 洗手 function pushbuttonchengfang_Callback(hObject, eventdata, handles)洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)洗手 set(handles.text1,String,0.)
35、;bef洗手 else 洗手 a = strread(textString, %f);bef洗手 a=a*a;beef洗手 set(handles.text1,String,a)洗手 end 洗手 洗手 洗手 % - 按键 sqrt 响应 洗手 function pushbuttonsqrt_Callback(hObject, eventdata, handles)洗手 textString = get(handles.text1,String);beef洗手 if(strcmp(textString,0.)=1)洗手 set(handles.text1,String,0.) ;bef洗手 else 洗手 a = strread(textString, %f);bef洗手 a=sqrt(a);beef洗手 set(handles.text1,String,a)洗手