引言
我在做学生系统的时候其实很多时候都是晕的,刚开始觉得特别的复杂;但是等我做完的时候发现这里面很多的都是重复的,不光代码重复,思路、窗体间结构都是重复的。一句话总结:其实学生信息系统就是增、删、改、查、删......这样一说是不是简单多了。
结构图
总结
一、建立学生系统主窗体(工程项目(是用来建造应用程序的文件的集合)—创建主窗体(MDI多文档界面,这样可以让程序更加美观,整齐有序)—创建主窗体菜单—创建公用模块(它可以用来存放整个工程项目的公用的函数、全局变量,这样可以极大的提高代码的效率))
1、由于系统中各个功能模块都将频繁使用数据库中的各个数据,因此需要一个公共的数据操作函数
Public Function ExecuteSQL(ByVal SQL As String, MsgString as String) As ADODB.Recordset
'传递参数SQL传递查询语句,MsgString传递查询信息,自身以一个数据集对象的形式返回
On Error GoTo ExecuteSQL_Error '异常处理
sTokens = Split(SQL) '用Split函数产生一个包含各个子串的数组
Set cnn = New ADODB.Connection '创建连接
cnn.OpenConnectString '打开连接
IfInStr("INSERTE,DELETE,UPDATE", UCase$(sTokens(0))) Then
'判断字符串中是否含有指定内容
cnn.Execute SQL '执行查询语句
MsgString = sTokens(0) &"query successful"
'返回查询信息
Else
Set rst = NewADODB.Recordset '创建数据集对象
rst.Open Trim$(SQL), cnn, adOpenKeyset,adLockOptimistic
'返回查询结果
Set ExecuteSQL =rst '返回记录集对象
MsgString = "查询到" & rst.RecordCount & _
"条记录"
End If
ExecuteSQL_Exit: '清空数据集对象
Set rst = Nothing
Set cnn = Nothing
Exit Function
ExecuteSQL_Error: '错误类型判断
MsgString = "查询错误:" & _
Err.Description
Resume ExecuteSQL_Exit
Endfunction
ExecuteSQL函数有两个参数:SQL和MsgString。其中SQL用来存放需要执行的SQL语句,MsgString用来返回执行的提示信息。函数执行时,首先判断SQL语句中包含的内容:当执行操作时,ExecuteSQL函数将返回一个与函数同名的记录集对象(Recordset),所有满足条件的记录包含在对象中;当执行如删除、更新、添加、等操作时,不放回记录集对象。
2、ExecuteSQL函数使用了ConnectString函数,这个函数使用来连接数据库的;代码:
Public FunctionConnectString() As String
ConnectString ="FileDSN=student.dsn;UID=sa;PWD=123456" '返回一个数据库连接
End Function
3、上面的ExecuteSQL函数和ConnectString函数将在后面频繁使用,因为他们对任何数据库连接都是有效的,由于在后面将在程序中需要频繁的检查各种文本框的内容是否为空,这里定义了testtxt函数,代码:
Public FunctionTesttxt(txt As String) As Boolean
If Trim(txt) ="" Then '判断输入内容是否为空(如果文本框内容为空,函数将返回True,否则将返回False)
Testtxt = False
Else
Testtxt = True
End If
End Function
4、学生系统启动后,需要对用户进行判断,如果登陆者是授权用户,将进入系统,否则将停止程序的执行(这个判断需要在系统运行初进行,因此代码需要放在模块中。代码:
Sub Main()
Dim fLogin As New frmLogin
fLogin.Show vbModal '显示登录窗体
If Not fLogin.OK Then '判断是否授权用户
End
End If
Unload fLogin
'Set fMainForm = New frmMain '判断是,将进入系统
'fMainForm.Show
End Sub
二、系统用户模块的创建:(用户登录—添加用户—修改用户密码)
1、为窗体定义全局变量OK用来判断灯笼裤是否成功;定义miCount,用来记载密码的次数,并且在载入窗体时初始化这两个全局变量。
2、当用户输入完用户名和密码,单击cmdOK按钮将对用户信息进行判断,用户单击该按钮将触发Click事件;如果用户没有输入用户名和密码,将出现消息框给予提示,如果输入的用户名在用户表格中没有找到,将提示重新输入,文本框txtPassword将重新获得输入焦点。用户登录成功全局变量OK将被赋值为True,一旦三次输入密码不正确,全局变量OK将被赋值为False。公用模块中的Main过程将根据OK的值决定是退出系统还是进入系统
三、学籍管理模块的建立(添加学籍—修改学籍—查询学籍)
1、添加:(重点事项)
(1)判断是否为空
If NotTesttxt(cboClassNo.Text) Then
MsgBox"请输入班号!", vbOKOnly + vbExclamation, "警告"
cboClassNo.SetFocus
cboClassNo.Text= ""
ExitSub
End If
(2)判断是否重复
txtSQL ="select * from class_Info where class_No='" &Trim(cboClassNo.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
If Not (mrc.EOF And mrc.BOF) Then '确保输入的班号不存在
MsgBox"请重新输入班号!", vbOKOnly + vbExclamation, "警告"
cboClassNo.SetFocus
mrc.Close
Else
……
(3)有日期的判断的判断日期的格式
IsDate(txtBorndate.Text) '判断数据是否日期格式
IsDate(txtRudate.Text) '判断数据是否日期格式
(4)判断该输入数字的地方是否为数字
If Not IsNumeric(Trim(txtSID.Text)) Then '判断输入学号是否数字
MsgBox "请输入数字!", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtSID.SetFocus
End If
(5)添加记录成功
txtSQL = "select * from class_Info" Set mrc = ExecuteSQL(txtSQL, MsgText) mrc.AddNew mrc.Fields(0) = Trim(cboClassNo.Text) mrc.Fields(1) = Trim(cboGrade.Text) mrc.Fields(2) = Trim(txtDirector.Text) mrc.Fields(3) = Trim(cboClassNo.Text) mrc.Update mrc.Close Me.Hide MsgBox "班级信息添加成功!", vbOKOnly + vbExclamation, "添加班级信息" End If |
2、修改:(重点事项)
(1)、点击修改时各个文本框将有效,移动记录的按钮将失效
PrivateSub editCommand_Click() '单击“修改记录”按钮,将进入到修改状态,各个文本框将有效,这是移动记录的按钮将失效,可以避免误操作
mcclean = False
Frame2.Enabled = False
'使移动记录按钮失效
firstCommand.Enabled = False
previousCommand.Enabled = False
nextCommand.Enabled = False
lastCommand.Enabled = False
'使各个文本框有效
txtSID.Enabled = True
txtName.Enabled = True
comboSex.Enabled = True
txtBorndate.Enabled = True
comboClassNo.Enabled = True
txtRudate.Enabled = True
txtTel.Enabled = True
txtAddress.Enabled = True
txtComment.Enabled = True
myBookmark = mrc.Bookmark '记下当前记录位置
End Sub
(2)、不可重复
<spanstyle="font-size:18px;">mrc.AddNew
mrc.Fields(0) =Trim(comboClassNo.Text)
mrc.Fields(1) =Trim(comboGrade.Text)
mrc.Fields(2) =Trim(txtDirector.Text)
mrc.Fields(3) =Trim(txtClassroom.Text)
mrc.Update
MsgBox"班级信息修改成功!", vbOKOnly + vbExclamation, "警告"
mrc.Bookmark =mybookmark
CallviewData</span>
(3)、点击取消修改后,各个按钮将有效,文本框将失效
PrivateSub cancelCommand_Click() '单击“取消修改”按钮时,将取消所做的修改
If Not mcclean Then '判断是否处于修改状态
'使各个按钮有效
Frame2.Enabled = True
firstCommand.Enabled = True
previousCommand.Enabled = True
nextCommand.Enabled = True
lastCommand.Enabled = True
'使各个文本框失效
txtSID.Enabled = False
txtName.Enabled = False
comboSex.Enabled = False
txtBorndate.Enabled = False
comboClassNo.Enabled = False
txtRudate.Enabled = False
txtTel.Enabled = False
txtAddress.Enabled = False
txtComment.Enabled = False
mrc.Bookmark = myBookmark '回到开始记录位置
Call viewData
Else
MsgBox "什么都没有修改,有什么好取消的!", vbOKOnly + vbExclamation,"警告"
End If
End Sub
3、查询有两种方法
(1)点击各个按钮进行查询(此方法 使用记录少的,单个查询)
<span style="font-size:18px;">Private Sub cmdFirst_Click() '记录集移动到第一条 mrc.MoveFirst Call viewData End Sub
Private Sub cmdLast_Click() '记录集移动到最后一条 mrc.MoveLast Call viewData End Sub
Private Sub cmdNext_Click() '记录集移动到下一条 mrc.MoveNext If mrc.EOF Then mrc.MoveFirst End If Call viewData End Sub
Private Sub cmdPrevious_Click() '记录集移动到上一条 mrc.MovePrevious If mrc.BOF Then mrc.MoveLast End If Call viewData End Sub</span> |
(2)按条件进行查询,直接显示在MSHFexGrid控件中按顺序显示
4、删除:(重点事项)
(1)、提示是否删除的语句
str2$= MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")
(2)如果删除:
If str2$ = vbOK Then <span style="white-space:pre"> </span>mrc.MoveNext If mrc.EOF Then <span style="white-space:pre"> </span>mrc.MoveFirst myBookmark = mrc.Bookmark mrc.MoveLast mrc.Delete mrc.Bookmark = myBookmark Call viewData Else myBookmark = mrc.Bookmark mrc.MovePrevious mrc.Delete mrc.Bookmark = myBookmark Call viewData End If |
(3)如果不删除:
<pre name="code" class="vb">Else
mrc.Bookmark=mybookmark
CallviewData
End If
(4)这里的viewData函数是用来把临时表中的当前记录赋值给各个文本框
cboClassNo.Text =mrc.Fields(0)
cboGrade.Text= mrc.Fields(1)
txtDirector.Text= mrc.Fields(2)
txtClassroom.Text= mrc.Fields(3)
四、班级管理模块的建立(添加班级—修改班级);由于班级的管理模块和学籍管理模块差不多,上面已经详细阐述,本处不详细总结
五、课程和成绩的管理模块也都类似,重点参照学籍模块。
附录:(出现频率高,而且比较重要的)
1、Option Explicit是用来规定所有变量使用前必须定义。这样可以避免由于输入的错误而产生的新变量。
2、Me是VB中的一个常用的对象,用来指代当前对象本身。
3、IsDate(txtBorndate.Text) '判断数据是否日期格式
IsDate(txtRudate.Text) '判断数据是否日期格式
4、myBookmark 用来记录数据集中当前记录的位置
mcclean 作为一个标志记录是否修改记录
5、定义函数viewData可以解决程序中各处需要显示数据的问题
6、mrc.Delete '判断是否有重复记录
7、mrc.Bookmark =myBookmark '回到开始记录位置
myBookmark = mrc.Bookmark '记下当前记录位置
8、列表框的ListIndex属性用来指示当前选中项,-1说明没有被选中的数据项
PrivateSub cmdAdd_Click() '单击“添加”按钮,可以将添加课程
If listAllcourse.ListIndex <> -1 Then '判断是否有内容被选中
listSelectcourse.AddItemlistAllcourse.list(listAllcourse.ListIndex)
End If
If listAllcourse.ListIndex <> -1 Then
Call addlist(listSelectcourse,listAllcourse.ListIndex)
End If
End Sub
进步
我其实通过这样的总结发现,自己对学生信息管理系统又有了新的认识,至少没有之前那么晕了。它的结构框架和部分思路渐渐的清晰,当然还是有很多的地方不是很清楚;我相信,只要我不断的总结,它总有一天会被我全部搞清楚的。