毕业设计说明书范例(学生学籍管理系统论文)

时间:2024.4.30

长沙职业技术学院

  毕业论文(设计)

【摘   要】

学生学籍管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。

经过分析,我使用 MICROSOFT公司的 VISUAL BASIC开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。

【关键字:】

控件   窗体   域


ABSTRACT

The system of managing student file is a typical application of managing information system (know as MIS),which mainly includes building up data-base of back-end and developing the application interface of front-end. The former required consistency and integrality and security of data. The later should make the application powerful and easily used.

By looking up lots of datum, I selected Visual Basic presented by Microsoft because of its objective tools in Win32. VB offered a series of ActiveX operating a database. It can give you a short cut to build up a prototype of system application. The prototype could be modified and developed till users are satisfied with it.

Keywords:

ActiveX   Form   Field  

目   录

1、前言  ……………………………………………………………………………6

2、 系统概述 ………………………………………………………………7

1.1 开发背景………………………………………………………………………7

1.2 学籍管理系统概述……………………………………………………………7

1.3 开发环境及开发工具介绍……………………………………………………7

1.3.1开发环境 ………………………………………………………………8

1.3.2 开发工具…………………………………………………………9

3、 设计总体规划…………………………………………………………11

2.1 数据库设计…………………………………………………………………11

2.2 设计流程图…………………………………………………………………11

2.3设计功能分析………………………………………………………………13

4、 设计具体实现  ………………………………………………………14

3.1 准备工作 ……………………………………………………………………15

3.2 模块设计 ……………………………………………………………………17

3.3 用户界面的实现 ……………………………………………………………18

3.3.1 登陆界面(frmlogin)………………………………………………… 19

3.3.2 MDI主窗体(frmmain)………………………………………………20

3.3.3 用户管理窗体(frmmanage)…………………………………………18

3.3.4 修改密码窗体(frmchgPWD)…………………………………………24

3.3.5 浏览学生信息窗体(frmstu)…………………………………………36

3.3.6添加/修改学生信息窗体(frmAddstu)………………………………37

3.3.7学生学籍管理模块 …………………………………………………………38

3.3.8 报表功能模块…………………………………………………………39

主要参考文献……………………………………………………………………43

1、前  言

学生学籍管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生学籍管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件学籍,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对学生学籍信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生学籍管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。

因此,开发这样一套管理软件成为很有必要的事情,在下面的各章中将以开发一套学生学籍管理系统为例,谈谈其开发过程和所涉及到的问题及解决方法。


2系统概述

2.1 开发背景

2.1.1 当前趋势

该学籍管理系统采用多层架构的系统,是真正适应教育信息化发展三大趋势的校园网络应用系统,全面支持Internet功能、远程访问功能,全部采用最先进的B/S(浏览器/服务器) 模式来开发,基本目标是在学校内部和外部建立起顺畅的信息通道,提高学校的管理水平和效率,以便克服了目前大部分学校的校园网建设只起到宣传作用的通病。

2.1.2  用计算机管理学生学籍的意义

现在我国的中小学校中学籍的管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。

作为一个计算机应用的本科生,希望可以在这方面有所贡献。改革的总设计师邓小平同志说过“科学技术是第一生产力”,我希望能用我多年的所学编制出一个实用的程序来帮助中小学进行更有效的学籍管理。

归纳起来,好处大约有以下几点:

1.可以存储历届的学生学籍,安全、高效;

2.只需一到二名学籍录入员即可操作系统,节省大量人力;

3.可以迅速查到所需信息。

2.2 学籍管理系统概述

2.2.1 开展该系统的原因

由于现今的学籍管理非常繁琐,行政人员付出大量的工作时间,得到的效率很低。因此为提高工作效率,减轻校方人员的工作负担,决定开发学籍管理系统软件。
2.2.2 该工程的基本目标

开发此学籍管理系统软件,以供教学人员及操作者进行学籍管理,方便操作者随时添加、查询、修改等。为了我们提高软件开发的能力,学习汉语编程的技巧,提高工作设计思想,通过本次的工程开发,开发小组成员与辅助老师,公司的技师交流,能从中学习知识吸取经验,再技术和软件思想上同时得到锻炼和提高,从而使总体水升到一个新的高度。

2.3 开发环境以及开发工具介绍

该软件是在Windows xp + Visual Basic 6.0 + SQL Server 2000的环境下完成的。下面就对这些开发工具进行介绍:

3 设计整体规划

3.1数据库的设计

在系统设计过程中,首先要建立的就是数据库。本数据库采用SQL Server 2000来构造,共使用了7个表,它们分别是用户信息表(UserInfo)、学生信息表(StuInfo)、班级信息表(Class)、专业信息表(Major)、学院信息表(Depart)、课程信息表(Lesson)、学生成绩表(Result)。

1.用户信息表(UserInfo):

2.学生信息表(StuInfo):

3.班级信息表(Class):

4.专业信息表(Major):

5.学院信息表(Depart):

6.课程信息表(Lesson):

7.学生成绩表(Result):

3.2设计流程图

 

                                                 

 

                            

                                                        

图2.1 系统流程图

3.3 设计功能分析
系统开发的目标是实现学生学籍管理的系统化、规范化和自动化,这是在

用户要求的基础上提出来的,功能要求如下:

(一)学生信息管理:能对学生信息进行添加、修改、删除。

(二)课程管理:对课程进行添加、修改、删除操作。

(三)专业/学院设置:

(三)考试成绩管理:

(四)查询学生信息:根据学号或姓名对学生信息进行精确/模糊查询

(五)用户管理:定义使用本系统的用户名称及密码

4 设计具体实现

经过需求分析、功能模块设计之后要进入详细设计阶段,本阶段将按系统的主要模块进行论述,重在阐述具体的某项功能的实现方法或运用到的相关技术。

4.1 准备工作

1.添加引用:单击工程菜单中的引用选项,添加Microsoft ActiveX Data Objects 2.6 Library和Microsoft Excel 9.0 Object Library两个引用。

2. 添加部件:单击工程菜单中的部件选项,添加Microsoft ADO Data Control 6.0(OLEDB)、Microsoft Common Dialog Control 6.0(SP3) 、Microsoft FlexGrid Control 6.0、Microsoft Windows Common Controls 6.0(SP4)和Microsoft Windows Common Controls-2 6.0五项。

4.2 设计步骤

4.2.1 登陆界面(frmlogin)

因为本系统是按学籍管理的思想设计的,故而登陆部分主要完成密码校验、确定管理员等功能,对于密码本系统采用的是MD5算法。这里附上本程序的登陆界面,见图3.1。

图3.1 用户登陆界面

在代码窗口的“通用”部分,定义一个模块级的公共变量loginno用来记录当前密码输入错误的次数

Dim loginno As Integer

在Form的Load事件中,将txtuser设置为焦点,初始化loginno。

Private Sub Form_Load()

   loginno = 0

   Me.Show

   txtuser.SetFocus

End Sub

这里将“确定”和“取消”两个按钮作为一个按钮数组cmdOkCancel:确定按钮的index属性为0,取消按钮的index属性为1。

利用SQL语句,在数据库中查询,如果查到相应的记录,则调用Case 0事件,用户的登陆获得通过,此时可以退出登陆窗口,并进入MDI主窗口,同时将用户类型和用户名分别传递到MDI主窗口和frmmanage中;如果没有相应的记录,则给出提示错误信息,同时将用户输入错误密码次数增加1,如果错误超过3次,则退出整个系统;若次数还没有超过3次,则提示用户重新输入。

根据以上的设计,cmdOkCancel的Click事件的代码如下:

Private Sub cmdOkCancel_Click(Index As Integer)

   Select Case Index

      Case 0

        ……

        Userid = Trim(txtuser.Text)

        Userpwd = MD5(Trim(txtPassword.Text))

   

        sqlstr = "select * from UserInfo where UserID='" & Userid & "'"

        rs.Open sqlstr, con, 1, 1

   

    If Not rs.EOF Then

        If rs("UserPWD") <> Userpwd Then

           '密码错误时

            MsgBox "您输入的密码不正确!", vbQuestion

            Me.Caption = "请输入用户名和密码:"

            loginno = loginno + 1

           

            '当错误的密码次数达到3次时,不能登陆,退出!

            If loginno = 3 Then

      MsgBox "对不起,您不能使用该系统!请与管理员联系。", vbInformation

                Unload Me

                Exit Sub

            End If

            ……

         Else

           LoginUser = Userid       '保存当前登陆用户名

           LoginPower = rs.Fields(3)

 '将当前登陆用户的权限保存到LoginPower中

           Unload Me

           frmflash.Show

         End If

    Else

        MsgBox "没有您输入的用户名!", 32

        ……

    End If

    rs.Close: Set rs = Nothing

     Case 1

        ‘退出整个程序

        Unload Me

   End Select

End Sub

4.2.2 MDI主窗口(frmmain)

本系统采取多文档界面(MultiDocument Interface)。多文档界面是一种Windows用户界面标准。它有一个父窗口,在典型情况下,父窗口用来显示程序菜单以及包含子窗口。

在工程中添加一个MDI窗口,取名为“frmmain.frm”,并为MDI窗体进行菜单和代码的设计,其运行界面如图3.2:

图3.2 主界面

4.2.2.1 菜单设计

MDI主窗体是整个系统的容器,为了方便用户的使用,应设计相应的菜单和代码。

4.2.2.2 窗体代码设计

1.在代码窗口的通用部分,声明一个API函数用于打开帮助文件和调用Outlook发送邮件。

Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)

2.判断用户权限

如果登陆的为普通用户类型的用户,则用户不能使用“用户管理”这一功能,而对于管理员类型的用户,则没有此限制。所以在MDIForm的Load事件中需要判断用户类型。

Private Sub MDIForm_Load()

   StatusBar.Panels(2).Text = "当前操作员:" & LoginUser & "    " & LoginPower & ""

   If LoginPower = "普通用户" Then

      filemenu11.Enabled = False

      Toolbar1.Buttons.Item(5).Enabled = False

   End If

End Sub

3.Form的QueryUnload事件

当用户要退出MDI窗体时,需要在 QueryUnload事件中询问用户是否真的要退出本系统;如果用户不要退出,则将Cancel置为1,取消整个退出过程。

Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)

  If MsgBox("确定要退出学生档案管理系统吗?是/否",

vbYesNo+vbQuestion+ vbDefaultButton1) = vbNo Then

     Cancel = 1

  End If

End Sub

QueryUnload和Unload事件

当一个子窗体或一个Form对象关闭时,在那个窗体中的QueryUnload事件先于该窗体的Unload事件发生,Unload事件在Terminate事件之前发生。

当一个应用程序关闭时,可使用QueryUnload或Unload事件过程将Cancel属性设置为True来阻止关闭过程。但是,QueryUnload事件是在任一个卸载之前在所有窗体中发生,而Unload是在每个窗体卸载时发生。

在这两个事件中,均可将Cancel设置为任何非零的值来防止窗体被删除。但Unload不能阻止其他事件,诸如从Microsoft Windows操作环境中退出等;而QueryUnload事件则可以阻止从Windows中的退出。有介于此,通常来说都是在QueryUnload中询问用户是否要退出当前窗体。

4.“重新登陆”子菜单的代码

当单击了“重新登陆”或者按下了“F2”键时,将会给出提示,如果用户在提示框中按下了“确定”按钮,则退出整个MDI主窗体,并显示登陆窗体。

Private Sub filemenu15_Click()

If MsgBox("若重新登陆,所有窗体都将关闭!是否重新登陆?", vbYesNo + vbQuestion,   "重新登陆") = vbYes Then

      Unload Me
      Frmlogin.Show

   End If

End Sub

5.“帮助主题”子菜单的代码

调用Windows API函数,打开help.chm帮助文件。

Private Sub filemenu21_Click()

   ShellExecute 0, "open", App.Path & "\help.chm", "", "", 1

End Sub

6.“给我发邮件”子菜单的代码

如果用户单击了“给我发邮件”子菜单,则会调用API函数,调用Outlook。

Private Sub filemenu22_Click()

   ShellExecute Me.hwnd, "open", "mailto:datou158@etang.com", "", App.Path, 1

End Sub

7.当用户单击查询学生资料菜单项或者按下F3键时,将会出现“查找学生”窗体,供用户查找满足特定要求的学生信息。

Private Sub filemenu45_Click()

   '查找学生

   frmstusearch.Show 1

End Sub

3.3.3 用户管理窗体(frmmanage)

向项目中添加窗体,并命名为frmmanage.frm。窗体的控件设计如图3.3所示

 

图3.3 用户管理界面

如果登陆的用户类型是管理员,用户管理一项是可用的,当单击该子菜单时,将会出现用户管理窗口,管理员可以对系统用户进行添加和删除操作。

3.3.3.1 窗体代码设计

1.定义一个整型变量DelNO用来存储当前系统用户的数目,当DelNO<=1时提示用户不能再删除用户。在该窗体的通用部分写如下代码:

    Dim DelNO As Integer

2.窗体加载时,初始化Listview用以显示系统用户列表,代码如下

Private Sub Form_Load()

'初始化ListView

Dim clmX As ColumnHeader

Set clmX = ListView.ColumnHeaders.Add(, , "用户名", ListView.Width / 3)

Set clmX = ListView.ColumnHeaders.Add(, , "密码", ListView.Width / 6, 2)

Set clmX = ListView.ColumnHeaders.Add(, , "姓名", ListView.Width / 4, 2)

Set clmX = ListView.ColumnHeaders.Add(, , "用户权限", ListView.Width / 4, 2)

Combo1.Clear

Combo1.AddItem "普通用户"

Combo1.AddItem "超级用户"

Combo1.ListIndex = 0

LoadOperator

End Sub

其中调用了LoadOperator函数,该函数用来显示和刷新Listview中的数据

Private Sub LoadOperator()

 On Error Resume Next

Dim Listit As ListItem

ListView.ListItems.Clear

ListView.LabelEdit = lvwAuto

ListView.View = 3

Dim ef As New ADODB.Recordset

sqlstr = "select * from UserInfo"

ef.Open sqlstr, con, 1, 1

DelNO = ef.RecordCount

    Do While Not ef.EOF

       Set Listit = ListView.ListItems.Add(, , ef.Fields("UserID"))

           Listit.SubItems(1) = "***" 

           隐藏用户的密码,用***来替代。

           Listit.SubItems(2) = ef("UserName")

           Listit.SubItems(3) = ef("UserPower")

        ef.MoveNext

    Loop

Set ef = Nothing

End Sub

3.添加用户

在Textbox中输入了相应的数据以后,按添加按钮则调用该按钮的Click事件,代码如下

当单击“添加”按钮时,首先检查输入的用户名和密码是否为空,代码如下:

Private Sub Command4_Click()

  If Trim(Text1.Text) = "" Then

      MsgBox "登陆用户名不允许为空!", vbOKOnly + 48, "提示:"

      Text1.SetFocus

      Exit Sub

End If

If InStr(1, Trim(Text1.Text), "'", vbTextCompare) Then

      MsgBox "用户姓名中有特殊字符" + "<'>,请删除。", vbOKOnly + 48, "提示:"

      Text1.SetFocus

      Exit Sub

End If

If Trim(Text2.Text) = "" Then

    MsgBox "密码不能为空,请输入密码!", vbOKOnly + 48, "提示:"

    Text2.Text = ""

    Text3.Text = ""

    Text2.SetFocus

    Exit Sub

End If

End Sub

如果不为空,则检查用户名是否有重复,需要打开系统信息表,

Private Sub Command4_Click()

……

    sqlstr = "select * from UserInfo where UserID='" & Text1.Text & "'"

rs.Open sqlstr, con, 1, 1

 End Sub

如果当前记录不为空,则逐条记录检查是否有重复

Private Sub Command4_Click()

……

Userid = Trim(Text1.Text)

Userpwd = MD5(Trim(Text2.Text))

Username = Trim(Text4.Text)

Userpower = Trim(Combo1.Text)

DelNO = rs.RecordCount

Do While Not rs.EOF

      ……

      rs.MoveNext

Loop

  ……

End Sub

如果有重复,则提示已存在这个用户,然后将焦点设置给Text1,并将所有的文本框清空。

Private Sub Command4_Click()

……

 Do While Not rs.EOF

      If Text1.Text = rs.Fields("UserID") Then

        MsgBox "已经存在用户名为 " & Userid & " 的用户帐号", vbInformation

        Text1.SetFocus

        Exit Sub

      End If

      rs.MoveNext

Loop

rs.Close: Set rs = Nothing

End Sub

如果没有重复,再检查两次输入的密码是否一致,如果不一致,则提示“两次密码不一致”。

Private Sub Command4_Click()

……

If Trim(Text3.Text) <> Trim(Text2.Text) Then

       MsgBox "两次密码不相同,请重输入!", vbOKOnly + 48, "提示:"

       Text2.Text = ""

       Text3.Text = ""

       Text2.SetFocus

       Exit Sub

End If

End Sub

如果以上全部正确无误的设置好了,则将新用户的信息添加到数据表中,并提示“添加新用户成功”。

Private Sub Command4_Click()

