《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第8章 基于MATLAB App Designer 的學(xué)生成績(jī)管理_第1頁
《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第8章 基于MATLAB App Designer 的學(xué)生成績(jī)管理_第2頁
《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第8章 基于MATLAB App Designer 的學(xué)生成績(jī)管理_第3頁
《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第8章 基于MATLAB App Designer 的學(xué)生成績(jī)管理_第4頁
《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第8章 基于MATLAB App Designer 的學(xué)生成績(jī)管理_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章基于MATLABAppDesigner的學(xué)生成績(jī)管理本章要點(diǎn)本章主要基于MATLABAppDesigner的學(xué)生成績(jī)管理界面的設(shè)計(jì)與實(shí)現(xiàn),介紹表組件與Excel文件的數(shù)據(jù)交換、表組件與其他組件的數(shù)據(jù)交換及多窗口App間的交互。

本章要點(diǎn):⑴表組件與Excel文件數(shù)據(jù)交換。⑵表組件與其他組件數(shù)據(jù)交換。⑶多窗口App有無數(shù)據(jù)的交互方法。

學(xué)習(xí)目標(biāo):⑴掌握表組件與Excel文件數(shù)據(jù)交換的基本函數(shù)。⑵掌握表組件與其他組件數(shù)據(jù)交換的基本方法。⑶掌握多窗口App在無數(shù)據(jù)和有數(shù)據(jù)傳遞下的交互方法。8.1MATLABAppDesigner表組件與Excel文件數(shù)據(jù)交換MATLABAppDesigner表組件與Excel文件數(shù)據(jù)交換,主要包括:將Excel數(shù)據(jù)導(dǎo)入表組件、刪除表組件數(shù)據(jù)、增加表組件數(shù)據(jù)和保存表組件數(shù)據(jù)到Excel。其中,前面三種操作參考第五章常用組件的表組件部分內(nèi)容。保存表組件數(shù)據(jù)到Excel文件中,需要用到xlswrite函數(shù),其調(diào)用方法為:xlswrite(filename,A)A為矩陣,filename為表格地址。表示將矩陣A寫入filename地址下表格中的第一個(gè)工作表,從單元格A1開始寫入。xlswrite(filename,A,sheet)其中sheet指定工作表,即將數(shù)據(jù)寫入指定的工作表中。xlswrite(filename,A,xlRange)xlRange為矩形區(qū)域,即將數(shù)據(jù)寫入工作簿的第一個(gè)工作表中的指定矩形區(qū)域內(nèi)。xlswrite(filename,A,sheet,xlRange)將數(shù)據(jù)寫入指定的工作表和指定區(qū)域內(nèi)。例如,輸入程序代碼如下:filename='test.xlsx';A={'Number','Score';1,60;2,100;3,80};sheet=2;xlRange='B5';xlswrite(filename,A,sheet,xlRange);8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)【例8-1】將Excel中的數(shù)據(jù)導(dǎo)入表組件,并選擇繪制銷售量和銷售額的折線圖、條形圖或餅狀圖。第一步:設(shè)置布局及屬性。添加1個(gè)表、2個(gè)坐標(biāo)區(qū)、2個(gè)單選按鈕組和2個(gè)按鈕組件,如圖8-1所示。圖8-1

界面布局設(shè)計(jì)8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)第二步:右擊【導(dǎo)入數(shù)據(jù)】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globaldata[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'導(dǎo)入數(shù)據(jù)');excelfull=strcat(excelpath,excelfile);%獲取所選文件的地址data=readtable(excelfull);app.UITable.Data=data;VariableDescriptions=data.Properties.VariableDescriptions;%給ColumnName復(fù)制app.UITable.ColumnName=data.Properties.VariableNames;8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)右擊【繪圖】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至Button_2Pushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globaldataselButton=app.ButtonGroup.SelectedObject;selButton_2=app.ButtonGroup_2.SelectedObject;switchselButton.Textcase'折線圖'app.UIAxes_2.Visible='off';app.UIAxes.Visible='on';delete(allchild(app.UIAxes_2));title(app.UIAxes_2,'');if(strcmp(selButton_2.Text,'銷售量'))%當(dāng)選擇銷售量時(shí)x1=table2array(data(:,1:1));y1=table2array(data(:,3:3));%提取表第1列和第3列title(app.UIAxes,'上半年銷售量折線圖');%當(dāng)選擇銷售額時(shí)elsex1=table2array(data(:,1:1));y1=table2array(data(:,4:4));%提取表第1列和第4列title(app.UIAxes,'上半年銷售額折線圖');end

