基于matlab的gui的excel成绩管理系统设计报告.docx
《基于matlab的gui的excel成绩管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《基于matlab的gui的excel成绩管理系统设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
基于matlab的gui的excel成绩管理系统设计报告
自动化专业综合设计报告
设计题目:
基于Matlab的成绩管理系统
所在实验室:
指导教师:
学生姓名
班级学号
撰写时间:
成绩评定:
一、设计要求:
以某班某课成绩为研究对象,设计一个对话框,实现:
1)。
该课的最低分、最高分以及相对应的学号
2)。
该课程的平均分和均方差
3)。
将该课程成绩按照从大到小排列、显示相对应学号
4)。
绘制该课程学生成绩直方图(提示:
学生成绩分几段,统计每段分数的人数,选择分数段中间数据,以此数据与人数为横、纵坐标,绘制直方图)
实现方法:
1、利用matlab语言指令编写程序和GUI设计对话框。
2、直接利用matlab中的函数来求最低分、最高分、平均分、标准方差。
二、设计内容
(一)GUI图形设计
1、建立GUI对象添加需要的控件,加入需要的按钮、菜单控件等。
这次设计一共设计两个按钮和一个下拉菜单,下拉菜单共5个选项。
2、修改控件属性,属性查看器提供了一系列属性,可以通过修改相应属性来改变控件。
如下图为设计好的控件:
(二)编写m文件
当建立GUI后,在执行或存储界面时,会产生一个M文件,单击M-fileEditor图标按钮来编写该GUI下每个对象的Cllback与一些初始设置。
直接在各对象callback下输入当用户按下这个对象后所应该调用执行的操作所对应的程序代码即可。
具体程序见附录。
三、设计实验结果
使用matlab的max函数求最大值,显示出成绩和学号栏。
使用matlab的min函数求最小值,显示成绩和学号。
使用matlab的mean函数求平均数,并显示平均数。
使用matlab的std函数求标准方差,并显示。
使用matlab的sort函数排序,并显示学号,成绩,排名。
将学生成绩分成5部分,60以下,60-70、70-80、80-90、90-100,求出每段人数并用bar函数画出成绩直方图。
四、结论
这次设计将matlab图形用户界面应用于学生成绩系统这个实际问题中,实现了成绩的查询与管理。
MatlabGUI可视化得人机交互式环境使成绩查询系统更能直观的向用户显示,避免了用户再进行复杂的数学运算以及程序编程。
系统的实用性强、界面操作简单,用户很容易上手。
本次设计制作的成绩查询管理系统,使用用户可以直观的了解班级成绩的最高分、最低分、平均分、方差、以及班级排名和成绩的分布情况。
界面操作简单,显示结果直观。
五、设计感受
通过完成计算机仿真实验完成成绩查询管理系统对话框,再次复习熟悉了matlab的编程方法,第一次GUI设计的对话框的具体应用,加深了对matlab知识的运用,以前学习控制系统仿真就感受到了Matlab强大的数学计算能力,这次设计GUI的设计感受到了其与VB可视化编程的异曲同工之妙,而Matlab优于VB以及其他编程工具的地方是其强大的数学计算能力以及完善的工具箱,使其设计数学计算方面程序的编写及其简洁,如果以后有机会一定再好好研究下Matlab。
感谢老师在这一周的悉心指导。
附录:
%有关GUI的函数调用声明
functionvarargout=untitled1(varargin)
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@untitled1_OpeningFcn,...
'gui_OutputFcn',@untitled1_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%handlesstructure是保存着GUI各个控件用到的所有数据的数据结构,这是取数据函数
functionuntitled1_OpeningFcn(hObject,eventdata,handles,varargin)
%全局数据文件
globaldat;
%打开文件夹路径对话框,显示xls后缀的文件,等待选中
[filename,pathname]=uigetfile('*.xls');
file=[pathname,filename];
%打开存有成绩的excel文件
dat=xlsread('data.xls','','')
%将成绩数据存到handle结构里
handles.chengji=dat
handles.output=hObject;
%保存已经改动的数据结构,这样才能在callbacks动作响应中使用
guidata(hObject,handles);
%“确认”按钮的callback动作,根据下拉框的value值利用case语句实现
functionpushbutton1_Callback(hObject,eventdata,handles)
%获取下拉框value值popup_sel_index
popup_sel_index=get(handles.popupmenu1,'Value');
%将成绩数据从handle中提取出来到二维数组chengji中去
ss=num2str(handles.chengji)
chengji=str2num(ss)
%提取成绩数组中1--30号的成绩到一维数组s中去
forn=1:
30
s(n)=chengji(n,2)
end
%s行向量变成列向量as,便于显示
as=dsort(s);
%处理成绩数据进行排名
fori=1:
30
forj=1:
30
ifas(i)==s(j);
bb(i)=j;
end
end
end
fori=1:
29
kk=i+1;
ifas(i)==as(kk)
k=bb(i)-1;
fort=1:
k
ifas(i)==s(t)
bb(kk)=t;
end
end
end
end
%获取最大值、最小值、平均值、标准差
mi=min(s);
ma=max(s);
mea=mean(s);
fc=std(s);
fori=1:
30%获取最大值对应的学号
ifmi==s(i)
mii=i;
elseifma==s(i)%获取最小值对应的学号
maa=i;
end
end
set(handles.text6,'String','');
switchpopup_sel_index
case1%显示最大值及其学号
set(handles.text5,'String',ma);
set(handles.text4,'String',maa);
case2%显示最小值及其学号
set(handles.text5,'String',mi);
set(handles.text4,'String',mii);
case3%显示平均值
set(handles.text4,'String','');
set(handles.text5,'String',mea);
case4%显示标准差
set(handles.text4,'String','');
set(handles.text5,'String',fc);
case5%显示成绩排名
set(handles.text5,'String',as);
set(handles.text4,'String',bb);
cc=1:
30;
set(handles.text6,'String',cc);
end
%"绘制直方图按钮的callback函数"
functionpushbutton2_Callback(hObject,eventdata,handles)
axes(handles.axes1);
cla;
ss=num2str(handles.chengji)
chengji=str2num(ss)
forn=1:
30
s(n)=chengji(n,2)
end
aa=[00000];
%为直方图的绘制进行数据累加
fori=1:
30
ifs(i)<60
aa
(1)=aa
(1)+1;
elseifs(i)<70
aa
(2)=aa
(2)+1;
elseifs(i)<80
aa(3)=aa(3)+1;
elseifs(i)<90
aa(4)=aa(4)+1;
else
aa(5)=aa(5)+1;
end
end
x=[5065758595];
%绘制直方图函数
bar(x,aa);