設計一個簡單的學生成績管理程式,包含如下功能:
1、可創建不少于100名學生成員;
2、每名成員的記錄包括:學號、姓名、專業和5門課程的成績;?
3、能夠實作添加、洗掉、修改學生成員;(增加非法字符警告)
4、能夠實作添加、洗掉、修改學生成員的課程成績;(增加非法字符警告)
5、分別計算每一門課程的平均成績;
6、每一門課程單獨排序,輸出由高到低的課程、姓名、成績資訊,
7、提供圖形界面實作上述功能,界面包含
? 系統登錄界面
? 添加、洗掉、修改界面
? 被選中學生資訊顯示界面(基本資訊,課程成績,平均成績)
? 被選中課程資訊顯示界面(排序后的課程成績,學生基本資訊)
參考博客:用MATLAB GUI做一個簡單的績點計算界面
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/286423.html
標籤:其他
上一篇:C++記憶體管理
