[编者注:]程序有添加、查询、修改、删除功能 。有查询就有分支控制,这是数据库操作思想或理念,数据库操作必须有程序设计支持,由循环语句遍历每一条记录,由分支语句查找满足条件的记录(一般是索引字段,如学号,一卡通号,商品名称或商品编号,这些字段一般情况下都不允许修改),本作业用学号作为查询记录的字段,完成查询、修改、删除。
一、设计报告
名称:学生成绩管理系统
登录界面:初始账号密码均为为1111
功能:通过读取excel获取学生学号姓名作业和三个课程的成绩,可分别计算平均成绩以及绘图。
在使用时可临时添加或修改删除学生信息。
二、心得体会
通过这次matlab的学习,我初步掌握了新的一门计算机语言,同时也被matlab强大方便的数学计算所吸引。并学会了一定的绘图,矩阵间的计算,还有界面的创建。从中我受益匪浅,相信在不久之后,也能在其他地方用到这一强大的编程语言。
三、程序运行情况
1、程序启动界面
2、导入数据(管理系统一般有确定的数据文件,使用缺省文件名)
3、点击“课程3”的成绩情况,出现图形显示子窗口,条形图和饼图
4、点击“课程平均成绩”按钮,每门课的平均成绩出现在下方编辑框中
5、添加记录,出现录入窗口
6、填写信息,确定
7、记录增加一行,重新计算平均成绩,则更新
8、查找某一记录,会出现对话框,输入学号
9、确定后,出现满足学号的记录(大型数据库必须的功能)
同理,修改和删除功能都必须输入学号,数据库操作。
四、主程序设计界面(main.fig)
五、主程序代码(main.m)
function varargout = main(varargin)
% MAIN MATLAB code for main.fig
% Last Modified by GUIDE v2.5 27-Nov-2021 17:43:42
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @main_OpeningFcn, ...
'gui_OutputFcn', @main_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
function main_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = main_OutputFcn(hObject, eventdata, handles)
function studentnumber_Callback(hObject, eventdata, handles)
function studentnumber_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function name_Callback(hObject, eventdata, handles)
function name_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function major_Callback(hObject, eventdata, handles)
function major_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function c1_Callback(hObject, eventdata, handles)
function c1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function c2_Callback(hObject, eventdata, handles)
function c2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function c3_Callback(hObject, eventdata, handles)
function c3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function togglebutton1_Callback(hObject, eventdata, handles)
function pushbutton1_Callback(hObject, eventdata, handles)
global NUM TXT Hang Lie
[NUM,TXT]= xlsread('学生信息.xlsx');
% 打开表格
[Hang,Lie]=size(TXT);
handles.sn=NUM( : ,1);
handles.nm=TXT(2:end,2);
handles.m=TXT(2:end,3);
handles.c=NUM( : ,4);
handles.cc=NUM( : ,5);
handles.ccc=NUM( : ,6);
% 导入成绩表信息
guidata(hObject,handles) ;
%显示信息
set(handles.studentnumber, 'string' ,num2str(handles.sn));
set(handles.name, 'string' ,handles.nm);
set(handles.major, 'string' ,handles.m);
set(handles.c1, 'string' ,num2str(handles.c));
set(handles.c2, 'string' ,num2str(handles.cc));
set(handles.c3, 'string' ,num2str(handles.ccc));
function pushbutton2_Callback(hObject, eventdata, handles)
prompt={ '输入学号' , '输入姓名' ,'输入专业' , '课程1' , '课程2' '课程3' };
answer=inputdlg(prompt,'修改新的学生信息',[1 50;1 50;1 50;1 50;1 50;1 50]);
n=length(handles.sn);
handles.sn(n+1,1)=str2double(answer{1,1});
handles.nm{n+1,1}=answer{2,1} ;
handles.m{n+1,1}=answer{3,1};
handles.c(n+1,1)=str2double(answer{4,1});
handles.cc(n+1,1)=str2double(answer{5,1});
handles.ccc(n+1,1)=str2double(answer{6,1});
guidata(hObject,handles);
%显示信息
set(handles.studentnumber, 'string' ,num2str(handles.sn));
set(handles.name, 'string' ,handles.nm);
set(handles.major, 'string' ,handles.m);
set(handles.c1, 'string' ,num2str(handles.c));
set(handles.c2, 'string' ,num2str(handles.cc));
set(handles.c3, 'string' ,num2str(handles.ccc));
function pushbutton3_Callback(hObject, eventdata, handles)
prompt={'请输入学号:'};
answer = inputdlg(prompt,'删除',[1 50]);
a=str2double(answer);
[j]=find(a==handles.sn);
%查找行数
if j
handles.sn(j, : )=[ ] ;
handles.nm(j, : )=[ ] ;
handles.m(j, : )=[ ] ;
handles.c(j, : )=[ ] ;
handles.cc(j, : )=[ ] ;
handles.ccc(j, : )=[ ] ;
%输出信息
set(handles.studentnumber, 'string' ,num2str(handles.sn));
set(handles.name, 'string' ,handles.nm);
set(handles.major, 'string' ,handles.m);
set(handles.c1, 'string' ,num2str(handles.c));
set(handles.c2, 'string' ,num2str(handles.cc));
set(handles.c3, 'string' ,num2str(handles.ccc));
else
h=msgbox('输入学号没有查找到!','错误','warn');
waitfor(h);
end
function pushbutton4_Callback(hObject, eventdata, handles)
a=0, b=a, c=b,d=c;
for i=1:length(handles.c)
if handles.c(i)>=85
a=a+1;
elseif handles.c(i)=75
b=b+1;
elseif handles.c(i)=60
c=c+1;
else
d=d+1;
end
end
y=[d,c,b,a];
figure;
subplot(2,2,1),bar(y)
title("成绩情况")
set(gca,'XTickLabel',{'不及格','及格','良好','优秀'});
xlabel('等级');
ylabel('人数');
explode=[0,0,0,1];
subplot(2,2,2),pie(y,explode);
legend('不及格','及格','良好','优秀','NorthEastOutside')
function pushbutton5_Callback(hObject, eventdata, handles)
a=0, b=a, c=b,d=c;
for i=1:length(handles.cc)
if handles.cc(i)>=85
a=a+1;
elseif handles.cc(i)=75
b=b+1;
elseif handles.cc(i)=60
c=c+1;
else
d=d+1;
end
end
y=[d,c,b,a];
figure;
subplot(2,2,1),bar(y)
title("成绩情况")
set(gca,'XTickLabel',{'不及格','及格','良好','优秀'});
xlabel('等级');
ylabel('人数');
explode=[0,0,0,1];
subplot(2,2,2),pie(y,explode);
legend('不及格','及格','良好','优秀','NorthEastOutside')
function pushbutton6_Callback(hObject, eventdata, handles)
a=0, b=a, c=b,d=c;
for i=1:length(handles.ccc)
if handles.ccc(i)>=85
a=a+1;
elseif handles.ccc(i)=75
b=b+1;
elseif handles.ccc(i)=60
c=c+1;
else
d=d+1;
end
end
y=[d,c,b,a];
figure
subplot(2,2,1),bar(y)
title("成绩情况")
set(gca,'XTickLabel',{'不及格','及格','良好','优秀'});
xlabel('等级');
ylabel('人数');
explode=[0,0,0,1];
subplot(2,2,2),pie(y,explode);
legend('不及格','及格','良好','优秀','NorthEastOutside')
function pushbutton7_Callback(hObject, eventdata, handles)
mc1=mean(handles.c);
mc2=mean(handles.cc);
mc3=mean(handles.ccc);
set(handles.m1, 'string' ,num2str(mc1));
set(handles.m2, 'string' ,num2str(mc2));
set(handles.m3, 'string' ,num2str(mc3));
function pushbutton8_Callback(hObject, eventdata, handles)
prompt={'请输入学号:'};
answer = inputdlg(prompt,'查找',[1 50]);
a=str2double(answer);
[j]=find(a==handles.sn);
%查找行数
if j
%输出信息
set(handles.studentnumber, 'string' ,num2str(handles.sn(j,1)));
set(handles.name, 'string' ,handles.nm(j,1));
set(handles.major, 'string' ,handles.m(j,1));
set(handles.c1, 'string' ,num2str(handles.c(j,1)));
set(handles.c2, 'string' ,num2str(handles.cc(j,1)));
set(handles.c3, 'string' ,num2str(handles.ccc(j,1)));
else
h=msgbox('输入学号没有查找到!','错误','warn');
waitfor(h);
end
function pushbutton9_Callback(hObject, eventdata, handles)
prompt={'请输入学号:'};
answer = inputdlg(prompt,'修改',[1 50]);
a=str2double(answer);
[j]=find(a==handles.sn);
%查找行数
if j
prompt={ '输入学号' , '输入姓名' ,'输入专业' , '课程1' , '课程2' '课程3' };
answer=inputdlg(prompt,'修改新的学生信息',[1 50;1 50;1 50;1 50;1 50;1 50]);
handles.sn(j,1)=str2double(answer{1,1});
handles.nm{j,1}=answer{2,1} ;
handles.m{j,1}=answer{3,1};
handles.c(j,1)=str2double(answer{4,1});
handles.cc(j,1)=str2double(answer{5,1});
handles.ccc(j,1)=str2double(answer{6,1});
%显示信息
set(handles.studentnumber, 'string' ,num2str(handles.sn));
set(handles.name, 'string' ,handles.nm);
set(handles.major, 'string' ,handles.m);
set(handles.c1, 'string' ,num2str(handles.c1));
set(handles.c2, 'string' ,num2str(handles.c2));
set(handles.c3, 'string' ,num2str(handles.c3));
guidata(hObject,handles);
else
h=msgbox('输入学号没有查找到!','错误','warn');
waitfor(h);
end
function pushbutton10_Callback(hObject, eventdata, handles)
function m1_Callback(hObject, eventdata, handles)
function m1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function m2_Callback(hObject, eventdata, handles)
function m2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function m3_Callback(hObject, eventdata, handles)
function m3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
六、登录程序设计界面(Load.fig)
程序设有登录界面,也是成绩管理系统必备的元素之一,不是大作业主要内容,附后。
七、登录程序运行界面
八、登录界面程序文件(Load.m)
function varargout = Load(varargin)
%LOAD MATLAB code file for Load.fig
% Last Modified by GUIDE v2.5 27-Nov-2021 13:49:06
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Load_OpeningFcn, ...
'gui_OutputFcn', @Load_OutputFcn, ...
'gui_LayoutFcn', [], ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
function Load_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
ha=axes('units','normalized','pos',[0 0 1 1]);
uistack(ha,'down');
ii=imread('1.jpeg');
image(ii);
colormap gray
set(ha,'handlevisibility','off','visible','on');
function varargout = Load_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles)
num1=str2num(get(handles.zhanghao,'string'));
num2=str2num(get(handles.mima,'string'));
if num1==1111&&num2==1111
main;
close(Load);
else;
errordlg('账号或密码有误!','错误');
set(handles.mima,'String','');
function zhanghao_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
function mima_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
function text1_CreateFcn(hObject, eventdata, handles)
function text2_CreateFcn(hObject, eventdata, handles)
九、大作业目录结构
领取专属 10元无门槛券
私享最新 技术干货