matlab課程設(shè)計含源代碼(總29頁_第1頁
matlab課程設(shè)計含源代碼(總29頁_第2頁
matlab課程設(shè)計含源代碼(總29頁_第3頁
matlab課程設(shè)計含源代碼(總29頁_第4頁
matlab課程設(shè)計含源代碼(總29頁_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、一、 課程設(shè)計的意義通常在開發(fā)一個實際的應用程序時都會盡量做到界面友好,最常用的方法就是使用圖形界面,而Matlab是一門面向?qū)ο蟮恼Z言。提供圖形用戶界面的應用程序能夠使用的學習和使用更為方便容易。用戶不需要知道應用程序究竟是怎樣執(zhí)行各種命令的,而只需要了解可見界面組件的使用方法;用戶也不需要知道命令是怎樣執(zhí)行的,只要通過與界面交互就可以是指定的行為得以正確執(zhí)行,這比用在DOS環(huán)境下運行的程序交互性友好。在Matlab中,圖形用戶界面是一種包含多種對象的圖形窗口。用戶必須對每一種對象進行界面布局和編程,從而使用戶激活GUI每個對象時都能夠執(zhí)行相應的行為。另外,用戶必須保存和發(fā)布所創(chuàng)建的GUI,

2、使得GUI能夠真正地得到應用。Matlab為用戶開發(fā)圖形界面提供了一個方便高效的集成開發(fā)環(huán)境:Matlab圖形用戶界面開發(fā)環(huán)境GUIDE。上述所有工作都能夠使用GUIDE方便地實現(xiàn),GUIDE主要是一個界面設(shè)計工具集,Matlab將所有GUIDE支持的用戶控件都集成在這個環(huán)境中并提供界面外觀、屬性和行為響應方式的設(shè)置方法。GUIDE將用戶保存設(shè)計好的GUIDE界面保存在一個Fig資源文件中,同時還能夠生成包含GUI初始化和組件界面布局控制的M文件。這個M文件為實現(xiàn)回調(diào)函數(shù)提供了一個參考框架。這次不到一周課程設(shè)計使我對Matlab有了更深刻的認識,尤其是編程方面,掌握了一些編程思維,這對我們以后

3、再學習其它語言是有很大的益處的,掌握一種編程思維方式比多學幾門語言都有用。2、 課程設(shè)計的要求1.用GUI設(shè)計一個計算器要求至少完成加、減、乘、除功能; 擴充:矩陣運算(加、減、點乘,點除,乘,除,乘方等)2.設(shè)計一個繪圖界面要求能選擇繪制二維曲線,三維曲線,三維網(wǎng)格,三維曲面,柱狀圖,餅圖等功能。要求界面要整齊劃一,富有美感。需求分析和總體設(shè)計1、 任務描述1.課程設(shè)計目標 用GUIDE編寫一個簡易計算器和一個能自動畫圖的程序。2.功能描述(1).計算器能實現(xiàn)的功能 加、減、乘、除、乘方、開方; 可以后退、清零; 可以更換背景顏色、查看幫助等操作。(2).畫圖程序能實現(xiàn)的功能 可以畫出二維曲

4、線、三維曲線、三維網(wǎng)格、三維曲面、柱狀圖、餅圖; 有簡單菜單(就包括一項:文件)。2、 任務設(shè)計 1.計算器(1).運行Matlab主程序;(2).新建Gui文件命名為“wodejisuanqi.fig” ;(3).在出現(xiàn)的界面創(chuàng)建需要的文本框(tag為wenben),按鈕:0、1、2、3、4、5、6、7、8、9、CE(清零)、backplace(后退)、+、- 、 *、 、 . ,菜單:(文件,關(guān)閉);背景色(淺紫色,淺綠色,粉紅色,默認色);幫助(關(guān)于)。 (4).編寫M文件。2.畫圖(1).運行Matlab主程序;(2).新建Gui文件并命名為“huatu.fig”;(3).再出現(xiàn)的界面

5、創(chuàng)建需要的坐標系(tag為zuobiaoxi),按鈕:二維曲線、三位曲線、三維網(wǎng)格、三維曲面、柱狀圖、餅狀圖;(4).將它們的tag都設(shè)為它們的漢語拼音;(5).編寫M文件。第3章 編碼1、 代碼編寫步驟1、 計算器(1) .主函數(shù) 在主函數(shù)fanction wodejisuanqi-OpeningFcn中編寫主函數(shù)代碼。先申請一個全局變量s ,用于判斷文本框里的字符串是不是有:+、- 、 *、,如果有的話,就把s置為1,否則,置為0。再獲得文本框中字符串的句柄,并賦給變量h。申請全局變量p,為了判斷響應等號時文本框里的運算符號,其中令p=是沒有實際意義的,只是為了判斷運算符不是加減乘除中的任

6、一個。代碼如下:global s ;h=get(handles.wenben,string);switch(h) case+,-,*, s=1; otherwise s=0;endglobal p;p=;(2) .數(shù)字函數(shù)在這個函數(shù)里主要是判斷文本框里是不是有加減乘除符號,如果有的話,就把文本框中的字符串設(shè)置為數(shù)字,否則,再判斷是不是0,是的話,就把文本框中的值置為數(shù)字,不是的話,就把數(shù)字連接到文本框中的字符串上。代碼如下(以0為例):global s;hh=handles.wenben; %把文本框的句柄賦給hhif(s=1) set(hh,string,0); s=0; %把s再次置為0,

7、為了下次判斷不出錯elseif(s=0) h=get(hh,string); switch(h) %在判斷h是否為0 case 0; set(hh,string,0); otherwise t=strcat(h,0); %把0連接到原有的字符后面 set(hh,string,t); endend(3) .小數(shù)點函數(shù) 判斷原來文本框里有幾個小數(shù)點,如果有的話,就保持不變,否則,加上小數(shù)點。判斷方法是用strfind函數(shù),測試其返回的矩陣大小。代碼如下: hh=handles.wenben; a=get(hh,string); set(hh,string,.); b=get(hh,string);

8、 c=strcat(a,.); p,q=size(m); %測試矩陣m if q=1 set(hh,string,a); else set(hh,string,c);end(4) 運算符號(以加號為例)函數(shù)申請全局變量p,s,v1,p用于響應等號時判斷,s用于判斷按加好時文本框里是不是有加減乘除,如果沒有就把文本框里的字符串轉(zhuǎn)換成數(shù)字,并賦給全局變量v1。代碼如下:hh=handles.wenben;p=+;global s;if(s=0) global v1; %按加號之前的數(shù)值 v1=str2num(get(hh,string); s=1;end(5) .根號和冪(以根號為例)函數(shù)申請全局

9、變量s,如果s=0,即文本框里沒有加減乘除符號,就把文本框里的字符串轉(zhuǎn)換成數(shù)字并開方。代碼如下:hh=handles.wenben;global s;if (s=0)r=sqrt(str2num(get(hh,String);set(hh,String,num2str(r);end(6).等號函數(shù) 這是整個程序中最重要的一個函數(shù),申請全局變量p,判斷p的值,并作出相應的處理。代碼如下:hh=handles.wenben;global v1;global v2;global v3;global v4;global v5;global v6;v5=str2num(get(hh,string);gl

10、obal p;switch(p) case+; r=v1+v5 set(hh,string,num2str(r); v1=0; p= ; case-; r=v2-v5; set(hh,string,num2str(r); v2=0; p= ; case*; r=v3*v5; set(hh,string,num2str(r); v3=0; p= ; case/; r=v4/v5; set(hh,string,num2str(r); v4=0; p= ; case; r=v6v5; set(hh,string,num2str(r); v5=0; p= ; otherwise b=(get(hh,s

11、tring) set(hh,string,b) end(7) 菜單函數(shù)(以顏色中的粉紅色為例)設(shè)置面板(tag為pane)的background屬性。代碼如下:set(handles.pane,backgroundcolor,0.992 0.51 0.627);set(handles.biaoti,backgroundcolor,0.992 0.51 0.627);2、 畫圖程序 (1).畫圖按鈕函數(shù)(以二維曲線函數(shù)為例)代碼如下:x=0:0.1:2*pi;y=0:0.1:2*pi;y=sin(x);plot(handles.zuobiao,x,y)(2) . 菜單函數(shù) 文件中的關(guān)閉函數(shù),代碼

12、如下:function guanbi_Callback(hObject, eventdata, handles)close;2、 遇到問題及解決方案 1 、在計算器方面,剛做完時漏洞比較多,最嚴重的是小數(shù)點可以連續(xù)輸入,很不方便。解決方法是:用strfind函數(shù)查看文本框里有幾個小數(shù)點,如果已經(jīng)有一個了,再按小數(shù)點就保持不變。另外一個漏洞是按過運算符號后一個數(shù)不等于一個數(shù),比如:輸入1,按等號,會出來一個3,經(jīng)過長時間分析得知,這是由于在按運算符號時,系統(tǒng)記錄了文本框里的數(shù)但沒有清空,才會出現(xiàn)這種問題。解決方法是再申請一個不同于加減乘除的另一個符號,并將按過運算符后記錄的數(shù)值置0,問題解決,很

13、高興。 2 、在畫圖程序中基本上沒什么難度,就是有的圖形不能在規(guī)定的坐標系中出現(xiàn)。解決方法,先獲得坐標系的句柄,在畫圖,問題解決。三 程序運行結(jié)果1 、計算器程序2、 畫圖程序(1) .初始界面 (2).按二維曲線按鈕后的界面(3) 按三維曲線按鈕后的界面(4) 按三維曲面后的界面(5) .按三維網(wǎng)格按鈕后的界面(6) .按柱形圖按鈕后的界面(7).按餅圖按鈕后的界面第4章 感想認識經(jīng)過不到一周的matlab課程設(shè)計使我感覺到,學習一學期的知識還是有些不連貫,造成編程時,沒有思路,有不會的只好去網(wǎng)上查詢,有時候會因為某個帖子是我茅塞頓開,從而有了思路,完成了課程設(shè)計的任務。Matlab Gui

14、是很有用的東西,比我們學的C語言界面好看,又有實用價值。以后我還要學習matlab,為了迎接考試也是為了自己以后能夠用到。附錄(源代碼)1、 計算器function varargout = wodejisuanqi(varargin)gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, wodejisuanqi_OpeningFcn, . gui_OutputFcn, wodejisuanqi_OutputFcn, . gui_Lay

15、outFcn, , . 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 wodejisuanqi is made v

16、isible.function wodejisuanqi_OpeningFcn(hObject, eventdata, handles, varargin)global s;h=get(handles.wenben,string);switch(h) case+,-,*, s=1; otherwise s=0;endglobal p;p=;handles.output = hObject;guidata(hObject, handles);% function varargout = wodejisuanqi_OutputFcn(hObject, eventdata, handles) var

17、argout1 = handles.output; % - Outputs from this function are returned to the command line.function wenben_Callback(hObject, eventdata, handles)% - Executes during object creation, after setting all properties.function wenben_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,Backgro

18、undColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end% - Executes on button press in point.function point_Callback(hObject, eventdata, handles)hh=handles.wenben;a=get(hh,string);set(hh,string,.);b=get(hh,string);c=strcat(a,b);m=strfind(a,.);p,q=size(m);if q=1 set(h

19、h,string,a);else set(hh,string,c);end% - Executes on button press in zero.function zero_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) set(hh,string,0); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,0); otherwise t=strcat(h,0); set(hh,string,t); endend% -

20、 Executes on button press in one.function one_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) set(hh,string,1); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,1); otherwise t=strcat(h,1); set(hh,string,t); endend% - Executes on button press in two.function

21、two_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) set(hh,string,2); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,2); otherwise t=strcat(h,2); set(hh,string,t); endend% - Executes on button press in three.function three_Callback(hObject, eventdata, handl

22、es)global s;hh=handles.wenben;if(s=1) set(hh,string,3); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,3); otherwise t=strcat(h,3); set(hh,string,t); endend% - Executes on button press in four.function four_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) se

23、t(hh,string,4); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,4); otherwise t=strcat(h,4); set(hh,string,t); endend% - Executes on button press in five.function five_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) set(hh,string,5); s=0;elseif(s=0) h=get(hh

24、,string); switch(h) case 0; set(hh,string,5); otherwise t=strcat(h,5); set(hh,string,t); endend% - Executes on button press in six.function six_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) set(hh,string,6); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,

25、6); otherwise t=strcat(h,6); set(hh,string,t); endend% - Executes on button press in seven.function seven_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) set(hh,string,7); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,7); otherwise t=strcat(h,7); set(hh,st

26、ring,t); endend% - Executes on button press in eight.function eight_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) set(hh,string,8); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,8); otherwise t=strcat(h,8); set(hh,string,t); endend% - Executes on button

