学生档案管理系统项目应用开发 数据库应用程序的开发始终算得上是VB编程中的难点,这是因为你不仅要熟悉VB中关于数 据库编程方面的知识(当然这是十分简单的)还要了解数据库的知识。本系统主要用来实现学生基 本情况和学生成绩的录入、修改、查询、删除和打印等功能。通过本系统,可以了解如何使用isul Basic来开发一个比较完整的数据库应用程序。用到的数据库控件有DATA、ADO,添加的一个数 据环境。 、系统结构图 本系统主要包括学生基本情况更新,学生基本情况维护和学生成绩维护3个大的模块,各个模 块的具体功能如图所示: 添加 删除 学生基本情况更新 修改 查询 选择专业 按专业查询 修改 学生基本情况维护 添加 统 删除 打印 添加成绩 按学号查找 学生成绩维护 查找 打印 按专业查找 图1-1应用程序的功能模块 二、数据库的建立 本系统用到的数据库是用 Visual basic的外加工具Ⅴ isual Data manager(可视化数据管理器)创 建,名为 student. mdb(是 access数据库),其中用到两个表,分别为:基本情况表和学生成绩表 表的结构如下所
1 学生档案管理系统项目应用开发 数据库应用程序的开发始终算得上是 VB 编程中的难点,这是因为你不仅要熟悉 VB 中关于数 据库编程方面的知识(当然这是十分简单的)还要了解数据库的知识。本系统主要用来实现学生基 本情况和学生成绩的录入、修改、查询、删除和打印等功能。通过本系统,可以了解如何使用 Visual Basic 来开发一个比较完整的数据库应用程序。用到的数据库控件有 DATA、ADO,添加的一个数 据环境。 一、系统结构图 本系统主要包括学生基本情况更新,学生基本情况维护和学生成绩维护 3 个大的模块,各个模 块的具体功能如图所示: 图 1-1 应用程序的功能模块结构图 二、数据库的建立 本系统用到的数据库是用 Visual Basic 的外加工具 Visual Data Manager(可视化数据管理器)创 建,名为 student.mdb(是 access 数据库),其中用到两个表,分别为:基本情况表和学生成绩表。 两表的结构如下所示: 学 生 档 案 管 理 系 统 学生基本情况更新 学生基本情况维护 学生成绩维护 添加 删除 修改 查询 选择专业 修改 添加 删除 打印 按专业查询 添加成绩 查找 打印 按学号查找 按专业查找
表1-1 字段名 学号 姓名 10 别 Text 表1-2 班级 Text H生年月Da/Iime 学号 政治面貌 840 课程 Test 家庭住址 Text 成绩 684 电话 eger E mail 制作过程如下 1、选择ⅤB外接程序菜单中的可视化数据管理器,进入可视化数据管理器 2、在可视化数据管理器中选择文件菜单中的新建选项建立数据库文件,然后从数据库厂家列表中 选择要创建的数据库类型(本例选择 Microsoft Access中的 Version mde20版本) 3、在选择要创建的 Microsoft Access数据库对话框中,输入数据库名 student,按确定按钮进入数 据库窗口 4、在数据库窗口中单击鼠标右键并从弹出式菜单中选择新建表来创建 student. mdb数据库中的两 个表(基本情况表和学生成绩表)。 各个窗体的设计与实现 (一)主窗体的设计与实现 首先在VB中新建一个标准工程并起名为成绩管理,在标准工程中添加一个MD窗体并起名 为 Frmmain。主窗体的设计界面如图1-2所示 扁学生档案管理系统 □回区 数据維护)帮助Q退出 』m?同 SCRL KANA NUM 图1-2主窗体的设计界面 在主窗体中主要应用了菜单、工具栏和状态栏。下面分别介绍这些组成部分的功能 1、菜单的设计 菜单是 Windows应用程序中的重要组成部分,这里将对每个菜单项及其子菜单的功能进行简 单介绍,如表1-1所示 2
2 表 1-1 表 1-2 制作过程如下: 1、 选择 VB 外接程序菜单中的可视化数据管理器,进入可视化数据管理器; 2、 在可视化数据管理器中选择文件菜单中的新建选项建立数据库文件,然后从数据库厂家列表中 选择要创建的数据库类型(本例选择 Microsoft Access 中的 Version MDB 2.0 版本); 3、 在选择要创建的 Microsoft Access 数据库对话框中,输入数据库名 student,按确定按钮进入数 据库窗口; 4、 在数据库窗口中单击鼠标右键并从弹出式菜单中选择新建表来创建 student.mdb 数据库中的两 个表(基本情况表和学生成绩表)。 三、各个窗体的设计与实现 (一) 主窗体的设计与实现 首先在 VB 中新建一个标准工程并起名为成绩管理,在标准工程中添加一个 MDI 窗体并起名 为 Frmmain。主窗体的设计界面如图 1-2 所示: 图 1-2 主窗体的设计界面 在主窗体中主要应用了菜单、工具栏和状态栏。下面分别介绍这些组成部分的功能。 1、 菜单的设计 菜单是 Windows 应用程序中的重要组成部分,这里将对每个菜单项及其子菜单的功能进行简 单介绍,如表 1-1 所示。 字段名 类型 宽度 学号 Text 6 姓名 Test 10 性别 Text 2 班级 Text 20 出生年月 Data/Time 8 政治面貌 Text 4 家庭住址 Text 20 电话 Text 8 E_mail Text 20 照片 Binary 0 字段名 类型 宽度 学号 Text 6 课程 Test 8 成绩 Long 4 学期 Integer
表1-3应用程序的菜单项列表 匚主菜单名 子菜单项 菜单功能 情况表更新(Edt)显示学生情况表更新窗体 数据维护( Repai情况表维护(cdt)显示学生情况表维护窗体 成绩表维护(Cwh)显示学生成绩表维护窗口 退出本系统(Qut1) 退出应用程序 关于系统( Vsystem) 显示关于系统窗体 帮助(Help) 系统帮助( Whelp) 显示系统帮助窗体 退出(Exit) 推出本系统(Qut) 退出应用程序 MD应用程序中,父窗体可以有自己的菜单,子窗体也可以有属于自己的菜单。这些菜单的 创建都可以利用 Menu editor来进行创建。 2、 Imagelist控件 程序包括一个 Imagelist控件,它用来为工具栏提供图片。在程序的基本控件中没有此项控件 添加此控件的方法是在基本控件的空白处点击鼠标右键,在出现的快捷菜单中选择部件,之后在部 件对话框中的部件选项卡中选择 Microsoft windows common controls60控件,确定即可。在窗体 中添加一个 Imagelist控件,名为默认的 Imagelist1,再为此控件添加几个图标 3、工具栏设计 工具栏提供了便捷的操作方式来完成应用程序常用的操作。在现在的 Windows应用程序中, 工具栏已经成为非常主要的组成部分。本例工具栏的设计步骤为:首先在窗体中添加一个 toolbar 控件,之后为此控件添加6个按钮,并把每个按钮分别和 Imagelistl控件的图片绑定 4、状态栏设计 在主窗体上添加一个 Statusbar控件,用鼠标右键点击此控件,在属性页的对话框中为窗体添 加6个窗格,分别放置窗口信息和显示当前日期和时间。 5、主窗体界面的代码实现 Private Sub CEDIT Click( Unload Frmjbgx Unload frmcj Unload FrmHELP Unload Frmwelcome Unload frmabout Load Frmjbwh Frmjbwh Show End sub Private Sub cjwh Click Unload Frmjbgx Unload Frmjbwh Unload FrmHELP Unload Frmwelcome Unload frmabout Load fomc
3 表 1-3 应用程序的菜单项列表 主菜单名 子菜单项 菜单功能 数据维护(Repair) 情况表更新(Edit) 显示学生情况表更新窗体 情况表维护(Cedit) 显示学生情况表维护窗体 成绩表维护(Cjwh) 显示学生成绩表维护窗口 退出本系统(Quit1) 退出应用程序 帮助(Help) 关于系统(Absystem) 显示关于系统窗体 系统帮助(Abhelp) 显示系统帮助窗体 退出(Exit) 推出本系统(Quit) 退出应用程序 MID 应用程序中,父窗体可以有自己的菜单,子窗体也可以有属于自己的菜单。这些菜单的 创建都可以利用 Menu Editor 来进行创建。 2、 Imagelist 控件 程序包括一个 Imagelist 控件,它用来为工具栏提供图片。在程序的基本控件中没有此项控件, 添加此控件的方法是在基本控件的空白处点击鼠标右键,在出现的快捷菜单中选择部件,之后在部 件对话框中的部件选项卡中选择 Microsoft Windows common controls 6.0 控件,确定即可。在窗体 中添加一个 Imagelist 控件,名为默认的 Imagelist1,再为此控件添加几个图标。 3、工具栏设计 工具栏提供了便捷的操作方式来完成应用程序常用的操作。在现在的 Windows 应用程序中, 工具栏已经成为非常主要的组成部分。本例工具栏的设计步骤为:首先在窗体中添加一个 toolbar 控件,之后为此控件添加 6 个按钮,并把每个按钮分别和 Imagelist1 控件的图片绑定。 4、状态栏设计 在主窗体上添加一个 Statusbar 控件,用鼠标右键点击此控件,在属性页的对话框中为窗体添 加 6 个窗格,分别放置窗口信息和显示当前日期和时间。 5、主窗体界面的代码实现 菜单的 Click 事件代码: Private Sub CEDIT_Click() Unload Frmjbgx Unload frmcj Unload FrmHELP Unload Frmwelcome Unload frmabout Load Frmjbwh Frmjbwh.Show End Sub Private Sub cjwh_Click() Unload Frmjbgx Unload Frmjbwh Unload FrmHELP Unload Frmwelcome Unload frmabout Load frmcj
frmci Show End Sub Private Sub EDIT Click Unload Frmjbwh Unload frmcj Unload FrmHELP Unload Frmwelcome Unload frmabout Load Frmjbgx Frmjbgx Show End Sub Private Sub Absystem Click Unload Frmjbgx Unload frmcj Unload Frmibwh Unload Frmwelcome Unload frmabout Load FrmHELP FrmHELP Show End Sub Private Sub Help click Unload Frmjbgx Unload frmcy Unload FrmHELP Unload Frmwelcome Unload Frmjbwh Load frmabout frmabout show End Sub Private Sub quit Click Frmmain. Hide Unload Frmmain End sub Private Sub quit_ Click Frmmain. hide Unload Frmmain End Sub 窗体的Load事件代礓
4 frmcj.Show End Sub Private Sub EDIT_Click() Unload Frmjbwh Unload frmcj Unload FrmHELP Unload Frmwelcome Unload frmabout Load Frmjbgx Frmjbgx.Show End Sub Private Sub Absystem_Click() Unload Frmjbgx Unload frmcj Unload Frmjbwh Unload Frmwelcome Unload frmabout Load FrmHELP FrmHELP.Show End Sub Private Sub Ahelp_Click() Unload Frmjbgx Unload frmcj Unload FrmHELP Unload Frmwelcome Unload Frmjbwh Load frmabout frmabout.Show End Sub Private Sub quit_Click() Frmmain.Hide Unload Frmmain End Sub Private Sub quit1_Click() Frmmain.Hide Unload Frmmain End Sub 窗体的 Load 事件代码:
Private Sub MDIForm Loado Frmwelcome Show End Sub 工具栏的 Buttonclick事件代礓 Private Sub Toolbarl_ Button Click( By Val Button As MSComctlLib. Button) Select case button Index Unload Frmjbwh Unload frmcj Unload FrmHELP Unload Frmwelcome Unload frmabout Load Frmjbgx mjbgx SI Unload Frmjbgx Unload fomc Unload FrmHELP Unload frmwelcome Unload frmabout Load Frmjbwh Unload Frmjbgx Unload FrmHELP frmci Show Unload Frmjbgx Unload frme Unload FrmHELP Unload Frmwelcome Unload Frmjbwh Load frmabout frmabout. She Unload frme Unload Frmjbwh
5 Private Sub MDIForm_Load() Load Frmwelcome Frmwelcome.Show End Sub 工具栏的 Buttonclick 事件代码: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Index Case 1 Unload Frmjbwh Unload frmcj Unload FrmHELP Unload Frmwelcome Unload frmabout Load Frmjbgx Frmjbgx.Show Case 2 Unload Frmjbgx Unload frmcj Unload FrmHELP Unload Frmwelcome Unload frmabout Load Frmjbwh Frmjbwh.Show Case 3 Unload Frmjbgx Unload Frmjbwh Unload FrmHELP Unload Frmwelcome Unload frmabout Load frmcj frmcj.Show Case 4 Unload Frmjbgx Unload frmcj Unload FrmHELP Unload Frmwelcome Unload Frmjbwh Load frmabout frmabout.Show Case 5 Unload Frmjbgx Unload frmcj Unload Frmjbwh
Unload Frmwelcome Unload frmabout Load FrmHELP FrmHELP SE Hide Unload Frmmain End Select End sub 二学生基本情况更新窗体的设计与实现 首先在工程中添加一个标准窗体并起名为 Frmjbgx。再在基本空间上添加一个通用对话框控件, 方法是在基本控件的空白处按鼠标右键,选择部件,在部件对话框中选择 Microsoft common dialog Control60控件,按确定按钮。然后在窗体上添加各种控件,如图1-3设计屏幕,然后添加程序代 码。在图中,其主要控件、主要属性、控件说明(一些次要控件如按钮、标签,次要属性如 Height Width除非特别,否则将不特别说明,读者可以根据具体情况来设定)如表1-4所示: 基本情祝更新 基本愤况更新 添如照片 噬号 ex t2 性别Fext3 出生年月 政洽面黦Pazt6 家庭佳址ret7 电话raxt8 E_ MAIL Text9 圆上个下个」⊥一个」最后个 添加 删除 图1-3基本情况更新设计界面 表1-3控件、主要属性、控件说明表
6 Unload Frmwelcome Unload frmabout Load FrmHELP FrmHELP.Show Case 6 Frmmain.Hide Unload Frmmain End Select End Sub (二)学生基本情况更新窗体的设计与实现 首先在工程中添加一个标准窗体并起名为 Frmjbgx。再在基本空间上添加一个通用对话框控件, 方法是在基本控件的空白处按鼠标右键,选择部件,在部件对话框中选择 Microsoft Common Dialog Control 6.0 控件,按确定按钮。然后在窗体上添加各种控件,如图 1-3 设计屏幕,然后添加程序代 码。在图中,其主要控件、主要属性、控件说明(一些次要控件如按钮、标签,次要属性如 Height、 Width 除非特别,否则将不特别说明,读者可以根据具体情况来设定)如表 1-4 所示: 图 1-3 基本情况更新设计界面 表 1-3 控件、主要属性、控件说明表
控件名称主要控件属性名称属性值 功能说明 Caption 基本情况更新 frmjbgx Frmibs BorderStyle Mdichild 把此窗体作为子窗体 Windowstate Maximized 运行是最大化 名称 Frame 基本情况更新 CommonDialog名称 Commondialogl Data 选择 Access数据源 Student mdb 选择数据源的名称 Recordsource 基本情况 和数据表进行绑定 名称 Imagel Stretch rue 「调整图片大小以适应该控件 Enabled False 初始状态为不可用 名称 Textl--Text9 extI text9和数据库 Datasource Datal Student. mdb的基本情况表的各 Text Datafield 学号一EMAL 个字段进行绑定 Enabled False 名称 Command Command 放 弃 Enabled False 初始状态为不可用 名称 Command10 Command Caption 忝加照片 Enabled False 初始状态为不可用 注意:在设置 Datal的 Databasename属性时,不要 student mdb之前的路径,这样可以不限制应用 程序的路径 窗体的运行结果如图1-4所示 学生档案管理系统一[基本况更新 ,数据维护q)助0退出吧 基本憤况更新 学号「 姓名 如凰片」 理象 出先年月F 减治面貌回 家住址「 电话卩4s345 E瓶AILF4235 上一个[下一个第一1 最后一个 添加 KALA 图1-4基本情况更新窗体的运行结果 基本情况更新设计代码实现
7 注意:在设置 Data1 的 Databasename 属性时,不要 student.mdb 之前的路径,这样可以不限制应用 程序的路径。 窗体的运行结果如图 1-4 所示: 图 1-4 基本情况更新窗体的运行结果 基本情况更新设计代码实现 控件名称 主要控件属性名称 属性值 功能说明 Frmjbgx Caption 基本情况更新 名称 frmjbgx BorderStyle 2 – Sizable Mdichild True 把此窗体作为子窗体 Windowstate Maximized 运行是最大化 Frame 名称 Frame1 Caption 基本情况更新 CommonDialog 名称 Commondialog1 Data 名称 Data1 Connect Access 选择 Access 数据源 Databasename Student.mdb 选择数据源的名称 Recordsource 基本情况 和数据表进行绑定 Image 名称 Image1 Stretch True 调整图片大小以适应该控件 Enabled False 初始状态为不可用 Text 名称 Text1—Text9 text1_text9 和数据库 Student.mdb 的基本情况表的各 个字段进行绑定 Datasource Data1 Datafield 学号—E_MAIL Enabled False 初始状态为不可用 Command 名称 Command4 Caption 放弃 Enabled False 初始状态为不可用 Command 名称 Command10 Caption 添加照片 Enabled False 初始状态为不可用
添加按钮的 Click事件代码: Private Sub Commandl Click On Error resume next 点击此按钮时,除放弃和添加照片按钮外,其他均不可用 Command2 Enabled= Not Command2 Enabled Command 3. Enabled= Not Command 3. Enabled Command4 Enabled= Not Command. Enabled Commands. Enabled= Not Commands. Enabled Commando enabled= Not command. enabled Command 7 Enabled Not Command 7 Enabled Command 8 Enabled= Not Command 8 Enabled Command. Enabled= Not Command 9 Enabled Command 10 Enabled= Not Command 10 Enabled If Commandl Caption="添加"The Text1. Enabled= True Text2. Enabled True Text3 Enabled True Text4 Enabled = True Text5 Enabled= True Text6 Enabled= True Text7 Enabled= True Text 8 Enabled= true Text9. Enabled= True Image l Enabled= True Command l Caption="确定" 添加一条空白记录 Datal recordset. addNew Text1. Set Focus Else Text1 Enabled= False Text2 Enabled= False Text3 Enabled= False Text4 Enabled= False Text5 Enabled= False Text6 enabled= False Text7 Enabled= False Text 8 Enabled = False Text9 enabled= False Imagel Enabled= False 把数据真正添加到表中 Datal Recordset. Update Datal Recordset movelast
8 添加按钮的 Click 事件代码: Private Sub Command1_Click() On Error Resume Next ‘点击此按钮时,除放弃和添加照片按钮外,其他均不可用 Command2.Enabled = Not Command2.Enabled Command3.Enabled = Not Command3.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled Command6.Enabled = Not Command6.Enabled Command7.Enabled = Not Command7.Enabled Command8.Enabled = Not Command8.Enabled Command9.Enabled = Not Command9.Enabled Command10.Enabled = Not Command10.Enabled If Command1.Caption = "添 加" Then Text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text4.Enabled = True Text5.Enabled = True Text6.Enabled = True Text7.Enabled = True Text8.Enabled = True Text9.Enabled = True Image1.Enabled = True Command1.Caption = "确 定" ‘添加一条空白记录 Data1.Recordset.AddNew Text1.SetFocus Else Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False Text5.Enabled = False Text6.Enabled = False Text7.Enabled = False Text8.Enabled = False Text9.Enabled = False Image1.Enabled = False ‘把数据真正添加到表中 Data1.Recordset.Update Data1.Recordset.MoveLast
Command l Caption="添加 End If End Sub 删除按钮的 Click事件代礓 Private Sub Command2 Click On Error resume next Datal Recordset Delete Datal Recordset MoveNext If Datal Recordset EoF Then Datal. Recordset movelast End Sub 修改按钮的 Click事件代礓: Private Sub Command3 Click On Error resume next Command. Enabled= Not Command l Enabled Command2 Enabled= Not Command2 Enabled Command. Enabled= Not Command. Enabled Commands. Enabled= Not Commands. Enabled Command 10 Enabled= not Command 10 Enabled If Command3 Caption=”修改"Then Text1 Enabled True Text2 Enabled= true Text3 Enabled= True Text4 Enabled= True Text5 Enabled= True Text6 Enabled= True Text7 Enabled= True Text8 Enabled= True Text9 Enabled= True Image l Enabled= True Datal Recordset EDIt Text1. Set Focus Command3 Caption="确定 Command3 Caption="修改 Datal Recordset. Update Text1 Enabled= False Text2 Enabled= False Text3 Enabled= False Text4 Enabled= False Texts. Enabled= False
9 Command1.Caption = "添 加" End If End Sub 删除按钮的 Click 事件代码: Private Sub Command2_Click() On Error Resume Next Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End Sub 修改按钮的 Click 事件代码: Private Sub Command3_Click() On Error Resume Next Command1.Enabled = Not Command1.Enabled Command2.Enabled = Not Command2.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled Command10.Enabled = Not Command10.Enabled If Command3.Caption = "修 改" Then Text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text4.Enabled = True Text5.Enabled = True Text6.Enabled = True Text7.Enabled = True Text8.Enabled = True Text9.Enabled = True Image1.Enabled = True Data1.Recordset.EDIT Text1.SetFocus Command3.Caption = "确 定" Else Command3.Caption = "修 改" Data1.Recordset.Update Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False Text5.Enabled = False
Text6 enabled= False Text7 Enabled= False Text8 Enabled= False Text9 Enabled= False Image l Enabled= fals End lf End sub 放弃按钮的 Click事件代礓 Private Sub Command4 Click(O On error resume next Command1 Caption="添加 Command3. Caption 修改 Command l Enabled= True Command3. Enabled = True Command Enabled= False Commands. Enabled= True Commando Enabled True Command. Enabled= True Command 8 Enabled= True Command. Enabled= True Datal Update Controls Datal recordset movelast Text1. Enabled False Text2 Enabled= False Text3 enabled False Text4 Enabled= False Text5 Enabled False Text6 enabled False Text7 Enabled= False Text 8 Enabled False Text9 Enabled= False Imagel Enabled= False End Sub 查询按钮的 Click事件代礓: Private Sub Commands Click Dim MNO As String MNO= Input Box$("请输入学号","查询窗") Data1 Recordset. Find First"学号="&MNO&" If Datal recordset Nomatch then msgbox"无此学号"”,"提示 End Sub 上一个按钮的 Click事件代礓
10 Text6.Enabled = False Text7.Enabled = False Text8.Enabled = False Text9.Enabled = False Image1.Enabled = False End If End Sub 放弃按钮的 Click 事件代码: Private Sub Command4_Click() On Error Resume Next Command1.Caption = "添 加" Command3.Caption = "修 改" Command1.Enabled = True Command3.Enabled = True Command4.Enabled = False Command5.Enabled = True Command6.Enabled = True Command7.Enabled = True Command8.Enabled = True Command9.Enabled = True Data1.UpdateControls Data1.Recordset.MoveLast Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False Text5.Enabled = False Text6.Enabled = False Text7.Enabled = False Text8.Enabled = False Text9.Enabled = False Image1.Enabled = False End Sub 查询按钮的 Click 事件代码: Private Sub Command5_Click() Dim MNO As String MNO = InputBox$("请输入学号", "查询窗") Data1.Recordset.FindFirst "学号='" & MNO & "'" If Data1.Recordset.NoMatch Then MsgBox "无此学号", , "提示" End Sub 上一个按钮的 Click 事件代码: