学生信息管理系统 那些事儿(二)

来源:互联网 发布:中小企业网络方案 编辑:程序博客网 时间:2024/05/06 06:22
       

         学生信息管理系统已经告一段落了,但需要我们体会理解的还很多,师傅说我们现在最重要的不是实现了功能,是学会总结的方法,学会系统包含的设计理念和为人民服务的精神。

         不过,本节先进行一个技术问题总结吧,思想理念方面的敬请关注 《那些事儿(三)  》。

         首先,问题一:总是出现下图提示:

                                           

         已经毫无疑问了,出现该问题的原因是数据库没连接上,而导致数据库没连上又有多种原因的。其中简单分析一下代码方面原因,大概有以下几种情况:1、符号格式错误(中、英文半角和全角),尤其是紧密关联执行数据库语句的引号;2、表名、数据库名写错;3、空格是否应该存在。   由于该系统比较简单,很容易就能解决。

 

         问题二:运行后frmMain不出来或出现次数冲突。

         开始敲的时候,由于有的同学并不是从类模块开始的,或是没好好分析系统结构,把启动窗体想当然地设置为frmLogin,因而就会导致代码工作完成后frmMain出不来。这个系统的启动机制是标准模块下的Sub Main,所以设置一下“工程-工程属性-启动对象”为Sub main就OK啦。

         还有就是有的同学发现主窗体出不来时,就在frmLogin下加了Show方法。这样会导致如下错误:

                                         

         由于frmMain是父窗体,在一个工程里只能存在一个,所以与类模块下Sub Main冲突,解决方法同上。

         

         问题三:关于修改信息

         当我们修改信息时(以修改成绩信息为例),如果删除所有信息后,修改窗体消失。但再次单击修改菜单后,修改窗体还是会弹出来。这是因为单击修改按钮后仍然执行了frmModifyResult.Show的命令,要想使不再弹出或显示添加窗体,则需要在frmMain下的frmModifyResult菜单中添加如下代码:

Private Sub modifyresultMenu_Click()   Dim txtSQL As String       ’定义文本型数据库连接字符串    Dim MsgText As String      ’定义信息提示    Dim mrc As ADODB.Recordset    ’定义ADO的记录集    Dim msgAddRecord  As String           ’定义添加提示信息         txtSQL = "select * from result_Info"         ’执行数据库成绩信息    Set mrc = ExecuteSQL(txtSQL, MsgText)        If mrc.RecordCount = 0 Then             ’如果ADO的记录数为零,此时成绩无记录        msgAddRecord = MsgBox("没有记录,是否添加?", vbOKCancel, "提示")        If msgAddRecord = vbOK Then      ’确定添加            frmAddresult.Show            Exit Sub                                               Else            Exit Sub                                        ’不添加则退出该过程        End If    Else        frmModifyresultInfo.Show      ’修改成绩信息窗体显示    End IfEnd Sub


         其他关于修改的窗体同上。

 

         问题四   年级与班级的添加问题

       在添加班级信息时,我们会发现当初一添加了1班后,初二就不能添加1班了,因为没有年级处理机制。解决办法很简单,只需要把1-n的班号和每个年级绑定,1-n再和初一绑定,1-n再和初二绑定……参考代码(部分):

If Trim(comboGrade.Text) = "初中一年级" Then        While (mrc.EOF = False)            If Trim(mrc.Fields(0)) = Trim(txtClassno.Text) And Trim(mrc.Fields(1)) = "初中一年级" Then                MsgBox "班号已存在,请重新输入!", vbOKOnly + vbExclamation, "警告"                txtClassno.SetFocus                Exit Sub            Else                mrc.MoveNext            End If        Wend    End If


       再重复绑定几个年级就可以了。

       最后,再跟大家啰嗦一下listIndex的问题,问题起源于,在frmSetcourseInfo下单击“年级”组合框后,listAllcourse并不显示课程名,仔细一看,是cmdAdd和cmdDel按钮下的listIndex和listCount写混了。Listindex是list中项的索引值,List1.ListIndex<>-1 前面为>0且<>-1的数,表示“如果前面有选择”;如果没有选择,则前面是-1。

 

            问题五:List 可重复输入问题

            在frmSetCourseinfo窗体中,在选课时会出现多次单击“设置课程”总课程数重复出现,多次单击“选择课程——>”所选课程可重复添加的现象,导致一门课程的多次出现。

            处理这个问题我们需要考虑一下,大家首先先到的是添加一个不重复的命令。不错,可以使用循环进行比较,重复则移除。这个方法对于listSelectCourse很适用,但第一个呢?是不是也有必要这样处理?答案当然是否定的!我们只需要把“设置课程”按钮禁用就可以了!这里需要我们具体问题具体分析,寻求最优化的解决方案。

            下面是使listSelectCourse不重复代码(只介绍循环移除部分):

’listcountSelectCourse1和listcountSelectCourse2代表循环变量For listcountSelectCourse1 = 0 To listSelectcourse.ListCount - 1  '第一次循环,共循环list内总数次        For listcountSelectCourse2=listcountSelectCourse1 + 1 To listSelectcourse.ListCount          '第二次循环,共循环list内总数-1次            If listSelectcourse.List(listcountSelectCourse1) = listSelectcourse.List(listcountSelectCourse2) Then           ‘如果记录相同则移除相同项                 listSelectcourse.RemoveItem     listcountSelectCourse2            '移除                    MsgBox "该课程已选!"                 Exit Sub           '退出            End If        Next   listcountSelectCourse2    Next   listcountSelectCourse1