8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)plot(app.UIAxes,x1,y1,'linewidth',1.5,'Marker','o','color','b');case'條形圖'app.UIAxes_2.Visible='off';app.UIAxes.Visible='on';delete(allchild(app.UIAxes_2));title(app.UIAxes_2,'');if(strcmp(selButton_2.Text,'銷售量'))x2=table2array(data(:,1:1));y2=table2array(data(:,3:3));title(app.UIAxes,'上半年銷售量條形圖');elsex2=table2array(data(:,1:1));y2=table2array(data(:,4:4));title(app.UIAxes,'上半年銷售額條形圖');endbar(app.UIAxes,x2,y2,'histc');case'餅狀圖'app.UIAxes_2.Visible='on';app.UIAxes.Visible='off';delete(allchild(app.UIAxes));if(strcmp(selButton_2.Text,'銷售量'))

8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)y3=table2array(data(:,3:3));title(app.UIAxes_2,'上半年銷售量餅狀圖');elsey3=table2array(data(:,4:4));title(app.UIAxes_2,'上半年銷售額餅狀圖');endlabels={'1月份','2月份','3月份','4月份','5月份','6月份'};%設(shè)置餅狀圖區(qū)域標(biāo)簽pie(app.UIAxes_2,y3,labels);end8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)運(yùn)行程序,單擊【導(dǎo)入數(shù)據(jù)】按鈕,將Excel文件中的數(shù)據(jù)導(dǎo)入到表組件中,選擇銷售量,并選擇折線圖,單擊【繪圖】按鈕,運(yùn)行結(jié)果如圖8-2所示。選擇銷售額,并選擇餅狀圖,單擊【繪圖】按鈕,運(yùn)行結(jié)果如圖8-3所示。

圖8-2利用表組件數(shù)據(jù)繪制折線圖

圖8-3

利用表組件數(shù)據(jù)繪制餅狀圖8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)【例8-2】通過輸入分?jǐn)?shù)上下限,來調(diào)取表中在此分?jǐn)?shù)線范圍內(nèi)的人員名單,并將名單顯示在文本區(qū)域組件上。

第一步:設(shè)置布局及屬性。添加1個(gè)表、2個(gè)編輯字段(數(shù)值)、1個(gè)面板、2個(gè)按鈕和1個(gè)文本區(qū)域組件。

第二步:右擊【導(dǎo)入數(shù)據(jù)】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至Button_2Pushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globaldata[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'導(dǎo)入數(shù)據(jù)');excelfull=strcat(excelpath,excelfile);%獲取所選文件的地址data=readtable(excelfull);app.UITable.Data=data;VariableDescriptions=data.Properties.VariableDescriptions;%給ColumnName復(fù)制app.UITable.ColumnName=data.Properties.VariableNames;8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)右擊【確定】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globaldatamax=app.EditField.Value;min=app.EditField_2.Value;[m,n]=size(data);%m為行數(shù),n為列數(shù)app.Label.Text=strcat(num2str(max),'分到',num2str(min),'分','學(xué)生姓名及成績(jī)?yōu)椋?);b='';fori=1:1:m

if((table2array(data(i,3))>min)&&(table2array(data(i,3))<max))

%查詢此分?jǐn)?shù)線范圍內(nèi)的分?jǐn)?shù)name=table2array(data(i,2));%調(diào)取此分?jǐn)?shù)線的人員名單score=num2str(table2array(data(i,3)));a=strcat(name,'(',score,')');b=strcat(b,',',a);%將所有人員名單拼接app.TextArea.Value=b;endend8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.1其他組件讀取表組件數(shù)據(jù)

運(yùn)行程序,單擊【成績(jī)導(dǎo)入】按鈕,將Excel文件中的數(shù)據(jù)導(dǎo)入到表組件中,如圖8-4所示。輸入分?jǐn)?shù)線為:80分到95分,運(yùn)行結(jié)果如圖8-5所示。輸入分?jǐn)?shù)線為:60分到85分,運(yùn)行結(jié)果如圖8-6所示。圖8-4

成績(jī)導(dǎo)入表組件結(jié)果圖8-5成績(jī)?cè)?0分-95分名單顯示結(jié)果圖8-6成績(jī)?cè)?0分-85分名單顯示結(jié)果8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.2利用其他組件編輯表組件數(shù)據(jù)

