学生管理系统实验报告.docx
《学生管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《学生管理系统实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
![学生管理系统实验报告.docx](https://file1.bdocx.com/fileroot1/2022-10/9/50879cdd-d82b-4845-a895-ee2e896c1868/50879cdd-d82b-4845-a895-ee2e896c18681.gif)
学生管理系统实验报告
学生学籍成绩管理系统:
学生的信息包括:
姓名、学号、性别、班级、院系;学生的成绩信息包括英语、数学、程序设计及体育成绩等各门课的成绩;
定义如下类,并建立一个文本文件Student.dat,用于存储学生、课程与成绩的相关信息。
文件格式自己定义。
学生类CStudent(姓名、学号、性别、班级、院系);
课程类CLesson(课程名称、课程开设时间);
成绩类CGrade(学号、课程名称、成绩)
要求实现如下功能:
在对话框上能够添加、删除、编辑和查询课程信息;
在对话框上能够添加、删除、编辑和查询学生信息;
在对话框上能够增加、删除、编辑和查询学生的选课信息;
在对话框上能够录入和编辑学生某门课的考试成绩;
在对话框上能够按照学生姓名查询学生的选课信息和选课成绩,并统计出其总成绩、平均成绩,计算出该学生的成绩的标准差;
显示全班的学生成绩排名。
统计出各班的平均成绩,并进行排名。
问题描述:
要求编写编写一个学生的学籍成绩管理系统,要实现能添加、删除、编辑和查询课程信息、基本信息和选课信息。
能录入和编辑学生的考试成绩还能查询已选的课程,总成绩,平均成绩还有标准差并排名。
问题分析:
本题重点考察的内容是数据信息的处理问题,其中包括学生数据的传递、改变,学生信息的存储、读取。
能够进行计算每次输入的学生信息进行计算总分,平均分等,还要对所有的学生成绩进行处理排名。
同时通过对话框对各种不同数据编辑,又能够将它们相关联是本题的一个主要难点。
又因为要用到不同的查询方式,所以还需要需要不同的输出对话框。
总之该题的对数据处理要求挺高,综合性很强。
【算法设计】
设计思想:
本题我认为关键地方在于通过三个类来传递数据的实现和对话框的设计,这题用到得对话框较多,变量名称选取要特别注意。
还有就是对话上的按钮了,按钮满足题目整体要求的层面上,并且还要达到最简,不要浪费,也不能缺少功能,能将每次输入的学生信息进行数学处理。
一个对话框要多用途,通过添加信息然后能够查询,尽量减少对话框的数量,以减少对话框之间数据的传递,这样可以极大优化程序。
设计表示:
【调试报告】
实现:
调试过程中问题
1.因为选课是动态的,而且一门课对应一门成绩,所以成绩也是个随着课程的添加而添加,删除而删除,所以都用STL中的list来装。
这样把学生的所有信息都封装在一个类中更具有整体的效果,也有更加明确的思路。
这里实现的要先输入班号,然后在内存中一个一个学生去遍历,找到班号相同的学生,然后对这些学生进行排序,再显示出来。
然而开始做时对话框很多很繁琐,可以设计子对话框来进行整合各个类的不同功能,使界面更简洁干净。
2.该题遇到了较为严重的内存泄露问题:
没有找出问题代码的所在,但是通过debug文件夹中“学生管理.exe”程序还是可以运行
然而会弹出警告窗口:
点击确认后还是会弹出我做的界面:
【附录】
源程序清单:
学生所有信息的类
classCAllInfor
{
public:
CAllInfor();
CAllInfor(CStudent&a);
virtual~CAllInfor();
CStudentm_Stu;
listm_Lessen;
listm_Grade;
doubleGetAveGrade();
};
三大类对学生信息处理
1.学生基本信息的对话框类
添加功能实现
voidCBStudentInfor:
:
OnAdd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
list:
:
iteratorp;
booljudge=true;
for(p=m_AllInformation.begin();p!
=m_AllInformation.end();++p)
{
if(p->m_Stu.m_School_Id==m_SchoolId)
{
judge=false;
}
}
if(judge)
{
CStudentStu(m_Name,m_Sex,m_Class,m_SchoolId,m_College);
CAllInforobj(Stu);
m_AllInformation.push_back(obj);
for(inti=0;;i++)
{
if(m_list.GetItemText(i,0)=="")
{
intnRow=m_list.InsertItem(i,m_Name);//插入行
m_list.SetItemText(nRow,1,m_Sex);//设置数据
m_list.SetItemText(nRow,2,m_Class);
m_list.SetItemText(nRow,3,m_SchoolId);
m_list.SetItemText(nRow,4,m_College);
break;
}
}
}
else
{
MessageBox("学号重复,请重新输入!
");
}
m_SchoolId="";
m_Sex="";
m_Name="";
m_College="";
m_Class="";
UpdateData(FALSE);
}
编辑功能实现
voidCBStudentInfor:
:
OnEdit()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
list:
:
iteratorp;
CStringsname=m_list.GetItemText(m_SelectRow,0);
for(p=m_AllInformation.begin();p!
=m_AllInformation.end();++p)
{
if(p->m_Stu.m_Name==sname)
{
p->m_Stu.m_Name=m_Name;
p->m_Stu.m_Sex=m_Sex;
p->m_Stu.m_Class=m_Class;
p->m_Stu.m_School_Id=m_SchoolId;
p->m_Stu.m_College=m_College;
break;
}
}
for(intj=0;j<5;j++)
{
switch(j)
{
case0:
m_list.SetItemText(m_SelectRow,0,m_Name);
break;
case1:
m_list.SetItemText(m_SelectRow,1,m_Sex);
break;
case2:
m_list.SetItemText(m_SelectRow,2,m_Class);
break;
case3:
m_list.SetItemText(m_SelectRow,3,m_SchoolId);
break;
case4:
m_list.SetItemText(m_SelectRow,4,m_College);
break;
}
}
m_SchoolId="";
m_Sex="";
m_Name="";
m_College="";
m_Class="";
UpdateData(FALSE);
}
删除功能实现:
voidCBStudentInfor:
:
OnDelete()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringsname=m_list.GetItemText(m_SelectRow,0);
list:
:
iteratorp;
for(p=m_AllInformation.begin();p!
=m_AllInformation.end();++p)
{
if(p->m_Stu.m_Name==sname)
{
m_AllInformation.erase(p);
break;
}
}
m_list.DeleteItem(m_SelectRow);
m_SchoolId="";
m_Sex="";
m_Name="";
m_College="";
m_Class="";
UpdateData(FALSE);
}
文件读取实现(从父对话框读到子对话框)
BOOLCBStudentInfor:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
DWORDstyles=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
ListView_SetExtendedListViewStyleEx(m_list.m_hWnd,styles,styles);
m_list.InsertColumn(0,"姓名",LVCFMT_CENTER,70);
m_list.InsertColumn(1,"性别",LVCFMT_CENTER,70);
m_list.InsertColumn(2,"班级",LVCFMT_CENTER,70);
m_list.InsertColumn(3,"学号",LVCFMT_CENTER,100);
m_list.InsertColumn(4,"学院",LVCFMT_CENTER,70);
CMy520Dlg*pParent=(CMy520Dlg*)GetParent();
m_AllInformation.clear();
m_AllInformation=pParent->m_AllInformation;
list:
:
iteratorp;
inti;
for(i=0,p=m_AllInformation.begin();p!
=m_AllInformation.end();++p,++i)
{
intnRow=m_list.InsertItem(i,p->m_Stu.m_Name);
m_list.SetItemText(nRow,1,p->m_Stu.m_Sex);
m_list.SetItemText(nRow,2,p->m_Stu.m_Class);
m_list.SetItemText(nRow,3,p->m_Stu.m_School_Id);
m_list.SetItemText(nRow,4,p->m_Stu.m_College);
}
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol