至诚Matlab课程设计报告_第1页
至诚Matlab课程设计报告_第2页
至诚Matlab课程设计报告_第3页
至诚Matlab课程设计报告_第4页
至诚Matlab课程设计报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

至诚学院《MATLAB实践》课程设计学生姓名:李志航学号:210991026专业班级:电子信息工程指导教师:郑晓明二○一二年四月二十日目录1.设计目的…………………32.题目分析……………………33.总体设计……………………34.具体设计……………………45.小结和心得…………………16设计目的MATLAB语言是集数值计算、图形绘制处理、文件管理、程序设计等功能于一身的系统软件。其操作简单方便,它的数值分析、模拟与运算功能非常强大。在欧美国家,它已成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能,它是研究和解决各种具体工程问题所必备的工具。

《MATLAB实践》课程是信息工程类专业的重要实践性课程。主要通过MATLAB实践设计的训练,提高我们对已学相关专业知识的掌握和应用水平。通过学习侧重培养我们树立如何运用所学的专业基础课程来选择设计题目,并培养我们合理安排实现设计的基本程序流程,利用强大的仿真功能与丰富的工具箱来制作、调试、评价自己设计的作品。

通过课程实践教学,培养我们将已学课程基础理论与实践环节实际相结合。提高我们实践动手能力,为日后参加工作奠定一定的实践基础。2、题目分析 此次我选择的实践题目是基于MATLABGUI的成绩管理系统,通过软件设计能更准确迅速获得学生学习的状况,有一个整体思想,其次更能很好的认知并熟练运用MATLAB进行操作与设计。根据要求,我设计了以下内容:添加,查找,删除,修改、图表等功能。并能对excel表格进行操作读与写。3、总体设计根据题目所叙述,一个成绩管理系统至少要包含录入、添加、查询、删除等功能。因此我分成七个界面来更好的实施功能化。第一个界面是主界面,以便用户来选择操作,里面有查询,统计、录入、一览、修改、删除。单击不同按钮就能进入相应的界面。第二个界面是查询界面。里面有以科目查询、以学号查询、以姓名查询。第三个界面是统计界面。里面有成绩分布表、平均分、以及高低分和对应的同学。第四个界面是录入界面。里面有添加按钮,添加一个学生的信息。并提供显示学生信息。第五个界面是成绩一览界面。里面有所有学生的信息,和他们的成绩状况。第六个界面是成绩修改界面。里面有以学号或者姓名查询后修改。第七个界面是成绩删除几面。里面有以学号或者姓名查询后删除。并提供一个可视显示框。4、具体设计4.1成绩管理系统主界面4.1.1(GUI界面设计)4.1.2(功能模块实现)在界面上添加一个button按钮,在其回调函数写入run(**),其中**是指向对应另一个GUI功能模块的名字。例如在成绩查询按钮,其回调函数为run(inquest)4.1.3(实现结果)跳转到相应的界面。4.2查询主界面4.2.1(GUI界面设计)4.2.2(功能模块实现)对于学号查询,利用可编辑文本框作为输入信息,学号查询按钮作为执行操作按钮。有若干个静态文本框作为标识来表明信息。学号查询按钮的回调函数:i=str2num(get(handles.edit1,'string'));[axingming]=xlsread('chengji.xls');[ia,ja]=find(a==i);ic=ia+1;set(handles.edit7,'string',handles.xingming(ic,2));set(handles.edit6,'string',handles.chengji(ia,:));set(handles.edit9,'string',handles.xuehao(ia,:));输入参数为可编辑文本框的string,输出参数为xingming、chengji、xuehao的string。此回调函数首先读取可编辑文本框的string并赋值给i,后读取表格中的信息。通过find函数找到与i一样的行与列,利用行的信息,通过set函数,对各个文本框的string进行赋值。对于科目查询,利用可编辑文本框作为输入信息,科目查询按钮作为执行操作按钮。有若干个静态文本框作为标识来表明信息。科目查询按钮的回调函数:kemu=get(handles.edit2,'string');switchkemucase'Chinese'set(handles.edit6,'string',handles.chengji(:,5));set(handles.edit7,'string',handles.xingming(2:end,2));set(handles.edit9,'string',handles.xuehao(:,:));case'Math'set(handles.edit6,'string',handles.chengji(:,3));set(handles.edit7,'string',handles.xingming(2:end,2));set(handles.edit9,'string',handles.xuehao(:,:));case'English'set(handles.edit6,'string',handles.chengji(:,4));set(handles.edit7,'string',handles.xingming(2:end,2));set(handles.edit9,'string',handles.xuehao(:,:));otherwiseend输入参数为可编辑文本框的string,输出参数为xingming、chengji、xuehao的string。此回调函数首先读取可编辑文本框的string并赋值给kemu的局部变量,通过switchcase对比里面的值,找到后通过set函数,对各个文本框的string进行赋值。对于姓名查询,利用可编辑文本框作为输入信息,姓名查询按钮作为执行操作按钮。有若干个静态文本框作为标识来表明信息。姓名查询的回调函数:[axingming]=xlsread('chengji.xls');name=xingming(2:end,2);NAME=get(handles.lxingming,'string');name1=strcmp(name,NAME);[i,j]=find(name1==1)zzz=i+1;set(handles.edit6,'string',handles.chengji(i,:));set(handles.edit7,'string',handles.xingming(zzz,2));set(handles.edit9,'string',handles.xuehao(i,1));输入参数为可编辑文本框的string,输出参数为xingming、chengji、xuehao的string。此回调函数首先读取可编辑文本框的string并赋值给NAME,后读取表格中的信息。通过strcmp函数找到与i一样的数值,由于字符串的比较会赋值为1,所以利用find函数找到行列的信息,通过set函数,对各个文本框的string进行赋值。4.2.3(实现结果)在本次试验中由于学号与科目较好做,能迅速的完成,但是在姓名查询,由于是字符串的比较,没注意到strcmp比较出来是1,因此一直没寻找到。最后在查询书籍求证老师后,并在那边MATLAB试验下,发现问题所在,修改find的比较条件,成功找到。另外一个小细节是由于姓名方面少了一行。所以要多加一行才能是正确的对应。4.3删除主界面4.3.1(GUI贴图)4.3.2(功能模块实现)对于删除界面,利用可编辑文本框作为输入信息,学号查询按钮作为执行操作按钮。有若干个静态文本框和listbox作为标识来表明和现实信息。以学号删除回调函数:i=str2double(get(handles.num,'String'));ind=find(handles.numb==i);[m,n]=ind2sub(size(handles.numb),ind);lie=find(n==1);hang=m(lie);handles.numb(hang,:)=[];handles.txt(hang+1,:)=[];guidata(hObject,handles);m=size(handles.numb,1);set(handles.list_name,'String',handles.txt(2:m+1,2));set(handles.list_point,'String',num2str(handles.numb(:,3:5)));set(handles.list_num,'String',handles.numb(:,1));m=size(handles.numb,1);fora=1:1:mhandles.txt(a+1,1)={num2str(handles.numb(a,1))};handles.txt(a+1,3)={num2str(handles.numb(a,3))};handles.txt(a+1,4)={num2str(handles.numb(a,4))};handles.txt(a+1,5)={num2str(handles.numb(a,5))};endfora=m+1:1:handles.mhandles.txt(a+1,:)={''};endxlswrite('chengji.xls',handles.txt,'Sheet1');输入参数为可编辑文本框的string,输出参数为xingming、chengji、xuehao的listbox的string,并对表格进行读写。此回调函数同学号查询一样,先找到该数据的行与列,然后对行的数据赋于一个空矩阵,通过一个个的列赋值空矩阵。由于赋值完空矩阵后MATLAB会自动上移。此后我们将数据储存到一个临时空间handles.txt里。然后在写回表中。同时在显示框内删除掉该行的string。对于以姓名删除的回调函数:[aatxt]=xlsread('chengji.xls');name=txt(2:end,2);NAME=get(handles.xm,'string');name1=strcmp(name,NAME);handles.aa=aa;[i,j]=find(name1==1)handles.numb(i,:)=[];handles.txt(i+1,:)=[];guidata(hObject,handles);m=size(handles.numb,1);set(handles.list_name,'String',handles.txt(2:m+1,2));set(handles.list_point,'String',num2str(handles.numb(:,3:5)));set(handles.list_num,'String',handles.numb(:,1));m=size(handles.aa,1);m=m-1;fora=1:1:mhandles.txt(a+1,1)={num2str(handles.numb(a,1))};handles.txt(a+1,3)={num2str(handles.numb(a,3))};handles.txt(a+1,4)={num2str(handles.numb(a,4))};handles.txt(a+1,5)={num2str(handles.numb(a,5))};endfora=m+1:1:handles.mhandles.txt(a+1,:)={''};endxlswrite('chengji.xls',handles.txt,'Sheet1');输入参数为可编辑文本框的string,输出参数为xingming、chengji、xuehao的listbox的string,并对表格进行读写。此个回调函数操作与学号删除方法一样,唯一的不同点是在查找字符串的时候改变find的查找条件。找到行之后进行的操作与学号一样,这里不再叙述。4.3.2(调试结果)此次由于查询的条件修改正确了,因此这里做得很快。但是还是出现了一个问题,在删除的时候,由于直接赋值空格后,删除后在MATLAB中数据上移,但表格并未上移,因此,会留出一个空的一行,很难看。后来请教了老师和同学后,发现自己在删除方面赋值错了,应该赋值一个空矩阵而不是一个空格。4.4统计主界面4.4.1(GUI主界面)4.4.2(功能模块实现)输入参数为数据中的成绩和名字部分,还有一个是可选择的菜单,输出参数为各个文本框的listbox的string,和一个axes用来画图。求平均、最大值、最小值回调函数;[axingming]=xlsread('chengji.xls');chengji=a(:,1:5);handles.chengji=chengji;guidata(hObject,handles);chin=chengji(:,5);math=chengji(:,3);engl=chengji(:,4);b=max(chin);c=min(chin);sum=0;n=length(chin);fori=1:nsum=sum+chin(i);endd=sum/n;set(handles.edit3,'string',d);set(handles.edit4,'string',b);set(handles.edit5,'string',c);此回调函数为语文成绩的回调函数。通过MATLAB内自带的min和max很方便求出每一列最大值。而求平均通过每一个累加最后除以矩阵的大小。最后将这些值赋值给相应的表格。由于数学和英语的算法和语文一样,在此不列出。画图程序的回调函数:[chengjixingming]=xlsread('chengji.xls');handles.chengji=chengji;len=length(chengji);%Çó¾ØÕóµÄ³¤¶Èd1=chengji(1:len,5);ave1=sum(d1);%ÇóÓïÎĵÄ×Ü·Öd2=chengji(1:len,3);ave2=sum(d2);%ÇóÊýѧµÄ×Ü·Öd3=chengji(1:len,4);ave3=sum(d3);%ÇóÓ¢ÓïµÄ×Ü·Öguidata(hObject,handles);val=get(hObject,'Value');str=get(hObject,'String');globallen;globald1;globald2;globald3;globald;globalave1;globalave2;globalave3;globalave;switchstr{val}case'chinese'd=d1;ave=ave1/len;%ÇóÓïÎĵį½¾ù·Öcase'math'd=d2;ave=ave2/len;%ÇóÊýѧµÄƽ¾ù·Öcase'english'd=d3;ave=ave3/len;%ÇóÓ¢ÓïµÄƽ¾ù·Öendglobalhline;globallen;globald;t=1:1:len;hline=plot(t,d,'linewidth',2);此回调函数为各个每个学生成绩的分布。以成绩作为y轴的值,以每个学生的学号作为x轴。到string为linewidth绘画。这样更能直观的看出每一个学生成绩的高低。由于部分是两部分,因此我们声明了全局变量来避免重复赋值。4.4.3(测试结果)此次在求平均方面有点繁琐,后检查完后在老师的提醒下发现可以用sum函数进行求和,增加效率。另外由于自己的不注意,没用全局变量进行设置,有些部分重新赋值了。因此程序能在优化,更高效率的运行。4.5一览界面4.5.1(GUI界面)4.5.2(功能模块实现)输入参数为数据中的成绩和名字部分,输出参数为各个文本框的的string。一览回调函数:[axingming]=xlsread('chengji.xls');xuehao=a(:,1);chengji=a(:,3:5);handles.xuehao=xuehao;handles.chengji=chengji;handles.xingming=xingming;guidata(hObject,handles);set(handles.edit1,'string',num2str(handles.chengji(:,:)));set(handles.edit2,'string',xuehao(:,1)); set(handles.edit3,'string',xingming(2:end,2));此回调函数只是简单的调用各个数据,将chengji变量分开赋值给handles的变量,通过set让其显示所有的结果。4.5.3(测试结果)4.7录入界面4.7.1(GUI界面)4.7.2(功能模块实现)输入参数为数据中的成绩和名字部分、各个编辑文本框的string,输出参数为表格。添加回调函数:xuehao=str2num(get(handles.xuehao,'string'));xingming=get(handles.xingming,'string');shuxue=str2num(get(handles.shuxue,'string'));yingyu=str2num(get(handles.yingyu,'string'));yuwen=str2num(get(handles.yuwen,'string'));d={xuehao,xingming,shuxue,yingyu,yuwen;};a=xlsread('chengji.xls','sheet1','A:A');length(a);L=length(a)+2;xlswrite('ch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论