【例8-3】實(shí)現(xiàn)將Excel文件中的內(nèi)容導(dǎo)入到表組件,并且可通過按鈕組件將編輯字段組件的內(nèi)容,寫入到表組件中。

第一步:設(shè)置布局及屬性。添加1個(gè)表、2個(gè)編輯字段(文本)、2個(gè)編輯字段(數(shù)值)、1個(gè)面板和2個(gè)按鈕組件。

第二步:右擊【信息導(dǎo)入】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globalnew2[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'導(dǎo)入數(shù)據(jù)');excelfull=strcat(excelpath,excelfile);%獲取所選文件的地址%讀取Excel文件中的數(shù)值數(shù)據(jù)、文本數(shù)據(jù)和合并數(shù)據(jù)[num,txt,new2]=xlsread(excelfull);[m,n]=size(new2);%計(jì)算合并數(shù)據(jù)的行數(shù)和列數(shù)fori=2:1:mforj=1:1:napp.UITable.Data{i-1,j}=num2str(cell2mat(new2(i,j)));endendapp.t=app.UITable.Data;8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.2利用其他組件編輯表組件數(shù)據(jù)

右擊【錄入】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至Button_2Pushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:Name=app.EditField_2.Value;xh=app.EditField_3.Value;bj=app.EditField.Value;cj=app.EditField_4.Value;new_data={Namexhbjcj};app.UITable.Data=[app.UITable.Data;new_data];%拼接新錄入的數(shù)據(jù)和表組件數(shù)據(jù)

運(yùn)行程序,如圖8-7所示。單擊【信息導(dǎo)入】按鈕,將Excel文件中的數(shù)據(jù)導(dǎo)入到表組件中,運(yùn)行結(jié)果如圖8-8所示。輸入產(chǎn)品名稱、型號(hào)、數(shù)量和單價(jià),單擊【錄入】按鈕,運(yùn)行結(jié)果如圖8-9所示。8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.2利用其他組件編輯表組件數(shù)據(jù)圖8-7運(yùn)行程序結(jié)果界面圖8-8

信息導(dǎo)入后效果圖8-9

錄入新數(shù)據(jù)后效果8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.2利用其他組件編輯表組件數(shù)據(jù)【例8-4】通過輸入不同等級(jí)的分?jǐn)?shù)線,將表組件中所有學(xué)生的成績(jī)劃分等級(jí),并將成績(jī)等級(jí)寫入到表的最后一列。第一步:設(shè)置布局及屬性。添加1個(gè)表、1個(gè)標(biāo)簽、1個(gè)圖像、10個(gè)編輯字段(數(shù)值)、1個(gè)面板和2個(gè)按鈕組件。第二步:右擊【成績(jī)導(dǎo)入】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,程序命令如例8-3同理。右擊【確定】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globaldatayx_max=app.yx_max_EditField.Value;yx_min=app.yx_min_EditField.Value;lh_min=app.lh_min_EditField.Value;zd_min=app.zd_min_EditField.Value;jg_min=app.jg_min_EditField.Value;[m,n]=size(data);%m為行數(shù),n為列數(shù)fori=1:1:mif((table2array(data(i,3))>=yx_min)&&(table2array(data(i,3))<=yx_max))app.UITable.Data{i,4}={'優(yōu)秀'};elseif((table2array(data(i,3))>=lh_min)&&(table2array(data(i,3))<yx_min))app.UITable.Data{i,4}={'良好'};

8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.2利用其他組件編輯表組件數(shù)據(jù)elseif((table2array(data(i,3))>=zd_min)&&(table2array(data(i,3))<lh_min))app.UITable.Data{i,4}={'中等'};elseif((table2array(data(i,3))>=jg_min)&&(table2array(data(i,3))<zd_min))app.UITable.Data{i,4}={'合格'};elseapp.UITable.Data{i,4}={'不合格'};endend8.2MATLABAppDesigner表組件與其他組件數(shù)據(jù)交換8.2.2利用其他組件編輯表組件數(shù)據(jù)運(yùn)行程序,單擊【成績(jī)導(dǎo)入】按鈕,將Excel文件中的數(shù)據(jù)導(dǎo)入到表組件中,運(yùn)行結(jié)果如圖8-10所示。輸入不同等級(jí)的成績(jī)范圍,單擊【確定】按鈕,即可在表組件的最后一列顯示等級(jí)評(píng)定結(jié)果,如圖8-11所示。圖8-10

成績(jī)導(dǎo)入效果圖8-11

成績(jī)等級(jí)評(píng)定結(jié)果顯示8.3MATLABAppDesigner多窗口App間的交互8.3.1不改變主App窗口