sqlstr = "insert into UserInfo(UserID,UserPWD,UserName,UserPower) "

sqlstr = sqlstr & "values('" & Userid & "','" & Userpwd & "', "

sqlstr = sqlstr & "'" & Username & "','" &Userpower & "')"

con.Execute sqlstr

    MsgBox "添加用户" & Text1.Text & "成功", vbOKOnly, "添加系统用户"

    Text1.Text = ""

    Text2.Text = ""

    Text3.Text = ""

    Text4.Text = ""

    '更新列表

    LoadOperator

End Sub

4.删除系统用户

当用户双击ListView中的数据时,则会调用DeleteRecord()函数,如果系统用户只剩一个,则提示用户不能再删除;反之要求输入您想要删除的用户的密码,密码正确时才可以将该用户删除,密码错误时则不采取任何措施;最后调用LoadOperator显示并刷新Listview中的数据。根据以上的设计,DeleteRecord()的代码如下:

Private Sub DeleteRecord()

'删除用户操作

On Error Resume Next

If ListView.SelectedItem.Selected Then

    If DelNO <= 1 Then

        MsgBox "只剩下一个用户帐号,不允许再删除!", vbInformation

    ElseIf MsgBox("确定要删除用户名为"& ListView.SelectedItem.Text & "的用户帐号吗?", vbYesNo + 32 + vbDefaultButton2) = vbYes Then

         sqlstr = "select * from UserInfo where UserID='" & ListView.SelectedItem.Text & "'"

         rs.Open sqlstr, con, 1, 1

           

         If MD5(InputBox("请输入该用户的密码:")) = rs.Fields("UserPWD") Then

           sqlstr = "delete from UserInfo where UserID='" & ListView.SelectedItem.Text & "'"

               con.Execute sqlstr

            Else

               MsgBox "对不起!您输入的密码不正确,删除该用户失败!", vbInformation

            End If

            LoadOperator

    End If

End If

rs.Close: Set rs = Nothing

End Sub

5.菜单设计

在Listview中单击鼠标右键会调用ListView的MouseUp事件,出现右键菜单menuOpertor,

具体实现如下:

Private Sub ListView_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)

If Button = 2 Then

      PopupMenu menuOperator

End If

End Sub

实现该右键菜单各项功能的代码如下:

Private Sub menuAdd_Click()

   '添加用户

   Text1.SetFocus

End Sub

Private Sub menuDel_Click()

   '删除用户

   DeleteRecord

End Sub

3.3.4 修改密码窗体(frmchgPWD)

当用户要更改密码时,单击“系统选项/修改个人密码”菜单,弹出如图3.4所示窗体。在MDI主窗体编辑窗口中,单击“系统选项/修改个人密码”,添加如下代码:

Private Sub filemenu12_Click()

   '修改密码界面

   Frmchgpwd.Show 1

End Sub

图3.4 修改用户密码

当用户输入完毕时,单击“确定”按钮,引发Click事件。这时,先检查两次输入的密码是否一致,如果不一致,则提示用户,将焦点设置到第二个Text2控件,后面两个文本框清空,代码如下:

Private Sub Command1_Click()

  Dim Oldpwd As String, pwd As String, confirmpwd As String

Oldpwd = Trim(Text1.Text)

pwd = Trim(Text2.Text)

confirmpwd = Trim(Text3.Text)

……

If Trim(pwd) <> Trim(confirmpwd) Then

     MsgBox "两次输入的密码不相同!", vbInformation

     Text2.Text = ""

     Text3.Text = ""

     Text2.SetFocus

     Exit Sub

End If

End Sub

如果密码一致,则判断输入的原密码是否正确,如果正确则将新密码写入数据库,这时需要一个字符串变量表达SQL语句,一个Recordset对象变量打开系统信息数据表。然后打开数据库,并将新密码写入,提示用户密码修改成功。

Private Sub Command1_Click()

……

sqlstr = "select UserPWD from UserInfo where UserID='" & LoginUser & "'"

rs.Open sqlstr, con, 1, 1

If Not rs.EOF Then

  If rs("UserPWD") <> Oldpwd Then

      MsgBox "你输入的原密码不对!", vbInformation

      Text1.Text = ""

      Text2.Text = ""

      Text3.Text = ""

      Text1.SetFocus

      Exit Sub

  Else

   sqlstr = "update UserInfo set UserPWD='" & pwd & "' where UserID='" & LoginUser & "'"

      con.Execute sqlstr

      MsgBox "您的密码更新成功,请牢记你的密码!", vbInformation

      Unload Me

   End If

Else

    MsgBox "异常错误!", vbInformation

End If

rs.Close: Set rs = Nothing

End Sub

修改完毕后,单击“取消”退出此窗体。

Private Sub Command2_Click()

     Unload Me

End Sub

3.3.5 浏览学生信息窗体(frmstu)

在工程中添加一个窗体,命名为frmstu.frm,这里将使用frmstu窗体,来实现浏览学生信息的功能,该界面运行时如图3.5所示

图3.5 浏览学生信息窗体

在该窗体中,用户可以查看/修改学生的信息,还可以添加/删除学生信息,所以用一个Treeview和一个Listview分别显示班级列表和该班级下面的学生列表,用Image和PictureBox来调整控件的大小。具体设置如表3.1所示

表3.1 FrmStu中部分控件的属性

当窗体启动时,需要在Treeview中加载班级列表,并初始化Listview中的标题。

Private Sub Form_Load()

  Call TreeviewLoad

  Dim clmX As ColumnHeader

  Set clmX = ListView.ColumnHeaders.Add(, , "学 号", ListView.Width / 7)

  ……

End Sub

在Form_Load事件中调用了TreeviewLoad函数,由于篇幅省略该函数的代码,具体实现见源程序。

当窗体大小发生变化时,调用Form_Resize,调整Frmstu中控件的大小。

