《Matlab App Designer设计入门及实战》课件 第8章 基于MATLAB App Designer 的学生成绩管理_第1页
《Matlab App Designer设计入门及实战》课件 第8章 基于MATLAB App Designer 的学生成绩管理_第2页
《Matlab App Designer设计入门及实战》课件 第8章 基于MATLAB App Designer 的学生成绩管理_第3页
《Matlab App Designer设计入门及实战》课件 第8章 基于MATLAB App Designer 的学生成绩管理_第4页
《Matlab App Designer设计入门及实战》课件 第8章 基于MATLAB App Designer 的学生成绩管理_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章基于MATLABAppDesigner的学生成绩管理本章要点本章主要基于MATLABAppDesigner的学生成绩管理界面的设计与实现,介绍表组件与Excel文件的数据交换、表组件与其他组件的数据交换及多窗口App间的交互。

本章要点:⑴表组件与Excel文件数据交换。⑵表组件与其他组件数据交换。⑶多窗口App有无数据的交互方法。

学习目标:⑴掌握表组件与Excel文件数据交换的基本函数。⑵掌握表组件与其他组件数据交换的基本方法。⑶掌握多窗口App在无数据和有数据传递下的交互方法。8.1MATLABAppDesigner表组件与Excel文件数据交换MATLABAppDesigner表组件与Excel文件数据交换,主要包括:将Excel数据导入表组件、删除表组件数据、增加表组件数据和保存表组件数据到Excel。其中,前面三种操作参考第五章常用组件的表组件部分内容。保存表组件数据到Excel文件中,需要用到xlswrite函数,其调用方法为:xlswrite(filename,A)A为矩阵,filename为表格地址。表示将矩阵A写入filename地址下表格中的第一个工作表,从单元格A1开始写入。xlswrite(filename,A,sheet)其中sheet指定工作表,即将数据写入指定的工作表中。xlswrite(filename,A,xlRange)xlRange为矩形区域,即将数据写入工作簿的第一个工作表中的指定矩形区域内。xlswrite(filename,A,sheet,xlRange)将数据写入指定的工作表和指定区域内。例如,输入程序代码如下:filename='test.xlsx';A={'Number','Score';1,60;2,100;3,80};sheet=2;xlRange='B5';xlswrite(filename,A,sheet,xlRange);8.2MATLABAppDesigner表组件与其他组件数据交换8.2.1其他组件读取表组件数据【例8-1】将Excel中的数据导入表组件,并选择绘制销售量和销售额的折线图、条形图或饼状图。第一步:设置布局及属性。添加1个表、2个坐标区、2个单选按钮组和2个按钮组件,如图8-1所示。图8-1

界面布局设计8.2MATLABAppDesigner表组件与其他组件数据交换8.2.1其他组件读取表组件数据第二步:右击【导入数据】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:globaldata[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'导入数据');excelfull=strcat(excelpath,excelfile);%获取所选文件的地址data=readtable(excelfull);app.UITable.Data=data;VariableDescriptions=data.Properties.VariableDescriptions;%给ColumnName复制app.UITable.ColumnName=data.Properties.VariableNames;8.2MATLABAppDesigner表组件与其他组件数据交换8.2.1其他组件读取表组件数据右击【绘图】按钮,选择【回调】,选择【转至Button_2Pushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下: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,'销售量'))%当选择销售量时x1=table2array(data(:,1:1));y1=table2array(data(:,3:3));%提取表第1列和第3列title(app.UIAxes,'上半年销售量折线图');%当选择销售额时elsex1=table2array(data(:,1:1));y1=table2array(data(:,4:4));%提取表第1列和第4列title(app.UIAxes,'上半年销售额折线图');end

8.2MATLABAppDesigner表组件与其他组件数据交换8.2.1其他组件读取表组件数据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表组件与其他组件数据交换8.2.1其他组件读取表组件数据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月份'};%设置饼状图区域标签pie(app.UIAxes_2,y3,labels);end8.2MATLABAppDesigner表组件与其他组件数据交换8.2.1其他组件读取表组件数据运行程序,单击【导入数据】按钮,将Excel文件中的数据导入到表组件中,选择销售量,并选择折线图,单击【绘图】按钮,运行结果如图8-2所示。选择销售额,并选择饼状图,单击【绘图】按钮,运行结果如图8-3所示。

图8-2利用表组件数据绘制折线图

图8-3

利用表组件数据绘制饼状图8.2MATLABAppDesigner表组件与其他组件数据交换8.2.1其他组件读取表组件数据【例8-2】通过输入分数上下限,来调取表中在此分数线范围内的人员名单,并将名单显示在文本区域组件上。

第一步:设置布局及属性。添加1个表、2个编辑字段(数值)、1个面板、2个按钮和1个文本区域组件。

第二步:右击【导入数据】按钮,选择【回调】,选择【转至Button_2Pushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:globaldata[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'导入数据');excelfull=strcat(excelpath,excelfile);%获取所选文件的地址data=readtable(excelfull);app.UITable.Data=data;VariableDescriptions=data.Properties.VariableDescriptions;%给ColumnName复制app.UITable.ColumnName=data.Properties.VariableNames;8.2MATLABAppDesigner表组件与其他组件数据交换8.2.1其他组件读取表组件数据右击【确定】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:globaldatamax=app.EditField.Value;min=app.EditField_2.Value;[m,n]=size(data);%m为行数,n为列数app.Label.Text=strcat(num2str(max),'分到',num2str(min),'分','学生姓名及成绩为:');b='';fori=1:1:m

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

%查询此分数线范围内的分数name=table2array(data(i,2));%调取此分数线的人员名单score=num2str(table2array(data(i,3)));a=strcat(name,'(',score,')');b=strcat(b,',',a);%将所有人员名单拼接app.TextArea.Value=b;endend8.2MATLABAppDesigner表组件与其他组件数据交换8.2.1其他组件读取表组件数据

运行程序,单击【成绩导入】按钮,将Excel文件中的数据导入到表组件中,如图8-4所示。输入分数线为:80分到95分,运行结果如图8-5所示。输入分数线为:60分到85分,运行结果如图8-6所示。图8-4

成绩导入表组件结果图8-5成绩在80分-95分名单显示结果图8-6成绩在60分-85分名单显示结果8.2MATLABAppDesigner表组件与其他组件数据交换8.2.2利用其他组件编辑表组件数据

【例8-3】实现将Excel文件中的内容导入到表组件,并且可通过按钮组件将编辑字段组件的内容,写入到表组件中。

第一步:设置布局及属性。添加1个表、2个编辑字段(文本)、2个编辑字段(数值)、1个面板和2个按钮组件。

第二步:右击【信息导入】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:globalnew2[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'导入数据');excelfull=strcat(excelpath,excelfile);%获取所选文件的地址%读取Excel文件中的数值数据、文本数据和合并数据[num,txt,new2]=xlsread(excelfull);[m,n]=size(new2);%计算合并数据的行数和列数fori=2:1:mforj=1:1:napp.UITable.Data{i-1,j}=num2str(cell2mat(new2(i,j)));endendapp.t=app.UITable.Data;8.2MATLABAppDesigner表组件与其他组件数据交换8.2.2利用其他组件编辑表组件数据

右击【录入】按钮,选择【回调】,选择【转至Button_2Pushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下: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];%拼接新录入的数据和表组件数据

运行程序,如图8-7所示。单击【信息导入】按钮,将Excel文件中的数据导入到表组件中,运行结果如图8-8所示。输入产品名称、型号、数量和单价,单击【录入】按钮,运行结果如图8-9所示。8.2MATLABAppDesigner表组件与其他组件数据交换8.2.2利用其他组件编辑表组件数据图8-7运行程序结果界面图8-8

信息导入后效果图8-9

录入新数据后效果8.2MATLABAppDesigner表组件与其他组件数据交换8.2.2利用其他组件编辑表组件数据【例8-4】通过输入不同等级的分数线,将表组件中所有学生的成绩划分等级,并将成绩等级写入到表的最后一列。第一步:设置布局及属性。添加1个表、1个标签、1个图像、10个编辑字段(数值)、1个面板和2个按钮组件。第二步:右击【成绩导入】按钮,选择【回调】,选择【转至ButtonPushed回调】,程序命令如例8-3同理。右击【确定】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下: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为行数,n为列数fori=1:1:mif((table2array(data(i,3))>=yx_min)&&(table2array(data(i,3))<=yx_max))app.UITable.Data{i,4}={'优秀'};elseif((table2array(data(i,3))>=lh_min)&&(table2array(data(i,3))<yx_min))app.UITable.Data{i,4}={'良好'};

8.2MATLABAppDesigner表组件与其他组件数据交换8.2.2利用其他组件编辑表组件数据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表组件与其他组件数据交换8.2.2利用其他组件编辑表组件数据运行程序,单击【成绩导入】按钮,将Excel文件中的数据导入到表组件中,运行结果如图8-10所示。输入不同等级的成绩范围,单击【确定】按钮,即可在表组件的最后一列显示等级评定结果,如图8-11所示。图8-10

成绩导入效果图8-11

成绩等级评定结果显示8.3MATLABAppDesigner多窗口App间的交互8.3.1不改变主App窗口

不改变主App窗口的多窗口交互中,其功能通常只有打开一个新的窗口。应用场景比如登录界面,点击登录进入另一个窗口。

【例8-5】主App界面有登录按钮组件,子App界面有退出按钮组件。第一步:设置布局及属性。主App界面添加1个标签、1个图像、2个编辑字段(文本)和1个按钮组件。如图8-12所示。子App界面添加1个标签、2个图像、3个编辑字段(文本)和1个按钮组件。如图8-13所示。

图8-12

主App界面布局图8-13

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

第二步:在主App界面,右击【登录】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:zh=app.EditField.Value;ma=app.EditField_2.Value;if(strcmp(zh,'admin')&&strcmp(ma,'admin123'))rune8_5_zi_app.mlappdelete(app.UIFigure)elsemsgbox('请重新输入账号和密码','账号和密码错误');end

在子App界面,右击【退出】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:rune8_5_zhu_app.mlappdelete(app.UIFigure)8.3MATLABAppDesigner多窗口App间的交互8.3.1不改变主App窗口

运行主App界面程序,输入账户和密码,如图8-14所示。当账户或密码错误时,单击【登录】按钮,弹出对话框,如图8-15所示。图8-14

主App界面运行结果

图8-15

错误警告

图8-16子App界面运行效果

当输入账号和密码正确时,单击【登录】按钮,则跳转到子App界面,如图8-16所示。单击子App界面的【退出】按钮,即可关闭子App,跳转到主App界面。8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

多窗口交互中,存在对主App进行了某种改变,但App窗口之间无数据传递。例如,通过子App界面对主App界面的表组件执行删除某行或某列数据的操作。首先,介绍如何在同一界面下,实现删除表组件的某行或某列数据的操作。【例8-6】在同一界面下,实现删除表组件的某行或某列数据操作。第一步:设置布局及属性。添加1个表和2个按钮。第二步:右击表组件,选择【回调】,选择【转至UITableCellSelection回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:indices=event.Indices;app.mouse_ind_hang=indices(1);app.mouse_ind_lie=indices(2);8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

其中,第一行代码中的indices,即为单击的数据的行列数。indices(1)即为获取该矩阵的第一个数值,也就是所选数据的行数。indices(2)即为获取该矩阵的第二个数值,也就是所选数据的列数。

其中,app.mouse_ind_hang和app.mouse_ind_lie需要在属性中添加,即单击【属性】,选择【私有属性】,在光标定位处,输入程序命令如下:properties(Access=private)mouse_ind_hang;mouse_ind_lie;end

右击【删除行】按钮,选择【回调】,选择【转至hang_ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:app.UITable.Data(app.mouse_ind_hang,:)=[];%令表中该行数据为空

右击【删除列】按钮,选择【回调】,选择【转至lie_ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:app.UITable.Data(:,app.mouse_ind_lie)=[];

