陆良县职业中学学生信息管理系统.doc

VC023陆良县职业中学学生信息管理系统

收藏

压缩包内文档预览:(预览前20页/共51页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:58671111    类型:共享资源    大小:2.94MB    格式:RAR    上传时间:2020-03-17 上传人:qq77****057 IP属地:江苏
7.2
积分
关 键 词:
VC023 陆良县 职业中学 学生 信息管理 系统
资源描述:
VC023陆良县职业中学学生信息管理系统,VC023,陆良县,职业中学,学生,信息管理,系统
内容简介:
毕 业 论 文(设 计)题 目: 陆良县职业中学学生信息管理系统 作 者: 王荣盖 院 系: 专 业: 年 级: 指导教师: 写作时间: 陆良县职业中学学生信息管理系统目录目录.1摘要.2前言.31. 系统分析.41.1功能需求分析.41.2系统功能模块图.42. 数据库的设计和创建.52.1 SQL Server 2000数据库简介52.2据库概念设计62.3据库逻辑设计72.4据库的创建83. 统各功能模块的设计和实现.93.1 Visual C+6.0简介93.2 创建学生信息管理模块.103.3创建教师信息管理模块.153.4创建课程信息管理模块.183.5创建选课信息管理模块.203.6创建成绩查询模块.213.7创建主模块274. 结束语.29参考文献.29附录.30中学学生信息管理系统【摘要】本论文描述了运用VisualC+6.0和Micorsoft SQL Sever 2000实现一个学生管理系统的开发过程。系统的结构采用当前流行的C/S模式。系统前端界面以VisualC+6.0为开发工具,主要运用ActiveX控件ADO Data Control和DataGrid Control实现;系统后端数据库用Micorsoft SQL Sever 2000来创建。在系统的开发过程中, 灵活地运用了ADO对象操纵数据库的技术和OLE DB的数据库链接方法。本系统的开发是对陆良县职业中学学生管理工作信息化的一种尝试。【关键词】ActiveX控件;ADO;VisualC+6.0;C/S模式The Student Information-Management System of Luliang Vocational high School 【Abstract】This paper describes the development course of a student information- management system by using VisualC +6. 0 and Micorsoft SQL Sever 2000. The system structure adopts popular C/S mode. The development of the front interface is based on VisualC +6. 0, and Uses ActiveX controller technology such as ADO Data Controller and DataGrid Controller. The database-creating is ased on Micorsoft SQL Sever 2000. During developing the system, the technology of ADO handling database and the methodof database-linking of OLE DB is flexibly applied. The development of this system is a try on student-management informationization of Luliang vocational high school.【Keywords】ActiveX Controller;ADO;VisualC+6.0;C/S mode前言随着计算机的发展及网络技术的应用,当今社会正快速向信息化社会前进,信息自动化的作用也越来越大。而在日常生活中信息技术的不断融入,在技术越来越先进的同时,应该从以前繁琐的事务中解放出来。随着学校对学生招生规模的不断扩大,学生的数量急剧增加,有关学生的各种信息量也成倍增长。面对庞大的信息量,就需要有学生里系统来提高学生管理工作的效率。通过这样的系统,可以方便的查询、统计和修改学生的基本情况、学生的课程开课情况和选课情况及成绩,实现信息的规范管理、科学统计和快速查询,从而减少管理方面的工作量,同时避免由于人为因素造成数据遗漏和误报等。本文作者对陆良县职业中学学生信息管理工作做了详细的调查,发现在这一项工作中存在着下列一些问题:管理人员对学生的基本信息记录和操作,手续烦琐,效率底;数据信息共享性差,冗余度大;信息的独立性差。这样很容易造成数据的不一致性,给数据的修改和维护带来困难。因此,需要一个功能完善的信息系统来解决这些问题。本系统正是对这种需求的一个实现。本系统结构采用当前流行的C/S结构,也就是客户端/服务器模式,该模式的主要形式是系统的管理人员以及使用者在客户端对服务器端的数据库进行各种操作,操作的记过又由服务器端的数据库发送回给客户端显示出来,客户端和数据库服务器可以在同一台计算机上安装,也可以在出于联网状态的不同机器上安装,形式比较自由,安装比较方便。1.系统分析1. 1功能需求分析根据对给学校学生信息管理工作做的调查,本系统必须具备对学生信息、选课信息、课程信息进行基本的数据处理的要求,包括信息的查询、修改、添加和删除等。具体的系统功能如下: 学生信息管理 学生信息,包括学号、姓名、性别、出生年月、出生地、入学年份、教师号等信息; 修改学生信息; 删除学生信息; 查找学生信息。教师信息管理 信息,包括教师号、教师姓名、性别、职称、研究方向; 修改教师信息; 删除教师信息; 查找教师信息。 课程信息管理 课程信息,包括课程号、课程名、学分、课程类别等; 修改课程信息; 删除课程信息; 查找课程信息。成绩查询管理 按学号查询: 按课程查询。在具体实现的时候要注意系统的安全性、协调性和完整性。当用户添加学号时,要保证学号不能重复,同样课程号也不能重复,这样才能实现查询功能和各个信息模块的协调;对数据进行添加、修改、删除、查询时要进行监控,进行出错提示及处理。1.2系统模块划分图根据以上介绍,本系统主要划分为以下四个子模块:学生信息管理、教师信息管理、课程信息管理、成绩查询管理。如下图所示。学生信息管理系统学生信息教师信息成绩查询课程信息选课信息课程信息查询课程信息更新按课程号查询按学号查询教师信息查询教师信息更新学生信息查询学生信息更新选课信息查询选课信息更新 图1-1系统功能模块划分图2.数据库设计和创建通过对陆良职业中学的学生信息管理现状的分析,者决定选用Micorsoft SQL Sever 2000来建立数据库。2.1 SQL Server 2000数据库简介本系统采用的数据管理系统是SQL Server 2000。它是Microsoft公司开发的关系型数据库管理系统,是该公司在数据库领域中非常重要的产品,它具有非常好的再造和重写特性。SQL Server 2000数据库管理系统的主要特点:SQL Server 2000继承了数据库软件设计和引擎方面的优胜,已经成为新一代网络应用程序的最佳数据库和分析解决方案之一。作为Microsoft.NET Enterprise Server的核心组件,它对需要的环境提供可靠的支持,并提供分割装载和确保时间的特性;提供先进的管理和协调机制,可以自动管理线程任务,降低总体开销。另外,SQL Server 2000充分利用了Window2000的功能,包括支持活动目录(Active Directory)服务,最多支持32个处理器和64GB的内存。SQL Server 2000的主要功能:(1)完全的Web支持SQL Server 2000提供了以Web标准为基础的扩展数据库编程功能。丰富的XML和Internet标准支持允许您使用内置的存储过程以XML格式存储和检索数据。还可以使用XML更新程序容易插入、更新和删除数据。(2)更高的稳定性和可靠性 使用SQL Server 2000可以获得非凡的可伸缩性和可靠性。通过向上伸缩和向外扩展的能力,SQL Server 满足了苛刻的电子商务和企业应用程序要求。(3)最快的开发时间SQL Server 2000是Microsoft.NET Enetrprise Server的数据管理与分析中枢。SQL Server 2000包括加速从概念到最后交付开发过程的工具。2.2数据库概念设计概念设计概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。学生信息管理系统的概念设计描述如下: 老师和学生之间具有指导关系,一个老师可以指导多个学生。 老师和课程之间具有开设讲解关系,一个老师可以开设多门课程。 学生和课程之间是选择关系,一个学生可以选择多门课,多个学生也可以选择一门课。.实体-联系图根据以上分析,本系统应该有三个实体,即学生实体、教师实体和课程实体参照概念设计描述,本系统的E-R图如下:学生指导老师入学年份性别学号姓名出生地图2-1 学生信息E-R图教师讲授课程姓名职称教师号号性别 图2-3 教师信息E-R图课程课程号课程名总分 图2-4 课程信息E-R教师指导学生 n 1 n 1教授选课 m n课程 图2-5 系统总E-R图2.3辑结构设计逻辑设计阶段的任务是把概念结构转换成选用DBMS所支持的关系模式。E-R图到关系模式的转换就本系统而言,通过以上E-R图可以得出系统的关系模式如下:学生(学号,姓名,性别,入学时间,出生时间,出生地,指导老师)教师(教师号,教师姓名,性别,职称,研究方向)课程(课程号,课程名,学分,课程类别)选修(学号,课程号,课程学分,是否及格)关系模式规范化对于概念设计阶段所提出的结构,应该有一个规范化的过程;就本系统来说,规范化到第三范式就可以了,也就是把非主属性对码的传递函数依赖消除。对于上述的四个关系模式来说,经过分析,每一个关系模式都不存在非主属性码对码的部分函数依赖和非主属性码对码的传递函数依赖,因此,对这四个关系模式不用再进行规范化,它们就是三范式。 关系模式转换成表根据模块的设计,以及根据规范化的设计要求,该系统的数据表设计如下:表2-1学生信息表字段名称数据类型字段属性说明字段大小作用必填字段是否主键StuIDInt4学生编号是是StuNameVarchar50学生姓名否否StuSexChar2学生性别否否StuYearDatetime8入学时间否否ComYearDtaetime8出生时间否否ComFromVarchar50学生来源否否TeaIDInt4教师号否否表2-2 教师信息表字段名称数据类型字段属性说明字段大小作用必填字段是否主键TeaIDInt4教师编号是是TeaNameVarchar50教师姓名否否TeaSexChar2教师性别否否TeaStatusVarchar50教师职称否否表2-3 课程信息表字段名称数据类型字段属性说明字段大小作用必填字段是否主键CouIDInt4课程编号是是CouNameVarchar50课程名否否CouScoreTinyInt1课程学分否否CouTeaInt4任课教师否否CouKindVarchar50课程类型否否表2-4 选课信息表字段名称数据类型字段属性字段大小作用必填字段是否主键StuIDInt4学生编号是是CouIDInt4课程编号是否ScoreTinyInt1课程学分否否PassOrNotChar2是否及格否否2.4数据库的创建数据库的建立打开Micorsoft SQL 2000,进入其中的”企业管理器”找到数据库文件夹,然后右击,选择”建数据库”,给定数据库名字和生成文件的路径。.表的建立生成的数据库有10个项目,右击”表”这个项目,选择”新建表”依次生成上面的4个表,表内的各个字段名称、类型和属性如表1表4所示。主键和外键的设置4个表生成后,双击项目“表”,系统类型的表和用户新建的表都会呈现出来。右击“学生表”选择“设计表”然后选中“StuID”这一行,右击,在下拉菜单中选择“设为主键”,在表内任一处右击,在下拉菜单中选择“关系”。在跳出的对话框中单击“新建”,主键表一项选为“学生表”,外键表一项选择为“选课信息表”,然后在对应的下方字段都选择“StuID”。依照上述步骤依次生成各个表之间的关系设置。3.各模块的设计和实现3.1 Visual C+6.0简介 Visual C+6.0的技术特点本系统前端的开发主要是运用了Visual C+6.0开发平台,Visual C+6.0是Microsoft公司推出的一个集成开发环境,是Microsoft Visual Studio系列开发工具之一,采用面向对象的程序设计技术,具有简单易操作,功能强大,灵活,访问速度快,可扩展性好等特点。Visual C+6.0提供了支持数据库编程的、基于ADO对象和 OLE-DB技术的新特性。其中,ADO使得客户端应用程序可以通过任何OLE-DB接口来访问和操作数据库服务器中的数据。它继承了OLE DB技术的优点,并且对OLE DB的接口做了封装,定义了ADO对象,是程序开发得到简化,其最主要的优点是易于使用、速度快、内存支出少、磁盘遗迹小。OLE DB是Visual C+6.0开发数据库应用中提供的新技术,它基于COM接口,因此,OLE DB对所有的文件系统包括关系数据库和非关系数据库都提供了统一的接口。这些特性使得OLE DB技术比传统的数据库访问技术更加优越。与ODBC技术相似,OLE DB属于数据库访问技术中的地层接口。直接使用OLE DB来设计数据库应用程序需要编写大量的代码。Visual C+6.0中提供ATL模板,用于设计OLE DB数据应用程序和数据提供程序。和其他可视化编程工具一样,VC+6.0提供了MSDN和调用Windows API的功能,此功能大大增强了VC+的编程能力,并可以实现一些C+语言本身不能实现的特殊功能。常用的API分为四类:系统服务(Kernel)、窗口管理(User)、图形设备接口(GDI) 和多媒体(WINMM)。ADO技术简介典型的关系数据库都支持ODBC标准,并可以用SQL命令进行操作.Microsoft为此提供的就是OLE DB,这是一整套的组件对象模型(COM)接口,能够对各种信息源中存储的数据提供一种统一的访问方式.不过,OLE DB应用程序编程接口是用来对各种各样的应用程序提供优化功能的,它并不满足简单化的要求.因此,需要在应用程序与OLE DB之间架起一座API桥梁,而ADO就是这样的一座桥梁。ADO定义了一种编程模式,即它定义了访问和更新数据源所必须的一系列活动.这种编程模式概括了ADO的总体功能。具体的ADO数据库访问的一些步骤如下:引入ADO库文件使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译.代码如下:#import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF)初始化OLE/COM库环境在MFC应用程序里,较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境.代码如下:BOOL CADOApp:InitInstance() if(!AfxOleInit() AfxMessageBox(OLE初始化出错!); return FALSE; 函数AfxOleInit在每次应用程序启动时初始化OLE/COM库环境。3.2创建学生信息管理模块模块的功能学生信息管理模块主要完成学生信息管理的功能,包括浏览、查找、添加、删除和修改. 查找功能:因为学号和学生是一一对应关系,所以通过学号可以查找到任何一个学生的信息并显示出来。 添加功能:可以向学生表中添加新的学生信息,系统会自动检查新的学生信息中教师号在教师表中是否存在,确保错误的信息无法进入数据库。 删除功能:删除截面上当前显示的学生信息,系统会弹出确认对话框,提示是否确认删除,在得到确认后,便会删除该学生信息,同时系统 自动检测当前信息在数据库的其他表中是否使用,如果是,这样删除不安全,系统会提示用户当前不能删除。 修改功能:实现对当前信息的修改,有安全起见,系统默认学号不能修改,在提交修改后的信息时,系统自动检查教师号是否存在,如果不存在,则修改无效。界面的控件设置及学生类的建立该模块界面如图:图3-1学生信息管理模块界面图主要控件的属性设置以及功能如下表:表3-1 IDD_DIALOG_STU对话框中的主要控件控件类型ID属性设置功能按钮IDC_BUTTON_OKCaption设为”确定”执行当前操作按钮IDC_BUTTON_QUEKYCaption设为”查找”开始准备执行查找按钮IDC_BUTTON_,PDOFUCaption设为”修改”开始准备执行修改按钮IDC_BUTTON_DELETECaption设为”删除”删除当前记录按钮IDC_BUTTON_ADDCaption设为”添加”开始准备执行添加按钮IDC_BUTTON_GOBACKCaption设为”返回”返回到主界面按钮IDC_BUTTON_CANCELCaption设为”取消”撤消准备执行的操作组框IDC_STATICCaption设为空组织控件静态文本默认Caption设为学号”盛放说明文字静态文本默认Caption设为”姓名”盛放说明文字静态文本默认Caption设为”性别”盛放说明文字静态文本默认Caption设为”入学年份”盛放说明文字静态文本默认Caption设为”教师号盛放说明文字静态文本默认Caption设为”出生年份”盛放说明文字静态文本默认Caption设为”出生地”盛放说明文字编辑框IDC_EDIT_STUIDStyles选中Number输入或显示学号编辑框IDC_EDIT_STUNAME默认输入或显示学生姓名编辑框IDC_EDIT_TEAIDStyles选中Number输入或显示教师编号编辑框IDC_EDIT_COMFROM默认输入或显示出生地组合框IDC_COMBO_STUSEXStyles选中Drop List输入或显示学生性别组合框IDC_DATETIMEPICKER_STUYEAR初始值设为2005-8-15输入或显示学生性别组合框IDC_ DATETIMEPICKER_COMYEAR初始值设为1982-8-15输入或显示出生时间该模块的控件设置完成后,需要为该模块创建类-CDialogSTU,打开ClassWizard,为该模块添加类,类中的成员变量如下表所示:表3-2 添加CDialogSTU类成员变量控件ID变量名数据类型IDC_BUTTON_OKm_btnOKCbuttonIDC_BITTPM_ MODIFYm_btModifyCbuttonIDC_BUTTON_QUERYm_btnQueryCbuttonIDC_BUTTON_DELETEm_btnDeleteCbuttonIDC_BUTTON_ADDm_btnAddCbuttonIDC_EDIT_STUIDm_ctlStuIDCeditIDC_EDIT_STUIDm_StuIDIntIDC_EDIT_STUNAMEm_StuNameCstringIDC_EDIT_COMFROMm_ComFromCstringIDC_COMBO_STUSEXm_StuSexCstringIDC_DATETIMEPICKER_STUYEARm_TtuYearColeDateTimeIDC_DATETIMEPICKER_COMYEARm_ComYearColeDateTime模块的工作流程进入学生信息管理模块,系统首先判断数据库中”学生表”是否为空,若为空,提示用户学生表是空的,同时出现界面,但这时只有添加按钮可以启动,其他命令都无法使用;如果”学生表”不为空,则界面上显示”学生表中的首信息.界面中查找、添加、修改、删除程序的工作流程图如下所示:单击查找输入学号控件更新学号存在 是 否 提示不存在控件更新 图3-2 查找程序流程图单击添加输入信息学号存在? 是 否添加成功添加无效 图3-3 添加程序流程图单击修改输入信息 学号存在? 是 否修改无效修改成功 图3-4改程序流程图单击删除真的删除? 是 否其他表在用?没有删除 是 否删除成功无法删除图3-5删除程序流程图该模块的部分代码如下:声明ADO记录集,声明功能函数,引入全局变量theApp,这是在头文件DialogSTU.h中完成的。如下:class CDialogSTU:public Cdialogpublic:CDialogSTU(CWnd*pParent=NULL);_RecordsetPtr mpRecordset;_RecordsetPtr mpRecordsetCHO;void Query();void Add();void Detele();void Modify();void OpenSTUDENTS()void OpenTEACHERS();extern CYDMSApp the App;/AFX_INSERT_LOCATION#endif查询功能的实现代码如下:void CDialogSTU:OnButtonQuery() m_StuID = 0;m_TeaID = 0;m_StuName = ;m_StuSex = ;m_ComFrom = ;m_StuYear.SetDate(2003, 8, 15);m_ComYear.SetDate(1980, 8, 15);UpdateData(false); /更新FOUNCTION值FOUNCTION = SEARCH;/修改各个矩形按钮的属性m_btnQuery.SetState(TRUE);m_btnAdd.EnableWindow(FALSE);m_btnDelete.EnableWindow(FALSE);m_btnModify.EnableWindow(FALSE);m_btnOK.SetFocus();/执行查找功能void CDialogSTU:Query()/定义变量_variant_t var;CString str;/更新控件变量的值UpdateData(true);trym_pRecordset-MoveFirst();while(!m_pRecordset-adoEOF)var = m_pRecordset-GetCollect(StuID);if(m_StuID = var.iVal)var = m_pRecordset-GetCollect(StuID);if(var.vt != VT_NULL)m_StuID = var.iVal;var = m_pRecordset-GetCollect(StuName);str = (LPCSTR)_bstr_t(var);m_StuName = str;var = m_pRecordset-GetCollect(StuSex);str = (LPCSTR)_bstr_t(var);m_StuSex = str;var = m_pRecordset-GetCollect(StuYear);m_StuYear = var.date;var = m_pRecordset-GetCollect(TeaID);m_TeaID = var.iVal; var = m_pRecordset-GetCollect(ComYear);m_ComYear = var.date;var = m_pRecordset-GetCollect(ComFrom);str = (LPCSTR)_bstr_t(var);m_ComFrom = str;UpdateData(false);break;else m_pRecordset-MoveNext();if(m_pRecordset-adoEOF)MessageBox(没有这个学号!);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();3.3创建教师信息管理模块模块的功能教师信息管理模块主要完成教师信息管理的功能,包括查找、添加、删除、和修改.用户可以根据使用的需要,依靠单击对应的按钮,再单击【确定】按钮来实现相应的功能。 查找功能:因为教师号和教师是一一对应关系,所以通过教师号可以查找到任何一个教师的信息并显示出来。 添加功能:可以想教师表中天家新的教师信息,系统会自动检查新的教师信息中教师号在教师表中是否存在,确保重复的信息无法进入数据库。 删除功能:删除界面上当前显示的教师信息,系统会弹出确认对话框,提示是否确认删除,在得到确认后,便会删除该教师信息,同时系统自动检测当前信息在数据库的其他表中是否使用,如果是,这样删除安全,系统会提示工作人员当前不能删除。 修改功能:实现对当前信息的修改,为安全起见,系统默认教师号不能修改。模块通过返回按钮可以退回主界面。界面控件设置及其类成员变量该模块的界面如图:图3-6 教师信息管理模块界面图该模块的主要控件的书信设置以及其功能如下表所示:表3-3 IDD_KIALOG_TEA对话框中的主要控件控件类型ID属性设置功能按钮IDC_BUTTON_OKCaption设为”确定”执行当前操作按钮IDC_BUTTON_QUERYCaption设为”查找”开始准备执行查找按钮IDC_BUTTON_MODIFYCaption设为”修改”开始准备执行修改按钮IDC_BUTTON_DELETECaption设为”删除”删除当前记录按钮IDC_BUTTON_ADDCaption设为”添加”开始准备执行添加按钮IDC_BUTTON_GOBACKCaption设为”返回”返回到主界面按钮IDC_BUTTON_CANCELCaption设为”取消”撤消准备执行的操作组框IDC_STAICCaption设为空组织控件静态文本默认Caption设为”教师编号说明文字静态文本默认Caption设为”教师姓名”说明文字静态文本默认Caption设为”性别”说明文字静态文本默认Caption设为”职称”说明文字静态文本默认Caption设为”研究方向”说明文字编辑框IDC_EDIT_TEAIDStyles选中Number输入或显示教师号编辑框IDC_EDIT_TEANAME默认输入或显示教师名编辑框IDC_EDIT_TEASTATUS默认输入或显示教师职称编辑框IDC_EDIT_TEAWAY默认输入或显示研究方向组合框IDC_COMBO_TEASEXStyles选中Drop List输入或显示教师性别控件设置之后,为教师模块的对话框创建类;打开ClassWizard,为IDD_DIALOG_TEA对话框添加类CDialogTEA,该类的成员变量表如下:表3-4 添加的Cdialogtea类成员变量控件ID变量名数据类型IDC_BUTTON_OKm_btnOKCButtonIDC_BUTTON_QUERYm_btnQueryCButtonIDC_BUTTON_MODIFYm_btnModifyCButtonIDC_BUTTON_DELETEm_btnDeleteCButtonIDC_BUTTON_ADDm_btnAddCButtonIDC_EDIT_TEAIDm_ctlTeaIDCEditIDC_EDIT_TEAIDm_TeaIDintIDC_EDIT_TEANAMEm_TeaIDCStringIDC_EDIT_TEAIDm_ComFromintIDC_EDIT_COMFROMm_ComFromCStringIDC_COMBO_TEASEXm_TeaSexCString模块的工作方式进入教师信息管理模块,系统首先判断数据库中”教师表”是否为空,若为空,提示用户”教师表”是空的,同时出现界面,但这是只有添加按钮可以启动,除了确定、取消和返回按钮,其他命令按钮都处于无法使用状态;如果”教师表”不空,则界面上显示”教师表”中的信息。单击【查找】按钮,然后输入教师的编号,再单击确定按钮,如果该教师号存在,则截面更新,显示该教师信息;如果不存在,提示用户,”教师表”里没有该教师。单击【添加】按钮,然后输入教师的信息,教师号是必添的项目.Combo Box只有两个选项:男和女,并在添加时默认为男;输入完信息再单击确定按钮.如果教师号不重复便可以实现添加,否则添加无效。单击【删除】按钮,系统会弹出确认对话框,提示是否确认删除,选择否就终止删除;在得到确认后,系统会检测该教师在学生表中是否被使用了,在课程表中是否被使用了,只要在其中一个表中被使用了,这样删除就是不完全的,系统会提示其他表正在使用该信息,无法删除;否则的话,便会删除该教师信息。上述操作功能若想中途取消,只需单击取消按钮; 单击返回按钮可退回到系统主界面。3.4创建课程信息管理模块模块的功能课程信息管理模块主要完成课程信息管理的功能,包括查找、添加、删除和修改。模块界面图3-7课程信息管理模块界面图界面控件的设置及其类成员变量表如下:表3-5 IDD_DIALOG_COU对话框中的主要控件控件类型ID属性设置功能按钮IDC_BUTTON_OKCaption设为”确定”执行当前操作按钮IDC_BUTTON_QUERYCaption设为”查找”开始准备执行查找按钮IDC_BUTTON_MODIFYCaption设为”修改”开始准备执行修改按钮IDC_BUTTON_DELETECaption设为”删除”删除当前记录按钮IDC_BUTTON_ADDCaption设为”添加”开始准备执行添加按钮IDC_BUTTON_GOBACKCaption设为”返回”返回到主界面按钮IDC_BUTTON_CANCELCaption设为”取消”撤消准备执行的操作组框IDC_STAICCaption设为空组织控件静态文本默认Caption设为”课程号”说明文字静态文本默认Caption设为”课程名”说明文字静态文本默认Caption设为”学分”说明文字静态文本默认Caption设为”教师”说明文字静态文本默认Caption设为”类别”说明文字编辑框IDC_EDIT_COUIDStyLes选中Number输入或显示课程号编辑框IDC_EDIT_COUNAME默认输入或显示课程名编辑框IDC_EDIT_TEAIDStyLes选中Number输入或显示开始该课程的教师号编辑框IDC_EDIT_DOUSCORE默认输入或显示课程学分组合框IDC_COMBO_KINDStyLes选中Drop List输入或显示课程类别表3-6 添加CDialogSTU类成员变量控件ID变量名数据类型IDC_BUTTON_OKm_btnOKCButtonIDC_BUTTON_QUERYm_btnQueryCButtonIDC_BUTTON_MODIFYm_btnModifyCButtonIDC_BUTTON_DELETEm_btnDeleteCButtonIDC_BUTTON_ADDm_btnAddCButtonIDC_EDIT_COUIDm_ctlCouIDCEditIDC_EDIT_COUIDm_CouIDIntIDC_EDIT_COUNAMEm_CouNameCStringIDC_EDIT_TEAIDm_CouTeaIntIDC_EDIT_COUSCOREm_CouScoreIntIDC_COMBO_KINDm_CouKindCString模块的工作方式进入该模块也是首先判定”课程表”是否为空.其方法跟前一模块的判定方法一样.各功能模块的实现也跟前两个模块大致相似。编写程序代码 该模块的代码跟前一模块的代码大致相似,不再重复。3.5创建选课信息管理模块模块的功能和工作方式模块的功能和工作方式极其程序代码跟前两个模块大致相似.不在复述。界面设计该模块界面如图图 3-8 选课信息管理模块界面图界面的控件设置和类成员变量表如下:其中类名为CDialogCHO.表3-7 IDD_DIALOG_CHO对话框中的主要控件控件类型ID属性设置功能按钮IDC_BUTTON_OKCaption设为”确定”执行当前操作按钮IDC_BUTTON_QUERYCaption设为”查找”开始准备执行查找按钮IDC_BUTTON_MODIYCaption设为”修改”开始准备执行修改按钮IDC_BUTTON_DELETECaption设为”删除”删除当前记录按钮IDC_BUTTON_ADDCaption设为”添加”开始准备执行添加按钮IDC_BUTTON_GOBACKCaption设为”返回”返回到主界面按钮IDC_BUTTON_CANCELCaption设为”取消”撤消准备执行的操作组框IDC_STATICCaption设为空组织控件静态文本默认Caption设为” 学号”说明文字静态文本默认Caption设为” 课程号”说明文字静态文本默认Caption设为” 分数”说明文字静态文本默认Caption设为” 是否及格”说明文字编辑框IDC_EDIT_STUIDStyles选中Number输入或显示学号编辑框IDC_EDIT_COUIDStyles选中Number输入或显示课程号编辑框IDC_EDIT_SCORE默认输入或显示所得分数组合框IDC_COMBO_NOTPASSStyles选中DropList输入或显示是否及格表3-8 添加的CDialogSTU类成员变量控件ID变量名数据类型IDC_BUTTON_OKm_btnOKCButtonIDC_BUTTON_QUERYm_btnQueryCButtonIDC_BUTTON_MODIYm_btnModiyCButtonIDC_BUTTON_DELETEm_btnDeleteCButtonIDC_BUTTON_ADDm_btnAddCButtonIDC_EDIT_STUIDm_ctlStuIDCEditIDC_EDIT_STUIDm_StuIDIntIDC_EDIT_COUIDm_CouIDIntIDC_EDIT_COUIDm_ctl CouIDCEditIDC_EDIT_SCOREm_ScoreIntIDC_COMBO_NOTPASSm_PassOrNotCString3.6创建成绩查询模块模块的功能成绩查询模块向工作人员提供了关于某一特定对象的成绩查询统计功能,包括具体的详细的成绩信息和统计数字.特定对象可以是学生,也可以是课程.当对象为学生时,系统可以统共该生所选的所有课程及对应成绩,并同时给出统计数字;平均分、选修课程数和不及格门数.当对象为课程时,系统可以提供选修该课程的所有学生及对应成绩,并同时给出统计数字:平均分、选修课程的学生数和不及格人数。界面设计该模块的界面如图:图3-9 成绩查询模块界面图模块的界面控件设置表及其类成员变量表:表3-9 IDD_DLALOG_STAT控件控件类型ID属性设置功能按钮IDC_BUTTON_OKCaption设为”确定”执行查找操作按钮IDC_BUTTON_GOBACKCaption设为”返回”返回到主截面组框IDC_STAICCaption设为”按学号查询”组织控件组框IDC_STAICCaption设为”按课程查询”组织控件静态文本默认Caption设为”请输入学号”说明文字静态文本默认Caption设为”平均分数”说明文字静态文本默认Caption设为”选修课程数”说明文字静态文本默认Caption设为”不及格门数说明文字静态文本默认Caption设为”请输入课程号”说明文字静态文本默认Caption设为”平均分数”说明文字静态文本默认Caption设为”选修人数”说明文字静态文本默认Caption设为”不及格人数”说明文字编辑框IDC_EDIT_STUIDStyles选中Number输入学号编辑框IDC_EDIT_AVGLStyles选中Read-only显示平均分数编辑框IDC_EDIT_COUNTLStyles选中Read-only显示选修课程数编辑框IDC_EDIT_NOTPASSLStyles选中Read-only显示不及格门数编辑框IDC_EDIT_COUIDStyles选中Number输入课程号编辑框IDC_EDIT_AVGRStyles选中Read-only显示平均分数编辑框IDC_EDIT_COUNTRStyles选中Read-only显示选修人数编辑框IDC_EDIT_NOTPASSRStyles选中Read-only显示不及格人数组合框IDC_COMBO_STUSEXStyles选中Drop List输入或显示学生性别ADO Data ControlIDC_ADODC_STU不选 visible;Command Type:8-anCmdUnknownCommand Text Select*fromSTUDENTSUse Connection String:Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID=sa;InitialCatalog=YJSHData;DataSource=localhost访问数据库获得记录集续表3-9 IDD_DLALOG_STAT控件控件类型ID属性设置功能ADO Data ControlIDC_ADODC_COU不选 visible;Command Type:8-anCmdUnknownCommand Text Select*from COURSESUse Connection String:Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID=sa;InitialCatalog=YJSHData;DataSource=localhost访问数据库获得记录集DataGrid ControlIDC_DATAGRID_STUCaption设为”成绩”DataSource设为IDC_ADODC_STU显示ADO DataControl获得的记录集DataGrid ControlIDC_DATAGRID_COUCaption设为”成绩”DataSource设为IDC_ADODC_COU显示ADO DataControl获得的记录集表3-10 添加的CDialogSTU类成员变量控件ID变量名数据类型IDC_ADODC_STUm_AdoLCAdodcIDC_ADODC_COUm_ AdoRCAdodcIDC_DATAGRID_STUm_DataLCDataGridIDC_DATAGRID_COUm_DataRCDataGridIDC_EDIT_m_StuIDCStringIDC_EDIT_m_CouIDCStringIDC_EDIT_m_AvgLIntIDC_EDIT_m_AvgRIntIDC_EDIT_m_CouNumIntIDC_EDIT_m_StuNumIntIDC_EDIT_m_NotPassLIntIDC_EDIT_m_NotPassRInt ADO Data Control和DataGrid Control的添加 在成绩查询模块中使用了ActiveX控件ADO Data Control和DataGrid Control. ADO Data Control控件用于和数据库相连接,通过OLE DB的数据访问方式从数据库中获得信息, DataGrid Control控件把ADO Data Contro控件获得的记录集作为数据源,实现获得信息的显示工作。插入ADO Data Control和DataGrid Control的方法如下:选择菜单【Project】-【Add to Project】-【Components and Controls】,弹出“Components and Controls Gallery”对话框。在“Components and Controls Gallery” 对话框中进入Registered ActiveX Controls。选择“Mocrosoft ADO Data Control,version 6.0(OLEDB)”,单击【Insert】按钮。选择“Mocrosoft DataGrid Control,version 6.0(OLEDB)”,单击【Insert】按钮。回到VC工作区,在控件模板上就新增了上述了个按钮。数据库的连接在本系统中,数据库的连接主要运用了ADO访问数据库的方法。其步骤如下: 右击界面上的ADO Data Control控件,进入属性设置对话框。 在“Control”栏的“Source of Connection”单选框中使用“Use ConnecctionString”,单击右旁的【Build】按钮。 在“OLE DB提供程序”的列表框选项里使用Mocrosoft OLE DB Provider for SQL Server,单击“下一步”。 填入服务器名,输入用户名和密码,选择服务器上的数据库,单击“测试连接” 出现“测试连接成功”对话框,表示已经成功访问数据库。模块的工作方式当用户输入学号后,单击确定按钮, ADO Data Control控件从数据库中获得的动态记录集得到确定,然后刷新DataGrid Control控件,使确定的记录集显示出来,同时很容易给出学生的平均成绩、选修课程数和不及格门数.输入课程号后,单击确定按钮,通过另一个ADO Data Contro控件从数据库中获得记录集,同样刷新DataGrid Control控件,使确定的记录集信息显示出来,有了记录集,给出课程的平均成绩、选修人数和不及格人次就轻而易举了.编写模块程序代码程序的部分主要代码如下:按学号查询成绩的函数是QueryStuID(),代码如下:void CDialogSTAT:QueryStuID()UpdateData(true);if(m_StuID != )m_AdoL.SetRecordSource(select StuID as 学号, CHOICES.CouID as 课程号, CouName as 课程名, Score as 分数 from COURSES, CHOICES WHERE COURSES.CouID = CHOICES.CouID and StuID = + m_StuID);m_AdoL.Refresh();CString str;_variant_t var;int CouNum = 0,AvgL = 0,sum = 0,NotPassL = 0;str.Format(select StuID, CHOICES.CouID, CouName, Score from COURSES, CHOICES WHERE COURSES.CouID = CHOICES.CouID and StuID = %s,m_StuID);try/先关闭已经打开的记录集对象m_pRecordset-Close();/根据新的Sql查询语句,重新打开记录集对象/使用记录集对象的Open()函数m_pRecordset-Open(str.AllocSysString(), theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();if(m_pRecordset-adoEOF)AfxMessageBox(该生没有这门课!);m_AdoL.SetRecordSource(select * from STUDENTS);m_AdoL.Refresh();return;if(!m_pRecordset-BOF)m_pRecordset-MoveFirst();while(!m_pRecordset-adoEOF)CouNum +;var = m_pRecordset-GetCollect(Score);sum += var.iVal;if(var.iVal MoveNext();m_CouNum = CouNum;if(CouNum != 0)AvgL = sum/CouNum;m_AvgL = AvgL;m_NotPassL = NotPassL;UpdateData(false);按课程号查询成绩的函数是QueryCouID(),代码如下:void CDialogSTAT:QueryCouID()UpdateData(true);if(m_CouID != )m_AdoR.SetRecordSource(select CHOICES.CouID as 课程号, COURSES.CouName as 课程名, CHOICES.StuID as 学号,STUDENTS.StuName as 姓名,CHOICES.Score as 分数 from COURSES, CHOICES,STUDENTS WHERE CHOICES.CouID =COURSES.CouID AND CHOICES.StuID = STUDENTS.StuID AND CHOICES.CouID = + m_CouID);m_AdoR.Refresh();CString str;_variant_t var;int StuNum = 0,AvgR = 0,sum = 0,NotPassR = 0;str.Format(select CHOICES.CouID, COURSES.CouName, CHOICES.StuID,STUDENTS.StuName,CHOICES.Score from COURSES, CHOICES,STUDENTS WHERE CHOICES.CouID =COURSES.CouID AND CHOICES.StuID = STUDENTS.StuID AND CHOICES.CouID = %s,m_CouID);_variant_t RecordsAffected;try/先关闭已经打开的记录集对象m_pRecordset-Close();/利用连接对象的Execute方法执行SQL命令m_pRecordset = theApp.m_pConnection-Execute(str.AllocSysString(), &RecordsAffected,adCmdText);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();if(m_pRecordset-adoEOF)AfxMessageBox(该课没有人选!);m_AdoR.SetRecordSource(select * from COURSES);m_AdoR.Refresh();return;m_pRecordset-MoveFirst();while(!m_pRecordset-adoEOF)StuNum +;var = m_pRecordset-GetCollect(Score);sum += var.iVal;if(var.iVal MoveNext();m_StuNum = StuNum;if(StuNum != 0)AvgR = sum/StuNum;m_AvgR = AvgR;m_NotPassR = NotPassR;UpdateData(false);3.7创建主模块模块的功能 用户进入学生信息管理系统首先见到的就是主模块的界面,主模块的界面设计是整个程序界面设计中最早的,但是他的源文件代码编写却是最后的,主要是因为主模块的源代码要使用各个模块的头文件。 同时其他各个模块的源代码也要使用主模块的头文件,通过主模块的全局对象theApp,各个模块才能从数据库中返回记录集.所以主模块要做到: 初始化COM库,引入ADO库定义文件; 生成全局对象theApp。主模块可以进入每一个模块,是各个模块切换和联系的桥梁。界面设计主模块的界面和模块控件属性设置分别如下图3-10和表3-11所示。图3-10 主模块的界面图表3-11 IDD_YDMS_DLALOG对话框中的主要控件控件类型ID属性设置功能按钮IDC_BUTTON_STUCaption设为”学生信息”进入学生信息模块按钮IDC_BUTTON_TEACaption设为”教师信息”进入教师信息模块按钮IDC_BUTTON_COUCaption设为”课程信息”进入课程信息模块按钮IDC_BUTTON_CHOCaption设为”选课信息”进入选课信息模块按钮IDC_BUTTON_GRACaption设为”成绩信息”进入成绩查询模块按钮IDC_BUTTON_EXITCaption设为”退出信息”结束程序静态文本默认Caption设为”学生的基本情况”选择Client和Static edge说明文字静态文本默认Caption设为”教师的基本情况”选择Client和Static edge说明文字静态文本默认Caption设为”学校对学生所开设的课程情况” 选择Client和Static edge说明文字静态文本默认Caption设为”学生所选的课程和成绩情况” 选择Client和Static edge说明文字静态文本默认Caption设为”按学生或课程的成绩统计情况” 选择Client和Static edge说明文字图片默认Type选中BitmapImage:IDB_BITMAP_TITLE载入图片图标默认Type选中IconImage:IDI_ICON_STU载入图标图标默认Type选中IconImage:IDI_ICON_COU载入图标图标默认Type选中IconImage:IDI_ICON_TEA载入图标 续表3-11 IDD_YDMS_DLALOG对话框中的主要控件控件类型ID属性设置功能图标默认Type选中IconImage:IDI_ICON_CHO载入图标图标默认Type选中IconImage:IDI_ICON_GRA载入图标图标默认Type选中IconImage:IDI_ICON_EXIT载入图标图标默认Type选中IconImage:IDI_ICON_POINT载入图标 模块的工作方式主模块的工作方式很简单.单击相应的按钮会进入相应的信息管理模块中。 4.结束语通过一个多月的努力,让我了解了数据库系统的开发方法和过程,同时对于本系统中主要用到的ADO对象操纵数据库的技术手段、OLEDB控制控件访问数据库手段以及灵活运用的SQL查询语句,也有了很深的理解。通过本系统的设计与实现,也让我对以前学的计算机专业知识的实践和运,有了进一步的认识,尤其是数据库、软件工程、和程序设计等方面的知识。在本系统的完成过程中,莫老师给以了许多宝贵的建议和经验,让我获益非浅,在此深表感谢;同时,也要感谢我身边的一些同学,在本系统的开发过程中,他们也给了我不少的帮助和建议。参考文献1 张立科.VisualC+6.0数据库开发技术与工程实践M.北京:人民邮电出版社,20042 林青松. VisualC+案例开发M.北京:中国水利水电出版社,2005 3 刘浩.VisualC+ +|SQL Server数据库应用系统开发与实例M.北京:人民邮电出版社,2004 4 郑人杰. 软件工程概论M.北京:清华大学出版社,2003 5 萨师煊. 数据库系统概论M.北京:高等教育出版社,2003 6 沈精虎.VisualC+程序设计实战训练M.北京:人民邮电出版社,2004 7 吴继刚.VisualC+6.0数据库系统开发实例导航M.北京:人民邮电出版社,2004 8 钱能.C+程序设计教程M.北京:清华大学出版社,2003 9 郑莉.C+语言程序设计M.北京:清华大学出版社,2003 10 李师贤.面向对象程序设计基础M.北京:高等教育出版社,2003 附录:程序代码清单1.学生类的定义class CDialogSTU : public CDialog/ Constructionpublic:CDialogSTU(CWnd* pParent = NULL); / standard constructor/声明ADO记录集_RecordsetPtrm_pRecordset;_RecordsetPtrm_pRecordsetCHO;/添加功能函数void Query();void Add();void Delete();void Modify();void OpenSTUDENTS();void OpenTEACHERS();/AFX_DATA(CDialogSTU)enum IDD = IDD_DIALOG_STU ;CButtonm_btnOK;CButtonm_btnQuery;CButtonm_btnModify;CButtonm_btnDelete;CEditm_ctlStuID;CButtonm_btnAdd;CStringm_StuSex;COleDateTimem_StuYear;COleDateTimem_ComYear;CStringm_StuName;CStringm_ComFrom;intm_StuID;intm_TeaID;/AFX_DATA/AFX_VIRTUAL(CDialogSTU)protected:virtual void DoDataExchange(CDataExchange* pDX); /AFX_VIRTUALprotected:/AFX_MSG(CDialogSTU)virtual BOOL OnInitDialog();afx_msg void OnButtonQuery();afx_msg void OnButtonOK();afx_msg void OnButtonGoBack();afx_msg void OnButtonAdd();afx_msg void OnButtonDelete();afx_msg void OnButtonModify();afx_msg void OnButtonCancel();/AFX_MSGDECLARE_MESSAGE_MAP();/引入全局变量theAppextern CYDMSApp theApp;2. 成绩查询类的定义class CDialogSTAT : public CDialogpublic:CDialogSTAT(CWnd* pParent = NULL); /声明一个ADO记录集_RecordsetPtrm_pRecordset;void QueryStuID();void QueryCouID();/AFX_DATA(CDialogSTAT)enum IDD = IDD_DIALOG_STAT ;CDataGridm_DataL;CAdodcm_AdoL;CAdodcm_AdoR;CDataGridm_DataR;intm_AvgL;intm_NotPassL;intm_AvgR;intm_NotPassR;CStringm_CouID;CStringm_StuID;intm_CouNum;intm_StuNum;/AFX_DATA/AFX_VIRTUAL(CDialogSTAT)protected:virtual void DoDataExchange(CDataExchange* pDX); /AFX_VIRTUALprotected:/AFX_MSG(CDialogSTAT)virtual BOOL OnInitDialog();afx_msg void OnButtonOK();afx_msg void OnButtonGoback();/AFX_MSGDECLARE_MESSAGE_MAP();/引入全局变量theAppextern CYDMSApp theApp;3. 主模块的实现代码CYDMSDlg:CYDMSDlg(CWnd* pParent /*=NULL*/): CDialog(CYDMSDlg:IDD, pParent)/AFX_DATA_INIT(CYDMSDlg)/AFX_DATA_INITm_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CYDMSDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CYDMSDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CYDMSDlg, CDialog)/AFX_MSG_MAP(CYDMSDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_STU, OnButtonSTU)ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)ON_BN_CLICKED(IDC_BUTTON_TEA, OnButtonTea)ON_BN_CLICKED(IDC_BUTTON_COU, OnButtonCou)ON_BN_CLICKED(IDC_BUTTON_CHO, OnButtonCho)ON_BN_CLICKED(IDC_BUTTON_GRA, OnButtonGra)/AFX_MSG_MAPEND_MESSAGE_MAP()BOOL CYDMSDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);return TRUE; void CYDMSDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CYDMSDlg:OnPaint() if (IsIconic()CPaintDC dc(this);SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();HCURSOR CYDMSDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CYDMSDlg:OnButtonSTU() CDialogSTU datastu;datastu.DoModal();void CYDMSDlg:OnButtonExit() OnOK();void CYDMSDlg:OnButtonTea() CDialogTEA datatea;datatea.DoModal();void CYDMSDlg:OnButtonCou() CDialogCOU datacou;datacou.DoModal();void CYDMSDlg:OnButtonCho() CDialogCHO datacho;datacho.DoModal();void CYDMSDlg:OnButtonGra() CDialogSTAT datagra;datagra.DoModal();4. 学生信息管理模块的实现代码CDialogSTU:CDialogSTU(CWnd* pParent /*=NULL*/): CDialog(CDialogSTU:IDD, pParent)/AFX_DATA_INIT(CDialogSTU)m_StuSex = _T();m_StuYear = COleDateTime:GetCurrentTime();m_ComYear = COleDateTime:GetCurrentTime();m_StuName = _T();m_ComFrom = _T();m_StuID = 0;m_TeaID = 0;/AFX_DATA_INITvoid CDialogSTU:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CDialogSTU)DDX_Control(pDX, IDC_BUTTON_OK, m_btnOK);DDX_Control(pDX, IDC_BUTTON_QUERY, m_btnQuery);DDX_Control(pDX, IDC_BUTTON_MODIFY, m_btnModify);DDX_Control(pDX, IDC_BUTTON_DELETE, m_btnDelete);DDX_Control(pDX, IDC_EDIT_STUID, m_ctlStuID);DDX_Control(pDX, IDC_BUTTON_ADD, m_btnAdd);DDX_CBString(pDX, IDC_COMBO_STUSEX, m_StuSex);DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_STUYEAR, m_StuYear);DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_COMYEAR, m_ComYear);DDX_Text(pDX, IDC_EDIT_STUNAME, m_StuName);DDV_MaxChars(pDX, m_StuName, 10);DDX_Text(pDX, IDC_EDIT_COMFROM, m_ComFrom);DDX_Text(pDX, IDC_EDIT_STUID, m_StuID);DDV_MinMaxInt(pDX, m_StuID, 0, 10000);DDX_Text(pDX, IDC_EDIT_TEAID, m_TeaID);DDV_MinMaxInt(pDX, m_TeaID, 0, 10000);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CDialogSTU, CDialog)/AFX_MSG_MAP(CDialogSTU)ON_BN_CLICKED(IDC_BUTTON_QUERY, OnButtonQuery)ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOK)ON_BN_CLICKED(IDC_BUTTON_GOBACK, OnButtonGoBack)ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)ON_BN_CLICKED(IDC_BUTTON_MODIFY, OnButtonModify)ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)/AFX_MSG_MAPEND_MESSAGE_MAP()/添加枚举变量来实现对不同功能的区分enum examSTUINIT,/对应没有功能SEARCH,/对应查找功能ADD,/对应添加功能DEL,/对应删除功能MODIFY,/对应修改功能;/定义枚举变量FOUNCTIONexamSTU FOUNCTION = INIT;BOOL CDialogSTU:OnInitDialog() CDialog:OnInitDialog();/创建记录集对象m_pRecordset.CreateInstance(_uuidof(Recordset);m_pRecordsetCHO.CreateInstance(_uuidof(Recordset);/打开STUDENTS表OpenSTUDENTS();_variant_t var;CString str;tryif(!m_pRecordset-BOF)m_pRecordset-MoveFirst();/如果表内数据为空,设置控件属性并初始对话框elseAfxMessageBox(表内数据为空);m_btnQuery.EnableWindow(FALSE);m_btnDelete.EnableWindow(FALSE);m_btnModify.EnableWindow(FALSE);m_btnOK.SetFocus();return TRUE;/ 读入库中首字段并加入控件中/更新编辑框m_StuIDvar = m_pRecordset-GetCollect(StuID);if(var.vt != VT_NULL)m_StuID = var.iVal ; /更新编辑框m_StuNamevar = m_pRecordset-GetCollect(StuName);str = (LPCSTR)_bstr_t(var);m_StuName = str; /更新组合框m_StuSexvar = m_pRecordset-GetCollect(StuSex);str = (LPCSTR)_bstr_t(var);m_StuSex = str; /更新控件Date Time picker m_StuYearvar = m_pRecordset-GetCollect(StuYear);m_StuYear = var.date; /更新编辑框m_TeaIDvar = m_pRecordset-GetCollect(TeaID);m_TeaID = var.iVal; /更新控件Date Time picker m_ComYearvar = m_pRecordset-GetCollect(ComYear);m_ComYear = var.date; /更新编辑框m_ComFromvar = m_pRecordset-GetCollect(ComFrom);str = (LPCSTR)_bstr_t(var);m_ComFrom = str; /更新所有控件显示UpdateData(false);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();return TRUE; void CDialogSTU:OpenSTUDENTS()/在ADO操作中建议语句中要常用try.catch()来捕获错误信息,try/从SQL数据库中打开STUDENTS表m_pRecordset-Open(SELECT * FROM STUDENTS, theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CDialogSTU:OpenTEACHERS()try/从SQL数据库中打开TEACHERS表m_pRecordset-Open(SELECT * FROM TEACHERS, theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();/执行添加功能void CDialogSTU:Add()/定义变量_variant_t var;CString str;/更新控件变量的值UpdateData(true); /判断要添加的学号是否存在if(m_StuID != 0 & !m_pRecordset-BOF)m_pRecordset-MoveFirst();while(!m_pRecordset-adoEOF)var = m_pRecordset-GetCollect(StuID);if(m_StuID = var.iVal)AfxMessageBox(已经存在这个学号!);break;m_pRecordset-MoveNext();if(!m_pRecordset-adoEOF)return;/判断要添加的导师号是否存在if(m_TeaID !=0) m_pRecordset-Close();/从SQL数据库中打开TEACHERS表OpenTEACHERS();if(m_pRecordset-BOF)AfxMessageBox(导师表为空,需先建立导师表!);m_pRecordset-Close();OpenSTUDENTS();return;elsem_pRecordset-MoveFirst();while(!m_pRecordset-adoEOF)var = m_pRecordset-GetCollect(TeaID);if(m_TeaID = var.iVal)break;m_pRecordset-MoveNext();if(m_pRecordset-adoEOF)AfxMessageBox(没有这个导师号!);m_pRecordset-Close();OpenSTUDENTS();return;elsem_pRecordset-Close();OpenSTUDENTS();if(m_StuID = 0 | m_TeaID = 0)AfxMessageBox(学号和导师信息不能为空!);return;elsetry/ 写入各字段值 m_pRecordset-AddNew();/写入StuID字段var.iVal = m_StuID;m_pRecordset-PutCollect(StuID, var.iVal);/写入StuName字段m_pRecordset-PutCollect(StuName, _variant_t(m_StuName);/写入StuSex字段m_pRecordset-PutCollect(StuSex, _variant_t(m_StuSex);/写入StuYear字段var.date =m_StuYear;m_pRecordset-PutCollect(StuYear, var.date);/写入TeaID字段var.iVal = m_TeaID;m_pRecordset-PutCollect(TeaID, var.iVal);/写入ComYear字段var.date =m_ComYear;m_pRecordset-PutCollect(ComYear, var.date);/写入ComFrom字段m_pRecordset-PutCollect(ComFrom, _variant_t(m_ComFrom);/更新SQL数据库m_pRecordset-Update();/当前记录移动到最后m_pRecordset-MoveLast();AfxMessageBox(插入成功!);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();/执行删除功能void CDialogSTU:Delete()/定义变量_variant_t var;CString str;/判断当前是否有记录if(m_StuID = 0)MessageBox( 没有记录!);return;/判断是否作为外键被使用str.Format(select * from CHOICES where StuID = %d,m_StuID);m_pRecordsetCHO-Open(str.AllocSysString(), theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);if(!m_pRecordsetCHO-BOF)AfxMessageBox(此数据正在被其他表使用,不能删除!);m_pRecordsetCHO-Close();return;elsem_pRecordsetCHO-Close();try/ 删除当前行记录m_pRecordset-Delete(adAffectCurrent);m_pRecordset-Update();/判断删除后表内数据是否为空if(m_pRecordset-BOF)AfxMessageBox(表内数据已经为空!);m_btnQuery.EnableWindow(FALSE);m_btnDelete.EnableWindow(FALSE);m_btnModify.EnableWindow(FALSE);m_btnOK.SetFocus();return;/显示最后一条记录m_pRecordset-MoveLast();var = m_pRecordset-GetCollect(StuID);if(var.vt != VT_NULL)m_StuID = var.iVal ;var = m_pRecordset-GetCollect(StuName);str = (LPCSTR)_bstr_t(var);m_StuName = str;var = m_pRecordset-GetCollect(StuSex);str = (LPCSTR)_bstr_t(var);m_StuSex = str;var = m_pRecordset-GetCollect(StuYear);m_StuYear = var.date;var = m_pRecordset-GetCollect(TeaID);m_TeaID = var.iVal; var = m_pRecordset-GetCollect(ComYear);m_ComYear = var.date;var = m_pRecordset-GetCollect(ComFrom);str = (LPCSTR)_bstr_t(var);m_ComFrom
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:VC023陆良县职业中学学生信息管理系统
链接地址:https://www.renrendoc.com/p-58671111.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!