不改變主App窗口的多窗口交互中,其功能通常只有打開一個(gè)新的窗口。應(yīng)用場(chǎng)景比如登錄界面,點(diǎn)擊登錄進(jìn)入另一個(gè)窗口。

【例8-5】主App界面有登錄按鈕組件,子App界面有退出按鈕組件。第一步:設(shè)置布局及屬性。主App界面添加1個(gè)標(biāo)簽、1個(gè)圖像、2個(gè)編輯字段(文本)和1個(gè)按鈕組件。如圖8-12所示。子App界面添加1個(gè)標(biāo)簽、2個(gè)圖像、3個(gè)編輯字段(文本)和1個(gè)按鈕組件。如圖8-13所示。

圖8-12

主App界面布局圖8-13

子App界面布局8.3MATLABAppDesigner多窗口App間的交互8.3.1不改變主App窗口

第二步:在主App界面,右擊【登錄】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:zh=app.EditField.Value;ma=app.EditField_2.Value;if(strcmp(zh,'admin')&&strcmp(ma,'admin123'))rune8_5_zi_app.mlappdelete(app.UIFigure)elsemsgbox('請(qǐng)重新輸入賬號(hào)和密碼','賬號(hào)和密碼錯(cuò)誤');end

在子App界面,右擊【退出】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:rune8_5_zhu_app.mlappdelete(app.UIFigure)8.3MATLABAppDesigner多窗口App間的交互8.3.1不改變主App窗口

運(yùn)行主App界面程序,輸入賬戶和密碼,如圖8-14所示。當(dāng)賬戶或密碼錯(cuò)誤時(shí),單擊【登錄】按鈕,彈出對(duì)話框,如圖8-15所示。圖8-14

主App界面運(yùn)行結(jié)果

圖8-15

錯(cuò)誤警告

圖8-16子App界面運(yùn)行效果

當(dāng)輸入賬號(hào)和密碼正確時(shí),單擊【登錄】按鈕,則跳轉(zhuǎn)到子App界面,如圖8-16所示。單擊子App界面的【退出】按鈕,即可關(guān)閉子App,跳轉(zhuǎn)到主App界面。8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

多窗口交互中,存在對(duì)主App進(jìn)行了某種改變,但App窗口之間無數(shù)據(jù)傳遞。例如,通過子App界面對(duì)主App界面的表組件執(zhí)行刪除某行或某列數(shù)據(jù)的操作。首先,介紹如何在同一界面下,實(shí)現(xiàn)刪除表組件的某行或某列數(shù)據(jù)的操作?!纠?-6】在同一界面下,實(shí)現(xiàn)刪除表組件的某行或某列數(shù)據(jù)操作。第一步:設(shè)置布局及屬性。添加1個(gè)表和2個(gè)按鈕。第二步:右擊表組件,選擇【回調(diào)】,選擇【轉(zhuǎn)至UITableCellSelection回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:indices=event.Indices;app.mouse_ind_hang=indices(1);app.mouse_ind_lie=indices(2);8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

其中,第一行代碼中的indices,即為單擊的數(shù)據(jù)的行列數(shù)。indices(1)即為獲取該矩陣的第一個(gè)數(shù)值,也就是所選數(shù)據(jù)的行數(shù)。indices(2)即為獲取該矩陣的第二個(gè)數(shù)值,也就是所選數(shù)據(jù)的列數(shù)。

其中,app.mouse_ind_hang和app.mouse_ind_lie需要在屬性中添加,即單擊【屬性】,選擇【私有屬性】,在光標(biāo)定位處,輸入程序命令如下:properties(Access=private)mouse_ind_hang;mouse_ind_lie;end

右擊【刪除行】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至hang_ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:app.UITable.Data(app.mouse_ind_hang,:)=[];%令表中該行數(shù)據(jù)為空

右擊【刪除列】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至lie_ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:app.UITable.Data(:,app.mouse_ind_lie)=[];

右擊【導(dǎo)入】按鈕,添加回調(diào)與例8-3同理。8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

運(yùn)行程序,單擊【導(dǎo)入】按鈕添加數(shù)據(jù),如圖8-17所示。選擇表組件中某數(shù)據(jù),單擊【刪除行】,運(yùn)行結(jié)果如圖8-18所示。選擇表組件中某數(shù)據(jù),單擊【刪除列】,運(yùn)行結(jié)果如圖8-19所示。圖8-17

