数据结构实验报告:学生成绩统计管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六.学生成绩统计管理
问题描述
用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_fmaths
m_fphysical
m_fchemistry
m_fenglish
m_fpolitic
d.在类IDD_BADIALOG头文件中将类的声明包括进来:#include”ADDDIALOG.h”
添加两个成员变量,分别存放“总成绩“和“平均成绩(GPA)”
e.添加消息处理函数,当有记录增加时,进行相应的处理
voidCBaDialog::OnAdd()
{
// TODO: Add your control notification handler code here
Selec=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();