《VC++设计学生成绩管理系统(共22页).doc》由会员分享,可在线阅读,更多相关《VC++设计学生成绩管理系统(共22页).doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上1 绪论学生成绩管理系统对学校加强学生成绩管理有着极其重要的作用。由于各个大学都在持续扩招,学生的数量日益庞大,传统手工的学生成绩管理,管理过程繁琐而复杂,执行效率低,并且易于出错。另外,学生的成绩要用于学校教务管理的各个方面,所以一旦学生成绩管理出现了错误,后果往往是非常严重的。通过学习成绩管理系统,我们可以做到信息的规范管理和快速查询。 本次设计的学生成绩管理系统是典型的信息管理系统,它能够高效率地帮助教师上传学生的成绩和最终成绩记录的保存,也方便了学生查询成绩,其开发主要包括后台数据库的建立和维护以及前台应用程序的开发两个方面。对于前者要求建立起数据一致性高和完
2、整性强、数据安全性好的库,而对于后者则要求应用程序功能完备,易使用等特点。 基于学校学生众多,为了数据的安全性,系统将学生数据保存在数据库中,以Visual C+设计前台对系统进行设计。因为成绩管理系统是一项很实用的系统,所面对的数据量很大,所以我们要求系统能够高效快速的处理这些数据,并且要保证数据的正确性、相容性和安全性。C+作为前台是将数据库中的数据读取出来,有助于用户对这些数据进行相应的操作,使操作更方便,更符合用户的要求。所以该系统应该要有一个良好的界面,使用户感觉很直观,使用快捷,这就是用C+所要实现的功能。关键词:Visual C+,数据库,学生成绩管理系统2 设计要求基于C+的学
3、生成绩管理系统设计学生成绩管理系统有学号,姓名,成绩等组成; 开发工具有VC+6.0,ACCESS2003,SQL2005等;主要功能:前台用VC+设计界面,后台用数据库。(1)能完成对学生成绩的录入、修改(2)能统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序(3)能查询学生成绩,不及格科目及学生名单(4)能输出学生的成绩单3 数据库设计3.1 概念设计根据设计要求,要对学生成绩进行操作,所以系统实体属性包括学号,姓名语文成绩,数学成绩,英语成绩。由以上分析可以得该系统的E-R关系图如图1所示学号姓名语文成绩学生 数学成绩英语成绩图1 学生成绩E-R图3.2 逻辑设计与物
4、理设计根据概念设计中的E-R图,可设计一个表,其关系模型如下:学生基本信息表:学号,姓名,语文成绩,数学成绩,英语成绩。在ACCESS中定义一个表的物理结构如下: 图2 学生成绩表物理结构3.3 数据库的输入 在ACCESS中定义好物理结构后就可以输入数据,同时根据系统的要求,用ACCESS做了一个查询去求总分和平均分。具体数据如下:图3 学生成绩表图4 总分平均分查询4 程序设计根据设计要求,本系统是利用VC来开发可视化界面,因此要将程序和数据库进行连接,这要使用ODBC工具将数据库设置数据源,在建立工程时选择数据库查看使用文件支持,在选择数据源时选择自己设置的数据源即可。在主页面,连接平均
5、分总分查询,在主页面对学生成绩操作就非常方便。主页面如图5所示:图5 主页面4.1 查询操作查询操作的功能是输入学号,点击查询按钮,就可以显示出学生的基本信息。如图6所示:图6 查询操作按下查询按钮,调用函数,跳到查询界面,显示各信息。程序如下:void CGGView:OnButton2() int flag=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( );
6、 if( m_pSet-IsEOF( ) )flag=0; if(t=1)MessageBox(你输入的学号不存在,学生管理系统, 0 ); m_pSet-MovePrev( ); Dlg4 dlg; / 工作对话框开始的程序: 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;
7、 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图所示:图7 添加操作按下添
8、加按钮,调用添加函数,跳到添加界面,即可进行相关操作。程序如下:void CGGView:OnButton1() Dlg1 dlg;if(dlg.DoModal()=IDOK)int flag=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();m_pSet-m_column1=dlg.m_column
9、1;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 删除操作图9 删除提示 图10 确认删除程序如下:void CGG
10、View:OnButton5() / TODO: Add your control notification handler code hereDlg2 dlg;if(dlg.DoModal()=IDOK)int flag=1,t=0,flag1=0,flag2=0;m_pSet-MoveFirst();UpdateData(TRUE);while(flag=1)CString info=0; info=学号:t+m_pSet-m_column2+n; info+=姓名:t+m_pSet-m_column1+n; if(dlg.m_DleSno=m_pSet-m_column2)flag1=M
11、essageBox(info,请确认删除学生的信息:,100);flag=0;t=0;elset=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 修改操作程序如下:void CGGView:OnButton6() / TODO: Add your control notification handler code hereint flag=1,t=0,tag=0; m_pSet-MoveFirst( ); UpdateData(TRUE); while(flag=1) CString info=0; info = 学号:t + m_pSet-m_column2+ n; info += 姓名:t + m_pSet-m_column1 + n; i
13、f(m_Sno=m_pSet-m_column2) 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( ); Dlg3 dlg; / 工作对话框开始的程序: if( tag=6 ) /(1)将当前记录的各字段值拷贝到对话框的对应成员变量上: UpdateData(TRUE);/激活对话框控件 dlg.m_CSno
14、= 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 = d
15、lg.m_CSno ; m_pSet-m_column1 = dlg.m_CSn ; m_pSet-m_column3 = dlg.m_CCla ; m_pSet-m_column4= dlg.m_CC1 ; m_pSet-m_column5 = dlg.m_CC2 ; m_pSet-Update( ) ; m_pSet-Requery( ); MessageBox(修改成功,学生管理系统,0); / TODO: Add your control notification handler code here4.5 显示和排序操作显示操作是在点击显示按钮后,主页面的表格会显示所有学生成绩,排序操
16、作是在点击排序按钮后再点击显示按钮,主页面会按平均分的升序排列显示所有学生成绩。如下图所示:图12 显示操作图13 排序操作程序如下:显示程序void CGGView:OnInitialUpdate()m_pSet = &GetDocument()-m_gGSet;CRecordView:OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();m_list.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_
17、EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);/设置扩展样式m_list.InsertColumn(0,学号,LVCFMT_LEFT,80,0);/添加项m_list.InsertColumn(1,姓名,LVCFMT_LEFT,80,1);/m_list.InsertColumn(2,语文,LVCFMT_LEFT,80,2);/ m_list.InsertColumn(3,数学,LVCFMT_LEFT,80,3);/ m_list.InsertColumn(4,英语,LVCFMT_LEFT,80,4);/m_list.InsertColumn(5,总分,LVCFM
18、T_LEFT,80,5);m_list.InsertColumn(6,平均分,LVCFMT_LEFT,80,6);int CGGView:OnButton3() / TODO: Add your control notification handler code herem_list.DeleteAllItems();int i=0; m_pSet-MoveFirst(); do CString s; s.Format(%s,m_pSet-m_column2); m_list.InsertItem(i,s,0); m_list.SetItemText(i,1,m_pSet-m_column1)
19、; s.Format(%.1f,m_pSet-m_column3); m_list.SetItemText(i,2,s); s.Format(%.1f,m_pSet-m_column4); m_list.SetItemText(i,3,s); s.Format(%.1f,m_pSet-m_column5); m_list.SetItemText(i,4,s); s.Format(%.1f,m_pSet-m_column6); m_list.SetItemText(i,5,s); s.Format(%.1f,m_pSet-m_column7); m_list.SetItemText(i,6,s)
20、; i+; m_pSet-MoveNext(); while(!m_pSet-IsEOF(); if(m_pSet-IsEOF()m_pSet-MovePrev(); m_pSet-Close(); m_pSet-Open(); return i; 排序程序void CGGView:OnButton4() / TODO: Add your control notification handler code hereUpdateData();m_pSet-Close();m_pSet-m_strSort=平均分;m_pSet-Open();UpdateData(FALSE);4.6 显示不及格学
21、生名单操作 显示不及格学生名单操作是在点击不及格名单按钮后,主页面会显示不及格学生学号,姓名,不及格科目及分数。如图14所示:图14 显示不及格学生名单操作程序如下:int CGGView:OnButton7() / TODO: Add your control notification handler code herem_list.DeleteAllItems();int i=0;int a=0,b=0,c=0; m_pSet-MoveFirst(); do if(m_pSet-m_column3m_column4m_column5m_column2); m_list.InsertItem
22、(i,s,0); m_list.SetItemText(i,1,m_pSet-m_column1); if(a=1) s.Format(%.1f,m_pSet-m_column3); m_list.SetItemText(i,2,s); if(b=1) s.Format(%.1f,m_pSet-m_column4); m_list.SetItemText(i,3,s); if(c=1) s.Format(%.1f,m_pSet-m_column5); m_list.SetItemText(i,4,s); a=0,b=0,c=0; i+; m_pSet-MoveNext(); while(!m_
23、pSet-IsEOF();if(m_pSet-IsEOF()m_pSet-MovePrev(); m_pSet-Close(); m_pSet-Open(); return i;5 调试报告软件编写完成后对其进行调试,调试过程中发现自己的程序缺少一些人机交互,例如在删除后应该让用户知道自己的删除操作是否完成,所以在删除完成后应用MessageBox来告知用户删除已完成。自己的程序在调试是经常出现功能不能执行或不管条件怎样都会执行的情况,检查程序发现,自己的If语句在编写时=写成=,导致程序出现错误。在显示不及格名单的时候,因为IF语句结构错误,导致不能显示不及格的成绩。最后修改结构及相关条件,
24、最后成功实现显示不及格的科目及名单的要求。6 心得体会本次课程设计锻炼了我们综合利用C+语言进行程序设计的能力,考察了观察能力和总结能力和将所学知识转化为分析和设计简单实际问题的能力。通过此次学生成绩管理系统的设计,使我对面向对象程序设计有了深一步的了解,对系统设计及开发有了比较全面的思路。例如在Visual C+中,文档类、与文档类相关联的视图类以及视图类提供的显示框架窗口都是由文档模板创建的,每一种文档类型都有一种文档模板与之相对应,文档模板负责创建和管理该文档类型的所有文档。总之,通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困
25、惑,经过与同学们探讨和向老师请教才得以解决,这也激发了我今后努力学习的兴趣,也很感谢老师和同学对我的帮助,我想这将对我以后的学习产生积极的影响,为今后的学习和实践打下了良好的基础。参考文献1 Michael R.Groh.ACCESS 2007宝典.人民邮电出版社.20102 罗摩克里希纳 科尔基.数据库管理系统原理原理与设计(第三版).清华大学出版社.20103任芳芳.ACCESS2007数据库设计实用教程(中文版).中国水利水电出版社.20114王海龙等.VISUALC+6.0设计师之路.电子工业大学出版社.20125徐武等.VISUALC+6.0与ORACLE数据库编程实例.电子工业大学出版社.2010专心-专注-专业