數(shù)據(jù)導(dǎo)入

圖8-18

刪除行

圖8-19

刪除列8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

【例8-7】在不同界面下,實(shí)現(xiàn)添加和刪除表組件的某行或某列數(shù)據(jù)操作。第一步:設(shè)置布局及屬性,共由1個(gè)主界面和2個(gè)子界面組成。主界面添加1個(gè)表和2個(gè)按鈕;增加子界面添加1個(gè)標(biāo)簽和2個(gè)按鈕;刪除子界面添加1個(gè)單選按鈕組和2個(gè)按鈕。如圖8-20所示。(a)主界面布局

(b)增加子界面布局

(c)刪除子界面布局圖8-20多窗口交互界面布局8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

第二步:添加回調(diào)函數(shù)、私有屬性、公共函數(shù)和App輸入?yún)?shù)1.增加子界面1)添加私有屬性在【編輯器】菜單欄選擇【屬性】,選擇【私有屬性】,在光標(biāo)定位處,輸入程序命令如下:properties(Access=private)CallingApp%存儲(chǔ)主程序?qū)ο骵nd2)添加App輸入?yún)?shù)在【編輯器】菜單欄選擇【App輸入?yún)?shù)】,如圖0-148所示,彈出App輸入?yún)?shù)對(duì)話框,輸入mainapp,如圖0-149所示,單擊【確定】按鈕,在光標(biāo)定位處,編寫startupFcn函數(shù),輸入程序命令如下:functionstartupFcn(app,mainapp)app.CallingApp=mainapp;end8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

3)添加回調(diào)函數(shù)

右擊【確定】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:functionButtonPushed(app,event)updateData(app.CallingApp)%updateData函數(shù)在主界面添加delete(app)%關(guān)閉當(dāng)前Append圖8-21

App輸入?yún)?shù)選項(xiàng)

圖8-22

App輸入?yún)?shù)窗口8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

右擊【取消】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至Button_2Pushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:functionButton_2Pushed(app,event)delete(app)%關(guān)閉當(dāng)前Append2.刪除子界面1)添加私有屬性在【編輯器】菜單欄選擇【屬性】,選擇【私有屬性】,在光標(biāo)定位處,輸入程序命令如下:properties(Access=private)CallingApp%存儲(chǔ)主程序?qū)ο骵nd8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞2)添加App輸入?yún)?shù)在【編輯器】菜單欄選擇【App輸入?yún)?shù)】,彈出App輸入?yún)?shù)對(duì)話框,輸入mainapp,在光標(biāo)定位處,編寫startupFcn函數(shù),輸入程序命令如下:functionstartupFcn(app,mainapp)app.CallingApp=mainapp;end3)添加回調(diào)右擊【確定】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:functionButtonPushed(app,event)selectedButton=app.ButtonGroup.SelectedObject;switchselectedButton.Text%判斷用戶選擇刪除行還是刪除列case'刪除行'deleteData_hang(app.CallingApp)%deleteData_hang函數(shù)在主界面定義case'刪除列'deleteData_lie(app.CallingApp)%deleteData_列函數(shù)在主界面定義enddelete(app)end8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞右擊【取消】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至Button_4Pushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:functionButton_4Pushed(app,event)delete(app)end3.主界面1)添加公共屬性在【編輯器】菜單欄選擇【屬性】,選擇【公共屬性】,在光標(biāo)定位處,輸入程序命令如下:properties(Access=public)mouse_ind_hangmouse_ind_lietend8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞2)添加公共函數(shù)在【編輯器】菜單欄選擇【函數(shù)】,選擇【公共函數(shù)】,在光標(biāo)定位處,輸入添加數(shù)據(jù)函數(shù)updateData,程序命令如下:functionupdateData(app)%增加功能公共函數(shù)app.t=app.UITable.Data;nr={[],[],[],[]};%1行3列的空白數(shù)據(jù)app.UITable.Data=[app.t;nr];%將空白數(shù)據(jù)添加到表中end添加刪除行功能的deleteData_hang公共函數(shù),程序命令如下:functiondeleteData_hang(app)app.UITable.Data(app.mouse_ind_hang,:)=[];end添加刪除行功能的deleteData_hang公共函數(shù),程序命令如下:functiondeleteData_lie(app)app.UITable.Data(:,app.mouse_ind_lie)=[];end8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

3)添加回調(diào)函數(shù)

右擊表組件,選擇【回調(diào)】,選擇【轉(zhuǎn)至UITableCellSelection回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:indices=event.Indices;app.mouse_ind_hang=indices(1);app.mouse_ind_lie=indices(2);

