首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MATLAB大作业选登-​学生成绩管理系统

[编者注:]程序有添加、查询、修改、删除功能 。有查询就有分支控制,这是数据库操作思想或理念,数据库操作必须有程序设计支持,由循环语句遍历每一条记录,由分支语句查找满足条件的记录(一般是索引字段,如学号,一卡通号,商品名称或商品编号,这些字段一般情况下都不允许修改),本作业用学号作为查询记录的字段,完成查询、修改、删除。

一、设计报告

名称:学生成绩管理系统

登录界面:初始账号密码均为为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)

九、大作业目录结构

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OyikznOOkgGhohCYWQA1GzCA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券