右击【导入】按钮,添加回调与例8-3同理。8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

运行程序,单击【导入】按钮添加数据,如图8-17所示。选择表组件中某数据,单击【删除行】,运行结果如图8-18所示。选择表组件中某数据,单击【删除列】,运行结果如图8-19所示。图8-17

数据导入

图8-18

删除行

图8-19

删除列8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

【例8-7】在不同界面下,实现添加和删除表组件的某行或某列数据操作。第一步:设置布局及属性,共由1个主界面和2个子界面组成。主界面添加1个表和2个按钮;增加子界面添加1个标签和2个按钮;删除子界面添加1个单选按钮组和2个按钮。如图8-20所示。(a)主界面布局

(b)增加子界面布局

(c)删除子界面布局图8-20多窗口交互界面布局8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

第二步:添加回调函数、私有属性、公共函数和App输入参数1.增加子界面1)添加私有属性在【编辑器】菜单栏选择【属性】,选择【私有属性】,在光标定位处,输入程序命令如下:properties(Access=private)CallingApp%存储主程序对象end2)添加App输入参数在【编辑器】菜单栏选择【App输入参数】,如图0-148所示,弹出App输入参数对话框,输入mainapp,如图0-149所示,单击【确定】按钮,在光标定位处,编写startupFcn函数,输入程序命令如下:functionstartupFcn(app,mainapp)app.CallingApp=mainapp;end8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

3)添加回调函数

右击【确定】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:functionButtonPushed(app,event)updateData(app.CallingApp)%updateData函数在主界面添加delete(app)%关闭当前Append图8-21

App输入参数选项

图8-22

App输入参数窗口8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

右击【取消】按钮,选择【回调】,选择【转至Button_2Pushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:functionButton_2Pushed(app,event)delete(app)%关闭当前Append2.删除子界面1)添加私有属性在【编辑器】菜单栏选择【属性】,选择【私有属性】,在光标定位处,输入程序命令如下:properties(Access=private)CallingApp%存储主程序对象end8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递2)添加App输入参数在【编辑器】菜单栏选择【App输入参数】,弹出App输入参数对话框,输入mainapp,在光标定位处,编写startupFcn函数,输入程序命令如下:functionstartupFcn(app,mainapp)app.CallingApp=mainapp;end3)添加回调右击【确定】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:functionButtonPushed(app,event)selectedButton=app.ButtonGroup.SelectedObject;switchselectedButton.Text%判断用户选择删除行还是删除列case'删除行'deleteData_hang(app.CallingApp)%deleteData_hang函数在主界面定义case'删除列'deleteData_lie(app.CallingApp)%deleteData_列函数在主界面定义enddelete(app)end8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递右击【取消】按钮,选择【回调】,选择【转至Button_4Pushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:functionButton_4Pushed(app,event)delete(app)end3.主界面1)添加公共属性在【编辑器】菜单栏选择【属性】,选择【公共属性】,在光标定位处,输入程序命令如下:properties(Access=public)mouse_ind_hangmouse_ind_lietend8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递2)添加公共函数在【编辑器】菜单栏选择【函数】,选择【公共函数】,在光标定位处,输入添加数据函数updateData,程序命令如下:functionupdateData(app)%增加功能公共函数app.t=app.UITable.Data;nr={[],[],[],[]};%1行3列的空白数据app.UITable.Data=[app.t;nr];%将空白数据添加到表中end添加删除行功能的deleteData_hang公共函数,程序命令如下:functiondeleteData_hang(app)app.UITable.Data(app.mouse_ind_hang,:)=[];end添加删除行功能的deleteData_hang公共函数,程序命令如下:functiondeleteData_lie(app)app.UITable.Data(:,app.mouse_ind_lie)=[];end8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

3)添加回调函数

右击表组件,选择【回调】,选择【转至UITableCellSelection回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:indices=event.Indices;app.mouse_ind_hang=indices(1);app.mouse_ind_lie=indices(2);

右击【增加】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:app2(app)%增加子界面名称为app2.mlapp

