使用 GUI 扩展结构
Growing a struct with GUI
我一直在使用 MATLAB 开发一个定制的小型数据库。
我有一个带有一堆 'Edit Text' 框和按钮的 GUI。
关键是我应该能够用名字、姓氏、代码等信息注册不确定数量的学生。我设法只存储了一个学生(即我第一次按下 'Submit Button') 但是当我输入另一个学生的信息时,MATLAB 只是覆盖了之前注册的信息。
这是 'Submit' 按钮的回调
function Submit_Callback(hObject, eventdata, handles)
global n
n=n+1
% hObject handle to Submit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
name1 = get(handles.name,'String'); %edit1 being Tag of ur edit box
name2=get(handles.name2,'String');
name3=get(handles.name3,'String');
major=get(handles.major,'String');
labavg=num2str(get(handles.labavg,'String'));
finalgrade=num2str(get(handles.finalgrade,'String'));
email=num2str(get(handles.email,'String'));
code=num2str(get(handles.code,'String'));
for ii=1:numel(n)
student_information(ii).name=name1
student_information(ii).surname1=name2
student_information(ii).surname2=name3
student_information(ii).code=code
student_information(ii).major=major
student_information(ii).final_grade=finalgrade
student_information(ii).laboratory_average=labavg
student_information(ii).email=email
end
assignin('base', 'student_information', student_information)
end
我已将计数器 'n' 声明为工作区中设置为“0”的全局变量。
我不确定我的代码是否没有正确循环。也许错误在那里,但我看不出如何解决它。
你能帮我看看我的代码吗?
谢谢!
我不确定您试图通过循环实现什么,但我认为没有必要这样做。此外,通过使用 assignin
,您将覆盖工作区中 student_information
的内容。除了 n
之外,您最好在 Submit_Callback
中使 student_information
全局化,然后使用您的信息构造一个 new_student
结构并将其附加到 student_information
,如下所示:
name1 = get(handles.name,'String'); %edit1 being Tag of ur edit box
name2=get(handles.name2,'String');
name3=get(handles.name3,'String');
major=get(handles.major,'String');
labavg=num2str(get(handles.labavg,'String'));
finalgrade=num2str(get(handles.finalgrade,'String'));
email=num2str(get(handles.email,'String'));
code=num2str(get(handles.code,'String'));
new_student.name = name1;
new_student.surname1 = name2;
new_student.surname2 = name3;
new_student.major = major;
new_student.laboratory_average = labavg;
new_student.final_grade = finalgrade;
new_student.email = email;
new_student.code = code;
student_information(n) = new_student;
n = n + 1;
这应该将新条目附加到结构数组的末尾。
我一直在使用 MATLAB 开发一个定制的小型数据库。
我有一个带有一堆 'Edit Text' 框和按钮的 GUI。
关键是我应该能够用名字、姓氏、代码等信息注册不确定数量的学生。我设法只存储了一个学生(即我第一次按下 'Submit Button') 但是当我输入另一个学生的信息时,MATLAB 只是覆盖了之前注册的信息。
这是 'Submit' 按钮的回调
function Submit_Callback(hObject, eventdata, handles)
global n
n=n+1
% hObject handle to Submit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
name1 = get(handles.name,'String'); %edit1 being Tag of ur edit box
name2=get(handles.name2,'String');
name3=get(handles.name3,'String');
major=get(handles.major,'String');
labavg=num2str(get(handles.labavg,'String'));
finalgrade=num2str(get(handles.finalgrade,'String'));
email=num2str(get(handles.email,'String'));
code=num2str(get(handles.code,'String'));
for ii=1:numel(n)
student_information(ii).name=name1
student_information(ii).surname1=name2
student_information(ii).surname2=name3
student_information(ii).code=code
student_information(ii).major=major
student_information(ii).final_grade=finalgrade
student_information(ii).laboratory_average=labavg
student_information(ii).email=email
end
assignin('base', 'student_information', student_information)
end
我已将计数器 'n' 声明为工作区中设置为“0”的全局变量。 我不确定我的代码是否没有正确循环。也许错误在那里,但我看不出如何解决它。 你能帮我看看我的代码吗?
谢谢!
我不确定您试图通过循环实现什么,但我认为没有必要这样做。此外,通过使用 assignin
,您将覆盖工作区中 student_information
的内容。除了 n
之外,您最好在 Submit_Callback
中使 student_information
全局化,然后使用您的信息构造一个 new_student
结构并将其附加到 student_information
,如下所示:
name1 = get(handles.name,'String'); %edit1 being Tag of ur edit box
name2=get(handles.name2,'String');
name3=get(handles.name3,'String');
major=get(handles.major,'String');
labavg=num2str(get(handles.labavg,'String'));
finalgrade=num2str(get(handles.finalgrade,'String'));
email=num2str(get(handles.email,'String'));
code=num2str(get(handles.code,'String'));
new_student.name = name1;
new_student.surname1 = name2;
new_student.surname2 = name3;
new_student.major = major;
new_student.laboratory_average = labavg;
new_student.final_grade = finalgrade;
new_student.email = email;
new_student.code = code;
student_information(n) = new_student;
n = n + 1;
这应该将新条目附加到结构数组的末尾。