Private Sub Form_Resize()

If WindowState <> 1 Then

    If Me.Height < 3000 Then Me.Height = 3000

    If Me.Width < 3000 Then Me.Width = 3000

    SizeControls imgSplit.Left

End If

ListView.Width = Me.Width

ListView.ListItems(0).Width = 5000

End Sub

Sub SizeControls(X As Single)

    On Error Resume Next

    '设置 Width 属性

    If X < 1500 Then X = 1500

    If X > (Me.Width - 1500) Then X = Me.Width - 1500

    TreeView.Width = X

    imgSplit.Left = X

    ListView.Left = X + 50

    ListView.Width = Me.Width - (TreeView.Width + 100)

   

    TreeView.Height = Me.ScaleHeight - 50

    ListView.Top = TreeView.Top

    ListView.Height = TreeView.Height

    imgSplit.Top = TreeView.Top

    imgSplit.Height = TreeView.Height

End Sub

单击Treeview中的班级号码则调用TreeView_NodeClick事件和ListviewLoad事件在Listview中显示该班级下面学生的信息列表。

Private Sub TreeView_NodeClick(ByVal Node As MSComctlLib.Node)

'正在导入数据,提示用户等待

  Me.MousePointer = 11

If Node.Tag = "classid" Then

    '开始在ListView中显示数据

    classid = Left(Node.Text, 6)

    Call ListviewLoad(classid)

ElseIf Node.Key = "S" Then

    Call SqlListview(SqlSearch)

Else

    ListView.ListItems.Clear

End If

End Sub

Public Sub ListviewLoad(ByVal classid As String)

Dim Listit As ListItem

ListView.ListItems.Clear

ListView.LabelEdit = lvwManual

ListView.View = 3

Dim ef As New ADODB.Recordset

classid = Left(classid, 6)

sqlstr = "select * from StuInfo where SID like '" & classid & "__' order by SID"

ef.Open sqlstr, con, 1, 1

    Do While Not ef.EOF

       Set Listit = ListView.ListItems.Add(, , ef.Fields("SID"))

           Listit.SubItems(1) = ef.Fields("SName")

           Listit.SubItems(2) = ef.Fields("SGender")

           Listit.SubItems(3) = ef.Fields("SMinzu")

           Listit.SubItems(4) = ef.Fields("SZhengzhi")

           Listit.SubItems(5) = ef.Fields("SDormitory")

           Listit.SubItems(6) = ef.Fields("SAddress")

       ef.MoveNext

    Loop

ef.Close: Set ef = Nothing

ListView.SetFocus

End Sub

在显示该班级下面所有学生信息的同时,用户可以对记录进行管理:添加新记录、编辑或者删除当前记录,为此在Listview中创建右键菜单,用来对记录进行操作。

在本系统中,在系统默认情况下,班级编号作为学号的前面六位。为了体现这一关系,需要将班级编号赋给显示学号的文本框。

“添加”子菜单的Click事件的设计思路:

用户单击“添加”子菜单时,调用frmmain中的“添加学生信息”子菜单显示FrmAddStu窗体,同时将Command1的Caption属性设置为“确定(&O)”。

Private Sub pop3_Click()

   '添加学生资料

   Call Frmstu.AddStu

End Sub

Public Sub AddStu()

Call FrmAddStu.LoadStu("00000000")

End Sub

修改学生资料的Click事件的设计思路和添加学生资料的设计思路类似,但是由于只是对记录进行修改,不需要调用AddNew操作,只要对数据进行Update操作即可。

Private Sub pop4_Click()

    '修改学生资料

    Call Frmstu.ModifyStu

End Sub

Public Sub ModifyStu()

'显示窗口

Dim EditNum As String

If ListView.SelectedItem.Selected Then

    EditNum = CStr(ListView.SelectedItem.Text)

    Call FrmAddStu.LoadStu(EditNum)

Else

    Exit Sub

End If

End Sub

删除学生资料的设计思路:

在删除记录之前弹出询问框,确认用户是否真的要删除当前记录,如果用户选择了“是”,则删除该条记录,否则就不执行任何操作。

在删除记录过程中,使用学生的学号作为关键字,调用Execute方法来删除当前记录。

在删除了当前记录以后,需要重新移动当前记录;由于改变了当前记录集的内容,所以需要调用ListviewLoad子过程来刷新Listview中的内容。

Private Sub pop5_Click()

    '删除学生资料

    Call Frmstu.DelStu

End Sub

Public Sub DelStu()

If ListView.SelectedItem.Selected Then

    If MsgBox("确定要删除学号为 " & ListView.SelectedItem.Text & "的全部资料吗!", vbYesNo + 32 + vbDefaultButton2) = vbYes Then

        sqlstr = "delete from StuInfo where SID='" & ListView.SelectedItem.Text & "'"

        con.Execute sqlstr

        Call ListviewLoad(classid)

    End If

End If

End Sub

学生信息包括了学号、姓名、出生日期、性别、家庭住址、联系电话等内容。在Listview中列出了各学籍信息的学号和姓名以供用户进行导航,但是在实际管理中,还需要显示出某一条学生信息的详细列表。为此,设计详细信息框,来罗列用户的各种详细信息。当用户单击“显示该生详细资料”子菜单时,显示frmstuinfo窗体(图3.6),并以学生学号为关键字,将该学生的全部资料赋值给frmstuinfo中的对应文本框。

图3.6 学生详细信息

Private Sub pop1_Click()

   '显示详细资料

   Call Frmstu.ListView_DblClick

End Sub

Public Sub ListView_DblClick()

On Error Resume Next

If ListView.SelectedItem.Selected Then

    SelectNum = ListView.SelectedItem.Text

    If SelectNum <> "" Then

       '显示出该生全部信息表单

        Call frmstuinfo.LoadStuInfo(SelectNum)

    Else

        Exit Sub

    End If

