现在的位置: 首页 > 综合 > 正文

沿着别人的足迹,找寻属于我们的那份提高—学生信息管理系统

2013年12月09日 ⁄ 综合 ⁄ 共 8255字 ⁄ 字号 评论关闭

        我的第一个作品—学生信息管理系统,老师虽然已给系统的源代码,但是做完之后我还是蛮有成就感的!一是因为这是我的第一个系统,只有有了这次的探索与尝试,我才会在以后的道路上越走越远,尽管自己对好多知识掌握的不好,但我相信自己会不断提高的;二是我们不是在单纯的做系统,而是把我们要把我们当做用户,去不断地挖掘系统的潜能。我和大家不同,大家在准备作品展时我在准备接本,无形中我就落下了许多,但我相信自己可以尽力缩小我们之间的差距的,并慢慢赶上大家的。下面就来介绍我的学生信息管理系统。

 

一、总体分析

           

       
刚拿到学生信息管理系统时,只是简单的从宏观上了解了一下这个系统,看了一下各个窗体和代码。等到做完了系统才知道当时自己宏观和微观都没有把握好,比如说做这个系统最终要达到一个什么样的效果、各个窗体间的联系、各个功能是怎样实现的等。

      
对我的启示就是做一个系统或软件前,必须从宏观上把控系统的方向和用户的需求,微观上协调好各个窗体、各个模块、各个控件间的联系,保证系统的合理性和条理性。

二、界面设计

 

       学生信息管理系统是由一个登陆窗体、一个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的机器上运行

七、总结

         通过做学生信息管理系统,了解到怎样去分析一个系统、怎样去做一个系统、如何更好的完善自己的系统、如何处理系统中的错误、如何等。在以后的总结中,我会把做系统时经常出现的错误分类汇总。也许现在我做的系统存在很多不合理的地方,但会不断的去完善它,改进它。

【上篇】
【下篇】

抱歉!评论已关闭.