




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
至诚学院 MATLAB 实践 课 程 设 计 学生姓名: 学 号: 专业班级: (2) 指导教师: 二一四 年 四 月 三十 日 MATLAB 课程设计 第 1 页 共 18 页 目 录 1.设计目的第 3 页 2.题目分析第 3 页 3.总体设计第 3 页 4.具体设计第 4 页 5.小结和心得第 15 页 1、设计目的: 使用 MATLAB 的 GUI 程序设计学生成绩管理系统。完成需学生成绩的基本管 理,包含对学生成绩的读入、修改、添加和查询等基本的功能。 本课题主要解决对学生成绩总体的客观评价,通过一系列数据的分析比较, 例如平均值,成绩分布等整体数据的处理,以及 matlab 和 excel 在数据联动功 能方面的应用,所绘制的直方图、正态分布图等图像信息使得分析成绩系统更 直观、有效地反映学生此课程这一阶段的表现,进而研究今后的教学重点,以 及从教学到考试等一连串过程中的薄弱环节,从而达到教学相长的目的。 不论是对学生的整体学习情况还是单独考虑每个学生的学习情况都能够进 行较好的评价。面比起单纯的“绝对分数“评价学生的学习状况,忽略了基础条 件的差异,我们运用了各种方法和模型来去避免这类现象的发生,动态的分析 每个学生的情况,并从定性和定量两方面分别给出了数值与建议。 2、题目分析 根据课题的要求,分析成绩管理系统的现实需求,我们可以概括为设计的 程序应该包含的几个基本模块及应该完成的功能如下: 1.文件管理:完成成绩表格的导入(.xls 文件) ,完成对修改后的成绩文 件的保存。 2.成绩管理:完成对学生成绩、学号、成绩、总分的显示和修改,还有添 加新的学生的信息。 3.查询管理:完成对姓名或者学号的查询的显示和删除,学生的信息显示 在成绩管理里面的显示框里面。 4.在学生的姓名显示框点击学生姓名,成绩管理系统里面自动获取学生的 基本信息。 5.统计出学生的最高分和最低分以及各科成绩的平均分情况。 6.通过各科成绩的统计分布直方图,直观地分析学生的各科的成绩状况。 3、总体设计 围绕设计的题目范围,我们可以将起绘制成功能模块的总体模块图如下图 1。根据设计的模块设计成 GUI 的设计图如下图 2。 通过将导入的学生信息的数据保存到全局变量的数组里面,到每个模块需 要使用时,导出数据即可完成对数据的引用,在需要完成操作的按钮下编写回 调函数来达到需要完成的功能。设计内容包含对回调函数的编写和对于程序功 能的调试,分析问题原因,在实现程序功能时,进一步改善程序的设计构架。 MATLAB 课程设计 第 3 页 共 18 页 图 1 图 2 4、具体设计 利用 MATLAB 的 GUI 程序设计实现成绩管理系统的功能。各个模块功能的实 现及程序设计如下: 4.1.模块设计界面及程序设计 4.1.1 显示模块模块: 显示模块需要完成的是对于学生姓名、序号以及成绩的显示,并且在点 击姓名显示框里面的学生姓名时,成绩管理的模块里面可以自动显示学生的以 上基本信息。设计界面如下: 对于姓名显示框的程序设计如下: % - Executes on selection change in xmlist. function xmlist_Callback(hObject, eventdata, handles) % hObject handle to xmlist (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) content=get(hObject,value); set(handles.chengjilist,value,content); set(handles.xhlist,value,content); chengji=handles.chengji; xingming=handles.xingming; xuehao=handles.xuehao; set(handles.lredit1,string,xingming(content); set(handles.lredit2,string,chengji(content,1); set(handles.lredit3,string,chengji(content,2); set(handles.lredit4,string,xuehao(content,1); set(handles.xmedit,string,xingming(content); set(handles.xuehaoedit,string,xuehao(content); set(handles.lredit13,string,xingming(content) set(handles.zfedit,string,(chengji(content,1)+chengji(content,2); 首先设置姓名显示的高亮位置表示选中的学生,调出handles里面的信息, 然后通过set函数将数字赋值给显示框。 4.1.2文件管理模块: 文件管理模块要实现的是对于保存成绩的表格文件(.xls文件)的读取和 对于学生信息修改或者删除之后的保存功能。因此添加了两个控件按钮来实现, 在点击按钮后,弹出读取(或保存)文件的所在位置,添加文件后,系统完成 对成绩的读取(或保存)功能。没有选中文件时,提示“没有选择文件” 。设计 界面如下: 4.1.2.1打开成绩文件的按钮的设计程序: % - Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) MATLAB 课程设计 第 5 页 共 18 页 % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) filename,pathname=uigetfile(*.xls;*.*,打开成绩文件); if isequal(filename,0)|isequal(pathname,0) errordlg(没有选择文件,出错); return else str=pathname,filename; word,txt=xlsread(str); xingming=txt(2:end,1); xuehao=word(1:end,1); chengji=word(1:end,2:3); set(handles.xmlist,string,xingming); set(handles.chengjilist,string,num2str(chengji); set(handles.xhlist,string,num2str(xuehao); handles.count=length(xingming); handles.chengji=chengji; handles.xuehao=xuehao; handles.xingming=xingming; guidata(hObject,handles); End 读取文件里面的信息,保存为数组的形式,分别给成绩、姓名、学号数组 赋值,并设置三个list显示全部学生的信息,并保存这些数据到全局变量 handles里面。 4.1.2.2保存文件按钮设计程序: % - Executes on button press in baocunbutton. function baocunbutton_Callback(hObject, eventdata, handles) % hObject handle to baocunbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) filename,pathname=uigetfile(*.xls;*.*,打开成绩文件); if isequal(filename,0)|isequal(pathname,0) errordlg(没有选择文件,出错); return else str=pathname,filename; xingming=handles.xingming; chengji=handles.chengji; xuehao=handles.xuehao; oldcount=handles.count; row,co=size(chengji); col=co+1; if rowoldcount M=cell(oldcount,col); else M=cell(row,col); end M(1:row,1)=xingming; M(1:row,2)=num2cell(xuehao); M(1:row,3:col+1)=num2cell(chengji); xlswrite(str,M,1,A2); handles.count=row; guidata(hObject,row); End 将新获取的数据保存到M数组里面,调出原本数组的行数count,比较新获 得的数组的行数和原来行数count的大小,根据实际调节写入数组的大小,并保 存新的数据的行数。 4.1.3成绩管理模块: 成绩管理模块需要完成的是对于学生的姓名、学号和成绩的显示(显示在 上面的显示模块里面完成) ,以及修改学生信息的修改和添加新的学生信息。添 加两个控件,控制学生信息的修改和添加。界面设计图如下: 4.1.3.1修改按钮的程序设计: % - Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) MATLAB 课程设计 第 7 页 共 18 页 % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) content=get(handles.xmlist,value); xingming=handles.xingming; chengji=handles.chengji; xuehao=handles.xuehao; newname=get(handles.lredit1,string); shuxue=str2num(get(handles.lredit2,string); yuwen=str2num(get(handles.lredit3,string); newxuehao=str2num(get(handles.lredit4,string); xingming(content)=newname; chengji(content,:)=shuxue,yuwen; xuehao(content)=newxuehao; set(handles.xmlist,string,xingming); set(handles.chengjilist,string,num2str(chengji); set(handles.xhlist,string,num2str(xuehao); handles.xuehao=xuehao; handles.xingming=xingming; handles.chengji=chengji; guidata(hObject,handles); 获取输入的数据,调出原来的成绩、学号和姓名数组,根据新修改的信息, 修改原本的三个数据的数值,并保存到全局变量handles里面。 4.1.3.2添加按钮的程序设计: % - Executes on button press in tianjiabutton. function tianjiabutton_Callback(hObject, eventdata, handles) % hObject handle to tianjiabutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) newname=get(handles.lredit1,string); shuxue=str2num(get(handles.lredit2,string); yuwen=str2num(get(handles.lredit3,string); newxuehao=str2num(get(handles.lredit4,string); handles.xingming=handles.xingming;newname; handles.chengji=handles.chengji;shuxue,yuwen; handles.xuehao=handles.xuehao;newxuehao; guidata(hObject,handles); set(handles.xmlist,string,handles.xingming); set(handles.xhlist,string,num2str(handles.xuehao); set(handles.chengjilist,string,num2str(handles.chengji); 获取输入的数据,调出原来的成绩、学号和姓名数组,根据新添加的信息, 修改原本的三个数据的数值,并保存到全局变量handles里面。 4.1.4查询管理模块: 本模块需要完成的是通过查询学生姓名或者学号,让成绩管理里面可以显 示该学生的基本信息并可以通过删除按钮删除该生的信息,没有查询到该生的 信息,即提示“没有找到” 。通过平均分查询按钮来查询各科的平均分成绩。通 过查询学生姓名,找到学生的总分并显示。基本设计模块如下图: 4.1.4.1两个删除按钮的程序设计(以第一个删除为例,第二个原理同第一个): % - Executes on button press in shanchubutton. function shanchubutton_Callback(hObject, eventdata, handles) % hObject handle to shanchubutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) name=get(handles.xmedit,string); lia,id=ismember(name,handles.xingming); if lia xingming=handles.xingming; chengji=handles.chengji; xuehao=handles.xuehao; xingming(id)=; xuehao(id)=; chengji(id,:)=; handles.chengji=chengji; handles.xuehao=xuehao; handles.xingming=xingming; MATLAB 课程设计 第 9 页 共 18 页 guidata(hObject,handles); set(handles.xmlist,string,xingming); set(handles.chengjilist,string,num2str(chengji); set(handles.xhlist,string,num2str(xuehao); set(handles.xmlist,value,1); set(handles.xhlist,value,1); set(handles.chengjilist,value,1); Else 查询时候有这个名字在保存的名字(或学号)的数组里面,调出姓名、学 号和成绩数组,获取需要删除的学生在数组里面保存在第几个的位置,将数组 里面的这儿位置清空,设置三个list的显示高亮位置回到第一行,同时更新 handles里面的三个数组存放。 4.1.4.2姓名查询按钮的程序设计: % - Executes on button press in chaxunbutton. function chaxunbutton_Callback(hObject, eventdata, handles) % hObject handle to chaxunbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) name=get(handles.xmedit,string); lia,id=ismember(name,handles.xingming); if lia set(handles.xmlist,value,id); set(handles.xhlist,value,id); set(handles.chengjilist,value,id); xingming=handles.xingming; chengji=handles.chengji; xuehao=handles.xuehao; set(handles.lredit1,string,xingming(id); set(handles.lredit2,string,chengji(id,1); set(handles.lredit3,string,chengji(id,2); set(handles.lredit4,string,xuehao(id); else msgbox(没有找到); end 查询是否有这个名字在保存的名字的数组里面,获取需要删除的名字在保 存的数组里面是第几个的,获取三个数组,设置三个list里面这个学生的信息 为高亮,并显示在成绩管理里面。 4.1.4.3学号查询按钮的程序设计: % - Executes on button press in pushbutton9. function pushbutton9_Callback(hObject, eventdata, handles) % hObject handle to pushbutton9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) xh=get(handles.xuehaoedit,string); lia,id=ismember(str2num(xh),handles.xuehao); if lia set(handles.xmlist,value,id); set(handles.xhlist,value,id); set(handles.chengjilist,value,id); xingming=handles.xingming; chengji=handles.chengji; xuehao=handles.xuehao; set(handles.lredit1,string,xingming(id); set(handles.lredit2,string,chengji(id,1); set(handles.lredit3,string,chengji(id,2); set(handles.lredit4,string,xuehao(id); else msgbox(没有找到); End 查询是否有这个学号在保存的名字的数组里面,获取需要删除的学号在保 存的数组里面是第几个的,获取三个数组,设置三个list里面这个学生的信息 为高亮,并显示在成绩管理里面。 4.1.4.4总分查询按钮的程序设计: % - Executes on button press in zfbutton. function zfbutton_Callback(hObject, eventdata, handles) % hObject handle to zfbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) name=get(handles.lredit13,string); lia,id=ismember(name,handles.xingming); MATLAB 课程设计 第 11 页 共 18 页 if lia set(handles.xmlist,value,id); set(handles.xhlist,value,id); set(handles.chengjilist,value,id); xingming=handles.xingming; chengji=handles.chengji; xuehao=handles.xuehao; set(handles.zfedit,string,(chengji(id,1)+chengji(id,2); else msgbox(没有找到); end 查询是否有这个名字在保存的名字的数组里面,获取需要删除的名字在保 存的数组里面是第几个的,获取三个数组,设置三个list里面这个学生的信息 为高亮,同时计算她(他)的总分,并显示。 4.1.4.5平均分查询按钮的程序设计: % - Executes on button press in pjfbutton. function pjfbutton_Callback(hObject, eventdata, handles) % hObject handle to pjfbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) chengji=handles.chengji; shuxue=chengji(1:end,1); yuwen=chengji(1:end,2); avesshuxue=mean(shuxue); avesyuwen=mean(yuwen); set(handles.sxedit,string,num2str(avesshuxue); set(handles.ywedit,string,num2str(avesyuwen); 通过按钮,调用成绩数组,计算平均分并显示。 4.1.5成绩概况模块: 成绩概况的设计比较简单,仅包含通过点击查询最高分或者最低分按钮来 查询各科学生成绩里面的最高分和最低分并显示。程序设计界面如下: 4.1.5.1最高分按钮程序设计: % - Executes on button press in pushbutton7. function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) chengji=handles.chengji; count=handles.count; x=max(chengji(1:count,1); y=max(chengji(1:count,2); set(handles.lredit6,string,num2str(x); set(handles.lredit7,string,num2str(y); 调用成绩数组,根据人数,设置比较次数,按照科目比较,并设置显示。 4.1.5.2最低分程序设计: % - Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles) % hObject handle to pushbutton8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) chengji=handles.chengji; count=handles.count; x=min(chengji(1:count,1); y=min(chengji(1:count,2); set(handles.lredit8,string,num2str(x); set(handles.lredit9,string,num2str(y); 调用成绩数组,根据人数,设置比较次数,按照科目比较,并设置显示。 4.1.6成绩统计直方图模块: MATLAB 课程设计 第 13 页 共 18 页 本模块的设计为:将各科学生的成绩分段统计,画出学生成绩的分布直方 图。采用的分数段为:060、6170、7180、8190、91100五个分数段。设计 界面图如下: 4.1.6.1显示数学成绩分数段统计 直方图按钮的程序设计: % - Executes on button press in zftbutton. function zftbutton_Callback(hObject, eventdata, handles) % hObject handle to zftbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes1); cla; chengji=handles.chengji; shuxue=chengji(1:end,1); count=handles.count; aa=0 0 0 0 0; for i=1:count if shuxue(i)60 aa(1)=aa(1)+1; else if shuxue(i)70 aa(2)=aa(2)+1; else if shuxue(i)80 aa(3)=aa(3)+1; else if shuxue(i)90 aa(4)=aa(4)+1; else aa(5)=aa(5)+1; end end end end end x=50 65 75 85 95; bar(x,aa); title(数学成绩分数段统计直方图); 调用数学成绩数组,设定空数组aa用来存放分数段的统计数据。设定循环 函数,分别比较五个数值:60、70、80、90、100,并记录。最后用bar函数画 出函数图像。 4.1.6.2显示语文成绩分数段统计直方图: % - Executes on button press in pushbutton14. function pushbutton14_Callback(hObject, eventdata, handles) % hObject handle to pushbutton14 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes2); cla; chengji=handles.chengji; yuwen=chengji(1:end,2); count=handles.count; aa=0 0 0 0 0; for i=1:count if yuwen(i)60 aa(1)=aa(1)+1; else if yuwen(i)70 aa(2)=aa(2)+1; else if yuwen(i)80 aa(3)=aa(3)+1; else if yuwen(i)90 aa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卫生管理职业素养试题及答案
- 做账实操-关税调研报告
- 做账实操-关税对外贸受益股的影响分析
- 海外专利申请中的法律问题探讨试题及答案
- 激光工程项目管理基本要求试题及答案
- 衡阳日报面试题及答案
- 职业心理素质评估工具试题及答案
- 船舶原理试题库及答案
- 激光技术工程师考试的时间管理与试题及答案
- 复习策略与护士资格证考试相关的试题答案
- 工贸企业重大事故隐患判定标准解读20240902
- NSA2000变频器使用说明书
- 人教版小学四年级语文下册2024-2025学年度第二学期第三单元质量检测试卷含参考答案
- 初中生物重要识图填空速记54个-2025年中考生物一轮复习知识清单
- 2025年度国人饮水电器白皮书-TMIC天猫新品创新中心
- 合作合同范本 英文
- 2025年浙江国企温州快鹿集团有限公司招聘笔试参考题库含答案解析
- 新疆维吾尔自治区粘土砖瓦及建筑砌块制造行业企业排名统计报告
- 湘教版七年级下册地理期中试卷及答案
- 【培优卷】同步分层练习:四年级下册语文第26课《宝葫芦的秘密》(含答案)
- 2025年中国腰果行业市场深度分析及发展前景预测报告
评论
0/150
提交评论