End If

End Sub

在frmstuinfo的代码窗口中添入以下代码用来显示该学生的详细资料。

Public Sub LoadStuInfo(StuNum As String)

sqlstr = "select * from StuInfo where SID='" & StuNum & "'"

rs.Open sqlstr, con, 1, 1

    StuInfo(0).Caption = rs.Fields("SID")

    StuInfo(1).Caption = rs.Fields("SName")

    StuInfo(2).Caption = rs.Fields("SGender")

    StuInfo(3).Caption = rs.Fields("SZhengzhi")

    StuInfo(4).Caption = rs.Fields("SPlace")

    StuInfo(5).Caption = rs.Fields("SMinzu")

    StuInfo(6).Caption = rs.Fields("SBirthday")

    StuInfo(7).Caption = rs.Fields("SDormitory")

    StuInfo(8).Caption = rs.Fields("SAddress")

    StuInfo(9).Caption = rs.Fields("SCode")

    StuInfo(10).Caption = rs.Fields("STel")

    StuInfo(11).Caption = rs.Fields("SRemark")

rs.Close: Set rs = Nothing

Me.Show 1

End Sub

3.3.6 添加/修改学生信息窗体(frmAddstu)

该窗体运行时界面如图3.7所示

图3.7 添加/修改学生信息界面

当窗体加载时,首先判断是修改学生资料还是添加新的学生资料,如果学号为“00000000”,则为添加新的学生资料,反之则为修改学生资料。如果为修改资料,则以学生的学号为关键字将该学生的信息加载到该窗体的对应文本框,同时将该学号框(EditStu(0))的Enable属性设置为False。如果为添加新的学生资料,则将学号的前6位置为该班级的ID,并将学号输入框的SelStart属性设为6。根据以上设计,在Form_Load中添加如下代码:

Private Sub Form_Load()

'确定添加或者修改,保存数据

Combo1.Clear

Combo1.AddItem "男"

Combo1.AddItem "女"

Combo1.ListIndex = 0

Combo2.Clear

Combo2.AddItem ""

Combo2.AddItem "团员"

Combo2.AddItem "党员"

Combo2.AddItem "预备党员"

Combo2.ListIndex = 1

Combo3.Clear

Combo3.AddItem "汉族"

Combo3.AddItem "瑶族"

Combo3.AddItem "土家族"

Combo3.AddItem "侗族"

Combo3.AddItem "白族"

Combo3.AddItem "苗族"

Combo3.AddItem "回族"

Combo3.AddItem "壮族"

Combo3.ListIndex = 0

If EditNum = "00000000" Then

    Me.Caption = "添加学生资料(班级:" & classid & ")"

    Command1.Caption = "添加(&A)"

    EditStu(0).Text = classid

    EditStu(0).SelStart = 6

Else

    Me.Caption = "修改学号为" & EditNum & "的学生资料"

    EditStu(0).Enabled = False

    Command1.Caption = "修改(&M)"

    Dim rs As New ADODB.Recordset, sqlstr As String

    

    sqlstr = "select * from StuInfo where SID='" & EditNum & "'"

    rs.Open sqlstr, con

    '把数据代入文本框中

   

    EditStu(0).Text = rs.Fields("SID")

    EditStu(1).Text = rs.Fields("SName")

    EditStu(2).Text = rs.Fields("SBirthday")

    EditStu(3).Text = rs.Fields("SPlace")

    EditStu(4).Text = rs.Fields("SAddress")

    EditStu(5).Text = rs.Fields("SCode")

    EditStu(6).Text = rs.Fields("STel")

    EditStu(7).Text = rs.Fields("SDormitory")

    EditStu(8).Text = rs.Fields("SRemark")

   

         

    If rs.Fields("SGender") = "男" Then

        Combo1.ListIndex = 0

    ElseIf rs.Fields("SGender") = "女" Then

        Combo1.ListIndex = 1

    End If

   

    If rs.Fields("SZhengzhi") = "" Then

        Combo2.ListIndex = 0

    ElseIf rs.Fields("SZhengzhi") = "团员" Then

        Combo2.ListIndex = 1

    ElseIf rs.Fields("SZhengzhi") = "党员" Then

        Combo2.ListIndex = 2

    ElseIf rs.Fields("SZhengzhi") = "预备党员" Then

        Combo2.ListIndex = 3

    End If

   

    Select Case rs.Fields("SMinzu")

    Case "汉族": Combo3.ListIndex = 0

    Case "瑶族": Combo3.ListIndex = 1

    Case "土家族": Combo3.ListIndex = 2

    Case "侗族": Combo3.ListIndex = 3

    Case "白族": Combo3.ListIndex = 4

    Case "苗族": Combo3.ListIndex = 5

    Case "回族": Combo3.ListIndex = 6

    Case "壮族": Combo3.ListIndex = 7

    End Select

   

    rs.Close: Set rs = Nothing

End If

End Sub

当用户按下Command1按钮时,触发该按钮的Click事件。首先判断用户输入的信息是否符合要求,

……

If Trim(EditStu(0).Text) = "" Or Val(Trim(EditStu(0).Text)) > 99999999

Or Val(Trim(EditStu(0).Text)) <= 0 Or Len(EditStu(0)) <> 8 Then

     MsgBox "学号输入有错误!请重新输入学号(xxxxxxxx)!", vbInformation

    EditStu(0).SetFocus

    Exit Sub

End If

If Trim(EditStu(1).Text) = "" Then

    MsgBox "必须输入学生的姓名!", vbInformation

    EditStu(1).Text = ""

    EditStu(1).SetFocus

    Exit Sub

End If

If IsDate(EditStu(2).Text) = False Then

   MsgBox "请按照(YYYY-MM-DD)的格式输入出生年月!", vbOKOnly + vbExclamation, "警告"

   EditStu(2).SelLength = Len(EditStu(2).Text)

   EditStu(2).SetFocus

   Exit Sub

