用GUI增长结构

时间:2015-03-16 02:04:49

标签: matlab user-interface struct

我一直在使用MATLAB中的一个小型定制数据库。

我有一个带有一堆“编辑文本”框和按钮的GUI。

关键是我应该能够注册一个未定义数量的学生,其中包含姓名,姓氏,代码等信息。我设法只存储一名学生(即我第一次按下'提交按钮' )但是当我输入另一个学生的信息时,MATLAB只会覆盖之前注册的信息。

这是“提交”按钮的回调

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'的全局变量。 我不确定我的代码是否没有正确循环。也许错误在那里,但我看不出如何解决它。 你能帮我解决一下我的代码吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定你想用循环实现什么,但我认为不需要它。此外,通过使用assignin,您将覆盖工作区中student_information的内容。除了student_information之外,最好在Submit_Callback中设置n全局,然后使用您的信息构建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;

并且应该将新条目附加到struct数组的末尾。