matlab应用guide,完成成绩管理系统图形用户界面的设计: (1) 有导入键,能够导入班级学习成绩的数据excel表格; (2) 有两个uitable,一个显示测每个学生的三门课程成绩数据,平均分以及绩点;一个显示该班级三门课程的平均、最高分、最低分; (3) 有下拉菜单,能够选择显示最高分、平均分、最低分 (4) 绘制出三门课在60以下,60-70、70-80、80-90、90-100,这五个阶段的直方图
时间: 2023-06-14 10:05:22 浏览: 635
以下是一个简单的成绩管理系统图形用户界面的设计,基于MATLAB的GUIDE工具。你可以根据自己的需求和实际情况进行修改和优化。
首先,我们在MATLAB的命令窗口中输入`guide`,打开GUIDE工具。然后,选择“Blank GUI (Default)”模板,点击“Create GUI”按钮,创建一个空的GUI窗口。
接下来,我们需要往GUI窗口中添加组件,包括按钮、下拉菜单、两个uitable和一个绘图区域。具体的组件添加步骤如下:
1. 添加导入按钮
在GUIDE工具的左侧工具箱中选择“Push Button”组件,然后在GUI窗口中点击鼠标左键,添加一个按钮。右键单击该按钮,选择“Property Inspector”,在“String”属性中输入“Import”,设置按钮的显示文本。
2. 添加下拉菜单
在GUIDE工具的左侧工具箱中选择“Pop-up Menu”组件,然后在GUI窗口中点击鼠标左键,添加一个下拉菜单。右键单击该下拉菜单,选择“Property Inspector”,在“String”属性中输入“Max Score|Average Score|Min Score”,设置下拉菜单的选项文本。
3. 添加两个uitable
在GUIDE工具的左侧工具箱中选择“Table”组件,然后在GUI窗口中点击鼠标左键,添加一个uitable。右键单击该uitable,选择“Property Inspector”,在“Position”属性中设置uitable的位置和大小。然后在“Column Name”属性中输入成绩表格的列名,如“Name|Chinese|Math|English|Average|GPA”,设置表格的列名。
重复上述步骤,添加第二个uitable,用于显示班级三门课程的平均、最高分、最低分。设置uitable的列名为“Course|Max Score|Average Score|Min Score”。
4. 添加绘图区域
在GUIDE工具的左侧工具箱中选择“Axes”组件,然后在GUI窗口中点击鼠标左键,添加一个绘图区域。右键单击该绘图区域,选择“Property Inspector”,在“Position”属性中设置绘图区域的位置和大小。
5. 设计界面布局
在GUIDE工具的“Layout Editor”中,通过拖拽和调整组件的位置和大小,设计好界面布局。例如,可以将导入按钮放在界面的左上角,下拉菜单放在右上角,两个uitable分别放在界面的左下角和右下角,绘图区域放在正中间。
6. 编写代码
在GUIDE工具的“Callback Editor”中,编写按钮和下拉菜单的回调函数,用于实现导入数据、显示成绩、绘制直方图等功能。具体的代码实现如下:
```matlab
function importButton_Callback(hObject, eventdata, handles)
% 导入数据按钮的回调函数
% 打开文件选择对话框,选择要导入的Excel文件
[filename, pathname] = uigetfile('*.xlsx', 'Select the Excel file');
if isequal(filename,0) || isequal(pathname,0)
return;
end
% 读取Excel文件中的数据
data = readtable(fullfile(pathname, filename));
% 将数据显示在第一个uitable中
set(handles.scoreTable, 'Data', table2cell(data));
% 计算每个学生的平均分和绩点
avg_score = mean(data{:, 2:4}, 2);
gpa = arrayfun(@score2gpa, avg_score);
% 将平均分和绩点添加到数据表中
data.Average = avg_score;
data.GPA = gpa;
% 将数据显示在第一个uitable中
set(handles.scoreTable, 'Data', table2cell(data));
% 计算班级三门课程的平均、最高分、最低分
course_names = {'Chinese', 'Math', 'English'};
course_stats = [];
for i = 1:length(course_names)
course_data = data{:, course_names{i}};
course_stats(i, 1) = mean(course_data);
course_stats(i, 2) = max(course_data);
course_stats(i, 3) = min(course_data);
end
% 将班级三门课程的统计信息显示在第二个uitable中
set(handles.courseTable, 'Data', [course_names', num2cell(course_stats)]);
% 显示直方图
axes(handles.histAxes);
histogram(data.Chinese, [0, 60, 70, 80, 90, 100]);
hold on;
histogram(data.Math, [0, 60, 70, 80, 90, 100]);
histogram(data.English, [0, 60, 70, 80, 90, 100]);
hold off;
legend('Chinese', 'Math', 'English');
xlabel('Score');
ylabel('Count');
title('Histogram of Course Scores');
function scoreTable_CellEditCallback(hObject, eventdata, handles)
% 成绩表格的编辑回调函数
% 获取编辑后的数据
new_data = get(hObject, 'Data');
% 计算每个学生的平均分和绩点
data = cell2table(new_data, 'VariableNames', {'Name', 'Chinese', 'Math', 'English', 'Average', 'GPA'});
avg_score = mean(data{:, 2:4}, 2);
gpa = arrayfun(@score2gpa, avg_score);
% 将平均分和绩点添加到数据表中
data.Average = avg_score;
data.GPA = gpa;
% 将更新后的数据表显示在第一个uitable中
set(handles.scoreTable, 'Data', table2cell(data));
% 计算班级三门课程的平均、最高分、最低分
course_names = {'Chinese', 'Math', 'English'};
course_stats = [];
for i = 1:length(course_names)
course_data = data{:, course_names{i}};
course_stats(i, 1) = mean(course_data);
course_stats(i, 2) = max(course_data);
course_stats(i, 3) = min(course_data);
end
% 将班级三门课程的统计信息显示在第二个uitable中
set(handles.courseTable, 'Data', [course_names', num2cell(course_stats)]);
% 显示直方图
axes(handles.histAxes);
histogram(data.Chinese, [0, 60, 70, 80, 90, 100]);
hold on;
histogram(data.Math, [0, 60, 70, 80, 90, 100]);
histogram(data.English, [0, 60, 70, 80, 90, 100]);
hold off;
legend('Chinese', 'Math', 'English');
xlabel('Score');
ylabel('Count');
title('Histogram of Course Scores');
function popMenu_Callback(hObject, eventdata, handles)
% 下拉菜单的回调函数
% 获取选中的选项
selected_option = get(hObject, 'Value');
% 根据选项显示最高分、平均分、最低分
data = get(handles.scoreTable, 'Data');
switch selected_option
case 1 % 最高分
max_score = max(cell2mat(data(:, 2:4)), [], 2);
set(handles.scoreTable, 'Data', [data, num2cell(max_score)]);
case 2 % 平均分
avg_score = mean(cell2mat(data(:, 2:4)), 2);
set(handles.scoreTable, 'Data', [data, num2cell(avg_score)]);
case 3 % 最低分
min_score = min(cell2mat(data(:, 2:4)), [], 2);
set(handles.scoreTable, 'Data', [data, num2cell(min_score)]);
end
function gpa = score2gpa(score)
% 根据分数计算绩点
if score >= 90
gpa = 4.0;
elseif score >= 85
gpa = 3.7;
elseif score >= 82
gpa = 3.3;
elseif score >= 78
gpa = 3.0;
elseif score >= 75
gpa = 2.7;
elseif score >= 72
gpa = 2.3;
elseif score >= 68
gpa = 2.0;
elseif score >= 64
gpa = 1.5;
elseif score >= 60
gpa = 1.0;
else
gpa = 0.0;
end
```
7. 运行程序
点击GUIDE工具的“Run”按钮,运行程序。在程序界面中,点击“Import”按钮,选择要导入的Excel文件,然后程序会自动显示成绩数据、平均分、绩点和班级三门课程的统计信息。可以通过下拉菜单选择要显示的最高分、平均分或最低分。同时,程序会在绘图区域中绘制出三门课在60以下,60-70、70-80、80-90、90-100,这五个阶段的直方图。
阅读全文