当前位置:文档之家› 数据结构实验报告:学生成绩统计管理

数据结构实验报告:学生成绩统计管理

实验六.学生成绩统计管理问题描述用VC++可视化开发平台实现一个本班成绩管理与统计程序,要求界面友好,简洁大方,方便使用。

程序的功能要求如下:(1)支持对话框形式的学生信息与课程成绩的录入、修改和删除;(2)计算本班每一位同学的学分成绩GPA( grade point average) 并排名,以此作为奖学金评定的参考依据;(3)对某一门课程,按照优(90-100)/良(80-89)/中(70-79)/及格(60-69)/不及格(60分以下)五档进行划分,统计在每一档的学生人数和百分比例,并显示统计结果。

(4)支持以文本格式导出学生的成绩记录,支持从文件中导入学生成绩记录;(5)其他成绩管理与统计所需的功能,可按自己的预想进行扩展。

演示时的模拟数据不少于15 人。

实验理论本实验几乎考察了VC++开发的全部基本内容,其中,主要涵盖以下三大块的相关知识点:1.资源菜单资源及其应用,工具栏2.对话框对话框的创建,对话框的数据交换和检验3.控件静态文本和编辑框控件,按钮控件,列表框控件,滚动条控件等另外,实验还涉及了C++的主要知识点,如“类与对象”、“派生与继承”、“I/O流”以及C++语言基础知识。

功能实现和相关程序及截图鉴于VC++的消息驱动机制以及本实验的相对复杂性,使得不便以一个相对结构化的方式来说明具体实现内容,下面将以分块的形式对本系统的主要功能进行阐释。

1.界面设计如图所示,界面包括a.左上方的三个菜单通过添加tab控件来实现,分别实现各个班级,年级成绩的管理和相关参数的设定功能b.左侧的“增加记录”等功能按钮单击时会弹出相应的对话框,内含静态文本和编辑框控件c.三个数据显示框包括单科成绩分类统计,任课教师,学生成绩三块(列表框控件),数据更新时会进行相应的显示,另外,还含有3个滚动条控件2.对话框形式的学生信息与课程成绩的录入、修改和删除下面以信息录入为例对该部分功能做详细介绍a.添加一个对话框模板资源。

修改对话框模板的ID为IDD_ADDDIALOG,Caption为“增加记录”,并添加7个静态文本控件和7个编辑框控件,如图所示,“学号”和“姓名”两个编辑框设置为string类型,其余设置为float类型。

b.在对话框上右击,选择“添加类”,这时会弹出“类向导对话框”。

将类名改为“CADDDIALOG”,基类选择“CDialog”,然后单击“完成”按钮。

c.在对话框上右击,选择“添加变量”,这时会弹出“添加成员变量对话框”,如右图所示,添加变量m_strName,然后单击“完成”按钮。

类似的,依次添加剩下的六个变量m_strxue,m_fmathsm_fphysicalm_fchemistrym_fenglishm_fpoliticd.在类IDD_BADIALOG头文件中将类的声明包括进来:#include”ADDDIALOG.h”添加两个成员变量,分别存放“总成绩“和“平均成绩(GPA)”e.添加消息处理函数,当有记录增加时,进行相应的处理voidCBaDialog::OnAdd(){// TODO: Add your control notification handler code hereSelec=TRUE;CAddialogdlg;if(dlg.DoModal()==IDOK){if(this->Select()=="一班"){if(dlg.m_nxue>=200){AfxMessageBox("一班学号在1—200之间");return;}}else{if(dlg.m_nxue<200||dlg.m_nxue>=400){AfxMessageBox("二班学号在200—400之间");return;}}m_Set.AddNew();m_nRecordCount+=1;m_Set.m_column1=dlg.m_nxue;m_Set.m_column2=dlg.m_strName;m_Set.m_column3=dlg.m_fmaths;m_Set.m_column4=dlg.m_fphysical;m_Set.m_column5=dlg.m_fchemistry;m_Set.m_column6=dlg.m_fenglish;m_Set.m_column7=dlg.m_fpolitic;m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglish+dlg.m_fpolitic;m_Set.m_column9=(float)(m_Set.m_column8/5);this->Equal();m_Set.Update();//Update()一定放在Equal()后m_Set.Requery();this->Xuan();}}类似的,可实现信息的删除功能和修改功能。

略有不同的是,删除和修改功能对话框都新增加了一个密码输入框,以保护信息。

3.排序功能和信息删改功能类似,加入以下程序段即可实现排序功能。

