学生基本成绩管理报告.docx
《学生基本成绩管理报告.docx》由会员分享,可在线阅读,更多相关《学生基本成绩管理报告.docx(15页珍藏版)》请在冰点文库上搜索。
学生基本成绩管理报告
中原工学院计算机学院
课程设计报告
课程名称:
windows程序设计课设
专业:
计算机科学与技术
班级:
计科111
姓名:
胡玉旺
辅导老师:
王海龙
题目:
学生成绩信息管理基本系统
2013年1月
目录
程序简介3
目的3
功能需求3
程序主框架4
详细设计与功能实现4
在score基类中定义了私有变量4
学生信息的添加OnAdd()4
删除信息OnDel()5
信息的查找OnFind():
6
修改信息OnModify():
6
显示全部信息OnShowall()7
OnClear()清空函数:
7
Save()函数:
8
Show()函数:
8
对平均分排序sort():
8
GetID():
9
系统测试9
查找9
修改学生成绩信息10
清空10
显示全部:
10
删除信息:
11
对学生成绩信息进行添加:
11
总结:
12
程序简介
此程序操作简单方便,当然功能也不是太花,对学生的成绩基本信息进行录入、查询、修改、删除、显示、记录保存等最基本功能,学生的信息包括:
学生的ID、姓名、数学成绩、英语成绩、语文成绩、及由系统自动计划的平均分。
本程序虽然功能简单,但也可输入大量的信息以供保存查找,于是并定义了对平均分进行从低到高的排序功能。
目的
了解Windows编程的基础知识,掌握MFC应用程序的基本知识。
基本掌握面向对象程序设计的基本思路和方法。
掌握用VC++开发应用程序的的一般步骤和方法。
并能过此次课设设计并编写出一份实用的程序。
提高自己的编写代码与程序的能力,以及发现问题解决问题的能力
功能需求
对一次性写在编辑框内的学生的信息依次保存显示在列表框内
对学生的信息进行每次打开能从文件中读取显示在列表框内
根据文件读出的学生的信息根据学号进行查询显示在编辑框内
根据查询出的结果根据需要进行修改并保存在文件中
删除学生信息即彻底从文件中删除、清空列表框中的信息并未真正意义上的删除通过显示全部能够再次显示出来
对录入学生的三门成绩进行平均分计算并根据从大到小进行排序,即在列表框内以从高到低的顺序进行显示
程序主框架
详细设计与功能实现
在score基类中定义了私有变量定义保护成员函数:
分别实现了用于保存学生的各项信息,并能过成员函数的调用对学生的成绩信息进行获得和设置。
学生信息的添加OnAdd():
此由CStudentsDlg派生出:
并由代码判断添加的学生的ID是否为空或重复否则提示并返回,判断添加的学生的姓名,成绩是否这空,否则提示“填写的信息不全请重新填写”。
计算平均分。
最后将各项信息初始化为输入的信息保存。
代码如下:
voidCStudentsDlg:
:
OnAdd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
if(m_lID==0||getID(m_lID)!
=-1)
{
MessageBox("ID不能为空或者ID不能为重复的值");
return;
}
if(m_strName==""||m_dMath==0||m_dEnglish==0||m_dChinese==0)
{
MessageBox("填写的信息不全请重新填写");
return;
}
scoreScore;
Score.setId(m_lID);
Score.setName(m_strName);
Score.setEng(m_dEnglish);
Score.setChin(m_dChinese);
Score.setMath(m_dMath);
floatave=(m_dEnglish+m_dChinese+m_dMath)/3;
Score.setAve(ave);
StudenT.push_back(Score);
Sort();
Save();
OnShowall();
}
删除信息OnDel():
删除信息判断是否有要被删除的信息,如果没有,则提示“删除的信息不存在”若有,
因本次删除操作是删除文件中的所有的信息所以以警告的方式提示用户,
“确定删除吗?
慎用!
“yes则执行删除操作。
代码如下:
voidCStudentsDlg:
:
OnDel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
intn;
if((n=getID(m_lID))==-1)
{
MessageBox("删除的信息不存在");
return;
}
inta=MessageBox("确定删除吗?
慎用!
","警告",MB_YESNO);
if(a==IDYES)
{
while(StudenT.size())
{
vector:
:
iteratorit=StudenT.begin();
StudenT.erase(it,it+1);
Save();
}
MessageBox("删除成功!
");
}
OnShowall();
}
信息的查找OnFind():
学生ID是只一标识学生的一种身份标识,因此以学生ID进行查找,此过和为一判断的程过程得到编辑框内的学生ID进行判断为空,提示查找的信息不存在,否则,依次得到学生的姓名,各项成绩并让其显示到编辑框中。
voidCStudentsDlg:
:
OnFind()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
intn;
if((n=getID(m_lID))==-1)
{
MessageBox("查找的信息不存在");
return;
}
m_strName=StudenT[n].getName();
m_dEnglish=StudenT[n].getEng();
m_dChinese=StudenT[n].getChin();
m_dMath=StudenT[n].getMath();
m_fAvg=StudenT[n].getAve();
UpdateData(FALSE);
return;
}
修改信息OnModify():
学生ID在本程序中不能修改,并同样同查询一样,得到ID并判断,是否符合要求否则:
MessageBox("修改的信息不存在或不能修改ID值");
return;
若符合条件则用set***()设置所修改的学生的成绩并保存。
代码如下:
voidCStudentsDlg:
:
OnModify()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
inti;
if((i=getID(m_lID))==-1)
{
MessageBox("修改的信息不存在或不能修改ID值");
return;
}
StudenT[i].setName(m_strName);
StudenT[i].setEng(m_dEnglish);
StudenT[i].setMath(m_dMath);
StudenT[i].setChin(m_dChinese);
m_fAvg=(StudenT[i].getEng()+StudenT[i].getMath()+StudenT[i].getChin())/3;
StudenT[i].setAve(m_fAvg);
Sort();
Save();
OnShowall();
UpdateData(FALSE);
}
显示全部信息OnShowall():
显示全部信息就是将文件中的学生成绩全部显示出来首先:
m_list.DeleteAllItems();(这里区别于删除)
先清一下,然后Show();显示出来再。
/*关于Show()函数的定义呆会再说:
DeleteAllItems()在msdnlibrary中有定义:
Callthisfunctiontodeleteallitemsfromthelistviewcontrol.*/
代码如下:
voidCStudentsDlg:
:
OnShowall()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_list.DeleteAllItems();
for(inti=0;i{
Show(i);
}
}
OnClear()清空函数:
用于清空列表中的学生的信息,但并没有真正删除文件中的学生成绩。
并可由OnShowall()来继续显示到列表当中。
代码如下:
voidCStudentsDlg:
:
OnClear()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
inta=MessageBox("确定清空吗?
","警告",MB_YESNO);
if(a==IDYES)
m_strName="";
m_lID=0;
m_dEnglish=m_dMath=m_dChinese=0.0;
m_list.DeleteAllItems();
UpdateData(FALSE);
}
Save()函数:
打开Student.dat文件实现数据的写入和保存。
voidCStudentsDlg:
:
Save()
{
ofstreamout("student.dat",ios_base:
:
binary);
for(inti=0;iout.write((char*)&StudenT[i],sizeof(score));
out.close();
cout<<"操作已经保存"<}
Show()函数:
用于显示学生的信息:
voidCStudentsDlg:
:
Show(inti)
{
CStringstrID,strEng,strMath,strChin,strAve;
m_list.InsertItem(i,StudenT[i].getName());
strID.Format("%d",StudenT[i].getId());
m_list.SetItemText(i,1,strID);
strEng.Format("%4.2f",StudenT[i].getEng());
m_list.SetItemText(i,2,strEng);
strMath.Format("%4.2f",StudenT[i].getMath());
m_list.SetItemText(i,3,strMath);
strChin.Format("%4.2f",StudenT[i].getChin());
m_list.SetItemText(i,4,strChin);
strAve.Format("%4.2f",StudenT[i].getAve());
m_list.SetItemText(i,5,strAve);
}
对平均分排序sort():
按平均分总成绩的从大小在列表中进行有序显示
voidCStudentsDlg:
:
Sort()
{
inti,MAX,j;
for(i=0;i{
MAX=i;
for(j=i+1;jif(StudenT[j].getCompute()>StudenT[MAX].getCompute())
{
scoreswap;
swap=StudenT[j];
StudenT[j]=StudenT[MAX];
StudenT[MAX]=swap;
}
}
}
GetID():
打开文件,从中得到学生的ID:
intCStudentsDlg:
:
getID(longID)
{
scoreid;
ifstreamin2("student.dat",ios:
:
binary);
for(inti=0;i{
in2.read((char*)&id,sizeof(id));
if(ID==id.getId())
{
in2.close();
returni;
}
}
return-1;
}
系统测试
文件中已经有了之前输入的学生的成绩直接运行会自动载入这些信息:
查找:
例如查找ID为5的同学的成绩在学生ID编辑中输入5点查找如下:
各项信息都已在编辑框中显示了出来。
修改学生成绩信息:
例如将学生7的数学成绩修改成110首先先查找出这位学生,在编辑框数学处写入110点击修改:
看到了该学生的信息已经修改了。
清空:
点击清空会提示你:
“确定清空吗?
”在列表框区如下:
已经清空。
显示全部:
点击上面的显示全部信息则又将恢复显示列表框:
删除信息:
点下删除,若ID编辑框内没有学号,则会提示:
“删除的信息不存在”此时应该此框中输入学生的ID再点删除会提示我们:
“确定删除吗?
慎用”点击“是”则信息全部删除并以提示的形式提示我们:
:
若此时再点击显示全部,则不会显示,因为是把文件中的信息给删除了已经,所以不会显示。
只有重新再添加,这了是本程序的不足之处之一,以后会改尽。
对学生成绩信息进行添加:
添加过程中,学生的ID和成绩姓名都不能为空,并且ID不能为重复的否则会提示如下,若各项都满足则会显示下面的列表框中,并保存在文件中(学生ID只有10位,超过这个数则会以乱码的形式出现,学生的成绩有7位)添加学生成绩信息姓名胡玉旺ID:
14106数学130英语140语文120:
学生的ID和成绩姓名都为空或者ID重复或者成绩不全则分别提示如下:
总结:
Windows程序设计让多更多的了解到了计算机软件的开发过程,体会到了软件开发的思想,并激发了我对计算机的兴趣。
能过课设我的动手能力和编程能力有了很大的提高,并对C++6.0有了更多的熟悉过程,对常用控件的操作使用有了更深的了解。
在此过程中遇到了很多的问题,但问题不是最重要的,我们能过课设最重要的是能过发现问题,解决问题来提高自己的水平和能力,包括各方面的能力,动手能力与同学的交流合作能力等等。
最后感谢我的指导老师王老师,感谢我的同学。