课程设计学生成绩管理系统.docx
《课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计学生成绩管理系统.docx(28页珍藏版)》请在冰豆网上搜索。
![课程设计学生成绩管理系统.docx](https://file1.bdocx.com/fileroot1/2022-12/12/2d58adc6-9e83-485c-9e37-638af44d7046/2d58adc6-9e83-485c-9e37-638af44d70461.gif)
课程设计学生成绩管理系统
目录
1设计要求1
2数据库设计1
2.1概念设计1
2.2逻辑设计与物理结构的设计2
2.3数据库的输入2
3程序设计4
3.1学生信息操作5
3.2学生成绩操作14
4调试报告26
5心得体会26
6参考文献26
学生成绩管理系统
1设计要求
管理信息系统MIS(ManagementInformationSystem),在强调管理,强调信息的现代社会中越来越得到普及,如:
人事管理、学生管理系统、工资管理系统等。
常用的MIS系统都是基于数据库操作,实现信息的查询、增加、删除、修改等。
学生成绩管理系统是用AECESS数据库进行数据库的设计和添加数据,在设置数据源(ODBC)建立数据库与程序的连接后,利用VC开发可视化界面完成基于数据库的操作,实现学生信息的查询、增加、删除、修改和成绩信息的查询、增加、删除、修改、排序、统计等功能,从而实现学生成绩信息的多方位显示,方便管理者对学生成绩的管理。
2数据库设计
2.1概念设计
根据设计要求,要对学生信息和成绩进行操作,所以系统实体包括学生基本信息表和课程基本信息表。
学生成绩管理系统中它们的联系是一个学生可以选修多门课程,一门课程可以被多个学生选修,学生和课程之间是多对多的关系,。
由以上分析可以得该系统的E-R关系图:
图1E-R关系图
2.2逻辑设计与物理结构的设计
根据概念设计中的E-R图,可设计三个表,其关系模型如下:
学生基本信息表:
学号,姓名,性别,年龄,系别
课程基本信息表:
课程号,课程名,课时
成绩表:
学号,课程号,成绩
在ACCESS中定义三个表的物理结构如下:
图2学生信息表物理结构
图3课程信息表物理结构
图4成绩表物理结构
2.3数据库的输入
在ACCESS中定义好物理结构后就可以输入数据,同时根据系统的要求,用ACCESS做了两个查询,分别是成绩查询和平均分查询,为以后写程序的方便,对平均分查询进行了按平均分从高到低排序操作。
具体数据如下:
图5学生信息表
图6课程信息表
图7成绩表
图8平均分查询
图9成绩查询
3程序设计
根据设计要求,本系统是利用VC来开发可视化界面,因此要将程序和数据库进行连接,这要使用ODBC工具将数据库设置数据源,在建立工程时选择数据库查看使用文件支持,在选择数据源时选择自己设置的数据源即可。
在主页面,连接学生信息表,在主页面对学生信息表操作就非常方便。
主页面如下:
图10主页面
3.1学生信息操作
3.1.1查询操作
查询操作的功能是输入学号,点击查询按钮,就可以显示出学生的基本信息。
图11查询操作
程序如下:
voidCMyView:
:
OnButton1()
{intflag=1,t=0;
m_pSet->MoveFirst();
UpdateData(TRUE);
while(flag==1){
CStringinfo="\0";
info="学号:
\t"+m_pSet->m_sno+"\n";
info+="姓名:
\t"+m_pSet->m_sn+"\n";
info+="性别:
\t"+m_pSet->m_sex+"\n";
info+="年龄:
\t"+m_pSet->m_age+"\n";
info+="系别:
\t"+m_pSet->m_dept+"\n";
if(m_Sno==m_pSet->m_sno)
{MessageBox(info,"查询到的记录如下:
",100);
flag=0;
t=0;}
else{t=1;}
m_pSet->MoveNext();
if(m_pSet->IsEOF()){flag=0;}
};//TODO:
Addyourcontrolnotificationhandlercodehere
if(t==1){MessageBox("你输入的学号不存在","学生管理系统",0);
}
3.1.2添加操作
添加操作是在点击添加按钮后,添加记录窗口跳出,在新窗口输入要添加的记录,点击确定按钮后,如果该学生的信息已存在(以学号判断),则提醒该学生信息已存在,如果添加成功,则跳出添加成功提示。
如图:
图12添加操作
程序如下:
voidCMyView:
:
OnButton2()
{
Dlg1dlg;
if(dlg.DoModal()==IDOK)
{//按IDD_DIALOG1的"OK"按钮返回之后:
intflag=0;
m_pSet->MoveFirst();
UpdateData(TRUE);
while(!
m_pSet->IsEOF()){
if(dlg.m_AddSno==m_pSet->m_sno){flag=1;
MessageBox("该学生信息已存在","管理系统",0);}
m_pSet->MoveNext();}
if(flag==0){
m_pSet->AddNew();//先执行追加新记录的功能函数AddNew()
m_pSet->m_sno=dlg.m_AddSno;//给学号、姓名字段赋值:
m_pSet->m_sn=dlg.m_AddSn;
m_pSet->m_sex=dlg.m_AddSex;
m_pSet->m_age=dlg.m_AddAge;
m_pSet->m_dept=dlg.m_AddDept;
m_pSet->Update();//新记录写入数据库的数据表
m_pSet->Requery();//刷新记录集。
这将改动"物理"数据库。
MessageBox("添加成功","学生管理系统",0);
}
}
//TODO:
Addyourcontrolnotificationhandlercodehere
}
3.1.3删除操作
删除操作是点击删除按钮后,跳出删除窗口,在删除窗口中输入要删除学生信息的学号以及管理员密码,在多种提示后确认无误后删除,删除后会显示已删除提醒。
如图:
图13删除操作
图14学生信息提示图15确认操作提示
在删除操作中,必须输入密码才能进行删除操作,否则提示密码不正确,密码是唯一的,在本系统中,所有密码都是1234。
程序如下:
voidCMyView:
:
OnButton3()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
Dlg2dlg;
if(dlg.DoModal()==IDOK){
intflag=1,t=0,flag1=0,flag2=0;
m_pSet->MoveFirst();
UpdateData(TRUE);
while(flag==1){
CStringinfo="\0";
info="学号:
\t"+m_pSet->m_sno+"\n";
info+="姓名:
\t"+m_pSet->m_sn+"\n";
info+="性别:
\t"+m_pSet->m_sex+"\n";
info+="年龄:
\t"+m_pSet->m_age+"\n";
info+="系别:
\t"+m_pSet->m_dept+"\n";
if(dlg.m_DleSno==m_pSet->m_sno)
{flag1=MessageBox(info,"请确认删除的学生信息:
",100);
flag=0;
t=0;}
else{t=1;}
m_pSet->MoveNext();
if(m_pSet->IsEOF()){flag=0;}
}
if(dlg.m_mima==1234){
if(t==1){MessageBox("你输入的学号不存在","学生管理系统",0);}
if(flag1==6){flag2=MessageBox("确定删除?
","学生管理系统",100);}
if(flag2==6){m_pSet->MovePrev();
m_pSet->Delete();
m_pSet->Requery();
MessageBox("已删除","学生管理系统",0);}
}
else{MessageBox("密码不正确","提示",0);}
}
}
3.1.4修改操作
修改操作是在主页面输入要修改的学生信息的学号(在查询条件处输入),点击修改按钮,跳出修改窗口,在窗口中会显示该学生现有的信息,将其修改后点击确定按钮,同样要输入管理员密码,否则提示密码不正确。
在修改后会提示以修改。
如图:
图16修改操作
程序如下:
voidCMyView:
:
OnButton6()
{
intflag=1,t=0,tag=0;
m_pSet->MoveFirst();
UpdateData(TRUE);
while(flag==1){
CStringinfo="\0";
info="学号:
\t"+m_pSet->m_sno+"\n";
info+="姓名:
\t"+m_pSet->m_sn+"\n";
info+="性别:
\t"+m_pSet->m_sex+"\n";
info+="年龄:
\t"+m_pSet->m_age+"\n";
info+="系别:
\t"+m_pSet->m_dept+"\n";
if(m_Sno==m_pSet->m_sno)
{tag=MessageBox(info,"要修改如下记录:
",100);
flag=0;
t=0;}
else{t=1;}
m_pSet->MoveNext();
if(m_pSet->IsEOF()){flag=0;}
};
if(t==1){MessageBox("你输入的学号不存在","学生管理系统",0);}
m_pSet->MovePrev();
Dlg6dlg;//工作对话框开始的程序:
if(tag==6)
{//
(1)将当前记录的各字段值拷贝到对话框的对应成员变量上:
UpdateData(TRUE);//激活对话框控件
dlg.m_CSno=m_pSet->m_sno;
dlg.m_CSn=m_pSet->m_sn;
dlg.m_CSex=m_pSet->m_sex;
dlg.m_CAge=m_pSet->m_age;
dlg.m_CDept=m_pSet->m_dept;
UpdateData(FALSE);//控件上的改变显示出来
//
(2)按对话框的"OK"按钮时返回,返回之后重置数据库该记录的修改值:
UpdateData(TRUE);
dlg.DoModal();
if(dlg.m_mima==1234){
m_pSet->Edit();
m_pSet->m_sno=dlg.m_CSno;
m_pSet->m_sn=dlg.m_CSn;
m_pSet->m_sex=dlg.m_CSex;
m_pSet->m_age=dlg.m_CAge;
m_pSet->m_dept=dlg.m_CDept;
m_pSet->Update();
m_pSet->Requery();
MessageBox("修改成功","学生管理系统",0);}
else{MessageBox("密码不正确","学生管理系统",0);}
}
//TODO:
Addyourcontrolnotificationhandlercodehere
}
3.1.5学生信息浏览
在主页面,我添加了一个学生信息浏览按钮,点击该按钮会在跳出的窗口中显示学生信息表,该表与数据库中的学生信息表连接,这样可以通过浏览该表来查看自己的删除,修改和添加等操作是否完成,同时可以通过它查看自己不熟悉学号的学生信息。
如图:
图17学生信息表
这个操作应用了ADOData控件和DataGrid控件,通过ADOData控件连接数据表,DataGrid控件连接ADOData控件后显示数据表,通过这两个控件可直接进行数据的添加、删除和修改。
因这些功能已有,所以在本系统中未启用这两个控件的该功能。
3.2学生成绩操作
因在主页面连接了学生信息表,所以在主页面添加按钮成绩查询来打开新窗口,在新窗口中连接学生成绩查询这个表,并用ADOData控件和DataGrid控件来显示学生成绩表。
在学生成绩管理窗口中学生成绩查询和成绩的统计排序是主要操作。
学生成绩的添加、删除和修改操作通过管理员登录后才能操作。
学生成绩管理操作页面如图:
图18学生成绩管理窗口
3.2.1查询操作
成绩查询操作是在学生成绩管理窗口中的查询条件中输入学生的学号,点击查询后在查询结果中显示出该学生的第一门成绩,点击下一门会显示第二门成绩,若已是最后一门则提示“这是最后一门”。
点击首项会跳回该学生的第一门功课成绩。
操作如图:
图19查询操作
程序如下:
voidDlg3Name:
:
OnButton1()
{
Dlg3Datasetpset;
intflag=1,t=0;
pset.Open();
pset.MoveFirst();
UpdateData(TRUE);
while(flag==1){
if(pset.m_sno==m_QSno){
m_QSn=pset.m_sn;
m_QCn=pset.m_cn;
m_QScore=pset.m_score;
flag=0;
t=1;
}
pset.MoveNext();
if(pset.IsEOF()){flag=0;}
}
if(t==0){MessageBox("无此人成绩信息","学生成绩管理系统",0);
m_QSn="";
m_QCn="";
m_QScore="";}
UpdateData(FALSE);
//TODO:
Addyourcontrolnotificationhandlercodehere
}//查询
voidDlg3Name:
:
OnButton2()
{
Dlg3Datasetpset;
pset.Open();
intflag=1,flag1=1,t=0;
UpdateData(TRUE);
while(flag1==1){
if(pset.m_sno==m_QSno&&pset.m_cn==m_QCn){
flag1=0;
}
pset.MoveNext();
if(pset.IsEOF()){flag=0;}
}
while(flag==1){
if(pset.m_sno==m_QSno&&pset.m_cn!
=m_QCn){
m_QSn=pset.m_sn;
m_QCn=pset.m_cn;
m_QScore=pset.m_score;
flag=0;
t=1;
}
pset.MoveNext();
if(pset.IsEOF()){flag=0;}
}
if(t==0){MessageBox("以是最后一门","学生成绩管理系统",0);}
UpdateData(FALSE);
//TODO:
Addyourcontrolnotificationhandlercodehere
}//下一科目
3.2.2统计平均和排序操作
统计平均操作是在查询条件中输入要操作的学生的学号,点击统计平均按钮后在统计排序中显示出该学生的总分、平均分和选课数,未点击时全显示0。
排序操作是在点击查看排名按钮后跳出新窗口,在新窗口中用ADOData控件和DataGrid控件显示平均分查询这个表,同时新窗口连接这个查询,以便操作。
在排名窗口中,点击查看就可以显示该学生的平均分排名,也可直接在该窗口中更改学生学号,查看其他学生的排名。
如图:
图20统计平均操作
图21查看排名操作
统计平均操作如下:
voidDlg3Name:
:
OnButton4()
{
Dlg3Datasetpset;
pset.Open();
pset.MoveFirst();
UpdateData(TRUE);
m_sum=0;
m_total=0;
while(!
pset.IsEOF()){
if(pset.m_sno==m_QSno){
m_sum+=atof(pset.m_score);
m_total++;
}
pset.MoveNext();}
if(m_total==0){MessageBox("无该生成绩信息","学生成绩管理系统",0);
m_sum=0;
m_avg=0;
m_total=0;
UpdateData(FALSE);
}
else{m_avg=m_sum/m_total;
UpdateData(FALSE);}
//TODO:
Addyourcontrolnotificationhandlercodehere
}//统计平均
查看排名程序如下:
voidDlg5:
:
OnButton1()
{
UpdateData(TRUE);
Dlg5Datasetpset;
pset.Open();
pset.MoveFirst();
intt=1,flag=0;
while(!
pset.IsEOF()){
if(pset.m_sno==m_Sno){
m_order=t;
UpdateData(FALSE);
flag=1;
return;}
t++;
pset.MoveNext();
};
if(flag==0){MessageBox("你的学号输入错误","提示",0);}
//TODO:
Addyourcontrolnotificationhandlercodehere
}//查看
3.2.3管理员登录操作
管理员登录是进行学生成绩添加、删除和修改等操作的前提。
点击管理员登录,跳出管理员登录界面,输入密码后跳出管理界面。
如图:
图22管理员登录界面
图23成绩管理界面
程序如下:
voidDlg3Name:
:
OnButton6()
{
Dlg8dlg;
if(dlg.DoModal()==IDOK){
UpdateData(TRUE);
if(dlg.m_mima==1234){
Dlg9dlgg;
dlgg.DoModal();}
else{MessageBox("密码不正确","提示",0);}
}
//TODO:
Addyourcontrolnotificationhandlercodehere
}
3.2.4成绩管理操作
学生成绩管理操作包括成绩的添加、修改和删除,点击相应按钮会跳出相应的界面供我们操作。
添加成绩如下:
图24成绩添加
程序如下:
voidDlg9:
:
OnButton1()
{
DlgAdlg;
DlgADatasetpset;
pset.Open();
if(dlg.DoModal()==IDOK)
{//按IDD_DIALOG1的"OK"按钮返回之后:
intflag=0;
pset.MoveFirst();
UpdateData(TRUE);
while(!
pset.IsEOF()){
if(dlg.m_AddSno==pset.m_sno&&dlg.m_AddCno==pset.m_cno){flag=1;
MessageBox("该门成绩已存在","管理系统",0);}
pset.MoveNext();}
if(flag==0){
pset.AddNew();//先执行追加新记录的功能函数AddNew()
pset.m_sno=dlg.m_AddSno;//给学号、姓名字段赋值:
pset.m_cno=dlg.m_AddCno;
pset.m_score=dlg.m_AddScore;
pset.Update();//新记录写入数据库的数据表
pset.Requery();//刷新记录集。
这将改动"物理"数据库。
MessageBox("添加成功","学生管理系统",0);
}
//TODO:
Addyourcontrolnotificationhandlercodehere
}
}
修改操作如下:
图25修改操作1
图26修改操作2
程序如下:
voidDlg9:
:
OnButton2()
{
DlgBdlg;
DlgB1Datasetpset;
pset.Open();
if(dlg.DoModal()==IDOK)
{pset.MoveFirst();
UpdateData(TRUE);
inttag=0,t=0;
while(!
pset.IsEOF())
{
if(dlg.m_MSno==pset.m_sno&&dlg.m_MCno==pset.m_cno)
{t=1;
DlgB2dlgg;
UpdateData(TRUE);
dlgg.m_MScore=pset.m_score;
UpdateData(FALSE);
UpdateData(TRUE);
dlgg.DoModal();
tag=MessageBox("确定修改?
","提示",100);
if(tag==6)
{
pset.Edit();
pset.m_score=dlgg.m_MScore;
pset.Update();
pset.Requery();
MessageBo