大家好,又见面了,我是你们的朋友全栈君。
设计一个简单的学生成绩管理程序,包含如下功能:
1、可创建不少于100名学生成员;
2、每名成员的记录包括:学号、姓名、专业和5门课程的成绩;
3、能够实现添加、删除、修改学生成员;(增加非法字符警告)
4、能够实现添加、删除、修改学生成员的课程成绩;(增加非法字符警告)
5、分别计算每一门课程的平均成绩;
6、每一门课程单独排序,输出由高到低的课程、姓名、成绩信息。
7、提供图形界面实现上述功能,界面包含
系统登录界面
添加、删除、修改界面
被选中学生信息显示界面(基本信息,课程成绩,平均成绩)
被选中课程信息显示界面(排序后的课程成绩,学生基本信息)
参考博客:用MATLAB GUI做一个简单的绩点计算界面
完整文件链接
下载后文件夹放入工作路径,运行zy4.m初始账号和密码都是1111
运行界面先点击导入学生信息,不然会报错QAQ
下面是详细教程
1.打开matlab在命令行输入guide
2.点击blank gui 创建一个空白界面
常用控件
3.现在开始简单的登录界面制作
我们现在刚刚的空白界面上添加几个控件,直接从左侧的控件中拖过来即可。
我们可以通过双击控件来修改该控件的属性,这里我们先修改第一个文本框的属性:
上图中我分别修改了3个属性:将显示的字体设为12号、将默认显示的字符串设为“学生管理系统登录界面”、这里需要重点注意的是Tag属性,它每个控件的句柄名,可以理解为每一个控件的名字,在下面写回调函数的时候,都需要通过Tag属性的值来传递数据,因此,所有控件的Tag属性内容不能相同。
按照相同的方法我们依次修改剩下来的控件的属性
右击求和按钮选择查看回调,继续选择Callback,会打开zy4.m文件,并自动创建回调函数,如下图:
在下面编辑代码
msgbox用法
然后再设置个背景
设置背景
ha=axes('units','normalized','pos',[0 0 1 1]);
uistack(ha,'down');
ii=imread('denglubj.jpg');
image(ii);
colormap gray
set(ha,'handlevisibility','off','visible','on');
然后运行看看结果
4.运行界面设计
先看看成品效果
下面内容比较多,没时间可以下载我的完整代码
下载链接
这是gui设计界面
先看导入文件
这是文件信息
导入表数据的回调函数
xlsread函数
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global NUM TXT Hang Lie
[NUM,TXT]= xlsread('学生信息.xlsx');
% 打开表格
[Hang,Lie]=size(TXT);
handles.xh=NUM( : ,1);
handles.xm=TXT(2:end,2);
handles.zy=TXT(2:end,3);
handles.k1=NUM( : ,4);
handles.k2=NUM( : ,5);
handles.k3=NUM( : ,6);
handles.k4=NUM( : ,7);
handles.k5=NUM( : ,8);
% 导入成绩表信息
guidata(hObject,handles) ;
%显示信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
% --- Executes on selection change in xuehao.
给出一些函数的方法
inputdlg
下面依次给出添加、删除、查找、修改、求平均成绩和按课程成绩排序按钮的回调函数
添加
function tianjia_Callback(hObject, eventdata, handles)%添加函数
% hObject handle to tianjia (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
prompt={
'输入学号' , '输入姓名' ,'输入专业' , '课程1' , '课程2' '课程3' , '课程4', '课程5' };
answer=inputdlg(prompt,'修改新的学生信息',[1 50;1 50;1 50;1 50;1 50;1 50;1 50;1 50]);
n=length(handles.xh);
handles.xh(n+1,1)=str2double(answer{
1,1});
handles.xm{
n+1,1}=answer{
2,1} ;
handles.zy{
n+1,1}=answer{
3,1};
handles.k1(n+1,1)=str2double(answer{
4,1} );
handles.k2(n+1,1)=str2double(answer{
5,1} );
handles.k3(n+1,1)=str2double(answer{
6,1} );
handles.k4(n+1,1)=str2double(answer{
7,1} );
handles.k5(n+1,1)=str2double(answer{
8,1} );
guidata(hObject,handles);
%显示信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
%%暂时没存
% --- Executes on button press in shanchu.
删除
function shanchu_Callback(hObject, eventdata, handles)
% hObject handle to shanchu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
prompt={
'请输入学号:'};
answer = inputdlg(prompt,'删除',[1 50]);
a=str2double(answer);
[j]=find(a==handles.xh);
%查找行数
if j
handles.xh(j, : )=[ ] ;
handles.xm(j, : )=[ ] ;
handles.zy(j, : )=[ ] ;
handles.k1(j, : )=[ ] ;
handles.k2(j, : )=[ ] ;
handles.k3(j, : )=[ ] ;
handles.k4(j, : )=[ ] ;
handles.k5(j, : )=[ ] ;
%输出信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
else
h=msgbox('输入学号没有查找到!','错误','warn');
waitfor(h);
end
% --- Executes on button press in xiugai.
查找
function chaz_Callback(hObject, eventdata, handles)
% hObject handle to chaz (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%prompt={
'输入学号' } ;
%name=inputdlg(prompt,'查找') ;
prompt={
'请输入学号:'};
answer = inputdlg(prompt,'查找',[1 50]);
a=str2double(answer);
[j]=find(a==handles.xh);
%查找行数
if j
%输出信息
set(handles.xuehao, 'string' ,num2str(handles.xh(j,1)));
set(handles.xinming, 'string' ,handles.xm(j,1));
set(handles.zhuanye, 'string' ,handles.zy(j,1));
set(handles.kc1, 'string' ,num2str(handles.k1(j,1)));
set(handles.kc2, 'string' ,num2str(handles.k2(j,1)));
set(handles.kc3, 'string' ,num2str(handles.k3(j,1)));
set(handles.kc4, 'string' ,num2str(handles.k4(j,1)));
set(handles.kc5, 'string' ,num2str(handles.k5(j,1)));
else
h=msgbox('输入学号没有查找到!','错误','warn');
waitfor(h);
end
% --- Executes on button press in tianjia.
修改
function xiugai_Callback(hObject, eventdata, handles)
% hObject handle to xiugai (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
prompt={
'请输入学号:'};
answer = inputdlg(prompt,'修改',[1 50]);
a=str2double(answer);
[j]=find(a==handles.xh);
%查找行数
if j
prompt={
'输入学号' , '输入姓名' ,'输入专业' , '课程1' , '课程2' '课程3' , '课程4', '课程5' };
answer=inputdlg(prompt,'修改新的学生信息',[1 50;1 50;1 50;1 50;1 50;1 50;1 50;1 50]);
handles.xh(j,1)=str2double(answer{
1,1});
handles.xm{
j,1}=answer{
2,1} ;
handles.zy{
j,1}=answer{
3,1};
handles.k1(j,1)=str2double(answer{
4,1} );
handles.k2(j,1)=str2double(answer{
5,1} );
handles.k3(j,1)=str2double(answer{
6,1} );
handles.k4(j,1)=str2double(answer{
7,1} );
handles.k5(j,1)=str2double(answer{
8,1} );
%显示信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
guidata(hObject,handles);
else
h=msgbox('输入学号没有查找到!','错误','warn');
waitfor(h);
end
% --- Executes on button press in pj.
平均成绩
使用mean函数
function pj_Callback(hObject, eventdata, handles)
% hObject handle to pj (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
mk1=mean(handles.k1);
mk2=mean(handles.k2);
mk3=mean(handles.k3);
mk4=mean(handles.k4);
mk5=mean(handles.k5);
set(handles.kc1, 'string' ,num2str(mk1));
set(handles.kc2, 'string' ,num2str(mk2));
set(handles.kc3, 'string' ,num2str(mk3));
set(handles.kc4, 'string' ,num2str(mk4));
set(handles.kc5, 'string' ,num2str(mk5));
% --- Executes on selection change in popupmenu1.
排序函数 我使用的简单的冒泡排序
function px_Callback(hObject, eventdata, handles)
% hObject handle to px (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
prompt={
'请输入课程编号:'};
answer = inputdlg(prompt,'输入排序的课程',[1 50]);
a=str2double(answer);
n=length(handles.xh);
if a==1||a==2||a==3||a==4||a==5
switch a
case 1
for i=1:n
for j=1:n-i
if handles.k1(j)<handles.k1(j+1)
handles.xh(n+1)=handles.xh(j);
handles.xm(n+1)=handles.xm(j);
handles.zy(n+1)=handles.zy(j);
handles.k1(n+1)=handles.k1(j);
handles.k2(n+1)=handles.k2(j);
handles.k3(n+1)=handles.k3(j);
handles.k4(n+1)=handles.k4(j);
handles.k5(n+1)=handles.k5(j);
handles.xh(j)=handles.xh(j+1);
handles.xm(j)=handles.xm(j+1);
handles.zy(j)=handles.zy(j+1);
handles.k1(j)=handles.k1(j+1);
handles.k2(j)=handles.k2(j+1);
handles.k3(j)=handles.k3(j+1);
handles.k4(j)=handles.k4(j+1);
handles.k5(j)=handles.k5(j+1);
handles.xh(j+1)=handles.xh(n+1);
handles.xm(j+1)=handles.xm(n+1);
handles.zy(j+1)=handles.zy(n+1);
handles.k1(j+1)=handles.k1(n+1);
handles.k2(j+1)=handles.k2(n+1);
handles.k3(j+1)=handles.k3(n+1);
handles.k4(j+1)=handles.k4(n+1);
handles.k5(j+1)=handles.k5(n+1);
end
end
end
j=n+1;
handles.xh(j, : )=[ ] ;
handles.xm(j, : )=[ ] ;
handles.zy(j, : )=[ ] ;
handles.k1(j, : )=[ ] ;
handles.k2(j, : )=[ ] ;
handles.k3(j, : )=[ ] ;
handles.k4(j, : )=[ ] ;
handles.k5(j, : )=[ ] ;
%显示信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
case 2
for i=1:n
for j=1:n-i
if handles.k2(j)<handles.k2(j+1)
handles.xh(n+1)=handles.xh(j);
handles.xm(n+1)=handles.xm(j);
handles.zy(n+1)=handles.zy(j);
handles.k1(n+1)=handles.k1(j);
handles.k2(n+1)=handles.k2(j);
handles.k3(n+1)=handles.k3(j);
handles.k4(n+1)=handles.k4(j);
handles.k5(n+1)=handles.k5(j);
handles.xh(j)=handles.xh(j+1);
handles.xm(j)=handles.xm(j+1);
handles.zy(j)=handles.zy(j+1);
handles.k1(j)=handles.k1(j+1);
handles.k2(j)=handles.k2(j+1);
handles.k3(j)=handles.k3(j+1);
handles.k4(j)=handles.k4(j+1);
handles.k5(j)=handles.k5(j+1);
handles.xh(j+1)=handles.xh(n+1);
handles.xm(j+1)=handles.xm(n+1);
handles.zy(j+1)=handles.zy(n+1);
handles.k1(j+1)=handles.k1(n+1);
handles.k2(j+1)=handles.k2(n+1);
handles.k3(j+1)=handles.k3(n+1);
handles.k4(j+1)=handles.k4(n+1);
handles.k5(j+1)=handles.k5(n+1);
end
end
end
j=n+1;
handles.xh(j, : )=[ ] ;
handles.xm(j, : )=[ ] ;
handles.zy(j, : )=[ ] ;
handles.k1(j, : )=[ ] ;
handles.k2(j, : )=[ ] ;
handles.k3(j, : )=[ ] ;
handles.k4(j, : )=[ ] ;
handles.k5(j, : )=[ ] ;
%显示信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
case 3
for i=1:n
for j=1:n-i
if handles.k3(j)<handles.k3(j+1)
handles.xh(n+1)=handles.xh(j);
handles.xm(n+1)=handles.xm(j);
handles.zy(n+1)=handles.zy(j);
handles.k1(n+1)=handles.k1(j);
handles.k2(n+1)=handles.k2(j);
handles.k3(n+1)=handles.k3(j);
handles.k4(n+1)=handles.k4(j);
handles.k5(n+1)=handles.k5(j);
handles.xh(j)=handles.xh(j+1);
handles.xm(j)=handles.xm(j+1);
handles.zy(j)=handles.zy(j+1);
handles.k1(j)=handles.k1(j+1);
handles.k2(j)=handles.k2(j+1);
handles.k3(j)=handles.k3(j+1);
handles.k4(j)=handles.k4(j+1);
handles.k5(j)=handles.k5(j+1);
handles.xh(j+1)=handles.xh(n+1);
handles.xm(j+1)=handles.xm(n+1);
handles.zy(j+1)=handles.zy(n+1);
handles.k1(j+1)=handles.k1(n+1);
handles.k2(j+1)=handles.k2(n+1);
handles.k3(j+1)=handles.k3(n+1);
handles.k4(j+1)=handles.k4(n+1);
handles.k5(j+1)=handles.k5(n+1);
end
end
end
j=n+1;
handles.xh(j, : )=[ ] ;
handles.xm(j, : )=[ ] ;
handles.zy(j, : )=[ ] ;
handles.k1(j, : )=[ ] ;
handles.k2(j, : )=[ ] ;
handles.k3(j, : )=[ ] ;
handles.k4(j, : )=[ ] ;
handles.k5(j, : )=[ ] ;
%显示信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
case 4
for i=1:n
for j=1:n-i
if handles.k4(j)<handles.k4(j+1)
handles.xh(n+1)=handles.xh(j);
handles.xm(n+1)=handles.xm(j);
handles.zy(n+1)=handles.zy(j);
handles.k1(n+1)=handles.k1(j);
handles.k2(n+1)=handles.k2(j);
handles.k3(n+1)=handles.k3(j);
handles.k4(n+1)=handles.k4(j);
handles.k5(n+1)=handles.k5(j);
handles.xh(j)=handles.xh(j+1);
handles.xm(j)=handles.xm(j+1);
handles.zy(j)=handles.zy(j+1);
handles.k1(j)=handles.k1(j+1);
handles.k2(j)=handles.k2(j+1);
handles.k3(j)=handles.k3(j+1);
handles.k4(j)=handles.k4(j+1);
handles.k5(j)=handles.k5(j+1);
handles.xh(j+1)=handles.xh(n+1);
handles.xm(j+1)=handles.xm(n+1);
handles.zy(j+1)=handles.zy(n+1);
handles.k1(j+1)=handles.k1(n+1);
handles.k2(j+1)=handles.k2(n+1);
handles.k3(j+1)=handles.k3(n+1);
handles.k4(j+1)=handles.k4(n+1);
handles.k5(j+1)=handles.k5(n+1);
end
end
end
j=n+1;
handles.xh(j, : )=[ ] ;
handles.xm(j, : )=[ ] ;
handles.zy(j, : )=[ ] ;
handles.k1(j, : )=[ ] ;
handles.k2(j, : )=[ ] ;
handles.k3(j, : )=[ ] ;
handles.k4(j, : )=[ ] ;
handles.k5(j, : )=[ ] ;
%显示信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
case 5
for i=1:n
for j=1:n-i
if handles.k5(j)<handles.k5(j+1)
handles.xh(n+1)=handles.xh(j);
handles.xm(n+1)=handles.xm(j);
handles.zy(n+1)=handles.zy(j);
handles.k1(n+1)=handles.k1(j);
handles.k2(n+1)=handles.k2(j);
handles.k3(n+1)=handles.k3(j);
handles.k4(n+1)=handles.k4(j);
handles.k5(n+1)=handles.k5(j);
handles.xh(j)=handles.xh(j+1);
handles.xm(j)=handles.xm(j+1);
handles.zy(j)=handles.zy(j+1);
handles.k1(j)=handles.k1(j+1);
handles.k2(j)=handles.k2(j+1);
handles.k3(j)=handles.k3(j+1);
handles.k4(j)=handles.k4(j+1);
handles.k5(j)=handles.k5(j+1);
handles.xh(j+1)=handles.xh(n+1);
handles.xm(j+1)=handles.xm(n+1);
handles.zy(j+1)=handles.zy(n+1);
handles.k1(j+1)=handles.k1(n+1);
handles.k2(j+1)=handles.k2(n+1);
handles.k3(j+1)=handles.k3(n+1);
handles.k4(j+1)=handles.k4(n+1);
handles.k5(j+1)=handles.k5(n+1);
end
end
end
j=n+1;
handles.xh(j, : )=[ ] ;
handles.xm(j, : )=[ ] ;
handles.zy(j, : )=[ ] ;
handles.k1(j, : )=[ ] ;
handles.k2(j, : )=[ ] ;
handles.k3(j, : )=[ ] ;
handles.k4(j, : )=[ ] ;
handles.k5(j, : )=[ ] ;
%显示信息
set(handles.xuehao, 'string' ,num2str(handles.xh));
set(handles.xinming, 'string' ,handles.xm);
set(handles.zhuanye, 'string' ,handles.zy);
set(handles.kc1, 'string' ,num2str(handles.k1));
set(handles.kc2, 'string' ,num2str(handles.k2));
set(handles.kc3, 'string' ,num2str(handles.k3));
set(handles.kc4, 'string' ,num2str(handles.k4));
set(handles.kc5, 'string' ,num2str(handles.k5));
end
else
h=msgbox('输入课程编号不是1至5!','错误','warn');
waitfor(h);
end
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141612.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...