www.pudn.com > cjg2.rar > frmStudent.frm
VERSION 5.00
Begin VB.Form Student
BorderStyle = 1 'Fixed Single
Caption = "学生信息管理"
ClientHeight = 2820
ClientLeft = 45
ClientTop = 330
ClientWidth = 7335
LinkTopic = "Form1"
MaxButton = 0 'False
MDIChild = -1 'True
MinButton = 0 'False
ScaleHeight = 2820
ScaleWidth = 7335
Begin VB.ComboBox cmbDept
Height = 300
Left = 4515
Style = 2 'Dropdown List
TabIndex = 5
Top = 765
Width = 2175
End
Begin VB.ComboBox cmbClass
Height = 300
Left = 4502
Style = 2 'Dropdown List
TabIndex = 4
Top = 405
Width = 2175
End
Begin VB.ComboBox cmbSex
Height = 300
ItemData = "frmStudent.frx":0000
Left = 1228
List = "frmStudent.frx":0002
Style = 2 'Dropdown List
TabIndex = 3
Top = 1485
Width = 2175
End
Begin VB.TextBox txtNum
Height = 270
Left = 1228
MaxLength = 8
TabIndex = 1
Top = 780
Width = 2175
End
Begin VB.TextBox txtCode
Height = 270
Left = 1228
MaxLength = 8
TabIndex = 2
Top = 1140
Width = 2175
End
Begin VB.TextBox txtRoom
Height = 270
Left = 4502
MaxLength = 10
TabIndex = 7
Top = 1500
Width = 2175
End
Begin VB.TextBox txtTime
Height = 270
Left = 4502
TabIndex = 6
Top = 1140
Width = 2175
End
Begin VB.TextBox txtName
Height = 270
Left = 1228
MaxLength = 15
TabIndex = 0
Top = 420
Width = 2175
End
Begin VB.CommandButton cmdSave
Caption = "保存"
Height = 300
Left = 3662
TabIndex = 10
Top = 2070
Width = 735
End
Begin VB.CommandButton cmdExit
Cancel = -1 'True
Caption = "退出"
Height = 300
Left = 4397
TabIndex = 11
Top = 2070
Width = 735
End
Begin VB.CommandButton cmdDelete
Caption = "删除"
Height = 300
Left = 2912
TabIndex = 9
Top = 2070
Width = 735
End
Begin VB.CommandButton cmdAdd
Caption = "添加"
Height = 300
Left = 2177
TabIndex = 8
Top = 2070
Width = 735
End
Begin VB.PictureBox picNavigation
AutoSize = -1 'True
BorderStyle = 0 'None
Height = 350
Left = 2582
ScaleHeight = 345
ScaleWidth = 2415
TabIndex = 16
Top = 2385
Width = 2410
Begin VB.CommandButton cmdMove
Height = 270
Index = 1
Left = 270
Picture = "frmStudent.frx":0004
Style = 1 'Graphical
TabIndex = 13
Top = 0
Width = 300
End
Begin VB.CommandButton cmdMove
Height = 270
Index = 0
Left = -15
Picture = "frmStudent.frx":0048
Style = 1 'Graphical
TabIndex = 12
Top = 0
Width = 300
End
Begin VB.CommandButton cmdMove
Height = 270
Index = 3
Left = 2010
Picture = "frmStudent.frx":0095
Style = 1 'Graphical
TabIndex = 15
Top = -15
Width = 300
End
Begin VB.CommandButton cmdMove
Height = 270
Index = 2
Left = 1725
Picture = "frmStudent.frx":00E1
Style = 1 'Graphical
TabIndex = 14
Top = -15
Width = 300
End
Begin VB.TextBox txtNews
Height = 270
Left = 555
Locked = -1 'True
TabIndex = 17
TabStop = 0 'False
Top = 0
Width = 1185
End
End
Begin VB.Label Label8
AutoSize = -1 'True
Caption = "系部名称"
Height = 180
Left = 3673
TabIndex = 25
Top = 825
Width = 720
End
Begin VB.Label Label7
AutoSize = -1 'True
Caption = "班级名称"
Height = 180
Left = 3673
TabIndex = 24
Top = 465
Width = 720
End
Begin VB.Label Label6
AutoSize = -1 'True
Caption = "考试教室"
Height = 180
Left = 3673
TabIndex = 23
Top = 1545
Width = 720
End
Begin VB.Label Label5
AutoSize = -1 'True
Caption = "考试时间"
Height = 180
Left = 3673
TabIndex = 22
Top = 1185
Width = 720
End
Begin VB.Label Label3
AutoSize = -1 'True
Caption = "考号"
Height = 180
Left = 658
TabIndex = 21
Top = 1185
Width = 360
End
Begin VB.Label Label4
AutoSize = -1 'True
Caption = "性别"
Height = 180
Left = 658
TabIndex = 20
Top = 1545
Width = 360
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "姓名"
Height = 180
Left = 658
TabIndex = 19
Top = 465
Width = 360
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "学号"
Height = 180
Left = 658
TabIndex = 18
Top = 825
Width = 360
End
End
Attribute VB_Name = "Student"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim isAdding As Boolean '定义操作状态标志
Dim objStudent As Recordset '用于保存学生信息数据表记录
Dim objCn As Connection '用于建立数据库联接
Private Sub cmbClass_KeyPress(KeyAscii As Integer)
'如果敲回车键,使下一控件获得焦点
If KeyAscii = vbKeyReturn Then SendKeys "{TAB}"
End Sub
Private Sub cmbDept_KeyPress(KeyAscii As Integer)
'如果敲回车键,使下一控件获得焦点
If KeyAscii = vbKeyReturn Then SendKeys "{TAB}"
End Sub
Private Sub cmbSex_KeyPress(KeyAscii As Integer)
'如果敲回车键,使下一控件获得焦点
If KeyAscii = vbKeyReturn Then SendKeys "{TAB}"
End Sub
Private Sub cmdExit_Click()
Unload Me '关闭学生信息管理窗体
End Sub
Private Sub Form_Load()
Dim objTemp As New Recordset
'建立数据库联接
Set objCn = New Connection '实例化联接对象
With objCn '建立数据库联接
.Provider = "SQLOLEDB"
.ConnectionString = "User ID=sa;PWD=123;Data Source=(local);" & _
"Initial Catalog=自测考试"
.Open
End With
'获取学生信息记录
Set objStudent = New Recordset '实例化objStudent对象
With objStudent
Set .ActiveConnection = objCn
.CursorLocation = adUseClient '指定使用客户端游标
.CursorType = adOpenStatic '指定使用静态游标
.LockType = adLockOptimistic
.Open "SELECT * FROM 学生信息" '获取学生信息登录信息
End With
'获取班级信息
With objTemp
Set .ActiveConnection = objCn
.CursorLocation = adUseClient '指定使用客户端游标
.CursorType = adOpenStatic '指定使用静态游标
.Open "SELECT * FROM 班级信息" '获取班级信息数据
'建立班级名称列表
cmbClass.AddItem ""
cmbClass.ItemData(cmbClass.NewIndex) = 0
While Not .EOF
cmbClass.AddItem .Fields("名称")
cmbClass.ItemData(cmbClass.NewIndex) = Val(.Fields("编号"))
.MoveNext
Wend
End With
'获取系部信息
With objTemp
.Close
.Open "SELECT * FROM 系部信息" '获取系部信息数据
'建立系部名称列表
cmbDept.AddItem ""
cmbDept.ItemData(cmbDept.NewIndex) = 0
While Not .EOF
cmbDept.AddItem .Fields("名称")
cmbDept.ItemData(cmbDept.NewIndex) = Val(.Fields("编号"))
.MoveNext
Wend
End With
'建立性别列表
cmbSex.AddItem ""
cmbSex.AddItem "男"
cmbSex.AddItem "女"
cmdMove(0).Value = True '触发按钮单击事件,显示第一个记录
End Sub
Private Sub cmdMove_Click(Index As Integer)
With objStudent
Select Case Index '切换当前记录
Case 0 '使第一个记录成为当前记录
If .RecordCount > 0 And Not .BOF Then .MoveFirst
Case 1 '使上一个记录成为当前记录
If .RecordCount > 0 And Not .BOF Then
.MovePrevious
If .BOF Then .MoveFirst
End If
Case 2 '使下一个记录成为当前记录
If .RecordCount > 0 And Not .EOF Then
.MoveNext
If .EOF Then .MoveLast
End If
Case 3 '使最后一个记录成为当前记录
If .RecordCount > 0 And Not .EOF Then .MoveLast
End Select
Show_Data
End With
If isAdding Then isAdding = False
End Sub
Private Sub cmdAdd_Click()
txtNews = "添加新记录"
txtName = ""
isAdding = True
txtName.SetFocus
End Sub
Private Sub cmdDelete_Click()
'根据是否处于添加记录状态执行不同的操作
If isAdding Then
'退出添加记录状态,显示当前记录
isAdding = False
If objStudent.RecordCount <= 0 Then
txtNews = "记录:无" '显示无记录提示
Else
Show_Data '显示当前记录数据
End If
Else
If objStudent.RecordCount > 0 Then
If MsgBox("是否删除当前记录?", vbYesNo + vbQuestion, _
"学生信息管理") = vbYes Then
objStudent.Delete '执行删除当前记录操作
cmdMove(2).Value = True '显示下一记录数据
Else
Show_Data '显示当前记录数据
End If
End If
End If
End Sub
Private Sub cmdSave_Click()
Dim objCopy As New Recordset
'在当前表中无数据和不是添加记录时,不执行保存操作
If Not isAdding And objStudent.RecordCount < 1 Then Exit Sub
If Trim(txtName) = "" Then
MsgBox "学生姓名不能为空!", vbCritical, "学生信息管理"
txtName.SetFocus
txtName = ""
ElseIf Not txtNum Like "[1-9]#######" Then
MsgBox "学号必须是以非0数字开头的8位数字字符串!", vbCritical, "学生信息管理"
txtNum.SetFocus
txtNum.SelStart = 0
txtNum.SelLength = 8
ElseIf Not txtCode Like "[1-9]#######" Then
MsgBox "考号必须是以非0数字开头的8位数字字符串!", vbCritical, "学生信息管理"
txtCode.SetFocus
txtCode.SelStart = 0
txtCode.SelLength = 8
ElseIf Trim(cmbSex) = "" Then
MsgBox "请选择性别!", vbCritical, "学生信息管理"
cmbSex.SetFocus
ElseIf Trim(cmbClass) = "" Then
MsgBox "请选择所属班级!", vbCritical, "学生信息管理"
cmbClass.SetFocus
ElseIf Trim(cmbDept) = "" Then
MsgBox "请选择所属系部!", vbCritical, "学生信息管理"
cmbDept.SetFocus
ElseIf Not IsDate(txtTime) Then
MsgBox "请输入有效的考试时间!", vbCritical, "学生信息管理"
txtTime.SetFocus
txtTime.SelStart = 0
txtTime.SelLength = Len(txtTime)
ElseIf Trim(txtRoom) = "" Then
MsgBox "请输入考试教室!", vbCritical, "学生信息管理"
txtRoom.SetFocus
txtRoom = ""
Else
Set objCopy = objStudent.Clone
With objCopy
If .RecordCount > 0 Then
'检查学生学号是否重复
.MoveFirst
.Find "学号='" & Trim(txtNum) & "'"
If (isAdding And Not .EOF) Or _
(Not isAdding And Not .EOF And _
.AbsolutePosition <> objStudent.AbsolutePosition) Then
MsgBox "学号重复,请修改!", vbCritical, "学生信息管理"
txtNum.SetFocus
txtNum.SelStart = 0
txtNum.SelLength = Len(txtNum)
Exit Sub
End If
'检查学生考号是否重复
.MoveFirst
.Find "考号='" & Trim(txtCode) & "'"
If (isAdding And Not .EOF) Or _
(Not isAdding And Not .EOF And _
.AbsolutePosition <> objStudent.AbsolutePosition) Then
MsgBox "考号重复,请修改!", vbCritical, "学生信息管理"
txtCode.SetFocus
txtCode.SelStart = 0
txtCode.SelLength = Len(txtCode)
Exit Sub
End If
If isAdding Then objStudent.AddNew '保存或添加新记录
Else
If isAdding Then objStudent.AddNew '添加新记录
End If
objStudent.Fields("姓名") = Trim(txtName)
objStudent.Fields("学号") = Trim(txtNum)
objStudent.Fields("考号") = Trim(txtCode)
objStudent.Fields("性别") = cmbSex
objStudent.Fields("班级") = cmbClass.ItemData(cmbClass.ListIndex)
objStudent.Fields("系部") = cmbDept.ItemData(cmbDept.ListIndex)
objStudent.Fields("时间") = txtTime
objStudent.Fields("教室") = txtRoom
objStudent.Update
MsgBox "数据保存成功!", vbInformation, "学生信息管理"
isAdding = False
'显示当前记录编号和记录总数
txtNews = "记录:" & objStudent.AbsolutePosition & "/" & objStudent.RecordCount
End With
End If
End Sub
Private Sub Form_Terminate()
End Sub
Private Sub Form_Unload(Cancel As Integer)
objCn.Close '关闭数据联接
Set objCn = Nothing '释放数据库联接
Set objStudent = Nothing '释放记录集对象
End Sub
'限制联系电话输入
Private Sub txtPhone_KeyPress(KeyAscii As Integer)
'如果敲回车键,使下一控件获得焦点
If KeyAscii = vbKeyReturn Then SendKeys "{TAB}"
If Not (Chr(KeyAscii) Like "[0-9]" Or KeyAscii = vbKeyBack) Then
KeyAscii = 0 '输入不是数字或退格键,取消输入
End If
End Sub
Private Sub txtCode_KeyPress(KeyAscii As Integer)
'如果敲回车键,使下一控件获得焦点
If KeyAscii = vbKeyReturn Then SendKeys "{TAB}"
End Sub
Private Sub txtName_KeyPress(KeyAscii As Integer)
'如果敲回车键,使下一控件获得焦点
If KeyAscii = vbKeyReturn Then SendKeys "{TAB}"
End Sub
Private Sub txtSum_KeyPress(KeyAscii As Integer)
'如果敲回车键,使保存按钮获得焦点
If KeyAscii = vbKeyReturn Then cmdSave.SetFocus
End Sub
Private Sub Show_Data()
Dim i%
With objStudent
If .RecordCount < 1 Then
txtNews = "记录:无" '显示无记录提示
'清除显示数据
txtName = "": txtNum = ""
txtCode = "": txtTime = "": txtRoom = ""
cmbSex.ListIndex = 0: cmbClass.ListIndex = 0
cmbDept.ListIndex = 0
Else
'显示当前记录数据
txtName = .Fields("姓名"): txtNum = .Fields("学号")
txtCode = .Fields("考号"): txtTime = .Fields("时间")
txtRoom = .Fields("教室")
'显示性别
If .Fields("性别") = "男" Then
cmbSex.ListIndex = 1
Else
cmbSex.ListIndex = 2
End If
'显示班级名称
For i = 1 To cmbClass.ListCount - 1
If Val(.Fields("班级")) = cmbClass.ItemData(i) Then Exit For
Next
cmbClass.ListIndex = i
'显示系部名称
For i = 1 To cmbDept.ListCount - 1
If Val(.Fields("系部")) = cmbDept.ItemData(i) Then Exit For
Next
cmbDept.ListIndex = i
'显示当前记录编号和记录总数
txtNews = "记录:" & .AbsolutePosition & "/" & .RecordCount
End If
End With
End Sub
Private Sub txtNum_KeyPress(KeyAscii As Integer)
'如果敲回车键,使下一控件获得焦点
If KeyAscii = vbKeyReturn Then SendKeys "{TAB}"
End Sub
Private Sub txtRoom_KeyPress(KeyAscii As Integer)
'如果敲回车键,使保存按钮获得焦点
If KeyAscii = vbKeyReturn Then cmdSave.SetFocus
End Sub
Private Sub txtTime_KeyPress(KeyAscii As Integer)
'如果敲回车键,使下一控件获得焦点
If KeyAscii = vbKeyReturn Then SendKeys "{TAB}"
End Sub