武汉理工大学《程序设计实训》课程设计说明书11绪论学生成绩管理系统对学校加强学生成绩管理有着极其重要的作用。由于各个大学都在持续扩招,学生的数量日益庞大,传统手工的学生成绩管理,管理过程繁琐而复杂,执行效率低,并且易于出错。另外,学生的成绩要用于学校教务管理的各个方面,所以一旦学生成绩管理出现了错误,后果往往是非常严重的。通过学习成绩管理系统,我们可以做到信息的规范管理和快速查询。本次设计的学生成绩管理系统是典型的信息管理系统,它能够高效率地帮助教师上传学生的成绩和最终成绩记录的保存,也方便了学生查询成绩,其开发主要包括后台数据库的建立和维护以及前台应用程序的开发两个方面。对于前者要求建立起数据一致性高和完整性强、数据安全性好的库,而对于后者则要求应用程序功能完备,易使用等特点。基于学校学生众多,为了数据的安全性,系统将学生数据保存在数据库中,以VisualC++设计前台对系统进行设计。因为成绩管理系统是一项很实用的系统,所面对的数据量很大,所以我们要求系统能够高效快速的处理这些数据,并且要保证数据的正确性、相容性和安全性。C++作为前台是将数据库中的数据读取出来,有助于用户对这些数据进行相应的操作,使操作更方便,更符合用户的要求。所以该系统应该要有一个良好的界面,使用户感觉很直观,使用快捷,这就是用C++所要实现的功能。关键词:VisualC++,数据库,学生成绩管理系统武汉理工大学《程序设计实训》课程设计说明书22设计要求基于C++的学生成绩管理系统设计学生成绩管理系统有学号,姓名,成绩等组成;开发工具有VC++6.0,ACCESS2003,SQL2005等;主要功能:前台用VC++设计界面,后台用数据库。(1)能完成对学生成绩的录入、修改(2)能统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序(3)能查询学生成绩,不及格科目及学生名单(4)能输出学生的成绩单武汉理工大学《程序设计实训》课程设计说明书33数据库设计3.1概念设计根据设计要求,要对学生成绩进行操作,所以系统实体属性包括学号,姓名语文成绩,数学成绩,英语成绩。由以上分析可以得该系统的E-R关系图如图1所示图1学生成绩E-R图3.2逻辑设计与物理设计根据概念设计中的E-R图,可设计一个表,其关系模型如下:学生基本信息表:学号,姓名,语文成绩,数学成绩,英语成绩。在ACCESS中定义一个表的物理结构如下:图2学生成绩表物理结构学生姓名学号语文成绩数学成绩英语成绩武汉理工大学《程序设计实训》课程设计说明书43.3数据库的输入在ACCESS中定义好物理结构后就可以输入数据,同时根据系统的要求,用ACCESS做了一个查询去求总分和平均分。具体数据如下:图3学生成绩表图4总分平均分查询武汉理工大学《程序设计实训》课程设计说明书54程序设计根据设计要求,本系统是利用VC来开发可视化界面,因此要将程序和数据库进行连接,这要使用ODBC工具将数据库设置数据源,在建立工程时选择数据库查看使用文件支持,在选择数据源时选择自己设置的数据源即可。在主页面,连接平均分总分查询,在主页面对学生成绩操作就非常方便。主页面如图5所示:图5主页面4.1查询操作查询操作的功能是输入学号,点击查询按钮,就可以显示出学生的基本信息。如图6所示:武汉理工大学《程序设计实训》课程设计说明书6图6查询操作按下查询按钮,调用函数,跳到查询界面,显示各信息。程序如下:voidCGGView::OnButton2(){intflag=1,t=0,tag=0;m_pSet-MoveFirst();UpdateData(TRUE);while(flag==1){if(m_Sno==m_pSet-m_column2){tag=6;flag=0;t=0;}else{t=1;}m_pSet-MoveNext();if(m_pSet-IsEOF()){flag=0;}};if(t==1){MessageBox(你输入的学号不存在,学生管理系统,0);}m_pSet-MovePrev();武汉理工大学《程序设计实训》课程设计说明书7Dlg4dlg;//工作对话框开始的程序:if(tag==6){//(1)将当前记录的各字段值拷贝到对话框的对应成员变量上:UpdateData(TRUE);//激活对话框控件dlg.m_Sno=m_pSet-m_column2;dlg.m_Sn=m_pSet-m_column1;dlg.m_Cla=m_pSet-m_column3;dlg.m_C1=m_pSet-m_column4;dlg.m_C2=m_pSet-m_column5;dlg.m_C3=m_pSet-m_column6;dlg.m_C4=m_pSet-m_column7;UpdateData(FALSE);//控件上的改变显示出来//(2)按对话框的OK按钮时返回,返回之后重置数据库该记录的修改值:UpdateData(TRUE);dlg.DoModal();}4.2添加操作添加操作是在点击添加按钮后,添加记录窗口跳出,在新窗口输入要添加的记录,点击确定按钮后,如果该学生的信息已存在(以学号判断),则提醒该学生信息已存在,如果添加成功,则跳出添加成功提示。如7图所示:武汉理工大学《程序设计实训》课程设计说明书8图7添加操作按下添加按钮,调用添加函数,跳到添加界面,即可进行相关操作。程序如下:voidCGGView::OnButton1(){Dlg1dlg;if(dlg.DoModal()==IDOK){intflag=0;m_pSet-MoveFirst();UpdateData(TRUE);while(!m_pSet-IsEOF()){if(dlg.m_column2==m_pSet-m_column2){flag=1;MessageBox(该学生信息已存在,管理系统,0);}m_pSet-MoveNext();}if(flag==0){m_pSet-AddNew();武汉理工大学《程序设计实训》课程设计说明书9m_pSet-m_column1=dlg.m_column1;m_pSet-m_column2=dlg.m_column2;m_pSet-m_column3=dlg.m_column3;m_pSet-m_column4=dlg.m_column4;m_pSet-m_column5=dlg.m_column5;m_pSet-Update();m_pSet-Requery();MessageBox(添加成功,学生管理系统,0);}}}4.3删除操作删除操作是点击删除按钮后,跳出删除窗口,在删除窗口中输入要删除学生信息的学号,在多种提示后确认无误后删除,删除后会显示已删除提醒。如下图所示:图8删除操作武汉理工大学《程序设计实训》课程设计说明书10图9删除提示图10确认删除程序如下:voidCGGView::OnButton5(){//TODO:AddyourcontrolnotificationhandlercodehereDlg2dlg;if(dlg.DoModal()==IDOK){intflag=1,t=0,flag1=0,flag2=0;m_pSet-MoveFirst();UpdateData(TRUE);while(flag==1){CStringinfo=\0;武汉理工大学《程序设计实训》课程设计说明书11info=学号:\t+m_pSet-m_column2+\n;info+=姓名:\t+m_pSet-m_column1+\n;if(dlg.m_DleSno==m_pSet-m_column2){flag1=MessageBox(info,请确认删除学生的信息:,100);flag=0;t=0;}else{t=1;}m_pSet-MoveNext();if(m_pSet-IsEOF()){flag=0;}}{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);}}}}4.4修改操作武汉理工大学《程序设计实训》课程设计说明书12修改操作是在主页面输入要修改的学生成绩的学号,点击修改按钮,跳出修改窗口,在窗口中会显示该学生现有的信息,将其修改后点击确定按钮。如图11所示:图11修改操作程序如下:voidCGGView::OnButton6(){//TODO:Addyourcontrolnotificationhandlercodehereintflag=1,t=0,tag=0;m_pSet-MoveFirst();UpdateData(TRUE);while(flag==1){CStringinfo=\0;info=学号:\t+m_pSet-m_column2+\n;info+=姓名:\t+m_pSet-m_column1+\n;if(m_Sno==m_pSet-m_column2)武汉理工大学《程序设计实训》课程设计说明书13{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();Dlg3dlg;//工作对话框开始的程序:if(tag==6){//(1)将当前记录的各字段值拷贝到对话框的对应成员变量上:UpdateData(TRUE);//激活对话框控件dlg.m_CSno=m_pSet-m_column2;dlg.m_CSn=m_pSet-m_column1;dlg.m_CCla=m_pSet-m_column3;dlg.m_CC1=m_pSet-m_column4;dlg.m_CC2=m_pSet-m_column5;//dlg.m_CC3=m_pSet-m_c3;UpdateData(FALSE);//控件上的改变显示出来//(2)按对话框的OK按钮时返回,返回之后重置数据库该记录的修改值:UpdateData(TRUE);dlg.DoModal();m_pSet-Edit();m_pSet-m_column2=dlg.m_CSno;m_pSet-m_column1=dlg.m_CSn;m_pSet-m_column3=dlg.m_CCla;m_pSet-m_column4=dlg.m_CC1;武汉理工大学《程序设计实训》课程设计说明书14m_pSet-m_column5=dlg.m_CC2;m_pSet-Update();m_pSet-Requery();MessageBox(修改成功,学生管理系统,0);}//TODO:Addyourcontrolnotificationhandlercodehere}4.5显示和排序操作显示操作是在点击显示按钮后,主页面的表格会显示所有学生成绩,排序操作是在点击排序按钮后再点击显示按钮,主页面会按平均分的升序排列显示所有学生成绩。如下图所示:图12显示操作武汉理工大学《程序设计实训》课程设计说明书15图13排序操作程序如下:显示程序voidCGGView::OnInitialUpdate(){m_pSet=&GetDocument()-m_gGSet;CRecordView::OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();m_list.SetExtendedStyle