这里,用户通过单击相应的题头便可实现以该项数据为依据的排序功能,连续单击可实现升序与降序两种不同排序方式见的切换。

如右图,为一物理成绩为依据的降序排序。

voidCBaDialog::Sort(BOOL isAsc,intsecol){if(m_Set.IsOpen())m_Set.Close();this->Select();m_bSet.Close();CODBCFieldInfofieldInfo;m_Set.GetODBCFieldInfo(secol,fieldInfo);if(isAsc){m_Set.m_strSort=fieldInfo.m_strName+" ASC";m_bIsAsc=TRUE;}else{m_Set.m_strSort=fieldInfo.m_strName+" DESC";m_bIsAsc=FALSE;}m_Set.Requery();}4.成绩分档划分加入下列代码,当信息有变动(增、删、改)时,程序可根据变动信息对各个分档的数据进行相应修改voidCBaDialog::Equal(){for(inti=0;i<5;i++){float p=0;if(i==0)p=m_Set.m_column3;if(i==1)p=m_Set.m_column4;if(i==2)p=m_Set.m_column5;if(i==3)p=m_Set.m_column6;if(i==4)p=m_Set.m_column7;m_bSet.Edit();if(Selec==FALSE){m_bSet.m_column2-=p;m_bSet.m_column3=(float)(m_bSet.m_column2/m_nRecordCount);if(p>=90)m_bSet.m_column4-=1;if(p>=80 && p<90)m_bSet.m_column5-=1;if(p>=70 && p<80)m_bSet.m_column6-=1;if(p>=60 && p<70)m_bSet.m_column7-=1;if(p<60)m_bSet.m_column8-=1;}else{m_bSet.m_column2+=p;m_bSet.m_column3=(float)(m_bSet.m_column2/m_nRecordCount);if(p>=90)m_bSet.m_column4+=1;if(p>=80 && p<90)m_bSet.m_column5+=1;if(p>=70 && p<80)m_bSet.m_column6+=1;if(p>=60 && p<70)m_bSet.m_column7+=1;if(p<60)m_bSet.m_column8+=1;}m_bSet.Update();if(!m_bSet.IsEOF())m_bSet.MoveNext();elsebreak;}}5.成绩数据的导入导出实验中,我们将程序与一个Access文件连接,在界面上的相应操作会改变Access中得相应数据,用户可通过查看Access文件进行数据的导入导出操作。

6.其他功能(查询记录)我们在本次实验中实现的是信息的查找功能,当单击界面的按钮时,会弹出如左图所示的对话框,选择需要进行查询的科目,以及相应的查询条件即可进行查询。

例如,现在需要查询英语成绩在90分以上的学生的信息,只需在左图所示的对话框中将科目选取为“英语”,将查询条件选为“>=”,并在查询数值中输入“90”即可,查询结果如下图所示。

7.其他一些截图和函数代码操作界面上数据的现实是通过下面的display 函数来实现的voidCBaDialog::display() {inti=0;m_bSet.MoveFirst(); do {CString s;m_ListCtrlb.InsertItem(i,m_bSet.m_column1,0);删除记录对话框修改记录对话框年级成绩操作界面s.Format("%.1f",m_bSet.m_column2);m_ListCtrlb.SetItemText(i,1,s);s.Format("%.2f",m_bSet.m_column3);m_ListCtrlb.SetItemText(i,2,s);s.Format("%d",m_bSet.m_column4);m_ListCtrlb.SetItemText(i,3,s);s.Format("%d",m_bSet.m_column5);m_ListCtrlb.SetItemText(i,4,s);s.Format("%d",m_bSet.m_column6);m_ListCtrlb.SetItemText(i,5,s);s.Format("%d",m_bSet.m_column7);m_ListCtrlb.SetItemText(i,6,s);s.Format("%d",m_bSet.m_column8);m_ListCtrlb.SetItemText(i,7,s);i++;m_bSet.MoveNext();} while(!m_bSet.IsEOF());m_bSet.Close();}一班和二班的选择功能是通过下面的Select函数实现的CStringCBaDialog::Select(){if(m_Getstring=="一班"){m_Set.Open();m_bSet.Open();}else{m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2STUDENT]");m_bSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2OBJECT]");}returnm_Getstring;}最后我们为我们的管理系统设计了一个可爱大方的图标实验总结通过这次试验,我们学习到了VC++的相关知识,比如文档、对话框和控件,理解了一些并能够进行初步应用。

相关主题