右击【删除】按钮,选择【回调】,选择【转至Button_3Pushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:app3(app)%删除子界面名称为app3.mlapp8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

运行主界面程序,单击【增加】按钮,弹出增加子界面,如图8-23所示,单击【确定】,即可在主界面增加一行,如图8-24所示。图8-23

增加子界面运行效果

图8-24

增加一行主界面效果8.3MATLABAppDesigner多窗口App间的交互8.3.2对主App进行某种改变,无数据传递

选择主界面任意一单元格,单击【删除】按钮,弹出删除子界面,选择【删除列】,单击【确定】按钮,如图8-25所示,即可删除主界面的一列,如图8-26所示。删除行操作同理。图8-25

删除子界面运行效果

图8-26

删除一列主界面效果8.3MATLABAppDesigner多窗口App间的交互8.3.3对主App进行某种改变,有数据传递

多窗口交互中,存在对主App进行了某种改变,并且App窗口之间有数据传递。例如,通过子界面的字段编辑组件输入数据,将其保存到主界面的表组件中。

【例8-8】通过在子界面输入学生姓名、学号、性别和成绩信息,保存到主界面的表组件中。

第一步:设置布局及属性,共由1个主界面和1个子界面组成。主界面添加1个表和1个按钮;子界面添加3个编辑字段(文本)、1个编辑字段(数值)和1个按钮。

第二步:添加回调函数、私有属性、公共函数和App输入参数

1.子界面

1)添加私有属性

在【编辑器】菜单栏选择【属性】,选择【私有属性】,在光标定位处,输入程序命令如下:properties(Access=private)CallingApp%存储主程序对象end8.3MATLABAppDesigner多窗口App间的交互8.3.3对主App进行某种改变,有数据传递

2)添加App输入参数在【编辑器】菜单栏选择【App输入参数】,弹出App输入参数对话框,输入mainapp,number,name,sg,score,并在光标定位处,编写startupFcn函数,输入程序命令如下: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对主App进行某种改变,有数据传递3)添加回调右击【确定】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:functionButtonPushed(app,event)updateData(app.CallingApp,app.EditField.Value,...app.EditField_2.Value,app.EditField_3.Value,...app.EditField_4.Value)%updateData函数在主界面输入enddelete(app)8.3MATLABAppDesigner多窗口App间的交互8.3.3对主App进行某种改变,有数据传递2.主界面1)添加公共属性在【编辑器】菜单栏选择【属性】,选择【公共属性】,在光标定位处,输入程序命令如下:properties(Access=public)numbervalue=''namevalue=''sgvalue=''scorevalue=0end8.3MATLABAppDesigner多窗口App间的交互8.3.3对主App进行某种改变,有数据传递2)添加公共函数在【编辑器】菜单栏选择【函数】,选择【公共函数】,在光标定位处,输入添加数据函数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对主App进行某种改变,有数据传递3)添加回调右击【添加】按钮,选择【回调】,选择【转至ButtonPushed回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:functionButtonPushed(app,event)app.DialogApp=app2(app,app.numbervalue,...value,app.sgvalue,app.scorevalue);end8.3MATLABAppDesigner多窗口App间的交互8.3.3对主App进行某种改变,有数据传递

运行主界面程序,单击【添加】按钮,弹出添加子界面,并输入相应数据,如图8-27所示,单击【确定】按钮,主界面运行结果如图8-28所示。图8-27

子界面运行结果

图8-28

主界面运行结果8.4基于MATLABAppDesigner学生成绩管理的设计与实现

