【问题标题】:Growing a struct with GUI使用 GUI 扩展结构
【发布时间】:2015-03-16 02:04:48
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: matlab user-interface struct


    【解决方案1】:

    我不确定你想用你的循环实现什么,但我认为没有必要。此外,通过使用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;
    

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

    【讨论】:

    • 好的。我已经修改了我的代码,它似乎可以工作,但我看不到结构在增长......现在,如果我想在工作区中查看并保存 student_information,我在 save_Callback 中将 student_information 设为全局,但和以前一样,结构会出现即使我提交了多个学生,也只有一个学生: function save_Callback(hObject, eventdata, handles) global student_information assignin('base', 'student_information', student_information)
    • 您确定正在访问代码吗?如果您的工作区中有一个 student_informationvariable 并在您的函数中声明它是全局的,它应该会增长。它是否覆盖了以前的信息?你到底看到了什么?
    • 你是对的。 student_information 未在工作区中声明为全局。现在它在增长,但从第 2 行开始。
    • 啊 - 我编辑了我的答案。那么你应该使用n。保留该全局定义,并在之前(如您的示例中)或之后增加它(如我的示例)。那应该解决它。
    • 你解决了。也许这很简单,但我真的玩得很糟糕。我真的很感激你花时间帮助我。谢谢!
    猜你喜欢
    • 2013-06-11
    • 2014-09-20
    • 2017-09-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多