右擊【增加】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:app2(app)%增加子界面名稱為app2.mlapp

右擊【刪除】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至Button_3Pushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:app3(app)%刪除子界面名稱為app3.mlapp8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

運(yùn)行主界面程序,單擊【增加】按鈕,彈出增加子界面,如圖8-23所示,單擊【確定】,即可在主界面增加一行,如圖8-24所示。圖8-23

增加子界面運(yùn)行效果

圖8-24

增加一行主界面效果8.3MATLABAppDesigner多窗口App間的交互8.3.2對(duì)主App進(jìn)行某種改變,無數(shù)據(jù)傳遞

選擇主界面任意一單元格,單擊【刪除】按鈕,彈出刪除子界面,選擇【刪除列】,單擊【確定】按鈕,如圖8-25所示,即可刪除主界面的一列,如圖8-26所示。刪除行操作同理。圖8-25

刪除子界面運(yùn)行效果

圖8-26

刪除一列主界面效果8.3MATLABAppDesigner多窗口App間的交互8.3.3對(duì)主App進(jìn)行某種改變,有數(shù)據(jù)傳遞

多窗口交互中,存在對(duì)主App進(jìn)行了某種改變,并且App窗口之間有數(shù)據(jù)傳遞。例如,通過子界面的字段編輯組件輸入數(shù)據(jù),將其保存到主界面的表組件中。

【例8-8】通過在子界面輸入學(xué)生姓名、學(xué)號(hào)、性別和成績(jī)信息,保存到主界面的表組件中。

第一步:設(shè)置布局及屬性,共由1個(gè)主界面和1個(gè)子界面組成。主界面添加1個(gè)表和1個(gè)按鈕;子界面添加3個(gè)編輯字段(文本)、1個(gè)編輯字段(數(shù)值)和1個(gè)按鈕。

第二步:添加回調(diào)函數(shù)、私有屬性、公共函數(shù)和App輸入?yún)?shù)

1.子界面

1)添加私有屬性

在【編輯器】菜單欄選擇【屬性】,選擇【私有屬性】,在光標(biāo)定位處,輸入程序命令如下:properties(Access=private)CallingApp%存儲(chǔ)主程序?qū)ο骵nd8.3MATLABAppDesigner多窗口App間的交互8.3.3對(duì)主App進(jìn)行某種改變,有數(shù)據(jù)傳遞

2)添加App輸入?yún)?shù)在【編輯器】菜單欄選擇【App輸入?yún)?shù)】,彈出App輸入?yún)?shù)對(duì)話框,輸入mainapp,number,name,sg,score,并在光標(biāo)定位處,編寫startupFcn函數(shù),輸入程序命令如下:functionstartupFcn(app,mainapp,number,name,sg,score)app.CallingApp=mainapp;app.EditField.Value=number;app.EditField_2.Value=name;app.EditField_3.Value=sg;app.EditField_4.Value=score;end8.3MATLABAppDesigner多窗口App間的交互8.3.3對(duì)主App進(jìn)行某種改變,有數(shù)據(jù)傳遞3)添加回調(diào)右擊【確定】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:functionButtonPushed(app,event)updateData(app.CallingApp,app.EditField.Value,...app.EditField_2.Value,app.EditField_3.Value,...app.EditField_4.Value)%updateData函數(shù)在主界面輸入enddelete(app)8.3MATLABAppDesigner多窗口App間的交互8.3.3對(duì)主App進(jìn)行某種改變,有數(shù)據(jù)傳遞2.主界面1)添加公共屬性在【編輯器】菜單欄選擇【屬性】,選擇【公共屬性】,在光標(biāo)定位處,輸入程序命令如下:properties(Access=public)numbervalue=''namevalue=''sgvalue=''scorevalue=0end8.3MATLABAppDesigner多窗口App間的交互8.3.3對(duì)主App進(jìn)行某種改變,有數(shù)據(jù)傳遞2)添加公共函數(shù)在【編輯器】菜單欄選擇【函數(shù)】,選擇【公共函數(shù)】,在光標(biāo)定位處,輸入添加數(shù)據(jù)函數(shù)updateData,程序命令如下:functionupdateData(app,number,name,sg,score)app.numbervalue=number;value=name;app.sgvalue=sg;app.scorevalue=score;new_data={numbernamesgscore};new_data=cell2table(new_data);app.UITable.Data=[app.UITable.Data;new_data]; end8.3MATLABAppDesigner多窗口App間的交互8.3.3對(duì)主App進(jìn)行某種改變,有數(shù)據(jù)傳遞3)添加回調(diào)右擊【添加】按鈕,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonPushed回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:functionButtonPushed(app,event)app.DialogApp=app2(app,app.numbervalue,...value,app.sgvalue,app.scorevalue);end8.3MATLABAppDesigner多窗口App間的交互8.3.3對(duì)主App進(jìn)行某種改變,有數(shù)據(jù)傳遞