基于MATLABAppDesigner的学生成绩管理设计与实现,分为界面布局设计、界面组件回调设计和界面运行结果显示三部分介绍。8.4.1学生成绩管理界面布局设计学生成绩管理的界面布局设计,分为学生整体成绩表、学生整体成绩图和学生个人成绩分析共3部分。共需要添加3个面板、1个表、6个按钮、1个单选按钮组、1个下拉框、1个编辑字段(数值)、19个标签和1个坐标区组件,如图8-29所示。图8-29学生成绩管理界面布局效果8.4基于MATLABAppDesigner学生成绩管理的设计与实现1.添加私有属性点击【属性】,选择【私有属性】,输入程序命令如下:properties(Access=private)troperty%Descriptionmoused_ind;moused_ind2;NewData;end8.4.2学生成绩管理回调设计8.4基于MATLABAppDesigner学生成绩管理的设计与实现2.【导入数据】按钮回调单击【导入数据】按钮,弹出选择Excel文件对话框,选择文件并单击【确定】按钮,即可将Excel数据显示在表组件中。右击【导入数据】按钮组件,选择【回调】,选择【添加data_ButtonPushedFcn回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:globalnew2[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'导入数据');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学生成绩管理回调设计8.4基于MATLABAppDesigner学生成绩管理的设计与实现3.表组件回调右击表组件,选择【回调】,选择【添加UITableCellSelection回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:indices=event.Indices;indices=event.Indices;app.moused_ind=indices(1);app.moused_ind2=indices(2);4.【增加】按钮回调单击【增加】按钮,即可在表组件数据最后新增一行空白行,并可以在新增行编辑内容。右击【增加】按钮组件,选择【回调】,选择【添加add_ButtonPushedFcn回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:app.t=app.UITable.Data;nr={[],[],[],[],[],[],[],[]};%本例中共8列数据app.UITable.Data=[app.t;nr];app.t=app.UITable.Data;newData1=app.t;set(app.UITable,'Data',newData1);8.4.2学生成绩管理回调设计8.4基于MATLABAppDesigner学生成绩管理的设计与实现5.【删除】按钮回调选择表组件中任一单元格,单击【删除】按钮,即可删除该单元格所在行的一行数据。右击【删除】按钮组件,选择【回调】,选择【添加del_ButtonPushedFcn回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:app.UITable.Data(app.moused_ind,:)=[];app.t=app.UITable.Data;6.【保存】按钮回调单击【保存】按钮,即可将编辑过的表组件数据,保存到指定Excel文件。右击【保存】按钮组件,选择【回调】,选择【添加save_ButtonPushedFcn回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:[excelfile,excelpath]=uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'选择表格');excelfull=strcat(excelpath,excelfile);%获取要写入数据的.xlsx文件位置xlswrite(excelfull,app.UITable.Data);%数据写入.xlsx文件8.4.2学生成绩管理回调设计8.4基于MATLABAppDesigner学生成绩管理的设计与实现7.【绘图】按钮回调在下拉框选择课程,在单选按钮组选择绘图类型,并单击【绘图】按钮,即可显示相应课程成绩的折线图或柱状图。右击【绘图】按钮组件,选择【回调】,选择【添加plot_ButtonPushedFcn回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下: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,'语文成绩分布图');

8.4.2学生成绩管理回调设计8.4基于MATLABAppDesigner学生成绩管理的设计与实现case'数学'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,'数学成绩分布图');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,'英语成绩分布图');

8.4.2学生成绩管理回调设计8.4基于MATLABAppDesigner学生成绩管理的设计与实现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,'物理成绩分布图');case'化学'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,'化学成绩分布图');

8.4.2学生成绩管理回调设计8.4基于MATLABAppDesigner学生成绩管理的设计与实现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,'生物成绩分布图');end8.4.2学生成绩管理回调设计8.4基于MATLABAppDesigner学生成绩管理的设计与实现8.【查询排名】按钮回调输入学生学号,单击【查询排名】回调,即可在下方看到各科成绩排名。右击【查询排名】按钮组件,选择【回调】,选择【添加rank_ButtonPushedFcn回调】,界面自动跳转到代码视图,在光标定位处,输入程序命令如下:globalnew2xh=new2(:,2:2);%提取原数据表中的学号列xh_ss=app.EditField.Value;%获取用户编辑框内的学号k=find(xh==xh_ss)%确定学号位于原数据的第k行a3=new2(:,3:3);a4=new2(:,4:4);a5=new2(:,5:5);%提取原数据中各门课程的成绩列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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论