沿着别人的足迹,找寻属于小弟我们的那份提高—学生信息管理系统
我的第一个作品—学生信息管理系统,老师虽然已给系统的源代码,但是做完之后我还是蛮有成就感的!一是因为这是我的第一个系统,只有有了这次的探索与尝试,我才会在以后的道路上越走越远,尽管自己对好多知识掌握的不好,但我相信自己会不断提高的;二是我们不是在单纯的做系统,而是把我们要把我们当做用户,去不断地挖掘系统的潜能。我和大家不同,大家在准备作品展时我在准备接本,无形中我就落下了许多,但我相信自己可以尽力缩小我们之间的差距的,并慢慢赶上大家的。下面就来介绍我的学生信息管理系统。
一、总体分析
刚拿到学生信息管理系统时,只是简单的从宏观上了解了一下这个系统,看了一下各个窗体和代码。等到做完了系统才知道当时自己宏观和微观都没有把握好,比如说做这个系统最终要达到一个什么样的效果、各个窗体间的联系、各个功能是怎样实现的等。
对我的启示就是做一个系统或软件前,必须从宏观上把控系统的方向和用户的需求,微观上协调好各个窗体、各个模块、各个控件间的联系,保证系统的合理性和条理性。
二、界面设计
学生信息管理系统是由一个登陆窗体、一个MDI窗体(父窗体)、14个子窗体、一个标准模块构成。MDI窗体用来调出14个子窗体,完成学生信息的管理。
三、编写代码
拿着学生信息管理系统的源代码,刚开始还感觉挺简单的。但真正做系统时,才发现自己只是在宏观上理解了一下系统和代码间的关系,而具体到某些模块的代码起到一个什么作用、如果不写会出现什么样的效果、为什么有些代码会反复出现等。随着对系统的一步步深化,才明白这个系统的整体架构、各个模块间的关系、各个代码的用处。下面简单介绍几个典型的窗体:
1、登录窗体
If Trim(txtUsername.Text = "") Then MsgBox "没有这个用户,请重新输入!", vbOKOnly + vbExclamation, "警告" txtUsername.SetFocus Else strTxtSQL = "select * from user_Info where user_ID = '" & txtUsername.Text & "'" Set mrc = ExecuteSQL(strTxtSQL, strMsgtext) If mrc.EOF Then MsgBox "该用户不存在,请重新输入!", vbOKOnly + vbExclamation, "警告" txtUsername.SetFocus Else If Trim(mrc.Fields(1)) = Trim(txtpassword.Text) Then ok = True mrc.Close Me.Hide Username = Trim(txtUsername.Text) Else MsgBox "密码输入错误,请重新输入", vbOKOnly + vbExclamation, "警告" txtpassword.SetFocus txtpassword.Text = "" End If End If End If micount = micount + 1 If micount = 3 Then '用户输入三次后,该窗体隐藏 Me.Hide End If 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、修改
代码部分:
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 Function ConnectString() As String 'returns a DB ConnectString ConnectString = "FileDSN=student.dsn;UID=sa;PWD=123" End Function
方式二、远程连接,先设置,再连接
'远程连接数据源 Public Function connectionstring() As String 'returns a DB ConnectString connectionstring = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PassWord=123;Initial Catalog='student';Data Source=192.***.**.***" End Function
五、调试
(1)快捷键的使用
Ctrl+F 查找此函数
Shift+F2 查看当前光标所在的变量或函数、子过程的定义。
F1 从不用—经常使用
(2)设置断点
以前不用—开始接触
六、打包发布
做完系统后才了解,系统必须打包发布才可以在不同的系统和机器上运行(包括未安装VB的)。
.exe和打包发布的程序的区别:.exe不可以在未安装VB的机器上运行
七、总结
通过做学生信息管理系统,了解到怎样去分析一个系统、怎样去做一个系统、如何更好的完善自己的系统、如何处理系统中的错误、如何等。在以后的总结中,我会把做系统时经常出现的错误分类汇总。也许现在我做的系统存在很多不合理的地方,但会不断的去完善它,改进它。