運(yùn)行主界面程序,單擊【添加】按鈕,彈出添加子界面,并輸入相應(yīng)數(shù)據(jù),如圖8-27所示,單擊【確定】按鈕,主界面運(yùn)行結(jié)果如圖8-28所示。圖8-27

子界面運(yùn)行結(jié)果

圖8-28

主界面運(yùn)行結(jié)果8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)

基于MATLABAppDesigner的學(xué)生成績(jī)管理設(shè)計(jì)與實(shí)現(xiàn),分為界面布局設(shè)計(jì)、界面組件回調(diào)設(shè)計(jì)和界面運(yùn)行結(jié)果顯示三部分介紹。8.4.1學(xué)生成績(jī)管理界面布局設(shè)計(jì)學(xué)生成績(jī)管理的界面布局設(shè)計(jì),分為學(xué)生整體成績(jī)表、學(xué)生整體成績(jī)圖和學(xué)生個(gè)人成績(jī)分析共3部分。共需要添加3個(gè)面板、1個(gè)表、6個(gè)按鈕、1個(gè)單選按鈕組、1個(gè)下拉框、1個(gè)編輯字段(數(shù)值)、19個(gè)標(biāo)簽和1個(gè)坐標(biāo)區(qū)組件,如圖8-29所示。圖8-29學(xué)生成績(jī)管理界面布局效果8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)1.添加私有屬性點(diǎn)擊【屬性】,選擇【私有屬性】,輸入程序命令如下:properties(Access=private)troperty%Descriptionmoused_ind;moused_ind2;NewData;end8.4.2學(xué)生成績(jī)管理回調(diào)設(shè)計(jì)8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)2.【導(dǎo)入數(shù)據(jù)】按鈕回調(diào)單擊【導(dǎo)入數(shù)據(jù)】按鈕,彈出選擇Excel文件對(duì)話框,選擇文件并單擊【確定】按鈕,即可將Excel數(shù)據(jù)顯示在表組件中。右擊【導(dǎo)入數(shù)據(jù)】按鈕組件,選擇【回調(diào)】,選擇【添加data_ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globalnew2[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'導(dǎo)入數(shù)據(jù)');excelfull=strcat(excelpath,excelfile);%獲取所選文件的地址new2=xlsread(excelfull);[m,n]=size(new2);fori=1:1:mforj=1:1:napp.UITable.Data{i,j}=num2str(new2(i,j));endendapp.t=app.UITable.Data;8.4.2學(xué)生成績(jī)管理回調(diào)設(shè)計(jì)8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)3.表組件回調(diào)右擊表組件,選擇【回調(diào)】,選擇【添加UITableCellSelection回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:indices=event.Indices;indices=event.Indices;app.moused_ind=indices(1);app.moused_ind2=indices(2);4.【增加】按鈕回調(diào)單擊【增加】按鈕,即可在表組件數(shù)據(jù)最后新增一行空白行,并可以在新增行編輯內(nèi)容。右擊【增加】按鈕組件,選擇【回調(diào)】,選擇【添加add_ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:app.t=app.UITable.Data;nr={[],[],[],[],[],[],[],[]};%本例中共8列數(shù)據(jù)app.UITable.Data=[app.t;nr];app.t=app.UITable.Data;newData1=app.t;set(app.UITable,'Data',newData1);8.4.2學(xué)生成績(jī)管理回調(diào)設(shè)計(jì)8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)5.【刪除】按鈕回調(diào)選擇表組件中任一單元格,單擊【刪除】按鈕,即可刪除該單元格所在行的一行數(shù)據(jù)。右擊【刪除】按鈕組件,選擇【回調(diào)】,選擇【添加del_ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:app.UITable.Data(app.moused_ind,:)=[];app.t=app.UITable.Data;6.【保存】按鈕回調(diào)單擊【保存】按鈕,即可將編輯過的表組件數(shù)據(jù),保存到指定Excel文件。右擊【保存】按鈕組件,選擇【回調(diào)】,選擇【添加save_ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'選擇表格');excelfull=strcat(excelpath,excelfile);%獲取要寫入數(shù)據(jù)的.xlsx文件位置xlswrite(excelfull,app.UITable.Data);%數(shù)據(jù)寫入.xlsx文件8.4.2學(xué)生成績(jī)管理回調(diào)設(shè)計(jì)8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)7.【繪圖】按鈕回調(diào)在下拉框選擇課程,在單選按鈕組選擇繪圖類型,并單擊【繪圖】按鈕,即可顯示相應(yīng)課程成績(jī)的折線圖或柱狀圖。右擊【繪圖】按鈕組件,選擇【回調(diào)】,選擇【添加plot_ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globalnew2selButton=app.ButtonGroup.SelectedObject;switchapp.DropDown.Valuecase'語文'x=new2(:,1:1);y=new2(:,3:3);if(strcmp(selButton.Text,'折線圖'))plot(app.UIAxes,x,y,'linewidth',1.5,'Marker','o','color','b');elsebar(app.UIAxes,x,y,'histc');endtitle(app.UIAxes,'語文成績(jī)分布圖');