End If

Dim i As Integer

For i = 0 To 8

    If InStr(1, EditStu(i).Text, "'", 1) Then

        MsgBox "添加的资料有非法字符(不允许输入'号)!", vbInformation

        Exit Sub

        EditStu(i).SetFocus

    End If

Next

检测数据完毕后,就开始对输入的数据进行操作,如果是添加新资料则判断是否存在该学生的资料,如果该学生信息已经存在则提醒用户该学生资料已经存在,反之则将该学生的资料添加到数据库中;如果是修改学生资料则在数据库中以学号为关键字搜索该学生的资料,然后将该学生的资料更新。

……

错误!未找到图形项目表。If EditStu(0).Enabled Then

    '添加资料

    sqlstr = "select * from StuInfo where SID='" & EditStu(0).Text & "'"

    rs.Open sqlstr, con, 1, 1

    If Not rs.EOF Then

     MsgBox "已经存在学号为" & EditStu(0).Text & "的学生资料,请重新输入!", vbInformation

        EditStu(0).SetFocus

        Exit Sub

    End If

    rs.Close: Set rs = Nothing

    sqlstr="insert into

StuInfo(SID,SName,SGender,SPlace,SBirthday,SMinzu,SZhengzhi,SDormitory,SAddress,SCode,STel,SRemark)"

    sqlstr = sqlstr & "values('" & EditStu(0).Text & "','" & EditStu(1).Text & "','" & Combo1.Text & "',"

    sqlstr = sqlstr & "'" & EditStu(3).Text & "','" & EditStu(2).Text & "','" & Combo3.Text & "','" & Combo2.Text & "','" & EditStu(7).Text & "',"

    sqlstr = sqlstr & "'" & EditStu(4).Text & "','" & EditStu(5).Text & "','" & EditStu(6).Text & "','" & EditStu(8).Text & "')"

Else

  ' '修改资料

   sqlstr = "update StuInfo set SName='" & EditStu(1).Text & "',SBirthday='" & EditStu(2).Text & "',SGender='" & Combo1.Text & "',"

   sqlstr = sqlstr & "SPlace='" & EditStu(3).Text & "',SMinzu='" & Combo3.Text & "',SZhengzhi='" & Combo2.Text & "',SAddress='" & EditStu(4).Text & "',"

   sqlstr = sqlstr & "SCode='" & EditStu(5).Text & "',STel='" & EditStu(6).Text & "',SDormitory='" & EditStu(7).Text & "',SRemark='" & EditStu(8).Text & "' "

   sqlstr = sqlstr & "where SID='" & EditStu(0).Text & "'"

End If

con.Execute sqlstr

……

如果是添加新资料,操作完毕后则提示用户是否继续添加新资料,如果用户选择否则退出该窗体,反之则初始化该窗体,将各文本框的内容清空。

……

    If MsgBox("添加学号为" & EditStu(0).Text & "的学生资料成功!是否继续?", vbYesNo) = vbYes Then

      For i = 0 To 8

          EditStu(i).Text = ""

      Next

      EditStu(0).SetFocus

    Else

      Call Frmstu.ListviewLoad(classid)

      Unload Me

    End If

……

如果是修改学生资料,则提示用户修改成功,然后退出该窗体,并更新frmstu窗体中Listview的数据。

……

         MsgBox "修改学号为" & EditStu(0).Text & "的学生资料成功!", vbInformation

           Call Frmstu.ListviewLoad(classid)

          Unload Me

……

3.3.7 学籍管理模块

该模块包括班级设置、学院/专业设置、课程设置和学生成绩管理四个功能。

在该模块中,我使用了Adodc控件和MSFlexGrid控件来实现其功能。

Adodc控件连接数据库的过程为先定义该对象的ConnectionString属性,在使用Adodc时再定义其RecordSource属性。

Adodc.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;

Data Source=" & App.Path + "\student.mdb"

Adodc.RecordSource="select * from Result where Name='"&Text1.Text&"'

Adodc的使用方法:

添加新记录:Adodc.Recordset.AddNew

修改记录:Adodc1.Recordset.Update

删除记录:Adodc1.Recordset.Delete

3.3.8 报表功能模块

报表设计在实践应用中很有实用性,同样,它也是一项细致的工作,没有太难的算法;当然要使其统计功能做得强大,还要有统计学的理论知识作指导。

此模块很简单,主要实现的是学生信息的预览、打印等功能。

默认的数据报表设计器包含如下内容:

1.报表标头  包含显示在一个报表开始处的文本,例如报表标题、作者或数据库名。如果想把报表标头作为报表的第一页,设置它的ForcePageBreak属性为rptPageBreakAfter。

2.页标头  包含在每一页顶部出现的信息,例如报表的标题。

3.分组标头/注脚  包含数据报表的一个“重复”部分。每一个分组标头与一个分组注脚相匹配。标头和注脚对与数据环境设计器中的一个单独的command对象相关联。

4.细节  包含报表的最内部的“重复”部分(记录)。详细部分与数据环境层次结构中最低层的Command对象相关联。

5.页注脚  包含在每一页底部出现的信息,例如页数。

6.报表注脚 包含报表结束处出现的文本,例如摘要信息或一个地址或联系人姓名。报表注脚出现在最后一个页标头和页注脚之间。

Microsoft数据报表设计器(Microsoft Data Report Designer)是一个多功能的报表生成器,以创建联合分层结构报表的能力为特色。同数据源(如数据环境设计器(Data Environment Designer)一起使用),可以从几个不同的相关表创建报表。除创建可打印报表之外,也可以将报表导出到HTML或文本文件中。

使用Data Report根据数据库中的记录来生成报表,需要完成以下步骤:

