matlab实验报告Word文件下载.docx
《matlab实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《matlab实验报告Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
![matlab实验报告Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/29/11289e49-0abe-4787-9440-b89a15e7b39d/11289e49-0abe-4787-9440-b89a15e7b39d1.gif)
1、设计目的
MATLAB语言是集数值计算、图形绘制处理、文件管理、程序设计等功能于一身的系统软件。
其操作简单方便,它的数值分析、模拟与运算功能非常强大。
在欧美国家,它已成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能,它是研究和解决各种具体工程问题所必备的工具。
《MATLAB实践》课程是信息工程类专业的重要实践性课程。
主要通过MATLAB实践设计的训练,提高学生对已学相关专业知识的掌握和应用水平。
通过学习侧重培养学生树立如何运用所学的专业基础课程来选择设计题目,并培养学生合理安排实现设计的基本程序流程,利用强大的仿真功能与丰富的工具箱来制作、调试、评价自己设计的作品。
通过课程实践教学,培养学生将已学课程基础理论与实践环节实际相结合。
提高学生实践动手能力,为日后参加工作奠定一定的实践基础。
2、题目分析
此次课程设计的题目是《基于MATLABGUI的成绩管理系统》。
对学生的成绩进行管理是每个学校、每个老师工作中必不可少的一部分。
传统的统计方法是利用计算器求出每个学生、每个班的总分,平均分等等,效率非常低。
在计算机普及后,更多人选择利用微软办公软件中excel表格,大大的提高了工作效率,但是对于一些比较年老的老教师来说,接触计算机的时间较少,使用excel对他们来说是个难题。
那么有一个使用起来简单且易操作的学生管理系统软件就非常的必要。
软件设计目的是通过运用MATLAB实现MATLAB的GUI程序设计成绩管理系统来培养学生的软件工程实践能力,增强学生程序设计能力和解决实际问题的能力。
设计内容:
设计和实现一个成绩管理系统。
要求:
按照软件工程方法,根据需求进行程序的功能分析和界面设计,并给出设计详细说明。
程序具有的功能:
1)学生成绩的录入和保存
2)学生成绩的查询
3)求班上单科平均分
3、总体设计
3.1程序设计总框架
3.2功能模块化分
1)文件打开:
打开路径文件工作表。
2)成绩录入:
添加成绩并显示。
3)成绩查询:
查询对应姓名的学生成绩。
4)平均分:
求取每个班的单科平均分。
5)退出系统
4、具体设计
4.1各功能界面设计
所用组件:
“text”组件:
9个,显示各种标注
“pushbutton”组件:
4个,分别用于读取文件、成绩录入、求平均分和退出系统
“listbox”组件:
1个,显示学生姓名
“edit”组件:
5个,显示路径、每个学生的学号和各科成绩、班级各科平均分。
设计的界面入下图所示:
4.2各功能模块实现
1)成绩录入
对pushbutton3(成绩录入)控件采用回调函数实现成绩的录入。
利用prompt显示一个提示对话框,包含name、number、Chinese、math、English四个待输入的内容。
定义矩阵p保存所输入的数据。
在录入成绩时是按列的,要能够在excel表格中显示,应先将其进行转置,变成行,才能与excel表格相对应。
用xlswrite函数将所输入的数据写入excel表格中。
函数代码:
prompt={'
name'
'
number'
chinese'
math'
'
english'
};
defans={'
'
p=inputdlg(prompt,'
成绩录入'
1,defans,'
on'
);
q=p'
xlswrite('
chengjidan.xls'
{'
})
a=xlswrite('
q,'
A12:
E12'
)
2)读取文件
读取excel文件工作表。
对pushbutton1控件采用回调函数,用set函数分别将文件的路径和学生的姓名显示在edit1和listbox1中。
用xlsread函数读取excel表格中的数据
[filenamepathname]=uigetfile(('
*.xls'
),'
chooseafile'
str=[pathnamefilename];
set(handles.edit1,'
string'
str);
[chengjiname]=xlsread(str);
set(handles.listbox1,'
name(:
1));
handles.chengji=chengji;
guidata(hObject,handles);
3)查询成绩
在listbox1中选中一个学生的姓名,可以在edit2中显示该学生的学号和成绩
如果想同时查询多个学生的成绩,可以同时选中所要的学生,那么edit2会同时
显示出所选中学生的学号和成绩。
想要显示多个学生的成绩,需将listbox1和edit2
中的max改成多个(将1改成10)
函数代码
value=get(hObject,'
value'
)-1;
set(handles.edit2,'
num2str(handles.chengji(value,:
)));
4)求平均分
定义三个矩阵yuwen、shuxue、yingyu分别存储每一个学生的语文、数学、英语
成绩,对这三个矩阵进行求和,然后求平均值。
yuwen=xlsread('
sheet1'
C2:
C12'
shuxue=xlsread('
D2:
D12'
yingyu=xlsread('
E2:
sum1=sum(yuwen);
sum2=sum(shuxue);
sum3=sum(yingyu);
aver1=sum1/11;
aver2=sum2/11;
aver3=sum3/11;
set(handles.edit3,'
aver1)
set(handles.edit4,'
aver2)
set(handles.edit5,'
aver3)
对pushbutton4控件进行回调函数
clc;
clearall;
close(gcf);
4.3各功能模块调试结果
若在成绩录入的输入框中输入下图的内容,那么在chengjidan.xls中显示如下
程序调试时,将学生的姓名、学号和成绩输入后,在excel表格中只能显示学生的姓名,且在学号和成绩项中显示的也是学生的姓名。
后来发现是因为输入时时列矩阵,但excel表格中需要的是行矩阵,所以就采用转置,将列转置成行。
由于弄不明白如何实现多次录入数据,所以学生的数据录入只能录入一个,不能录入多个。
2)读取文件
对文件的读取只能读取excel表格,不能读取txt格式或其他格式的文件。
如果
想要读取所有的文件,将函数中的
修改成[FileNamePathName]=uigetfile({'
ExcelFiles(*.xls)'
;
...
'
*.txt'
TxtFiles(*.txt)'
*.*'
AllFiles(*.*)'
},'
chooseaFile'
然后用switchcase语句分别对xls,txt格式的文件进行读取。
程序运行结果
在listbox1中显示学生姓名
查询一个学生的成绩
查询多个学生的成绩
在学生人数较少时,可以在listbox1直接查找学生的姓名并显示相应的成绩,
但是当学生的人数非常多时,那么程序的效率就很低。
经老师的指导后,可以将输入所要查询学生的姓名或学号,然后与所有学生的姓名或学号进行比较,找到相同的字符,并显示所对应的成绩。
程序运行结果:
看一下求平均分的函数代码就可以发现代码虽然原理简单,但有些啰嗦,经过老师的指导,知道在MATLAB中有自带求平均值得函数mean。
函数代码如下:
mean(handles.chengji(value,:
点击“退出系统”按钮后,程序关闭。
5、小结和心得
通过这次的课程设计实践,,我了解和基本掌握了MATLAB的GUI程序设计的方法,也了解了在程序中一些函数的用法和意义,学会了如何使用回调函数来实现设计所需的功能。
在学习中,碰到很多不懂得知识,通过老师给的视频、与同学的交流和自己上网搜索查找相应的资料得以解决。
此学生管理系统基本完成了录入、查询、求值的功能,但还有很多细节需要考虑和修改。
在刚开始设计程序时,像只无头苍蝇,不知道要如何去写代码。
设计界面的时候,想要弄得好看点,问了老师相关的函数代码,可仍弄得乱七八糟的,本来想用axes控件显示背景图片,可能是图片太小了,不够清晰,只能显示在界面的中间。
后来又试了用多个axes控件来显示背景,但程序运行时却出现问题了,这样改来改去的,别的同学都在写程序了,我的界面都还没设计好,最后就用最简单的界面。
刚开始写程序时,脑子一片空白,在看了视频教程后,结合自己所需要的程序功能,对它们进行思考和分析。
这次课程设计的完成,让我对MATLAB有了更深层次的了解,也体会到设计程序的乐趣,在未来的学习中,要将这个程序进一步的完善,这对我在日后的学习和工作有很大的帮助。
参考书目:
[1]《MATLAB实用教程》郑阿奇电子工业出版社
[2]MATLAB中文论坛
[3]网络资料