8.4.2學(xué)生成績(jī)管理回調(diào)設(shè)計(jì)8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)case'數(shù)學(xué)'x=new2(:,1:1);y=new2(:,4:4);if(strcmp(selButton.Text,'折線圖'))plot(app.UIAxes,x,y,'linewidth',1.5,'Marker','o','color','b');elsebar(app.UIAxes,x,y,'histc');endtitle(app.UIAxes,'數(shù)學(xué)成績(jī)分布圖');case'英語'x=new2(:,1:1);y=new2(:,5:5);if(strcmp(selButton.Text,'折線圖'))plot(app.UIAxes,x,y,'linewidth',1.5,'Marker','o','color','m');elsebar(app.UIAxes,x,y,'histc');endtitle(app.UIAxes,'英語成績(jī)分布圖');

8.4.2學(xué)生成績(jī)管理回調(diào)設(shè)計(jì)8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)case'物理'x=new2(:,1:1);y=new2(:,6:6);if(strcmp(selButton.Text,'折線圖'))plot(app.UIAxes,x,y,'linewidth',1.5,'Marker','o','color','g');elsebar(app.UIAxes,x,y,'histc');endtitle(app.UIAxes,'物理成績(jī)分布圖');case'化學(xué)'x=new2(:,1:1);y=new2(:,7:7);if(strcmp(selButton.Text,'折線圖'))plot(app.UIAxes,x,y,'linewidth',1.5,'Marker','o','color','y');elsebar(app.UIAxes,x,y,'histc');endtitle(app.UIAxes,'化學(xué)成績(jī)分布圖');

8.4.2學(xué)生成績(jī)管理回調(diào)設(shè)計(jì)8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)case'生物'x=new2(:,1:1);y=new2(:,8:8);if(strcmp(selButton.Text,'折線圖'))plot(app.UIAxes,x,y,'linewidth',1.5,'Marker','o','color','c');elsebar(app.UIAxes,x,y,'histc');endtitle(app.UIAxes,'生物成績(jī)分布圖');end8.4.2學(xué)生成績(jī)管理回調(diào)設(shè)計(jì)8.4基于MATLABAppDesigner學(xué)生成績(jī)管理的設(shè)計(jì)與實(shí)現(xiàn)8.【查詢排名】按鈕回調(diào)輸入學(xué)生學(xué)號(hào),單擊【查詢排名】回調(diào),即可在下方看到各科成績(jī)排名。右擊【查詢排名】按鈕組件,選擇【回調(diào)】,選擇【添加rank_ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globalnew2xh=new2(:,2:2);%提取原數(shù)據(jù)表中的學(xué)號(hào)列xh_ss=app.EditField.Value;%獲取用戶編輯框內(nèi)的學(xué)號(hào)k=find(xh==xh_ss)%確定學(xué)號(hào)位于原數(shù)據(jù)的第k行a3=new2(:,3:3);a4=new2(:,4:4);a5=new2(:,5:5);%提取原數(shù)據(jù)中各門課程的成績(jī)列a6=new2(:,6:6);a7=new2(:,7:7);a8=new2(:,8:8);[~,ia3,ic3]=unique(a3);[~,ia4,ic4]=unique(a4);[~,ia5,ic5]=unique(a5);[~,ia6,ic6]=unique(a6);[~,ia7,

溫馨提示

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

評(píng)論

0/150

提交評(píng)論