1.置一个数据源,例如Microsoft数据环境,以访问数据库。

2.设定DataReport对象的DataSource属性为数据源。

3.设定DataReport对象的DataMember属性为数据成员。

4.右键单击设计器,并单击“检索结构”。

5.向每个相应的节添加响应的控件。

6.为每一个控件设定DataMember和DataField属性。

7.运行时,使用Show方法显示数据报表。

至此,整个学籍管理系统开发完成,单击Visual Basic 6.0程序的“文件à“生成学籍管理系统.exe”,将该数据库程序编译生成可执行程序学籍管理系统.exe。对此执行文件进行测试,然后利用Visual Basic自带的打包向导工具Package & Deployment Wizard来发布该系统,之后即可利用生成的Setup.exe文件进行学籍管理系统程序的安装。
结束语

经过几个月的毕业设计,本人学会了很多知识,个人的能力有了很大的提高,对Visual Basic 6.0和SQL Server 2000的建设有了更深刻的认识,并用Visual Basic 6.0结合SQL Server 2000顺利的开发了这样的一个学籍管理系统,我的毕业设计取得了应有的效果。

在这里,我还要感谢我们的指导老师文孟飞老师,他们帮助我解决了设计中的疑难和困惑,为我完成设计提供了极大的帮助。在我遇到问题时他总是耐心的为我们作出解答,并帮我查找相关资料;在我遇到困难时帮助解决了不少的难点,使得系统能及时完成。

文孟飞老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我受益匪浅,使我得到不少的提高,这对于我以后的工作和学习都有一种巨大的帮助,感谢指导老师耐心的辅导。


参考文献

[1] 抖斗书屋编著, 《Visual Basic 6.0常用编程技巧》, 清华大学出版社, 1999年8月;

[2] (美)David Jung Pierre Boutquin John D.Conley 等编著, 《Visual Basic 6.0 开发人员参考手册》, 20##年1月;

[3] 袁鹏飞 孙军安编著,《中文版SQL Server 2000数据库系统管理》, 人民邮电出版社, 20##年5月;

[4] 李真文编著,《Visual Basic 6.0全实例教程》, 北京希望电子出版社, 20##年6月;

[5] 张海藩编著,《软件工程导论》, 清华大学出版社, 20##年1月; 

更多相关推荐:
机床数显装置毕业设计说明书目录

目录1引言...............................................................11.1机床数显装置的国内外发展现状...................…

毕业设计说明书基本规范要求

毕业设计要求本组同学必须于20xx年x月x日前,加入毕业设计指导交流QQ群:118243982(群号),实时查看群中各项信息,下载“群共享”各项要求及范文模板等。“毕业设计说明书”初稿电子版提交截止时间为20x…

毕业设计说明书模板

毕业设计说明书课题名称学生姓名学号所在学院专业班级指导教师宋体四号起讫时间年月日年月日课题名称黑体三号摘要粗黑体三号针对宋体小四号行距125倍关键词机械设计37个中间用分号隔开I目录摘要I第1章绪论111引言1...

毕业设计说明书怎么写

毕业设计说明书课题名称学生姓名学号二级学院系专业班级指导教师起讫时间年月日年月日课题名称黑体三号摘要粗黑体三号针对宋体小四号行距125倍关键词机械设计37个中间用分号隔开I目录摘要I第1章绪论111引言112主...

毕业设计说明书范文格式

河北联合大学轻工学院QINGGONGCOLLEGEHEBEIUNITEDUNIVERSITY毕业设计说明书设计论文题目设计一座年产325万吨良坯的炼钢车间学生姓名刘学涛学号20xx15090106专业班级10冶...

毕业设计说明书范文

沧州师范学院毕业设计说明书设计题目智力竞赛抢答器逻辑电路设计院系机电工程系专业电气自动化技术班级121姓名XXX学号XX指导老师XXX20xx年11月课程设计说明书目录目录1一设计目的3二设计要求3三总体方案3...

毕业设计说明书格式要求--定稿

设计题目摘要根据相关要求在设计说明书的结构装订摘要图表和参考文献等各方面制订统一的标准供学生和指导教师参考使用为了更好的说明格式要求这里做了一个设计说明书的模版请参照使用关键词XXXXXXXXXXXI目录1毕业...

仅供参考毕业设计说明书范本(酒店VI设计)

学院课题姓专班起止指导设计说明书名称酒店VI设计名梁倩倩业营销与策划级营销0831日期20xx年9月30日20xx年12月16日教师某某某题目学院设计说明书学生填写酒店VI设计目录一引言1二VI设计的目的1一塑...

毕业设计(说明书)规范 字体格式

车辆工程专业课程设计毕业设计论文规范一设计说明书论文的结构及要求设计说明书论文包括封面中文摘要英文摘要关键词目录正文致谢参考文献及附录八部分1封面按统一格式完成或由学校统一印制按要求填写题目一般不超过25个字要...

毕业设计说明书格式要求

毕业设计说明书格式要求一毕业设计说明书用纸印刷及装订毕业设计说明书的内容及封面必须按照机电工程系统一的标准格式打印输出并装订打印纸规格为A4在页面设置中设置如下页边距上25厘米下20厘米左25厘米右20厘米纸张...

毕业设计说明书格式要求

关于切实抓好毕业论文设计大型作业作品工作的意见湘院教字20xx16号各教学单位高等职业教育学生的毕业论文设计大型作业作品工作是高等职业教育人才培养计划的重要组成部分是教学过程中重要的实践教学环节是人才培养质量的...

毕业设计说明书格式及要求

毕业设计报告撰写格式及要求设计报告内容1封面单独1页2摘要关键词中文摘要300500字英文摘要各单独1页关键词必须是摘要中出现过的词语且不少于3个3目录内容必要对应页码号4设计报告正文一前言二总体方案设计包括方...

毕业设计说明书(21篇)