首页 学生信息管理系统论文

学生信息管理系统论文

举报
开通vip

学生信息管理系统论文学生信息管理系统论文 精品资料.为你而备 毕 业 论 文 题 目 学 生 信 息 管 理 系 统 院系名称: 信 息 工 程 系 专业班级: 计 算 机 网 络 技 术 学生姓名: 学 号: 指导教师: 20 年 月 日 精品资料.为你而备 摘 要 使用本系统进行学生信息的管理,其中包括有系统用户的管理,院系管理,专业管理,学生信息管理,教学计划管理,以及学生成绩的管理。系统用户管理是管理用户信息的添加、修改、删除和查询功能;院系管理是管理院系信息的添加、修改、删除和查询功能;专业管理是管理专业信息...

学生信息管理系统论文
学生信息管理系统论文 精品资料.为你而备 毕 业 论 文 题 目 学 生 信 息 管 理 系 统 院系名称: 信 息 工 程 系 专业班级: 计 算 机 网 络 技 术 学生姓名: 学 号: 指导教师: 20 年 月 日 精品资料.为你而备 摘 要 使用本系统进行学生信息的管理,其中包括有系统用户的管理,院系管理,专业管理,学生信息管理,教学计划管理,以及学生成绩的管理。系统用户管理是管理用户信息的添加、修改、删除和查询功能;院系管理是管理院系信息的添加、修改、删除和查询功能;专业管理是管理专业信息的添加、修改、删除和查询功能;学生信息管理是管理学生信息的添加、修改、删除和查询功能;教学计划管理是管理教学计划的添加、修改、删除和查询功能;学生成绩管理是管理学生成绩信息的添加、修改、删除和查询功能。 关键字 学生信息 管理 窗体 精品资料.为你而备 目 录 1 引言„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.1 项目开发计划阶段„„„„„„„„„„„„„„„„„„„„„1 1.2 开发阶段„„„„„„„„„„„„„„„„„„„„„„„„„1 2 学生信息管理系统简介„„„„„„„„„„„„„„„„„„„„3 3 系统功能分析„„„„„„„„„„„„„„„„„„„„„„„„5 4 系统数据库设计„„„„„„„„„„„„„„„„„„„„„„„6 4.1 定义数据字典„„„„„„„„„„„„„„„„„„„„„„„6 4.2 定义数据库结构„„„„„„„„„„„„„„„„„„„„„„6 5 系统应用程序设计„„„„„„„„„„„„„„„„„„„„„„9 5.1 新建工程„„„„„„„„„„„„„„„„„„„„„„„„„9 5.2 窗体设计„„„„„„„„„„„„„„„„„„„„„„„„„9 结束语„„„„„„„„„„„„„„„„„„„„„„„„„„„„49 致谢„„„„„„„„„„„„„„„„„„„„„„„„„„„„„50 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„51 附录„„„„„„„„„„„„„„„„„„„„„„„„„„„„„52 精品资料.为你而备 1 引言 目前,随着高等院校办学规模的不断扩大,学生人数的逐年增长,学校对学生的信息管理工作也变得越来越繁重。为此,很大大中专院校都开发或购买了学生信息管理系统,用于对学校学生的基本信息、课程设置信息、成绩信息等进行计算机管理。从而方便快捷的对学生信息进行管理,保证了学校管理的正常并有效的进行着,不会因学生信息繁多,不好管理而影响学校的学生扩招计划。从而使学校快速持续稳定的发展着。 本系统分为六个功能模块即系统用户管理模块、院系管理模块、专业管理模块、学生信息管理模块、教学计划管理模块和学生成绩管理模块。每个模块实现不同的功能:系统用户管理模块是对用户信息的添加、修改、删除和查询功能的实现;院系管理模块是对院系信息的添加、修改、删除和查询功能的实现;专业管理模块是对专业信息的添加、修改、删除和查询功能的实现;学生信息管理模块是对学生信息的添加、修改、删除和查询功能的实现;教学计划管理模块是对教学计划的添加、修改、删除和查询功能的实现;学生成绩管理模块是对学生成绩信息的添加、修改、删除和查询功能的实现。 1.1 项目开发计划阶段 这个时期的主要任务是分析用户需求,分析软件系统所追求的目标,分析开发该系统的可行性。经过了解大致可以分为以下两个阶段。 (1) 问题定义阶段 收集、分析、理解、确定用户的要求,在与用户进行全面讨论的基础上共同拟定“软件系统目标与范围说明书”。 (2) 可行性研究阶段 确立对问题定义阶段确实的问题是否有可行的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,并对各种可能方案做出成本和效益分析,系统分析员据此提出“可行性论证 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 ”,作为确定是否继续进行这项工程的依据。 1.2 开发阶段 这个时期包括设计和实现两个任务。其中设计任务又分为需求分析和系统设计两个阶段,实现任务包括编程和测试两个阶段。 (1) 需求分析阶段 确定用户对软件系统的全部需求,并以“需求说明书”的形式 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达,其目的是明确该软件项目是用来“做什么”的。 需求分析是整个开发任务的开始,也是最重困难、最耗时的一步。作为基础的需求分析是否做得充分与准确,直接决定了构建数据库与应用系统的速度和质量。需求分析做得不好,有时甚至会导致整个系统作废。 精品资料.为你而备 (2)系统设计阶段 设计软件系统的模块层次结构,设计模块的控制流程,其目的是明确软件系统“如何做”。本阶段又可以分为概要设计和详细设计两个步骤,前者完成软件系统模块的划分和模块的层次结构以及数据库结构设计;后者完成每个模块的控制流程设计。本阶段要完成“设计说明书”的编写。 (3)编程阶段 本阶段将按照选定的程序设计语言将“设计说明书”中每个模块的控制流程编写出相应的程序,得到软件系统的源程序。 (4)测试阶段 软件测试是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终审查,是保证软件质量的关键步骤。 2 学生信息管理系统简介 精品资料.为你而备 本章讲述如何实现学生信息管理系统的开发,该系统各主要功能模块界面如 图下: 精品资料.为你而备 精品资料.为你而备 3 系统功能分析 在实际开发此系统时,系统功能分析需要设计人员与用户进行全面、深入的交流,切实了解用户对整个系统期望具有的功能,与用户共同决定系统应具备的功能。 学生信息管理系统主要具有以下功能: ? 系统用户管理:管理用户信息的添加、修改、删除和查询功能。 ? 院系管理:管理院系信息的添加、修改、删除和查询功能。 ? 专业管理:管理专业信息的添加、修改、删除和查询功能。 ? 学生信息管理:管理学生信息的添加、修改、删除和查询功能。 ? 教学计划管理:管理教学计划的添加、修改、删除和查询功能。 ? 学生成绩管理:管理学生成绩的添加、修改、删除和查询功能。 根据系统功能分析,可得到学生信息管理系统功能模块结构图如图3—1: 学生信息管理系统 学教学系院专生学生统系业信计成用管管息划绩户理理 管管管管 理理理理 图3—1 学生信息管理系统功能模块结构图 精品资料.为你而备 4 系统数据库设计 数据库在学生信息管理系统中占有非常重要的地位,数据库设计的好坏将直接影响到系统的效率以及系统实现的效果。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性,同时,合理的数据库结构也将有利于程序的实现。 数据库设计可包括两个部分:定义数据字典、定义数据库结构。 4.1 定义数据字典 在学生信息管理系统中有下面所示的数据字典: (1)系统用户数据 系统用户数据包含的数据项有用户名、密码、用户权限。 (2)院系信息数据 院系信息数据包含的数据项有学院代码和学校名称。 )专业信息数据 (3 专业信息数据包含的数据项有学院代码、专业代码和专业名称。 (4)学生基本信息数据 学生基本信息数据包含的数据项有学号、姓名、性别、生日、民族、政治面貌、籍贯和备注。 (5)教学计划信息数据 教学计划信息数据包含的数据项有学院代码、专业代码、课程代码、课程名称、学期、学时、学分和课程性质。 (6)学生成绩信息数据 学生成绩信息数据包含的数据项有学号、姓名、课程代码、成绩和备注。 4.2 定义数据库结构 学生信息管理系统采用的后台数据库是Microsoft Office Access 2003 数据库系统,数据库名称为“StudentMIS.mdb“,其中包含了6张数据表,各表的名车设计结果分别如表4—1~表4—6所示。 (1)系统用户数据表(login) 系统用户数据表用来保存用户的账户信息,表中各字段的属性如表4—1所示。 表4—1 “login“数据表的各字段属性 字段名称 数据类型 字段大小 主键 标题 user 文本 10 用户名 password 文本 10 密码 admin 是/否 是否为超级用户 (2)院系信息数据表(institute) 院系信息数据表用来保存学校院系的信息,数据表中各字段的属性如表4—2所示。 表4—2 “institute“数据表的各字段属性 精品资料.为你而备 字段名称 数据类型 字段大小 主键 标题 institude_id 文本 2 Yes 学院代码 Institude_name 文本 22 学院名称 (3)专业信息数据表(major) 专业信息数据表用来保存学校各院系所设专业的信息,数据表中各字段的属性如表 4—3所示。 表4—3 “major“数据表的各字段属性 字段名称 数据类型 字段大小 主键 标题 Institude_id 文本 2 Yes 学院代码 major_id 文本 2 Yes 专业代码 major_name 文本 22 专业名称 (4)学生信息数据表(students) 学生信息数据表用来保存学校所有学生的基本信息,数据表中各字段的属性如表4—4所示。 表4—4 “students“数据表的各字段属性 字段名称 数据类型 字段大小 主键 标题 number 文本 12 Yes 学号 name 文本 8 姓名 sex 文本 1 性别 birth 日期/时间 生日 nationality 文本 10 民族 political_party 文本 4 政治面貌 family_place 文本 30 籍贯 Memo 备注 备注 说明: 学生信息数据表中的学号字段的字段名为number,其长度为12。即number字段的前四位表示年级,其次两位表示学院代码,再次两位表示专业代码,接下来两位表示班级,最后两位表示序号。 (5)教学计划信息数据表(lessons) 教学计划信息数据表用来保存各学院专业所开设的各类课程的信息,数据表中各字段的属性如表4—5所示。 表4—5 “lessons“数据表的各字段属性 字段名称 数据类型 字段大小 主键 标题 institude_id 文本 2 Yes 学院代码 major_id 文本 2 Yes 专业代码 lesson_id 文本 7 Yes 课程代码 lesson_name 文本 50 课程名称 Term 文本 1 学期 hours 数字 整型(小数位数0) 学时 credit 数字 单精度型(小数位数1) 学分 lesson_type 文本 8 课程性质 (6)学生成绩信息数据表(score) 精品资料.为你而备 学生成绩信息数据表用来保存学生各门课程的成绩信息,数据表中各字段的属性如表 4—6所示。 表4—6 “score“数据表的各字段属性 字段名称 数据类型 字段大小 主键 标题 Number 文本 12 Yes 学号 Name 文本 8 姓名 lesson_id 文本 7 Yes 课程代码 Score 数字 单精度型(小数位数1,默认值0) 成绩 Memo 备注 备注 精品资料.为你而备 5 系统应用程序设计 5.1 新建工程 在VB中新建一个标准EXE工程,并将工程保存为“学生信息管理系统.vbp“。接下来就可以设计各窗体,编写代码实现系统功能。 5.2 窗体设计 在已建的“学生信息管理系统.vbp“工程中新建窗体,并在相应的窗体上添加文本框、标签、直线以及命令按钮等常用的VB内部控件,并设置相关属性值。 具体实现代码(部分)如下: 1.用户登录窗体代码: Option Explicit Dim try_times As Integer '尝试登陆次数 Private Sub Form_Load() '设置数据库路径 StudentDBfile = App.Path & "\StudentMIS.mdb" '窗体中心定位 Call ScreenCenter(Me) End Sub Private Sub cmdCancel_Click() '结束应用程序 If MsgBox("你选择了退出登陆,是否退出?", _ vbYesNo + vbInformation, "用户登陆") = vbYes Then End Else Exit Sub End If End Sub Private Sub cmdOK_Click() Dim sName As String, sPas As String Dim mrs As ADODB.Recordset, strSQL As String sName = Trim(txtUserName.Text): sPas = Trim(txtPassword.Text) '数据有效性检查 If sName = "" Then MsgBox "请输入用户名!", vbCritical, "用户登陆验证" txtUserName.SetFocus Exit Sub End If 精品资料.为你而备 If sPas = "" Then MsgBox "请输入密码!", vbCritical, "用户登陆验证" txtPassword.SetFocus Exit Sub End If '检查用户名是否正确 strSQL = "select * from login where user='" & sName & "'" Set mrs = ExecuteSQL(strSQL) If mrs.EOF = True Then MsgBox "用户名不存在~", vbCritical, "用户登陆验证" try_times = try_times + 1 If try_times >= 3 Then MsgBox "您已经三次尝试进入本系统,均不成功,系统将关闭~", _ vbCritical, "用户登陆验证" End Else txtUserName.SetFocus txtUserName.SelStart = 0 txtUserName.SelLength = Len(txtUserName.Text) Exit Sub End If End If strSQL = "select * from login where user='" & sName & "'" & _ "and password='" & sPas & "'" Set mrs = ExecuteSQL(strSQL) If mrs.EOF = True Then MsgBox " 密码错误~", vbCritical, "用户登陆验证" try_times = try_times + 1 If try_times >= 3 Then MsgBox "您已经三次尝试进入本系统,均不成功,系统将关闭~", _ vbCritical, "用户登陆验证" End Else txtPassword.SetFocus txtPassword.SelStart = 0 txtPassword.SelLength = Len(txtPassword.Text) Exit Sub End If End If MsgBox "登陆成功~", vbInformation, "用户登陆验证" '保存当前登陆的权限 bolAuthority = mrs.Fields("admin") 精品资料.为你而备 '加载MDI主窗体 StudentMIS.Show '卸载登陆窗体 Unload Me End Sub 2.主窗体代码: Option Explicit Private Sub MDIForm_Load() '"操作"菜单,按钮禁用 Call InitMenuAndToolbars(False) 'InitMenuAndToolbars为标准模块中自定义的公用函数 End Sub '教学计划信息菜单单击事件 Private Sub mMan_Lessons_Click() If unloadChildForm() Then frmLessons.Show '"操作"菜单,按钮使能 Call InitMenuAndToolbars(True) End Sub '专业信息菜单单击事件 Private Sub mMan_Major_Click() If unloadChildForm() Then frmMajor.Show '"操作"菜单,按钮使能 Call InitMenuAndToolbars(True) End Sub '成绩信息菜单单击事件 Private Sub mMan_Score_Click() mOpe_CreTable.Enabled = False '建表菜单失效 If unloadChildForm() Then frmScore.Show '"操作"菜单,按钮使能 Call InitMenuAndToolbars(True) End Sub '学生信息菜单单击事件 Private Sub mMan_Students_Click() If unloadChildForm() Then frmStudent.Show '"操作"菜单,按钮使能 Call InitMenuAndToolbars(True) End Sub 精品资料.为你而备 '还原菜单命令 Private Sub mOpe_Cancel_Click() Call Me.ActiveForm.CancelData End Sub '清空菜单命令 Private Sub mOpe_Clear_Click() Dim s$, k% s = "是否确定删除当前的记录表的全部数据," k = MsgBox(s, vbYesNo + vbQuestion, "操作提示") If k = vbYes Then Call Me.ActiveForm.ClearData End If End Sub '建表菜单命令 Private Sub mOpe_CreTable_Click() Call Me.ActiveForm.CreateScoreTable End Sub '删除菜单命令 Private Sub mOpe_Delete_Click() Call Me.ActiveForm.DeleteData End Sub '保存菜单命令 Private Sub mOpe_Update_Click() Call Me.ActiveForm.SaveData End Sub '退出菜单命令 Private Sub mSys_Exit_Click() End End Sub '用户管理菜单命令 Private Sub mSys_User_Click() If unloadChildForm() Then frmUserManage.Show End Sub '工具栏按钮单击事件 Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case "Delete" 精品资料.为你而备 Call mOpe_Delete_Click Case "New" Call mOpe_CreTable_Click Case "Recall" Call mOpe_Cancel_Click Case "Clear" Call mOpe_Clear_Click Case "Save" Call mOpe_Update_Click End Select End Sub 3.用户管理窗体部分代码: Option Explicit Dim rs As ADODB.Recordset '记录集对象 Dim strSQL As String '字符串变量,保存SQL语言 Dim bEdit As Boolean '编辑状态标志 Dim bAdd As Boolean '添加状态标志 Private Sub Form_Load() Set rs = New ADODB.Recordset strSQL = "select * from login" Set rs = ExecuteSQL(strSQL) If rs.RecordCount = 0 Then Call DisButtons Else rs.MoveFirst Call FillText cmdUpdate.Enabled = False cmdCancel.Enabled = False End If '窗体中心定位 Call CenterPos(StudentMIS, Me) End Sub Private Sub cmdEdit_Click() '编辑记录 bEdit = True cmdEdit.Enabled = False cmdAdd.Enabled = False cmdDelete.Enabled = False cmdUpdate.Enabled = True cmdCancel.Enabled = True 精品资料.为你而备 cmdFirst.Enabled = False cmdPrevious.Enabled = False cmdNext.Enabled = False cmdLast.Enabled = False txtUser.SetFocus End Sub Private Sub cmdAdd_Click() '添加记录 bAdd = True rs.AddNew Call ClearText cmdEdit.Enabled = False cmdAdd.Enabled = False cmdDelete.Enabled = False cmdUpdate.Enabled = True cmdCancel.Enabled = True cmdFirst.Enabled = False cmdPrevious.Enabled = False cmdNext.Enabled = False cmdLast.Enabled = False txtUser.SetFocus End Sub Private Sub cmdDelete_Click() '删除当前记录 If MsgBox("真的要删除吗,", vbYesNo + vbExclamation, "提示信息") = vbYes Then rs.Delete rs.MoveNext If rs.EOF And rs.RecordCount > 0 Then rs.MoveFirst If rs.RecordCount = 0 Then Call DisButtons Call ClearText Else Call FillText End If rs.Requery End If End Sub Private Sub cmdUpdate_Click() '更新 If Trim(txtUser.Text) = "" Then 精品资料.为你而备 MsgBox "用户名不能为空!", vbCritical, "提示" txtUser.SetFocus Exit Sub End If If Trim(txtPassword.Text) = "" Then MsgBox "密码不能为空!", vbCritical, "提示" txtPassword.SetFocus Exit Sub End If If bEdit Then rs.Update If bAdd Then rs.Update rs.Requery rs.MoveLast End If Call FillText cmdEdit.Enabled = True cmdAdd.Enabled = True cmdDelete.Enabled = True cmdUpdate.Enabled = False cmdCancel.Enabled = False cmdFirst.Enabled = True cmdPrevious.Enabled = True cmdNext.Enabled = True cmdLast.Enabled = True bEdit = False bAdd = False End Sub Private Sub cmdCancel_Click() '取消更改 bEdit = False bAdd = False rs.CancelUpdate If rs.RecordCount = 0 Then cmdUpdate.Enabled = False cmdAdd.Enabled = True Call ClearText Exit Sub Else Call FillText cmdEdit.Enabled = True cmdAdd.Enabled = True cmdDelete.Enabled = True 精品资料.为你而备 cmdUpdate.Enabled = False cmdCancel.Enabled = False cmdFirst.Enabled = True cmdPrevious.Enabled = True cmdNext.Enabled = True cmdLast.Enabled = True End If End Sub Private Sub cmdFirst_Click() '第一条记录 rs.MoveFirst If rs.RecordCount > 0 Then Call FillText End Sub Private Sub cmdPrevious_Click() '上一条记录 rs.MovePrevious If rs.BOF Then rs.MoveFirst If rs.RecordCount > 0 Then Call FillText End Sub Private Sub cmdNext_Click() '下一条记录 rs.MoveNext If rs.EOF Then rs.MoveLast If rs.RecordCount > 0 Then Call FillText End Sub Private Sub cmdLast_Click() '最后一条记录 rs.MoveLast If rs.RecordCount > 0 Then Call FillText End Sub Private Sub DisButtons() '按钮禁用 cmdEdit.Enabled = False cmdDelete.Enabled = False cmdUpdate.Enabled = False cmdCancel.Enabled = False cmdFirst.Enabled = False cmdPrevious.Enabled = False cmdNext.Enabled = False 精品资料.为你而备 cmdLast.Enabled = False End Sub Private Sub FillText() '用当前记录的字段内容填充文本框 txtUser.Text = TransNull(rs.Fields(0)) txtPassword.Text = TransNull(rs.Fields(1)) If TransNull(rs.Fields(2)) Then chkAdmin.Value = 1 Else chkAdmin.Value = 0 End If End Sub Private Sub ClearText() '清除文本框 txtUser.Text = "" txtPassword.Text = "" chkAdmin.Value = False End Sub 4专业信息窗体代码: Option Explicit Dim cn As New ADODB.Connection '连接对象 Dim DataEdited As Boolean '数据已编辑标志 Dim bFirstStart As Boolean '窗体首次启动的标志 'DataGrid内部错误处理 Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As Integer) If DataError = 7007 Then MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示~", _ vbCritical, "错误提示" Response = 0 '不弹出系统错误提示框 End If End Sub '设置ADO数据控件的连接属性和记录源属性 Private Sub SetAdc() Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & StudentDBfile & ";Persist Security Info=False" 精品资料.为你而备 Adodc1.RecordSource = "select major_id as 专业代码" & " major_name as 专业名称"_ & " form major order by major_id asc" End Sub Private Sub Adodc1_FieldChangeComplete(ByVal cFields As Long, Fields As Variant, _ ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _ ByVal pRecordset As ADODB.Recordset) '字段改变完成后触发的事件 DataEdited = True End Sub Private Sub Adodc1_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _ ByVal cRecords As Long, ByVal pError As ADODB.Error, _ adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) '记录改变完成后触发的事件 Select Case adReason Case adRsnDelete, adRsnUpdate, adRsnAddNew DataEdited = True End Select End Sub Private Sub Adodc1_RecordsetChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _ ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _ ByVal pRecordset As ADODB.Recordset) '记录集改变完成后触发的事件 Select Case adReason Case adRsnAddNew, adRsnDelete, adRsnAddNew DataEdited = True End Select End Sub 'DataGrid控件当前单元行列位置改变事件 Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Dim dbrow As Long, s1$, s2$, s3$ '确定记录指针 On Error Resume Next 精品资料.为你而备 With Adodc1.Recordset If .RecordCount = 0 Then dbrow = .RecordCount Else dbrow = .AbsolutePosition End If s1 = "当前记录位置:" & dbrow s2 = "记录总数:" & Adodc1.Recordset.RecordCount s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _ Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符~" StatBar.Panels(1).Text = s1 StatBar.Panels(2).Text = s2 StatBar.Panels(3).Text = s3 End With End Sub Public Sub DeleteData() '删除当前记录 AddNew 操作,被挂起情况下退出该过程 '当前单元在最后一行,但没有 If DataGrid1.AddNewMode = dbgAddNewCurrent Or Adodc1.Recordset.RecordCount = 0 Then Exit Sub End If Adodc1.Recordset.Bookmark = DataGrid1.Bookmark Adodc1.Recordset.Delete '设置修改标志 DataEdited = True DataGrid1.Refresh End Sub Public Sub SaveData() '保存全部修改 On Error GoTo errhandler: If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Adodc1.Recordset.UpdateBatch cn.CommitTrans '提交事务 DataEdited = False DataGrid1.Refresh Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 精品资料.为你而备 Exit Sub errhandler: '显示与数据库操作规则有关的错误信息 Call ShowDbRuleErrInf("专业代码") End Sub Public Sub CancelData() '还原全部修改 On Error GoTo errhandler: If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Adodc1.Recordset.CancelBatch cn.RollbackTrans '回滚事务 DataEdited = False DataGrid1.Refresh Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 Exit Sub errhandler: '显示与数据库操作规则有关的错误信息 Call ShowDbRuleErrInf("专业代码") End Sub Public Sub ClearData() '删空当前记录集 Call DBRecordset_Delete(Adodc1.Recordset) DataGrid1.Refresh '设置修改标志 DataEdited = True End Sub '窗体卸载前查询事件 Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim s$, b% If DataEdited = True Then s$ = "数据已修改,是否保存," b = MsgBox(s$, vbYesNoCancel + vbQuestion, "操作提示") Select Case b Case vbYes '保存修改 Call SaveData Case vbNo '取消修改 Call CancelData Case vbCancel 精品资料.为你而备 Cancel = True '不关闭窗体 Exit Sub End Select End If '"操作"菜单、按钮禁用 Call InitMenuAndToolbars(False) End Sub 5学生信息窗体代码: Option Explicit Dim cn As New ADODB.Connection '连接对象 Dim DataEdited As Boolean '数据已编辑标志 Dim bFirstStart As Boolean '窗体首次启动的标志 'DataGrid内部错误处理 Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As Integer) If DataError = 7007 Then MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示~", _ vbCritical, "错误提示" Response = 0 ElseIf DataError = 7008 Then Adodc1.Recordset.AddNew Response = 0 End If End Sub '设置ADO数据控件的连接属性和记录源属性 Private Sub SetAdc() Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & StudentDBfile & ";Persist Security Info=False" Adodc1.RecordSource = "select number as 学号,name as 姓名,sex as 性别,birth as 生日," _ & "nationality as 民族," _ & "political_party as 政治面貌,family_place as 籍贯,memo as 备注 from students" End Sub 精品资料.为你而备 Private Sub Adodc1_FieldChangeComplete(ByVal cFields As Long, Fields As Variant, ByVal pError _ As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) '字段改变完成后触发的事件 DataEdited = True End Sub Private Sub Adodc1_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _ ByVal cRecords As Long, ByVal pError As ADODB.Error, _ adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) '记录改变完成后触发的事件 Select Case adReason Case adRsnDelete, adRsnUpdate, adRsnAddNew DataEdited = True End Select End Sub Private Sub Adodc1_RecordsetChangeComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError _ As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) '记录集改变完成后触发的事件 Select Case adReason Case adRsnAddNew, adRsnDelete, adRsnAddNew DataEdited = True End Select End Sub '当前单元位置改变事件 Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Dim dbrow As Long, s1$, s2$, s3$ '确定记录指针 On Error Resume Next With Adodc1.Recordset If .RecordCount = 0 Then dbrow = .RecordCount Else dbrow = .AbsolutePosition End If s1 = "当前记录位置:" & dbrow 精品资料.为你而备 s2 = "记录总数:" & Adodc1.Recordset.RecordCount s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _ Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符~" StatBar.Panels(1).Text = s1 StatBar.Panels(2).Text = s2 StatBar.Panels(3).Text = s3 End With End Sub '年级组合框单击 Private Sub njComb_Click() If bFirstStart Then Exit Sub Call SaveData '其后面的所有列表框显示全部 xyComb.ListIndex = 0 zyComb.ListIndex = 0 bjComb.ListIndex = 0 '根据选择的条件组合进行相应的查询 Call ConditionQuery '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 End Sub '学院组合框单击 Private Sub xyComb_Click() Dim msql$, sArray() As String, mrs As New ADODB.Recordset If bFirstStart Then Exit Sub Call SaveData '其后面的所有列表框显示全部 zyComb.ListIndex = 0 bjComb.ListIndex = 0 '重新填充专业组合框内容 sArray = Split(xyComb.Text) If sArray(0) = "全部" Then msql = "select * from major order by institute_id,major_id asc" 精品资料.为你而备 Set mrs = ExecuteSQL(msql) Call ADDComboListRS(zyComb, mrs, True, "major_name", "institute_id", "major_id") Else msql = "select * from major where institute_id='" & sArray(1) & "'" _ & " order by institute_id,major_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(zyComb, mrs, True, "major_name", "institute_id", "major_id") End If '根据选择的条件组合进行相应的查询 Call ConditionQuery '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 End Sub '专业组合框单击 Private Sub zyComb_Click() If bFirstStart Then Exit Sub Call SaveData '其后面的所有列表框显示全部 bjComb.ListIndex = 0 '根据选择的条件组合进行相应的查询 Call ConditionQuery '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 End Sub '班级组合框单击 精品资料.为你而备 Private Sub bjComb_Click() If bFirstStart Then Exit Sub Call SaveData '根据选择的条件组合进行相应的查询 Call ConditionQuery '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对 象 cn.BeginTrans '开始一个新事务 End Sub '根据选择的条件组合进行相应的查询 Private Sub ConditionQuery() Dim msql$, sxyArray() As String, szyArray() As String msql = "select number as 学号,name as 姓名,sex as 性别,birth as 生 日,nationality as 民族," _ & "political_party as 政治面貌,family_place as 籍贯,memo as 备注 from students " sxyArray = Split(xyComb.Text) szyArray = Split(zyComb.Text) If njComb.Text = "全部" And sxyArray(0) = "全部" And szyArray(0) = "全部" _ And bjComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlStu(msql) ElseIf njComb.Text <> "全部" And sxyArray(0) = "全部" And szyArray(0) = "全部" _ And bjComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, njComb.Text) ElseIf njComb.Text = "全部" And sxyArray(0) <> "全部" And szyArray(0) = "全部" _ And bjComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, , sxyArray(1)) ElseIf njComb.Text = "全部" And sxyArray(0) <> "全部" And szyArray(0) = "全部" _ And bjComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, , sxyArray(1), , bjComb.Text) ElseIf njComb.Text = "全部" And sxyArray(0) <> "全部" And szyArray(0) <> "全部" _ 精品资料.为你而备 And bjComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, , sxyArray(1), szyArray(1) & szyArray(2)) ElseIf njComb.Text = "全部" And sxyArray(0) <> "全部" And szyArray(0) <> "全部" _ And bjComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, , sxyArray(1), szyArray(1) & szyArray(2), bjComb.Text) ElseIf njComb.Text <> "全部" And sxyArray(0) <> "全部" And szyArray(0) = "全部" _ And bjComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, njComb.Text, sxyArray(1)) ElseIf njComb.Text = "全部" And sxyArray(0) = "全部" And szyArray(0) <> "全部" _ And bjComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, , , szyArray(1) & szyArray(2)) ElseIf njComb.Text = "全部" And sxyArray(0) = "全部" And szyArray(0) <> "全部" _ And bjComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, , , szyArray(1) & szyArray(2), bjComb.Text) ElseIf njComb.Text <> "全部" And sxyArray(0) <> "全部" And szyArray(0) <> "全部" _ And bjComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, njComb.Text, sxyArray(1), szyArray(1) & szyArray(2)) ElseIf njComb.Text = "全部" And sxyArray(0) = "全部" And szyArray(0) = "全部" _ And bjComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, , , , bjComb.Text) ElseIf njComb.Text <> "全部" And sxyArray(0) <> "全部" And szyArray(0) <> "全部" _ And bjComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlStu(msql, njComb.Text, sxyArray(1), szyArray(1) & szyArray(2), _ bjComb.Text) End If End Sub Public Sub SaveData() '保存全部修改 On Error GoTo errhandler: 精品资料.为你而备 If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Adodc1.Recordset.UpdateBatch cn.CommitTrans '提交事务 DataEdited = False DataGrid1.Refresh Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 Exit Sub errhandler: '显示与数据库操作规则有关的错误信息 Call ShowDbRuleErrInf("学号") End Sub Public Sub CancelData() '还原全部修改 On Error GoTo errhandler: If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Adodc1.Recordset.CancelBatch cn.RollbackTrans '回滚事务 DataEdited = False DataGrid1.Refresh Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 Exit Sub errhandler: '显示与数据库操作规则有关的错误信息 Call ShowDbRuleErrInf("学号") End Sub 6教学计划窗体代码: Option Explicit Dim cn As New ADODB.Connection '连接对象 Dim DataEdited As Boolean '数据已编辑标志 Dim bFirstStart As Boolean '窗体首次启动的标志 'DataGrid内部错误处理 Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As 精品资料.为你而备 Integer) If DataError = 7007 Then MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示~", _ vbCritical, "错误提示" Response = 0 ElseIf DataError = 7008 Then Adodc1.Recordset.AddNew Response = 0 End If End Sub '设置ADO数据控件的连接属性和记录源属性 Private Sub SetAdc() Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & StudentDBfile & ";Persist Security Info=False" Adodc1.RecordSource = "select institute_id as 学院代码,major_id as 专业代码," & _ "lesson_id as 课程代码," _ & "lesson_name as 课程名称,term as 学 期,hours as 学时," & _ "credit as 学分,lesson_type as 课程性质 " _ & "from lessons order by institute_id,major_id asc" End Sub Private Sub Adodc1_FieldChangeComplete(ByVal cFields As Long, Fields As Variant, _ ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _ ByVal pRecordset As ADODB.Recordset) '字段改变完成后触发的事件 DataEdited = True End Sub Private Sub Adodc1_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _ ByVal cRecords As Long, ByVal pError As ADODB.Error, _ adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) '记录改变完成后触发的事件 Select Case adReason 精品资料.为你而备 Case adRsnDelete, adRsnUpdate, adRsnAddNew DataEdited = True End Select End Sub Private Sub Adodc1_RecordsetChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _ ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _ ByVal pRecordset As ADODB.Recordset) '记录集改变完成后触发的事件 Select Case adReason Case adRsnAddNew, adRsnDelete, adRsnAddNew DataEdited = True End Select End Sub '当前单元格改变位置事件 Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Dim dbrow As Long, s1$, s2$, s3$ '确定记录指针 On Error Resume Next With Adodc1.Recordset If .RecordCount = 0 Then dbrow = .RecordCount Else dbrow = .AbsolutePosition End If s1 = "当前记录位置:" & dbrow s2 = "记录总数:" & Adodc1.Recordset.RecordCount s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _ Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符~" StatBar.Panels(1).Text = s1 StatBar.Panels(2).Text = s2 StatBar.Panels(3).Text = s3 End With End Sub Private Sub SSPanel1_Click() End Sub 精品资料.为你而备 '课程性质组合框单击 Private Sub tyComb_Click() If bFirstStart Then Exit Sub Call SaveData '根据选择的条件组合进行相应的查询 Call ConditionQuery '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 End Sub '学期组合框单击 Private Sub xqComb_Click() If bFirstStart Then Exit Sub Call SaveData '其后面的所有列表框显示全部 tyComb.ListIndex = 0 '根据选择的条件组合进行相应的查询 Call ConditionQuery '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 End Sub '学院组合框单击事件 Private Sub xyComb_Click() Dim sArray() As String, msql As String, mrs As ADODB.Recordset If bFirstStart Then Exit Sub Call SaveData '其后面的所有列表框显示全部 zyComb.ListIndex = 0 精品资料.为你而备 xqComb.ListIndex = 0 tyComb.ListIndex = 0 '重新填充专业组合框内容 sArray = Split(xyComb.Text) If sArray(0) = "全部" Then msql = "select * from major order by institute_id,major_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(zyComb, mrs, True, "major_name", "institute_id", "major_id") Else msql = "select * from major where institute_id='" & sArray(1) & "'" _ & " order by institute_id,major_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(zyComb, mrs, True, "major_name", "institute_id", "major_id") End If '根据选择的条件组合进行相应的查询 Call ConditionQuery '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 End Sub '专业组合框单击 Private Sub zyComb_Click() If bFirstStart Then Exit Sub Call SaveData '其后面的所有列表框显示全部 xqComb.ListIndex = 0 tyComb.ListIndex = 0 '根据选择的条件组合进行相应的查询 Call ConditionQuery '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 精品资料.为你而备 Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对 象 cn.BeginTrans '开始一个新事务 End Sub '根据选择的条件组合进行相应的查询 Private Sub ConditionQuery() Dim msql$, sxyArray() As String, szyArray() As String msql = "select institute_id as 学院代码,major_id as 专业代码,lesson_id as 课程代码," _ & "lesson_name as 课程名称,term as 学期,hours as 学时,credit as 学分," & _ "lesson_type as 课程性质 from lessons" sxyArray = Split(xyComb.Text) szyArray = Split(zyComb.Text) If sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text = "全部" _ And tyComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlLes(msql) ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text = "全部" _ And tyComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1)) ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _ And tyComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _ szyArray(1) & szyArray(2)) ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And xqComb.Text <> "全部" _ And tyComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _ szyArray(1) & szyArray(2), xqComb.Text) ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And xqComb.Text <> "全部" _ And tyComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _ szyArray(1) & szyArray(2), xqComb.Text, tyComb.Text) ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _ And tyComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & 精品资料.为你而备 szyArray(2)) ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text <> "全部" _ And tyComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), xqComb.Text) ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text <> "全部" _ And tyComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), _ xqComb.Text, tyComb.Text) ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _ And tyComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), , _ tyComb.Text) ElseIf sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text <> "全部" _ And tyComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, , , xqComb.Text) ElseIf sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text <> "全部" _ And tyComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, , , xqComb.Text, tyComb.Text) ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text <> "全部" _ And tyComb.Text = "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , xqComb.Text) ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text <> "全部" _ And tyComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , xqComb.Text, tyComb.Text) ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _ And tyComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _ szyArray(1) & szyArray(2), , tyComb.Text) ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text 精品资料.为你而备 = "全部" _ And tyComb.Text <> "全部" Then Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , , tyComb.Text) End If End Sub Public Sub SaveData() '保存全部修改 On Error GoTo errhandler: If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Adodc1.Recordset.UpdateBatch cn.CommitTrans '提交事务 DataEdited = False DataGrid1.Refresh Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 Exit Sub errhandler: '显示与数据库操作规则有关的错误信息 Call ShowDbRuleErrInf("学院代码、专业代码和课程代码的组合值") End Sub Public Sub CancelData() '还原全部修改 On Error GoTo errhandler: If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Adodc1.Recordset.CancelBatch cn.RollbackTrans '回滚事务 DataEdited = False DataGrid1.Refresh Adodc1.Refresh Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 Exit Sub errhandler: '显示与数据库操作规则有关的错误信息 Call ShowDbRuleErrInf("学院代码、专业代码和课程代码的组合值") End Sub Public Sub ClearData() 精品资料.为你而备 '删空当前记录集 Call DBRecordset_Delete(Adodc1.Recordset) DataGrid1.Refresh '设置修改标志 DataEdited = True End Sub Public Sub DeleteData() '删除当前记录 '当前单元在最后一行,但没有 AddNew 操作,被挂起情况下退出该过程 If DataGrid1.AddNewMode = dbgAddNewCurrent Or Adodc1.Recordset.RecordCount = 0 Then Exit Sub End If Adodc1.Recordset.Bookmark = DataGrid1.Bookmark Adodc1.Recordset.Delete '设置修改标志 DataEdited = True DataGrid1.Refresh End Sub '窗体卸载前查询事件 Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim s$, b% If DataEdited = True Then s$ = "数据已修改,是否保存," b = MsgBox(s$, vbYesNoCancel + vbQuestion, "操作提示") Select Case b Case vbYes '保存修改 Call SaveData Case vbNo '取消修改 Call CancelData Case vbCancel Cancel = True '不关闭窗体 Exit Sub End Select End If '"操作"菜单、按钮禁用 Call InitMenuAndToolbars(False) End Sub 7成绩信息窗体代码: Option Explicit 精品资料.为你而备 Dim cn As New ADODB.Connection '连接对象 Dim DataEdited As Boolean '数据已编辑标志 Dim bFirstStart As Boolean '窗体首次启动的标志 Private Sub Form_Load() Dim msql$, mrs As ADODB.Recordset, sArray() As String '年级组合框 njComb.ListIndex = 0 '显示第一项 '填充学院组合框 msql$ = "select distinct institute.institute_name,lessons.institute_id from" _ & " institute,lessons where institute.institute_id=lessons.institute_id " & _ " order by lessons.institute_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(xyComb, mrs, False, "institute_name", "institute_id") '填充专业组合框 sArray = Split(xyComb.Text) msql = "select distinct major.major_name,lessons.institute_id," & _ "lessons.major_id from major,lessons where " _ & " lessons.institute_id='" & sArray(1) & "'" _ & " and lessons.institute_id=major.institute_id " _ & " and major.major_id=lessons.major_id " & _ "order by lessons.institute_id,lessons.major_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(zyComb, mrs, False, "major_name", "institute_id", "major_id") '班级组合框 bjComb.ListIndex = 0 '显示第一项 '学期组合框 xqComb.ListIndex = 0 '填充课程组合框 sArray = Split(zyComb.Text) msql$ = "select distinct lesson_id,lesson_name from lessons where institute_id='" _ & sArray(1) & "'" & " and major_id='" & sArray(2) & "'" & " and term='" _ & xqComb.Text & "'" & " order by lesson_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(kcComb, mrs, False, "lesson_name", "lesson_id") '设置ADO控件 Call SetAdc End Sub 精品资料.为你而备 '设置ADO数据控件的连接属性和记录源属性 Private Sub SetAdc() Dim szyArray() As String, skcArray() As String szyArray = Split(zyComb.Text): skcArray = Split(kcComb.Text) Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & StudentDBfile & ";Persist Security Info=False" Adodc1.RecordSource = "select score.number as 学号,score.name as 姓 名," _ & "score.lesson_id as 课程代码," & "score.score as 成绩,score.memo as 备注 " _ & "from score,students where score.number=students.number " _ & "and score.number like '" & njComb.Text & szyArray(1) & szyArray(2) & bjComb.Text _ & "%'" & " and score.lesson_id='" & skcArray(1) & "'" & " order by score.number asc" End Sub 'DataGrid内部错误处理 Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As Integer) If DataError = 7007 Then MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示~", _ vbCritical, "错误提示" Response = 0 ElseIf DataError = 7008 Then MsgBox "不允许手动添加成绩记录,要输入成绩请选择“操作”菜单下 的“建表”命令!", _ vbCritical, "错误提示" Response = 0 End If End Sub '设置"建表"菜单、命令按钮的使能与否状态 Private Sub SetCreTableMenuAndButtonEn(bEn As Boolean) StudentMIS.mOpe_CreTable.Enabled = bEn StudentMIS.Toolbar1.Buttons("New").Enabled = bEn End Sub '年级组合框单击事件 精品资料.为你而备 Private Sub njComb_Click() If bFirstStart Then Exit Sub Call SaveData '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Call SetAdc Adodc1.Refresh DataGrid1.Columns(0).Locked = True '不允许编辑学号 DataGrid1.Columns(1).Locked = True '不允许编辑姓名 DataGrid1.Columns(2).Locked = True '不允许编辑课程代码 '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对 象 cn.BeginTrans '开始一个新事务 End Sub '学院组合框单击事件 Private Sub xyComb_Click() Dim msql$, sArray() As String, mrs As New ADODB.Recordset If bFirstStart Then Exit Sub Call SaveData '填充专业组合框 sArray = Split(xyComb.Text) msql = "select distinct major.major_name,lessons.institute_id," & _ "lessons.major_id from major,lessons where " _ & " lessons.institute_id='" & sArray(1) & "'" _ & " and lessons.institute_id=major.institute_id " _ & " and major.major_id=lessons.major_id " _ & " order by lessons.institute_id,lessons.major_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(zyComb, mrs, False, "major_name", "institute_id", "major_id") '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" 精品资料.为你而备 '打开更新后的记录集 Call SetAdc Adodc1.Refresh DataGrid1.Columns(0).Locked = True '不允许编辑学号 DataGrid1.Columns(1).Locked = True '不允许编辑姓名 DataGrid1.Columns(2).Locked = True '不允许编辑课程代码 '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对 象 cn.BeginTrans '开始一个新事务 End Sub '专业组合框单击事件 Private Sub zyComb_Click() Dim msql$, sArray() As String, mrs As New ADODB.Recordset If bFirstStart Then Exit Sub Call SaveData '填充课程组合框 sArray = Split(zyComb.Text) msql$ = "select distinct lesson_id,lesson_name from lessons " _ & " where institute_id='" & sArray(1) & "'" & " and major_id='" _ & sArray(2) & "'" & " and term='" & xqComb.Text & "'" _ & " order by lesson_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(kcComb, mrs, False, "lesson_name", "lesson_id") '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Call SetAdc Adodc1.Refresh DataGrid1.Columns(0).Locked = True '不允许编辑学号 DataGrid1.Columns(1).Locked = True '不允许编辑姓名 DataGrid1.Columns(2).Locked = True '不允许编辑课程代码 '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) 精品资料.为你而备 Else Call SetCreTableMenuAndButtonEn(False) End If Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对 象 cn.BeginTrans '开始一个新事务 End Sub '班级组合框单击事件 Private Sub bjComb_Click() If bFirstStart Then Exit Sub Call SaveData '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Call SetAdc Adodc1.Refresh DataGrid1.Columns(0).Locked = True '不允许编辑学号 DataGrid1.Columns(1).Locked = True '不允许编辑姓名 DataGrid1.Columns(2).Locked = True '不允许编辑课程代码 '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对 象 cn.BeginTrans '开始一个新事务 End Sub '学期组合框单击事件 Private Sub xqComb_Click() Dim msql$, sArray() As String, mrs As New ADODB.Recordset If bFirstStart Then Exit Sub Call SaveData '填充课程组合框 sArray = Split(zyComb.Text) msql$ = "select distinct lesson_id,lesson_name from lessons " _ & " where institute_id='" & sArray(1) & "'" & " and major_id='" _ & sArray(2) & "'" & " and term='" & xqComb.Text & "'" _ 精品资料.为你而备 & " order by lesson_id asc" Set mrs = ExecuteSQL(msql) Call ADDComboListRS(kcComb, mrs, False, "lesson_name", "lesson_id") '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Call SetAdc Adodc1.Refresh DataGrid1.Columns(0).Locked = True '不允许编辑学号 DataGrid1.Columns(1).Locked = True '不允许编辑姓名 DataGrid1.Columns(2).Locked = True '不允许编辑课程代码 '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 End Sub '课程组合框单击事件 Private Sub kcComb_Click() If bFirstStart Then Exit Sub Call SaveData '重新初始化状态栏显示信息 StatBar.Panels(1).Text = "当前记录位置:0" StatBar.Panels(2).Text = "记录总数:0" StatBar.Panels(3).Text = "" '打开更新后的记录集 Call SetAdc Adodc1.Refresh DataGrid1.Columns(0).Locked = True '不允许编辑学号 DataGrid1.Columns(1).Locked = True '不允许编辑姓名 DataGrid1.Columns(2).Locked = True '不允许编辑课程代码 '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If 精品资料.为你而备 Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 End Sub '当前单元位置改变事件 Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Dim dbrow As Long, s1$, s2$, s3$ '确定记录指针 On Error Resume Next With Adodc1.Recordset If .RecordCount = 0 Then dbrow = .RecordCount Else dbrow = .AbsolutePosition End If s1 = "当前记录位置:" & dbrow s2 = "记录总数:" & Adodc1.Recordset.RecordCount s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _ Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符~" StatBar.Panels(1).Text = s1 StatBar.Panels(2).Text = s2 StatBar.Panels(3).Text = s3 End With End Sub '建表过程,新建成绩录入表 Public Sub CreateScoreTable() Dim mrs As New ADODB.Recordset, msql$, szyArray() As String, skcArray() As String, i% szyArray = Split(zyComb.Text): skcArray = Split(kcComb.Text) msql = "select number,name from students where number like '" & njComb.Text _ & szyArray(1) & szyArray(2) & bjComb.Text & "%'" & " order by number asc" Set mrs = ExecuteSQL(msql) If mrs.RecordCount > 0 Then mrs.MoveFirst For i = 1 To mrs.RecordCount Adodc1.Recordset.AddNew Adodc1.Recordset.Fields("学号").Value = 精品资料.为你而备 mrs.Fields("number").Value Adodc1.Recordset.Fields("姓名").Value = mrs.Fields("name").Value Adodc1.Recordset.Fields("课程代码").Value = skcArray(1) mrs.MoveNext Next i DataGrid1.Refresh DataEdited = True '建表菜单和建表工具栏按钮失效 StudentMIS.mOpe_CreTable.Enabled = False StudentMIS.Toolbar1.Buttons("New").Enabled = False Else MsgBox "无所选年级专业班的学生信息,请检查选定条件是否正确!", vbInformation, "提示" End If End Sub Public Sub SaveData() '保存全部修改 On Error GoTo errhandler: If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Adodc1.Recordset.UpdateBatch cn.CommitTrans '提交事务 DataEdited = False DataGrid1.Refresh Adodc1.Refresh DataGrid1.Columns(0).Locked = True '不允许编辑学号 DataGrid1.Columns(1).Locked = True '不允许编辑姓名 DataGrid1.Columns(2).Locked = True '不允许编辑课程代码 '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象 cn.BeginTrans '开始一个新事务 Exit Sub errhandler: '显示与数据库操作规则有关的错误信息 Call ShowDbRuleErrInf("学号") End Sub 精品资料.为你而备 Public Sub CancelData() '还原全部修改 On Error GoTo errhandler: If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst Adodc1.Recordset.CancelBatch cn.RollbackTrans '回滚事务 DataEdited = False DataGrid1.Refresh Adodc1.Refresh DataGrid1.Columns(0).Locked = True '不允许编辑学号 DataGrid1.Columns(1).Locked = True '不允许编辑姓名 DataGrid1.Columns(2).Locked = True '不允许编辑课程代码 '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对 象 cn.BeginTrans '开始一个新事务 Exit Sub errhandler: '显示与数据库操作规则有关的错误信息 Call ShowDbRuleErrInf("学号") End Sub Public Sub ClearData() '删空当前记录集 Call DBRecordset_Delete(Adodc1.Recordset) DataGrid1.Refresh '设置修改标志 DataEdited = True '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If End Sub Public Sub DeleteData() '删除当前记录 '当前单元在最后一行,但没有 AddNew 操作,被挂起情况下退出该过程 精品资料.为你而备 If DataGrid1.AddNewMode = dbgAddNewCurrent Or Adodc1.Recordset.RecordCount = 0 Then Exit Sub End If Adodc1.Recordset.Bookmark = DataGrid1.Bookmark Adodc1.Recordset.Delete '设置修改标志 DataEdited = True DataGrid1.Refresh '建表菜单当记录集为空时使能,不为空时禁止 If Adodc1.Recordset.RecordCount = 0 Then Call SetCreTableMenuAndButtonEn(True) Else Call SetCreTableMenuAndButtonEn(False) End If End Sub 8标准模块代码: Option Explicit '数据库文件路径 Public StudentDBfile As String '保存用户权限(是否为超级用户) Public bolAuthority As Boolean '>>执行SQL命令,参数为SQL语句字符串表达式,函数返回执行后的结果记录集 Public Function ExecuteSQL(ByVal sql As String) As ADODB.Recordset Dim mycon As ADODB.Connection Dim rst As ADODB.Recordset Set mycon = New ADODB.Connection mycon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & StudentDBfile & ";Persist Security Info=False" mycon.Open '打开连接(连接数据源) If mycon Is Nothing Then MsgBox "连接失败,请你检查数据库路径~" End If Dim sArray() As String On Error GoTo executesql_error sArray = Split(sql) If InStr("INSERT,DELETE,UPDATE", UCase(sArray(0))) Then mycon.Execute sql 精品资料.为你而备 Else Set rst = New ADODB.Recordset rst.Open sql, mycon, adOpenKeyset, adLockOptimistic '打开记录集对象 Set ExecuteSQL = rst End If executesql_exit: Set rst = Nothing Set mycon = Nothing Exit Function executesql_error: Resume executesql_exit End Function '>>空 Null 转换函数 Public Function TransNull(RsField As Field) As Variant On Error Resume Next If IsNull(RsField.Value) Then Select Case RsField.Type Case adBoolean TransNull = False Case adDate, adChar TransNull = "" Case adInteger, adCurrency, adSingle, adDouble TransNull = 0 Case Else TransNull = 0 End Select Else TransNull = RsField.Value End If End Function '>>置窗体于屏幕中心 Public Sub ScreenCenter(fm As Form) Dim mt!, ml! With fm mt = (Screen.Height - .Height) * 0.5 ml = (Screen.Width - .Width) * 0.5 .Move ml, mt End With End Sub '>>MDI子窗口中心定位 精品资料.为你而备 Public Sub CenterPos(parentfm As Form, childfm As Form) With childfm .Top = (parentfm.ScaleHeight - .Height) * 0.5 .Left = (parentfm.ScaleWidth - .Width) * 0.5 End With End Sub '>>关闭所有MDI子窗体 Public Function unloadChildForm() As Boolean Dim i% unloadChildForm = True 'Forms 集合的元素代表每一个在应用程序中加载的窗体。包括MDI窗 体,MDI子窗体和非MDI窗体 'Forms 集合只有一个属性Count,指定集合中元素的数目。 If Forms.Count <= 1 Then Exit Function For i = Forms.Count - 1 To 1 Step -1 Unload Forms(i) Next i If Forms.Count > 1 Then unloadChildForm = False End Function '>>显示的错误提示信息 Public Sub ShowDbRuleErrInf(sName As String) Select Case Err.Number Case -2147467259 '违背主关键字唯一性和非空性的规则时 MsgBox sName & "不能出现重复值或空值~", vbCritical, "错误提示 " End Select End Sub '>>删空记录集 Public Sub DBRecordset_Delete(rs As Recordset) If rs.RecordsetCount = 0 Then Exit Sub rs.MoveFirst Do While rs.RecordsetCount > 0 rs.Delete : rs.MoveNext Loop End Sub '为一般用户设置访问权限 If Not bolAuthority Then .mSys_User.Enabled = False End With End Sub 精品资料.为你而备 '>>填充组合框 Public Sub ADDComboListRS(mbox As Object,rs As Recordset,AllEnable As Boolean,fld1Name As String,Optional fld2Name,Optional fld3Name,) 'fld1Name为要添加到ComboBox控件中的记录集字段名 'fld2Name为可选字段名,存在时将该字段作为fld1Name字段的附加信息 Dim i% mbox.Clear If AllEnable = True Then mbox.AddItem "全部" End If If rs.RecordCount > 0 Then For i = 1 To rs.RecordCount If IsMissing(fld2Name) Then mbox.AddItem rs(fld1Name) Else If IsMissing(fld3Name) Then mbox.AddItem rs(fld1Name) & " " & rs(fld2Name) Else mbox.AddItem rs(fld1Name) & " " & rs(fld2Name) & " " & rs(fld3Name) End If End If rs.MoveNext Next i End If If mbox.ListCount > 0 Then mbox.ListIndex = 0 End Sub '>>构造学生表查询SQL语句 Public Function CreateSqlStu(sql$,Optional snj,Optional szy,Optional sbj) As String '说明:like为模糊查询,"_"代表任意一个单字符,"%"代表任意多个字符 Dim qrySql$ qrySql = sql '判别年级参数snj End Sub 精品资料.为你而备 结 束 语 本系统实现对学校学生的基本信息、课程设置信息、成绩信息等进行计算机管理。从而方便快捷的将庞大的学生信息进行管理。本系统初步完成比较简略,数据存储空间有限,还有待于进一步提高完善。 精品资料.为你而备 致 谢 感谢指导老师对我们课题的指导以及本组所有参与研究讨论的成员。 精品资料.为你而备 参 考 文 献 [1]谭浩强.Visual Basic 程序设计.北京:清华大学出版社.2006年(书) [2]郑海春. Visual Basic 编程及实例分析教程. 北京:清华大学出版社. 2007年(书) [3]刘淳.数据库系统原理与应用. 北京:中国水利水电出版社. 2008(书) [4]Bob Richard Peasley,Wayne Prachniah.Visual BASIC 6 使用指南.田金兰等译.北京:电子工业出版社,2004 [5]David McMahon.rapid application development with visual basic. New york:McGraw-hill,2002 精品资料.为你而备 附录 Visual Basic 推荐使用的控件前缀 控件类型 前缀 例子 ADO Data ado adoBiblio CheckBox chk chkReadOnly ComboBox cbo cboEnglish CommandButton cmd cmdExit Data dat datBiblio DataCombo dbc dbcAuthor DataGrid dgb dgbTitles DriveListBox drv drvTarget FileListBox fil filSource Form frm frmEntry Frame fra fraLanguage Graph gra graRevenue Grid grd grdPrices HScrollBar hsb hsbVolume Image img imgIcon Lable lbl lblMessage Menu mnu mnuFileOpen Shape shp shpCircle Slider sld sldScale TexBox txt txtLastName Timer tmr tmrAlarm Toolbar tlb tlbActions
本文档为【学生信息管理系统论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_841159
暂无简介~
格式:doc
大小:236KB
软件:Word
页数:0
分类:管理学
上传时间:2018-01-19
浏览量:16