我的第一个作品—学生信息管理系统,老师虽然已给系统的源代码,但是做完之后我还是蛮有成就感的!一是因为这是我的第一个系统,只有有了这次的探索与尝试,我才会在以后的道路上越走越远,尽管自己对好多知识掌握的不好,但我相信自己会不断提高的;二是我们不是在单纯的做系统,而是把我们要把我们当做用户,去不断地挖掘系统的潜能。我和大家不同,大家在准备作品展时我在准备接本,无形中我就落下了许多,但我相信自己可以尽力缩小我们之间的差距的,并慢慢赶上大家的。下面就来介绍我的学生信息管理系统。
一、总体分析
刚拿到学生信息管理系统时,只是简单的从宏观上了解了一下这个系统,看了一下各个窗体和代码。等到做完了系统才知道当时自己宏观和微观都没有把握好,比如说做这个系统最终要达到一个什么样的效果、各个窗体间的联系、各个功能是怎样实现的等。
对我的启示就是做一个系统或软件前,必须从宏观上把控系统的方向和用户的需求,微观上协调好各个窗体、各个模块、各个控件间的联系,保证系统的合理性和条理性。
二、界面设计
学生信息管理系统是由一个登陆窗体、一个MDI窗体(父窗体)、14个子窗体、一个标准模块构成。MDI窗体用来调出14个子窗体,完成学生信息的管理。
三、编写代码
拿着学生信息管理系统的源代码,刚开始还感觉挺简单的。但真正做系统时,才发现自己只是在宏观上理解了一下系统和代码间的关系,而具体到某些模块的代码起到一个什么作用、如果不写会出现什么样的效果、为什么有些代码会反复出现等。随着对系统的一步步深化,才明白这个系统的整体架构、各个模块间的关系、各个代码的用处。下面简单介绍几个典型的窗体:
1、登录窗体
代码部分:
[vb] view plaincopyprint?
1. If Trim(txtUsername.Text = "") Then
2. MsgBox "没有这个用户,请重新输入!", vbOKOnly + vbExclamation, "警告"
3. txtUsername.SetFocus
4. Else
5. strTxtSQL = "select * from user_Info where user_ID = '" & txtUsername.Text & "'"
6. Set mrc = ExecuteSQL(strTxtSQL, strMsgtext)
7. If mrc.EOF Then
8. MsgBox "该用户不存在,请重新输入!", vbOKOnly + vbExclamation, "警告"
9. txtUsername.SetFocus
10. Else
11. If Trim(mrc.Fields(1)) = Trim(txtpassword.Text) Then
12. ok = True
13. mrc.Close
14. Me.Hide
15. Username = Trim(txtUsername.Text) Else
16. MsgBox "密码输入错误,请重新输入", vbOKOnly + vbExclamation, "警告"
17. txtpassword.SetFocus
18. txtpassword.Text = ""
19. End If
20.
21. End If
22.
23. End If
24.
25. micount = micount + 1
26. If micount = 3 Then '用户输入三次后,该窗体隐藏
27. Me.Hide
28.
29. End If
30. Exit Sub
导图部分:
2、MDI窗体
代码部分:
Private Sub about_Click()
frmAbout.Show
End Sub
Private Sub addcinfoMenu_Click()
frmaddclassinfo.Show
End Sub
Private Sub addcourseMenu_Click()
frmaddcourseinfo.Show
End Sub
设置窗体的大小
Private Sub MDIForm_Load() '从注册表中取出上次关闭MDIForm时的大小
Me.Left = GetSetting(App.Title, "settings", "mainleft", 1000) '设置窗体大小
Me.Top = GetSetting(App.Title, "settings", "mainleft", 1000)
Me.Width = GetSetting(App.Title, "settings", "mainwidth", 6500)
Me.Height = GetSetting(App.Title, "settings", "mainheight", 6500)
End Sub
保存设置
Private Sub MDIForm_Unload(Cancel As Integer) '在关闭此窗体时,保存设置(最小化时无需保存,最大化和关闭时需保存)
If Me.WindowState <> vbMinimized Then
SaveSetting App.Title, "settings", "mainleft", Me.Left
SaveSetting App.Title, "settings", "maintop", Me.Top
SaveSetting App.Title, "settings", "mainwidth", Me.Width
SaveSetting App.Title, "settings", "mainheight", Me.Height
End If
End Sub
3、标准模块
标准模块:用来存放公共变量、常量、数据类型和过程,其他的模块可以调用标准模块中的代码,一个工程可有多个标准模块。系统在此模块中定义了一些函数,并包含数据库的连接方式。
4、添加
代码部分:
Private Sub Command1_Click()
Dim mrc As ADODB.Recordset
Dim Msgtext As String
Dim strTxtSQL As String
If Not Testtxt(txtclassno.Text) Then '防止输入框为空
MsgBox "请输入班号!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
If Not Testtxt(txtdirector.Text) Then
MsgBox "请输入班主任姓名", vbOKOnly + vbExclamation, "警告"
Exit Sub
……………………
If Not IsNumeric(Trim(txtclassno.Text)) Then '班号需为数字
MsgBox "请输入数字", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtclassno.SetFocus
End If
strTxtSQL = "select * from class_info" '添加前确保该班号存在
Set mrc = ExecuteSQL(strTxtSQL, Msgtext)
If Not (mrc.EOF And mrc.BOF) Then
mrc.MoveFirst
End If
While (mrc.EOF = False)
If (Trim(mrc.Fields(0)) = Trim(txtclassno.Text)) Then
MsgBox "班号已经存在,请重新输入班号", vbOKOnly + vbExclamation, "警告"
txtclassno.Text = ""
txtclassno.SetFocus
Exit Sub
Else
mrc.MoveNext
End If
Wend
mrc.AddNew '调用此函数来添加一个新的记录到数据表中,必须用update进行更新
mrc.Fields(0) = Trim(txtclassno.Text)
mrc.Fields(1) = Trim(ComboGrade.Text)
mrc.Fields(2) = Trim(txtdirector.Text)
mrc.Fields(3) = Trim(txtclassroom.Text)
mrc.Update
mrc.Close
MsgBox "成功添加班级信息", vbOKOnly + vbExclamation, "添加班级信息"
Unload Me
End Sub
导图部分:
5、修改
代码部分:
Private Sub updatecommand_Click()
Dim strTxtSQL As String
Dim strMsgtext As String
Dim mrcc As ADODB.Recordset
' 确保已经修改某项
If blnMcclean Then
MsgBox "请先修改班级信息!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
If Not Testtxt(txtclassno.Text) Then
MsgBox "请输入班号!", vbOKOnly + vbExclamation, "警告"
txtclassno.SetFocus
Exit Sub
………………
mrc.Delete
strTxtSQL = "select * from class_Info where class_No = '" & Trim(txtclassno.Text) & "'"
Set mrcc = ExecuteSQL(strTxtSQL, strMsgtext)
If mrcc.EOF = False Then
MsgBox "班号重复,请重新输入班号", vbOKOnly + vbExclamation, "警告"
mrcc.Close
txtclassno.SetFocus
Else
mrcc.Close '关闭连接
mrc.AddNew
mrc.Fields(0) = Trim(txtclassno.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 = vntMybookmark
Call viewdata
Frame1.Enabled = True
firstcommand.Enabled = True
previouscommand.Enabled = True
nextcommand.Enabled = True
lastcommand.Enabled = True
txtclassno.Enabled = False
ComboGrade.Enabled = False
txtdirector.Enabled = False
txtclassroom.Enabled = False
blnMcclean = True
End If
End Sub
导图部分:
6、查询
代码部分:
strTxtSQL = "select * from student_info where "
If Check1(0).Value Then
If Trim(txtSID.Text) = "" Then
intSmeg = "请输入学号"
MsgBox intSmeg, vbOKOnly + vbExclamation, "警告"
txtSID.SetFocus
Exit Sub
Else
If Not IsNumeric(Trim(txtSID.Text)) Then
MsgBox "请输入数字", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtSID.SetFocus
End If
dd(0) = True
strTxtSQL = strTxtSQL & "Student_ID='" & Trim(txtSID.Text) & "'"
End If
End If
If Check1(1).Value Then
If Trim(txtname.Text) = "" Then
intSmeg = "姓名不能为空"
MsgBox intSmeg, vbOKOnly + vbExclamation, "警告"
txtname.SetFocus
Exit Sub
Else
dd(1) = True
If dd(0) Then
strTxtSQL = strTxtSQL & "and student_name='" & txtname.Text & "'"
Else
strTxtSQL = strTxtSQL & "student_name= '" & txtname.Text & "'"
End If
End If
End If
If Check1(2).Value Then
If Trim(txtclassno.Text) = "" Then
intSmeg = "课程不能为空"
MsgBox intSmeg, vbOKOnly + vbExclamation, "警告"
txtclassno.SetFocus
Exit Sub
Else
dd(2) = True
If dd(0) Or dd(1) Then
strTxtSQL = strTxtSQL & "and class_no='" & txtclassno.Text & "'"
Else
strTxtSQL = strTxtSQL & "class_no='" & txtclassno.Text & "'"
End If
End If
End If
If Not (dd(0) Or dd(1) Or dd(2) Or dd(3)) Then '防止没有选中查询方式
MsgBox "请设置查询方式", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
strTxtSQL = strTxtSQL & "order by student_ID"
Set mrc = ExecuteSQL(strTxtSQL, strMsgtext)
With myflexgrid
.Rows = 2
.CellAlignment = 4 '对齐方式,居中对齐
.TextMatrix(1, 0) = "学号"
.TextMatrix(1, 1) = "姓名"
.TextMatrix(1, 2) = "性别"
.TextMatrix(1, 3) = "出生日期"
.TextMatrix(1, 4) = "班号"
.TextMatrix(1, 5) = "联系电话"
.TextMatrix(1, 6) = "入校日期"
.TextMatrix(1, 7) = "家庭住址"
Do While Not mrc.EOF '显示数据
.Rows = .Rows + 1 '这种方式也可防止空白行的出现
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = mrc.Fields(0)
.TextMatrix(.Rows - 1, 1) = mrc.Fields(1)
.TextMatrix(.Rows - 1, 2) = mrc.Fields(2)
.TextMatrix(.Rows - 1, 3) = Format(mrc.Fields(3), "yyyy-mm-dd")
.TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
.TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
.TextMatrix(.Rows - 1, 6) = Format(mrc.Fields(6), "yyyy-mm-dd")
.TextMatrix(.Rows - 1, 7) = mrc.Fields(7)
mrc.MoveNext
Loop
End With
mrc.Close
导图部分:
7、设置
代码部分:
'判断是否选择了年级、课程
If Not Testtxt(ComboGrade.Text) Then
MsgBox "请先选择年级", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
If Not Testtxt(listSelectcourse.List(0)) Then
MsgBox "请先选择课程", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
'如果该年级还没有选择课程,先添加
'如果已经添加,先删除再添加
strTxtSQL = "select * from gradecourse_info where grade= '" & Trim(ComboGrade.Text) & "'"
Set mrc = ExecuteSQL(strTxtSQL, strMsgtext)
If mrc.EOF Then '临时表中没记录
For i = 1 To listSelectcourse.ListCount
mrc.AddNew
mrc.Fields(0) = ComboGrade.Text
mrc.Fields(1) = listSelectcourse.List(i - 1)
mrc.Update
Next i
mrc.Close
MsgBox "课程设置成功!", vbOKOnly + vbExclamation, "警告"
Else '如果临时表中有记录,删除,重新加入List中的项。如果只向
'数据库中加入新加的项,不方便。
mrc.Close
strTxtSQL = "delete from gradecourse_Info where grade = '" & Trim(ComboGrade.Text) & "'"
Set mrcc = ExecuteSQL(strTxtSQL, strMsgtext)
strTxtSQL = "select * from gradecourse_Info "
Set mrcc = ExecuteSQL(strTxtSQL, strMsgtext)
For i = 1 To listSelectcourse.ListCount
mrcc.AddNew
mrcc.Fields(0) = ComboGrade.Text
mrcc.Fields(1) = listSelectcourse.List(i - 1)
mrcc.Update
Next i
mrcc.Close
MsgBox "课程设置成功!", vbOKOnly + vbExclamation, "警告"
End if
导图部分:
四、数据库连接
在前面无实例中用到数据库的两种连接方式:有源和无源。起初学生信息管理系统也采用了有源连接,后方便在各种系统和机器上测试,我们选择了另外一种连接方式——远程连接。
方式一、有源连接,先配置,再连接
'以文件DSN标记,访问ODBC数据源
Public FunctionConnectString() As String
'returns a DBConnectString
ConnectString ="FileDSN=student.dsn;UID=sa;PWD=123"
End Function
方式二、远程连接,先设置,再连接
'远程连接数据源
Public Functionconnectionstring() As String
'returns a DB ConnectString
connectionstring ="Provider=SQLOLEDB.1;Persist Security Info=False;UserID=sa;PassWord=123;Initial Catalog='student';Data Source=192.***.**.***"
End Function
五、调试
(1)快捷键的使用
Ctrl+F 查找此函数
Shift+F2 查看当前光标所在的变量或函数、子过程的定义。
F1 从不用—经常使用
(2)设置断点
以前不用—开始接触
六、打包发布
做完系统后才了解,系统必须打包发布才可以在不同的系统和机器上运行(包括未安装VB的)。
.exe和打包发布的程序的区别:.exe不可以在未安装VB的机器上运行
七、总结
通过做学生信息管理系统,了解到怎样去分析一个系统、怎样去做一个系统、如何更好的完善自己的系统、如何处理系统中的错误、如何等。在以后的总结中,我会把做系统时经常出现的错误分类汇总。也许现在我做的系统存在很多不合理的地方,但会不断的去完善它,改进它。