27、press in nine.function nine_Callback(hObject, eventdata, handles)global s;hh=handles.wenben;if(s=1) set(hh,string,9); s=0;elseif(s=0) h=get(hh,string); switch(h) case 0; set(hh,string,9); otherwise t=strcat(h,9); set(hh,string,t); endend% -function wenjian_Callback(hObject, eventdata, handles)% -fun

28、ction guanbi_Callback(hObject, eventdata, handles)close;% -function qianlvse_Callback(hObject, eventdata, handles)set(handles.pane,backgroundcolor,0.6 0.902 0.608);set(handles.biaoti,backgroundcolor,0.6 0.902 0.608);% -function beijingse_Callback(hObject, eventdata, handles)% -function moren_Callbac

29、k(hObject, eventdata, handles)set(handles.pane,backgroundcolor,0.502, 0.502 1.0);set(handles.biaoti,backgroundcolor,0.502, 0.502 1.0);% -function qianzise_Callback(hObject, eventdata, handles)set(handles.pane,backgroundcolor,0.855 0.561 0.937);set(handles.biaoti,backgroundcolor,0.855 0.561 0.937);%

30、-function fenhongse_Callback(hObject, eventdata, handles)set(handles.pane,backgroundcolor,0.992 0.51 0.627);set(handles.biaoti,backgroundcolor,0.992 0.51 0.627);% -function bangzhu_Callback(hObject, eventdata, handles)% -function guanyu_Callback(hObject, eventdata, handles)msgbox( ,warn);global p;p=

31、;% - Executes on button press in jia.function jia_Callback(hObject, eventdata, handles)global p;hh=handles.wenben;p=+;global s;if(s=0) global v1; v1=str2num(get(hh,string); s=1;end% - Executes on button press in jian.function jian_Callback(hObject, eventdata, handles)global p;hh=handles.wenben;p=-;g

32、lobal s;if(s=0) global v2; v2=str2num(get(hh,string); s=1;end% - Executes on button press in cheng.function cheng_Callback(hObject, eventdata, handles)global p;hh=handles.wenben;p=*;global s;if(s=0) global v3; v3=str2num(get(hh,string); s=1;end% - Executes on button press in chu.function chu_Callbac

33、k(hObject, eventdata, handles)global p;hh=handles.wenben;p=/;global s;if(s=0) global v4; v4=str2num(get(hh,string); s=1;end% - Executes on button press in gen.function gen_Callback(hObject, eventdata, handles)hh=handles.wenben;global s;if (s=0)r=sqrt(str2num(get(hh,String);set(hh,String,num2str(r);e

34、nd% - Executes on button press in mi.function mi_Callback(hObject, eventdata, handles)global p;hh=handles.wenben;p=;global s;if(s=0) global v6; v6=str2num(get(hh,string); s=1;end% - Executes on button press in deng.function deng_Callback(hObject, eventdata, handles)hh=handles.wenben;global v1;global

35、 v2;global v3;global v4;global v5;global v6;v5=str2num(get(hh,string);global p;switch(p) case+; r=v1+v5 set(hh,string,num2str(r); v1=0; p= ; case-; r=v2-v5; set(hh,string,num2str(r); v2=0; p= ; case*; r=v3*v5; set(hh,string,num2str(r); v3=0; p= ; case/; r=v4/v5; set(hh,string,num2str(r); v4=0; p= ;

36、case; r=v6v5; set(hh,string,num2str(r); v5=0; p= ; otherwise b=(get(hh,string) set(hh,string,b) end% - Executes on button press in ce.function ce_Callback(hObject, eventdata, handles)hh=handles.wenben;set(hh,string,0);% - Executes on button press in pushbutton20.function pushbutton20_Callback(hObjec

37、t, eventdata, handles)% - Executes on button press in pushbutton22.function pushbutton22_Callback(hObject, eventdata, handles)% - Executes on button press in backplace.function backplace_Callback(hObject, eventdata, handles)hh=get(handles.wenben,String);t=length(hh);set(handles.wenben,String,hh(1:t-

38、1); % - Executes during object creation, after setting all properties.function pane_CreateFcn(hObject, eventdata, handles)2、 畫圖function varargout = huatu(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_

39、OpeningFcn, huatu_OpeningFcn, . gui_OutputFcn, huatu_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 initial

40、ization code - DO NOT EDIT% - Executes just before huatu is made visible.function huatu_OpeningFcn(hObject, eventdata, handles, varargin)% Choose default command line output for huatuhandles.output = hObject;% Update handles structureguidata(hObject, handles);% - Outputs from this function are returned to the

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論