学生系统总结(思路篇)

来源:互联网 发布:excel单元格内换行 mac 编辑:程序博客网 时间:2024/06/06 06:50

 

 

 

引言

我在做学生系统的时候其实很多时候都是晕的,刚开始觉得特别的复杂;但是等我做完的时候发现这里面很多的都是重复的,不光代码重复,思路、窗体间结构都是重复的。一句话总结:其实学生信息系统就是增、删、改、查、删......这样一说是不是简单多了。

 

 结构图


总结

一、建立学生系统主窗体(工程项目(是用来建造应用程序的文件的集合)—创建主窗体(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函数有两个参数:SQLMsgString。其中SQL用来存放需要执行的SQL语句,MsgString用来返回执行的提示信息。函数执行时,首先判断SQL语句中包含的内容:当执行操作时,ExecuteSQL函数将返回一个与函数同名的记录集对象(Recordset),所有满足条件的记录包含在对象中;当执行如删除、更新、添加、等操作时,不放回记录集对象。

 

2ExecuteSQL函数使用了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)有日期的判断的判断日期的格式

      IsDatetxtBorndate.Text   '判断数据是否日期格式

      IsDatetxtRudate.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)

 

四、班级管理模块的建立(添加班级—修改班级);由于班级的管理模块和学籍管理模块差不多,上面已经详细阐述,本处不详细总结

 

五、课程和成绩的管理模块也都类似,重点参照学籍模块。

 

附录:(出现频率高,而且比较重要的)

1Option Explicit是用来规定所有变量使用前必须定义。这样可以避免由于输入的错误而产生的新变量。

 

2MeVB中的一个常用的对象,用来指代当前对象本身。

 

3IsDatetxtBorndate.Text  '判断数据是否日期格式

      IsDatetxtRudate.Text       '判断数据是否日期格式

 

4myBookmark用来记录数据集中当前记录的位置

  mcclean作为一个标志记录是否修改记录

 

5、定义函数viewData可以解决程序中各处需要显示数据的问题

 

6mrc.Delete   '判断是否有重复记录

 

7mrc.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

 

进步

          我其实通过这样的总结发现,自己对学生信息管理系统又有了新的认识,至少没有之前那么晕了。它的结构框架和部分思路渐渐的清晰,当然还是有很多的地方不是很清楚;我相信,只要我不断的总结,它总有一天会被我全部搞清楚的。

 


原创粉丝点击