基于visual c++实现的学生信息管理系统的设计与实现.pdf
上饶师范学院优秀本科毕业论文1基于基于基于基于VisualVisualVisualVisualC+C+C+C+实现的学生信息管理系统的设计与实现实现的学生信息管理系统的设计与实现实现的学生信息管理系统的设计与实现实现的学生信息管理系统的设计与实现李卓锐02 数(3)指导老师:陈齐荣 摘摘 要要:本文根据软件工程的原理,详细阐述了一个小型的系统软件设计,设计本软件的目的主要有两个,一是开发出一个功能相对完善,有一定实用价值的软件产品,二是提高自己的编程能力,扩展自己的知识。特别是一个完整的软件项目,可以看成是一个软件产品,也是一个对自己所学知识的一次综合,这就是我的毕业设计的意义和价值所在。在这个作品中,先对软件做了需求分析,得出这个系统必须做什么,必须具备哪些功能。在总体设计中,主要分成两大块,一个系统的功能模块的设计,一个是数据库的设计。详细设计的过程中,对每一个模块,对于一些重要的代码,都摘抄出来进行了必要的解释说明。最后是对这个系统进行了适当的评价。关键词关键词:Visual C+;Access 2000;ODBC;信息管理1 1 引言引言学校的学生的信息管理是学校一项重要的工作,特别是对于高中,学习紧张,考试比较频繁,通过使用学习信息管理系统可以大大的提高这项工作的效率,减少在成绩统计以及分析中的失误。学校可以通过该软件很直观对各班成绩的比较,来督促学校整体的学习质量,学生也可以通过对成绩的查询,了解自己的成绩走向。另外,我通过设计制作这个软件,学习到很多 VC+的知识,对软件的开发有了更深的理解。因此这个软件既有很强的实用性,又使我增长了不少知识,这就是这个毕业设计的意义所在。在这个毕业设计里,运用一些最新的开发工具和技术,对于以下介绍的工具和技术,在网上和图书馆都有大量的资料介绍。1.11.1 C/C+C/C+语言语言C/C+语言并非起源于 Microsoft 公司,在 Windows 3.0 出现之前,最好的 C/C+编程工具是 Borland公司的 Turbo C/C+系列。随着 Windows 3.0,Microsoft 推出了 Microsoft C/C+7.0,首次采用了 MFC(Microsoft Foundation Class Library,微软基础类库)。正是由于 MFC 的出现,让 C+程序员的工作变得更加高效,也使得今天的 Visual C+得以成为优秀的主流编程工具。1.21.2 VisualVisual C+C+Microsoft 出品的 Visual C+是一个功能非常强大的可视化编程工具,可以说是目前功能最为强大的程序开发平台之一。VC+以 C+语言为基础,作为一个开发平台,不仅在开发环境,调试环境等方面对 C+有很大的支持此编译器提供了大量的控件,可用来实现本软件的很多功能,但也会对本软件的实现造成一定的制约。由于同为 Microsoft 公司的产品,在 Windows 操作系统有力的支持下,Visual C+6.0 的执行速度和对操作系统的访问权限之高,是其他许多编程工具所无法比拟的。因此,Visual C+成为众多程序员在 Windows 下编程的首选工具。本系统要涉及到数据库,数据库是变成人员经常使用到的内容,在 Visual C+数据库开发中包含了多种多样的数据库开发技术ODBC API,MFC ODBC,DAO,OLE DB 和 ADO 等,这些技术各有各自己的特点,提供了简单,灵活,访问速度快,可扩展性好的服务特性。1.31.3 数据库数据库 AccessAccess 20002000Access 2000 是 Office 系列软件中的一个专门用来开发数据库的软件。虽然不像 SQL Server 一样的强大,但它能胜任学生管理系统的数据存取工作,另外,Access 环境要求配置不高,界面友好,使用方便,只需一些简单的操作就能完成一个结构完整,高效的数据库对支持数据量不会很大,访问不台频繁的桌面运用软件,Access 有它自身很强的优势。1.41.4 数据库访问技术数据库访问技术 ODBCODBC(开放性数据连接)(开放性数据连接)开放性数据连接提供了一个通用的编程借口,允许程序与多种不同的数据库连接。它为 Oracle,SQLServer 等都提供了驱动程序,用户可以使用 SQL 语句对数据库进行直接的底层功能操作。其特点是功能强上饶师范学院优秀本科毕业论文2大,提供了异步操作,事务处理等高级功能。ODBC 只能访问关系型数据库。在 VC+中,MFC 的 ODBC 数据库类 CDatabase(数据库类),CRecordset(记录集类),和 CRecordView(记录集视图类)为用户管理提供了切实可行的解决方案。CDatabase 类:表示一个到数据源的连接,通过它可以操作数据源。CDecordset 类:代表一个从数据源选择的一组记录的集合记录集。CRecordView 类:是在空间中显示数据库记录的一个视图类。CDBException 类:反映了对数据库操作的异常。2 2 总体设计总体设计2.12.12.12.1系统功能描述系统功能描述系统针对高中学校的教务管理,分为两个模块,学生信息模块,教师管理模块;各模块功能如下:学生模块:可以查看自己最近的考试成绩以及班级里的成绩情况,查看自己历史成绩查询,查看自己的基本资料,提交自己的资料,并且值得注意的是还提供了成绩走向图的功能,很直观的学生成绩的起落。教师管理模块:主要是针对班主任班主任,班主任可以查看本班的整体成绩,查看全年级的整体成绩,进行班级中学生间成绩的比较,进行年级中班级间成绩的比较,对学生成绩的添加,对考试名称的添加,对单个学生的成绩进行查询,修改,删除,输入成绩后,可以进行班级中学生的排名,年级中前五十名排名。2.22.2 功能模块划分功能模块划分每个功能模块都有一个相应的对话框为载体,本系统也是基于对话框的。各功能模块既相互独立,又有一定的联系。学生登录之后,他的学号,姓名及所在班级将会成为全局变量,在以后的每个学生模块的操作中,都只是针对这个学生的操作,和其他学生无关,体现了软件的紧密和功能的划分的优点。2.32.3 系统流程分析系统流程分析系统的开始是一个基于对话框的界面,这有两个好处,一是设计简单,而是操作直观,任何用户都很容易上手,没有其他烦琐的步骤。总体设计阶段的基本目的好似用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构 数据库设计数据库设计3.13.1 建数据库建数据库EduDB.mdb,详见表;建的表中,每个表都有相对独立的功能,但又要做到有一定的联系,要方便查询,学生信息管理系统学生信息管理系统学生信息管理系统学生信息管理系统学生模块教师模块最近一次的成绩查询基本资料查看基本资料的修改历次成绩查询全班学生成绩查询密码修改历次成绩的图象表示本班及全年级成绩查询本班学生成绩的输入成绩的修改对输入的成绩进行排名次上饶师范学院优秀本科毕业论文3但表不能太多,每个表的属性也要完善。3.23.2 数据库的具体设计数据库的具体设计共 12 个表,分别如下classclass 班级信息coursecourse:课程表信息classTypeclassType 班级类型信息examtypeexamtype:考试类型表teachingteaching:教师授课表studentinfostudentinfo:学生资料信息表scorescore:分数表studentstudent:学生表上饶师范学院优秀本科毕业论文4teacherteacher:教师表examexam:考试表3.33.3 数据库表之间的关系数据库表之间的关系4 4 详细设计详细设计4.14.1 注册数据源注册数据源1,打开控制面板管理工具数据源(ODBC);2,在用户 DSN 面板,选添加,3,驱动程序选择 Microsoft Access Drive(*.mdb);4,数据源名写:EduDatabase;5,数据库选择本毕业设计的安装目录下的:EduDB.ldb;注册好的数据源如图:上饶师范学院优秀本科毕业论文54.24.2 登录模块的设计登录模块的设计分两类用户登录,分别为老师和学生,当输入不正确的密码超过三次,将会自动退出系统,界面如下:关于登录时访问数据库和判断的代码如下:void CEducationalDlg:OnLogin()UpdateData();if(m_flag=0)CSetStudent*m_stuset=new CSetStudent(&m_database);/定义static int count=0;/设置计数器UpdateData();if(strlen(m_user)8)MessageBox(你的学号似乎有 8 位,别急,想好了再输入!);return;if(strlen(m_pass)Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);/打开记录集if(m_stuset-GetRecordCount()=0)if(count IsOpen()scoreset-Close();上饶师范学院优秀本科毕业论文7CString strSQL;CString strSQLe;int n;int a;strSQL.Format(select*fromscorewherestuno=%sANDeximno=%d,stuno,examno);scoreset-Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);/打开学生成绩表if(scoreset-IsEOF()MessageBox(很抱歉!最近的一次成绩大概老师还没有录入,n你只能查看到以前的成绩。);scoreset-Close();elseif(scoreset-GetRecordCount()!=0)scoreset-MoveFirst();while(!scoreset-IsEOF()scoreset-MoveNext();/统计学生成绩数n=scoreset-GetRecordCount();if(scoreset-GetRecordCount()!=0)scoreset-MoveFirst();for(int i=0;im_courseno;switch(a)/对应课程号,获得成绩case 1:m_yuwen=scoreset-m_fscore;case 2:m_shuxue=scoreset-m_fscore;case 3:m_yingyu=scoreset-m_fscore;case 4:m_wuli=scoreset-m_fscore;case 5:m_huaxue=scoreset-m_fscore;case 6:m_shengwu=scoreset-m_fscore;case 7:m_lishi=scoreset-m_fscore;case 8:m_zhengzhi=scoreset-m_fscore;case 9:m_dili=scoreset-m_fscore;scoreset-MoveNext();上饶师范学院优秀本科毕业论文8m_total=m_yuwen+m_shuxue+m_yingyu+m_wuli+m_huaxue+m_shengwu+m_lishi+m_zhengzhi+m_dili;m_average=m_total/n;/计算总分和平均成绩CSetExim*eximset=new CSetExim(&m_database);/建立考试表集if(eximset-IsOpen()eximset-Close();strSQLe.Format(select*fromexamwherestuno=%sANDexamno=%d,stuno,examno);eximset-Open(AFX_DB_USE_DEFAULT_TYPE,strSQLe);/打开考试表if(eximset-IsEOF()eximset-Close();elseif(eximset-GetRecordCount()!=0)/查找学生班级名次m_mingci=eximset-m_place;UpdateData(FALSE);其中班级成绩视图的代码如下:void CStuMscore:RefreshClass(int examno)m_scorelist.DeleteAllItems();/清空列表试图CString strSQLe;CString strSQLs;int j=0;CString s;CSetStudent*m_stuset=new CSetStudent(&m_database);/分配记录集空间CSetExim*m_eximset=new CSetExim(&m_database);CSetScore*m_scoreset=new CSetScore(&m_database);m_stuset-Open(AFX_DB_USE_DEFAULT_TYPE,m_query);/打开学生表记录集if(m_stuset-GetRecordCount()!=0)m_stuset-MoveFirst();while(!m_stuset-IsEOF()strSQLe.Format(select*from exam where stuno=%s AND examno=%d order bystuno,m_stuset-m_stuno,examno);strSQLs.Format(select*from score where stuno=%s AND eximno=%d order bystuno,m_stuset-m_stuno,examno);m_scorelist.InsertItem(j,m_stuset-m_stuno);/插入到试图列表m_scorelist.SetItemText(j,1,m_stuset-m_stuname);m_eximset-Open(AFX_DB_USE_DEFAULT_TYPE,strSQLe);/打开考试表记录集上饶师范学院优秀本科毕业论文9if(!m_eximset-IsEOF()s.Format(%d,m_eximset-m_place);/继续插入m_scorelist.SetItemText(j,2,s);s.Format(%4.1f,m_eximset-m_total);m_scorelist.SetItemText(j,4,s);s.Format(%2.3f,m_eximset-m_average);m_scorelist.SetItemText(j,5,s);if(m_scoreset-IsOpen()m_scoreset-Close();m_scoreset-Open(AFX_DB_USE_DEFAULT_TYPE,strSQLs);/打开成绩表if(m_scoreset-GetRecordCount()!=0)m_scoreset-MoveFirst();int i=14;while(!m_scoreset-IsEOF()s.Format(%4.1f,m_scoreset-m_fscore);m_scorelist.SetItemText(j,i,s);/从后向前插入m_scoreset-MoveNext();i-;m_stuset-MoveNext();j+;还有一个动态生成组合框中字符串的函数,可以从 void CStuMscore:SetComboExim()函数中了解到。成绩走向图的界面如下:void CStuDarw:Draw(float*a,int N)if(NGetDC();/获得设备环境int xs=N,ys=10;CRect rc;CString s;CPen pen(PS_DOT,1,RGB(200,200,200),*oldpen;CBrush drawBrush(RGB(255,0,0);pWnd-GetClientRect(rc);/获得客户区大小pDC-Rectangle(rc.left,rc.top,rc.right,rc.bottom);int x0=rc.left+30,y0=rc.top+20,x1=rc.right-25,y1=rc.bottom-30;/设置画图范围int dx=(x1-x0)/xs;int dy=(y1-y0)/ys;int i;oldpen=pDC-SelectObject(&pen);for(i=0;iMoveTo(x0+i*dx,y0);pDC-LineTo(x0+i*dx,y1);for(int j=0;jMoveTo(x0,y0+j*dy);pDC-LineTo(x1,y0+j*dy);pDC-SelectObject(oldpen);pen.Detach();/分离画笔pen.CreatePen(PS_DOT,1,RGB(230,10,0);/创建画笔pen.Detach();/再次分离画笔pen.CreatePen(PS_DOT,1,RGB(0,255,0);/创建画笔oldpen=pDC-SelectObject(&pen);pDC-TextOut(x0-20,y0+4*dy-5,60);pDC-TextOut(x0-28,y0-5,100);pen.CreatePen(PS_SOLID,1,RGB(0,0,0);/oldpen=pDC-SelectObject(&pen);int x=0;pDC-MoveTo(x0,y1);pDC-LineTo(x=x1+14,y1);pDC-LineTo(x-8,y1+3);/画 x 轴pDC-MoveTo(x0,y0-14);pDC-LineTo(x0,y1);pDC-MoveTo(x0,y0-14);pDC-LineTo(x0-3,y0-2);pDC-SelectObject(oldpen);/载入老画笔pen.Detach();pen.CreatePen(0,0,RGB(0,0,255);/pDC-SelectObject(&pen);上饶师范学院优秀本科毕业论文11CBrush*oldBrush=pDC-SelectObject(&drawBrush);POINTptRect4=-2,-2,-2,2,2,2,2,-2,ptDraw4;intdeta;POINTpt256;intnCound=N;deta=(x1-x0)/nCound;for(i=0;inCound;i+)pti.x=x0+i*deta;pti.y=y1-(int)(ai*2);for(j=0;jPolygon(ptDraw,4);s.Format(%3.0f,ai);/将数据格式化为字符串形式pDC-TextOut(pti.x+3,pti.y-16,s);/沿 X 轴标记数值pDC-Polyline(pt,nCound);pDC-SelectObject(oldpen);pDC-SelectObject(oldBrush);以上函数必须在 void CStuDarw:OnPaint()中调用。另外还有一个是学生基本资料的查看以及基本资料的添加,就不在这里赘述,可以在 class StuMbasic:public Cdialog 这个类中了解到。4.44.4 教师主窗口的设计教师主窗口的设计主界面包括班主任所授班级的成绩情况以及年纪的成绩情况,同时可以查询历次的考试,通过添加成绩,可以添加学生某次考试的成绩。上饶师范学院优秀本科毕业论文12下面主要介绍年级列表视图控件中数据的查找显示代码。void CTchCMyClass:RefreshGrade(int examno)m_gradelist.DeleteAllItems();/清空列表试图CString strSQLs;strSQLc.Format(select*fromclasswhereclasstypenobetween%dand%d,typeno1,typeno2);m_clsset-Open(AFX_DB_USE_DEFAULT_TYPE,strSQLc);/打开班级表记录集while(!m_clsset-IsEOF()m_clsset-MoveNext();/统计考试的次数n=m_clsset-GetRecordCount();while(iOpen(AFX_DB_USE_DEFAULT_TYPE,strSQLs);/打开学生表记录集while(!m_stuset-IsEOF()strSQLe.Format(select*from exam where stuno=%s AND examno=%d order bystuno,m_stuset-m_stuno,examno);if(m_eximset-IsOpen()上饶师范学院优秀本科毕业论文13m_eximset-Close();m_eximset-Open(AFX_DB_USE_DEFAULT_TYPE,strSQLe);/打开考试表记录集if(!m_eximset-IsEOF()m_gradelist.InsertItem(j,m_stuset-m_stuno);/插入到试图列表m_gradelist.SetItemText(j,1,m_stuset-m_stuname);m_gradelist.SetItemText(j,2,m_clsset2-m_classname);s.Format(%d,m_eximset-m_place);/继续插入m_stuset-MoveNext();/跳到下一个学生继续j+;m_clsset-MoveNext();/跳到下一个班级继续i+;m_stuset-Close();m_eximset-Close();班级视图列表控件的显示代码在 void CTchCMyClass:Refreshclass(int examno)中可以看到。查询组合框的字符项的获取在 void CTchCMyClass:SetComboExam()/中点击添加按钮,会弹出添加对话框:选择完考试时间和考试名称之后,点击逐个输入后,将会弹出输入对话框,其具体的实现代码可以在CtchCAddScore 类中看到。输入对话框的设计如下:上饶师范学院优秀本科毕业论文14输入数据之后,点提交,就会把成绩添加到数据库,具体实现代码在void CTchCSingleAddScore:OnButtonRefer()中有每个都输入完成之后,点全部提交,就会完成对所输入的学生的成绩进行本班的排名,并且对已输入的本年纪的学生进行查找并计算,生成全年级的学生排名,并把全年级的前 50 名列出来。关于列表视图控件的代码在 void CTchCSingleAddScore:RefreshSetList()中;添加学生成绩在数据库中的具体代码在 void CTchCSingleAddScore:AddScore()中;关于排名次的函数如下void CTchCSingleAddScore:QSort(RANGE*range,int n)for(int i=0;i n;i+)/for(int j=0;j rangej.total)/如果其他人的分数比自己的多,其他rangej.place+;/人的排名自动加 1如果发现输入的学生成绩有误,还可以对学生的成绩进行修改,修改是,应现在本班的学生成绩列表中选择一个学生,然后再点击修改成绩,就会弹出修改成绩的对话框,在对话框中显示了学生的学号,姓名及已输入的成绩,对成绩进行修改后,将会统计好该生的总分及平均分,主窗口及实现代码如下:上饶师范学院优秀本科毕业论文15void CModifyDlg:OnOK()/TODO:Add extra validation hereUpdateData();int i=0;CSetScore*scoreset=new CSetScore(&database);/打开成绩记录集scoreset-m_strFilter.Format(stuno=%sand eximno=%d,m_stuno,m_examno);/输入查询条件scoreset-Open();/打开记录集if(scoreset-IsEOF()/判断为空MessageBox(修改不成功!);return;scoreset-Close();关闭记录集if(i=8)MessageBox(修改完成!);/计算总成绩m_total=m_yuwen+m_shuxue+m_yingyu+m_wuli+m_huaxue+m_shengwu+m_lishi+m_zhengzhi+m_dili;float avg=m_total/9;/平均成绩CSetExim*examset=new CSetExim(&database);/打开考试记录集examset-m_strFilter.Format(stuno=%sand examno=%d,m_stuno,m_examno);examset-Open();/打开if(!examset-IsEOF()examset-Edit();/使记录集变为可修改examset-m_total=m_total;/输入修改examset-m_average=avg;examset-Update();/更新examset-Close();CDialog:OnOK();至此,这个软件的主要设计过程和重要的代码都基本介绍了,其他还有好多关键的代码和一些资源的上饶师范学院优秀本科毕业论文16设计,可以打开项目来查看,代码都有注释。5 5 结语结语5.15.1 优点优点因为对这个毕业作品的重视,本人查阅的许多相关书籍,教程,同时上网查询大量的相关资料,并作了一些实践上的调查,研究,可以说是投入了许多的精力和时间,在这个作品里,有一些显而易见的优点值得学习:成绩的统一管理:可以让学生轻松查看成绩,老师轻松输入成绩,轻松的比较成绩,对学生的成绩提高有了一个指导性的作用,提高了教学效率。简单的操作:利用微软的 VC+这个软件,制作的这个软件系统,拥有了和所有 Windows 应用软件一样的操作习惯,用户可以毫不费力的操作这个系统。界面的友好:本人花了一些时间对界面的设计上,做到使软件友好易用。成绩走向比较的功能:通过图形显示的可视化效果,可以一目了然的看到学生的进步与退步,对学生有激励和警示作用,可以很好的帮助学生提高成绩。自动统计排名:对输入的学生成绩,不但能计算出该生的总分,平均分,当输入完成之后,能够自动的进行本次考试的班级排名,并且针对已经输入的同年级的其他班的学生成绩,能够进行比较,生成全年纪的前五十名的学生名单。5.25.2 欠缺欠缺由于是第一次做这样的一个系统,功能和方法上不免还有一些不足,以下是一些需要改进的地方以及通过这次毕业设计所获得的体会。教师功能的改进:应该再细化一下,分成普通教师以及班主任教师,班主任教师的权限更大一些,可以操作一个班的情况,而普通教师只可以操作所授课程的成绩情况。添加管理员功能模块:可以对教师所教班级的修改,对班级的班主任老师进行修改,对升级了的学生进行班级属性的修改。删除一些多余的信息,更新信息。删除教师,学生等。基于以上功能不足的体会:由于资料不足,也缺乏一定的经验,因此不能在初步设计的时候就考虑完善,在实现的时候,一些功能已经不容易更改了,体会到一个软件,在前期所做的准备工作很重要,联系到软件工程的概念,就是在需求分析做的不足,总体设计阶段做的也比较粗糙。编程风格:在编程过程中,通过阅读一些教程上的源代码,感受到编程的格式,类的命名,变量的书写,都要取之有意,这样能提高整体编程的效率。但我做的还是不能完善。算法的优化:对于一些要求效率高的关键代码还要改进。TheTheTheTheDesignDesignDesignDesignandandandandRealizationRealizationRealizationRealizationofofofofStudentStudentStudentStudent s s ssPerformancePerformancePerformancePerformanceManagementManagementManagementManagementSystemSystemSystemSystemBasedBasedBasedBasedononononVisualVisualVisualVisualC+C+C+C+Li Zhuo-RuiAbstractAbstractAbstractAbstract:This article according to the software engineering the principle,in detail elaborated a small systemsoftware design,designs this software the goal mainly to have two,one develops a function relativeconsummation,has the certainly practical value the software product,two sharpens own programming ability,expands own knowledge.Specially a complete software project,may regard as is a software product,also isstudies the knowledge to oneself a synthesis,this is my graduation project significance and the value is at.In thiswork,has made the demand analysis first to the software,obtains this system to have to make any,which functionsmust have.In the system design,mainly divides into two bulks,a system function module design,is the databasedesign.In the detailed design process,to each module,regarding some important codes,all excerpted has carriedon the essential explanation explanation.Finally is to this system appraisal as well as own experience.KeyKeyKeyKeywordwordwordwords s ss:Visual C+;Access 2000;ODBC;Message Manage参考文献:参考文献:1 丁有和、郑阿奇.Visual C+教程.机械工业出版社,2005 年 3 月2 沈伟、徐慧.Visual C+数据库技术与实例.人民邮电出版社,2004 年 8 月上饶师范学院优秀本科毕业论文173 张海藩.软件工程导论.第四版.清华大学出版社,2003 年 8 月4 苏峰、黄金双.Visual C+编程实例.清华大学出版社,2003 年 4 月5 罗斌等.Visual C+编程技巧精选.中国水利水电出版社,2004 年 6 月