学生学籍成绩管理系统(设计报告)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程课程设计
一、前言
学籍管理工作在正常的情况下需对大量的数据进行处理,它们包括,学生学籍信息录入、学生学籍修改、学生基本档案输入、学籍变动、学生成绩录入、学生成绩查询等。
如果由人工去处理这些数据需要花费大量的时间、人力、物力。
学籍管理系统,是在总结以上管理方法的基础上并结合用户的需求对学籍的各种数据进行了有针对性的开发,充分利用Visual Basic具有强大的数据库管理功能及在应用程序开发上高效、灵活的特点,创建了各个过程,目标设计、系统开发背景、开发和运行环境选择、系统功能分析、系统功能模块设计、数据库需求分析、数据库概念结构设计、数据库逻辑结构设计、数据库结构实现、各个功能模块的创建、系统的编译和发行等进行了详细描述。
学籍管理系统设计突出了信息管理系统完整实用的开发方法,系统的最大特点是突出了实用性和实效性,紧密的结合了用户的使用要求,操作方便,有一人进行管理就可以完成大量的学籍管理工作。
二、系统开发工具和数据库简介
结合本人学习期间所学的有关程序设计的语言为Visual Basic 6.0,因此,本系统软件将采用该语言进行设计开发。
下面先介绍一下该工具的好处与特点。
Visual Basic 6.0 概述
1、Visual Basic 6.0 简介
无论用户是一个Windows 编程新手,还是已经具有丰富的Windows程序设计经验的专业程序开发人员,利用Visual Basic 6.0提供的良好开发环境,均可以使
你快速地完成所需设计任务。
所谓Visual ,中文的意思是“可视化”,它提供了一种创建图形用户界面(GUI)的方法,利用这种方法,用户可不必书写复杂的描述界面元素外观和位置的程序代码,而只需将系统提供的对象放到屏幕上的适当位置,并通过属性窗口进行适当的设置或调整,就可以设计出一个优秀的应用程序界面。
此外,用户除了可以使用单独的Visual Basic 6.0程序设计环境进行程序设计外。
Visual Basic 6.0 程序设计系统还被包括在Excel Access 等众多Windows功能应用软件中,以供用户进行二次开发。
目前在编制网页上使用较多的VBScript 脚本语言实际上是Visual Basic 语言的子集。
因此,无论从哪方面讲,用Visual Basic 6.0系统开发软件都是一件非常合算的投资。
2、Visual Basic 6.0 语言的特点
不管你是编制一个小的应用程序,还是开发一套大型的专业系统软件,甚至是开发一个跨越Internet 的分布式应用系统软件,Visual Basic 6.0 都为用户提供了合适的工具。
利用Visual Basic 6.0的数据访问特性,用户可创建数据库、前端应用程序、适用于大多数流行数据库格式的服务器组件等。
利用ActiveX技术允许用户使用其他应用程序提供的功能,如Microsoft Word、Microsoft Excel,甚至可直接使用由Visual Basic 6.0 专业版和企业版创建的应用程序和对象。
Visual Basic 的Internet 功能允许用户使用程序方便地通过Internet 访问文档和应用程序,甚至创建Internet应用程序。
用Visual Basic 6.0用户创建的是一个真正的EXE 文件,该文件可直接运行于操作系统(Windows98/2000/XP或Windows NT系统),完全脱离Visual Basic系统环境。
并且,该文件可以自由发布,安装到单机或网络服务器上。
此外,Visual Basic 6.0 还增加了一些新的功能:具体如下:
①增加了ADO数据对象,该数据访问技术是一个简单的数据模型,可更好地与其它Microsoft和非Microsoft技术集成。
它还是一个通用接口,可用于访问本地或远程数据、连续和离散记录集、用户可访问的数据绑定接口和分层记录集。
②提供了数据环境设计器,其中提供了一种创建ADO对象的交互设计环境,数据环境可作为窗体或报表中所有要求数据对象的数据源,或者通过数据环境的方法和属性由等程序访问,数据环境设计器具有用户连接设计器的全部功能和附加特性,如拖放、分层、分组和合计等。
③数据报表,允许用户使用拖放方法利用任何记录集合快速创建报表。
④数据源,创建可绑定任何控件的数据源用户定义控件和类。
⑤SQL编辑器,允许用户增加新的存储过程至SQL服务器程序和Oracle数据库中,用户还可以使用编辑器编写触发器。
⑥增强的数据窗体向导,现在用户不仅可以构造不绑定至数据控件的代码窗体,而且可以使用ADO代码,该向导已经集成到应用程序向导、Chart向导和FlexGrid向导中。
⑦文件系统对象,Visual Basic 6.0 提供了改进的在文件系统中移动的程序集,并可创建文本文件和目录。
⑧DataGrid控件,该控件可帮助用户快速构造观察和编辑记录的程序,它也支持新的ADO数据控件。
⑨可视化数据库工具集成(企业版)。
在Visual Basic 6.0 中用户可以可视地创建数据库和查询、SQL服务器程序、Oracle数据库表、使用拖放方法创建视图,以及自动改变列数据类型。
3、Visual Basic 6.0 的版本
目前Visual Basic 6.0有三种版本,各自满足不同的开发需要。
其中:
①Visual Basic 6.0学习版使编程人员可轻松学习和设计一些基本的应用程序。
该版本包括所有的内部控件,连同Grid、Tab和Data_Bound控件。
②Visual Basic 6.0专业版为专业编程人员提供了一套进行开发的功能完备的工具。
该版本包括学习版的全部功能连同ActiveX控件,还包括Internet Application Designer(Internet报务器应用程序设计器)、Integrated Visual DatabaseTools(集成可视化数据库工具)、Data Environment (数据环境)、ActiveX污染Data Objects(数据对象,简称ADO)和Dynamic HTML Page Designer (动态HTML页面设计器)。
③Visual Basic 6.0企业版使得专业编程人员能够开发功能强大的组内分布式应用程序。
该版本包括专业版的全部功能连同Back Office 工具,如SQL Server Microsoft Transaction Server 、Internet Information 、Visual SourceSafe、SNA Server。
三、需求分析
3.1 设计思想
由于本系统是一个基于C/S的数据库的信息管理系统,所以第一步就是需要利用SQL Server 2000建立所需要的数据库,第二步就使用Visual Basic 6.0完成该系统客户端应用程序的开发。
3.2 可行性分析
可行性分析是系统分析阶段的第二项活动,它的主要目是进一步明确系统的目标、规模与功能,对系统开发背景、必要性和意义进行了调查分析并根据需要和可能提出开发系统的初步方案与计划。
可行性分析是对系统进行全面、概要的分析。
通过调查分析,本系统设计主要有以下三个可行性:
3.2.1 操作可行性
本系统操作简单,易于理解,只需通过简单指导,上手较快,系统管理员、教师以及学生均能进行操作,运行环境要求低。
3.2.2 技术可行性
本系统在Windows XP Server 开发环境下,利用Visual Basic 6.0开发工具,并使用SQL Server 2000作为数据库管理系统,来实现学生学籍管理系统的各种功能。
SQL Server 2000属于主从时式的数据库服务器这也是主从式数据库服务器的特点,服务器本身重在数据的管理,为客户端应用程序提供一致的接口。
当然也可以使用SQL Server 2005为数据库管理系统,开发工具也可以是它的更高版,这样可以提高系统的性能,降低它的局限性。
3.2.3 经济可行性
采用新的学生学籍管理系统可取代原系统的手工管理工作,减少人工开支,节省资金,并且可大大提高数据信息的取得,缩短数据信息处理时间,提高学生信息的利用率,使教学质量更进了一个台阶。
3.3 功能需求
按照系统开发业务分析要求和原则,在与系统管理人员的充分沟通,整理出学生学籍管理系统所需求的基本功能和用户界面的一些需求,这些需求将作为系统分析和逻辑设计的依据。
3.3.1 基本功能需求
能对学生的学籍及成绩进行基本管理,包括:学生基本信息和学科成绩的存储、输入、删除、修改、查询,以及升留级管理。
学生基本信息应包括:学号、姓名、出生年份、籍贯、性别、专业、班级、家庭住址、本校住址、个人联系电话、家庭联系电话;
成绩信息应包括:学号、课号、课名、成绩、上课时间、教师号。
查询能够按照:学号、课号、班级、时间等进行查询。
3.4 性能需求
根据Visual Basic 6.0的运行需求以及系统的调试需求,至少需要满足以下的软硬件要求:
开发工具:Visual Basic 6.0;
操作系统:Windows2000/XP;
数据库:SQL Server 2000;
CPU: 2.4GHz以上;
内存:512以上;
硬盘:80GB以上;
VGA显示器或更高;
四、系统设计
4.1系统设计思想
1、采用现有的资源,先进的管理系统开发方案,充分利用学校现有的资源,减少开发中的时间和财力、物力、提高系统开发的水平和应用效果。
2、系统就满足学校的需求,例如学生信息的录入、查询、更新等。
学生录入与排名。
3、系统就具备数据库维护功能,及时根据用户需求进行数据添加、删除、修改等操作。
4.2 系统设计分析
本系统适用于中小学校,其功能主要分为
成绩管理:用于对成绩的输入、修改、查询。
学籍管理:用于对学生学籍的录入与修改、查询。
帮助信息:用于对本系统的具体操作进行详解。
本系统性能力求易于使用,具体有较高的扩展性和可维护性。
4.3系统功能分析
录入功能:为一般用户提供相应的录入功能,为超级用户提供对所有信息的录入功能。
查询功能:为所有用户提供查询的功能,可查询允许范围内的所有信息。
维护功能:为一般用户提供查询及相应的修改,删除功能,为超级用户提供对所有信息的修改删除功能。
帮助功能:能帮助初次使用者对本系统的应用及处理常见的问题。
退出功能:结束并关闭系统。
4.4学生学籍系统的目标
节约资源,提高学籍信息的精确度
本系统能减少很多不必要的资源,不用象以前那样用冗余的纸张式的管理。
大节省了学校能源。
并且计算机的存储与快速查询功能大大提高了学籍管理的效率,并且还提高了学籍信息管理的精确度。
方便快速操作,精减人员,节约开支
方便快速的操作,可减少学籍信息管理的漏洞,又减少因工作的冗余出现的错误,并且操作非常简单,可减少许多不很必要的人员,这无论从物质上还是工作人员的工资上都为学校节约了开支。
为学校增加了财富。
4.5功能模块分解
接口设计
外部接口:用户一般通过终端进行操作,用户进入界面后进行相应的操作。
硬件接口:赛扬133 、内存32兆以上PC机满足输入端条件。
软件接口:Windows2000/NT或更高的操作系统。
内部接口:内部接口(模块之间的接口)
验证模块:启动系统时,便激活登陆口令界面;
初始化模块:对系统进行初始化;
系统功能模块:接收系统功能的相应消息,启动信息录入、信息查询、信息维护等模块。
4.6各模块的具体分析:
学生信息管理:主要用于学生的基本信息管理(如学号、姓名、性别、出生年月、联系地址等)。
成绩管理:主要用于学生考试的成绩进行管理
4.7数据库设计
4.7.1数据流图(略)
4.7.2数据库分析
用户需求具体有学籍管理系统提供保存、更新、查询、维护,这就需求数据库结构能充分满足各种信息的输入与输出,实现有组织地、动态地存储大量关联数据,方便用户访问系统中的数据,它与文件系统的重要区别是数据的充分共享,交叉访问,与应用程序的高度独立性。
数据流图描述:本系统从总体上分为学生信息管理、学生信息浏览、成绩浏览和成绩管理等部分。
每个模块有自己的作用。
4.8数据库表设计
学生基本信息表: xsxj.Mdb
成绩信息表: xscj.Mdb
4.9界面设计
4.9.1主要窗体实现:学生学籍查询,成绩查询,学籍管理,成绩管理以及其他的窗口信息
4.9.2学生的成绩窗口设计
有主窗体直接进入成绩的查询模块。
主要实现成绩的查询等功能。
4.9.3学生学籍窗口设计
有主窗体直接进入学生状况窗口模块。
主要实现学生状况查询等功能。
4.9.4学生学籍管理窗口设计
有主窗体直接进入学生学籍管理窗口模块。
主要实现学生学籍信息的查询、修改等功能。
4.9.5学生成绩管理窗口设计
有主窗体直接进入学生成绩修改窗口模块。
主要实现学生成绩资料查询结果。
五、详细设计及源程序
1、模块module1.Bas
Option Explicit
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_ENDSESSION = &H16
Public Const WM_QUERYENDSESSION = &H11
Public preWinProc As Long
Public Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
If (Msg = 132) Then
Select Case Wndproc
Case 10, 11, 12, 13, 14, 15, 16, 17:
Wndproc = 0
--
Exit Function
End Select
End If
End Function
2、主窗口form1.frm
Option Explicit
Private Sub Command4_Click()
Form6.Show
End Sub
Private Sub Command5_Click()
Form4.Show
Unload Me
End Sub
Private Sub Command6_Click()
Form5.Show
Unload Me
End Sub
Private Sub Form_Load()
Dim ret As Long
'记录原来的Window Procedure的位址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'设定form的window Procedure到wndproc
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc) End Sub
Private Sub Form_Unload2(Cancel As Integer)
Dim ret As Long
'取消Message的截取,而使之又只送往原来的Window Procedure
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
End Sub
Private Sub Command1_Click()
Form2.Show
Unload Me
End Sub
Private Sub Command2_Click()
Form3.Show
Unload Me
End Sub
Private Sub Command3_Click()
Dim yes As String
yes = MsgBox("你要确定退出?", 32 + 1, "提示信息")
If yes = 1 Then
Unload Me
End If
End Sub
3、、学籍浏览窗口form2.frm
Option Explicit
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\xsxj.mdb"
Dim ret As Long
'记录原来的Window Procedure的位址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'设定form的window Procedure到wndproc
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc) End Sub
Private Sub Form_Unload2(Cancel As Integer)
Dim ret As Long
'取消Message的截取,而使之又只送往原来的Window Procedure
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
End Sub
Private Sub Command1_Click()
Form1.Show
Unload Me
End Sub
Private Sub Command2_Click()
Data1.Recordset.MoveLast
Command4.Enabled = True
Command3.Enabled = False
End Sub
--
Private Sub Command3_Click() Command4.Enabled = True
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
Data1.Recordset.MovePrevious
Command3.Enabled = False
End If
End Sub
Private Sub Command4_Click() Command3.Enabled = True
Data1.Recordset.MovePrevious
If Data1.Recordset.BOF Then
Data1.Recordset.MoveFirst
Command4.Enabled = False
End If
End Sub
Private Sub Command5_Click()
Data1.Recordset.MoveFirst Command4.Enabled = False
End Sub
4、成绩浏览窗口form3.frm Option Explicit
Private Sub Command2_Click() Data1.Recordset.MoveLast Command4.Enabled = True Command3.Enabled = False
End Sub
Private Sub Command3_Click() Command4.Enabled = True
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
Data1.Recordset.MovePrevious
Command3.Enabled = False
End If
End Sub
Private Sub Command4_Click()
Data1.Recordset.MovePrevious
If Data1.Recordset.BOF Then
Data1.Recordset.MoveFirst
Command4.Enabled = False
End If
End Sub
Private Sub Command5_Click()
Data1.Recordset.MoveFirst
Command4.Enabled = False
Command3.Enabled = True
End Sub
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\xscj.mdb"
Dim ret As Long
'记录原来的Window Procedure的位址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'设定form的window Procedure到wndproc
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc) End Sub
Private Sub Form_Unload2(Cancel As Integer)
Dim ret As Long
'取消Message的截取,而使之又只送往原来的Window Procedure ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc) End Sub
Private Sub Command1_Click()
Form1.Show
Unload Me
End Sub
5、学籍管理窗口form4.frm
Option Explicit
Private Sub Command1_Click()
Form1.Show
Unload Me
End Sub
Private Sub Command2_Click()
Dim num As String
Dim n As String
Dim s As Integer
Data1.Recordset.MoveFirst
num = InputBox("请输入要删除的学生学号(三位数)", "")
Do While Not Data1.Recordset.EOF
n = Data1.Recordset.Fields("学号")
If num = n Then
s = MsgBox("确定要删除吗?", vbQuestion + vbOKCancel, "确定删除")
If s = 1 Then
Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.RecordCount > 0 Then
If Data1.Recordset.EOF Then
Data1.Recordset.MoveLast
End If
End If
End If
Exit Do
Else
Data1.Recordset.MoveNext End If
Loop
If Data1.Recordset.EOF Then
Data1.Recordset.MoveFirst
MsgBox ("查无此人")
End If
End Sub
Private Sub Command3_Click()
Dim n As String
Data1.Refresh
Do While Not Data1.Recordset.EOF n = Data1.Recordset.Fields("学号") If text1.Text = n Then
MsgBox ("已有学号")
text1.Enabled = False
text2.Enabled = False
text3.Enabled = False
text4.Enabled = False
text5.Enabled = False
-- text6.Enabled = False
text7.Enabled = False
text8.Enabled = False
text9.Enabled = False
Exit Do
Else
Data1.UpdateRecord
Data1.Refresh
Data1.Recordset.MoveLast
text1.Enabled = False
text2.Enabled = False
text3.Enabled = False
text4.Enabled = False
text5.Enabled = False
text6.Enabled = False
text7.Enabled = False
text8.Enabled = False
text9.Enabled = False
End If
Loop
End Sub
-- Private Sub Command4_Click()
Data1.Refresh
Data1.Recordset.AddNew
text1.Text = ""
text2.Text = ""
text3.Text = ""
text4.Text = ""
text5.Text = ""
text6.Text = ""
text7.Text = ""
text8.Text = ""
text9.Text = ""
text1.Enabled = True
text2.Enabled = True
text3.Enabled = True
text4.Enabled = True
text5.Enabled = True
text6.Enabled = True
text7.Enabled = True
text8.Enabled = True
text9.Enabled = True
End Sub
Private Sub Command5_Click()
Dim num As String
Dim n As String
num = InputBox("请输入三位数学号", "学号查询") Data1.Refresh
Do While Not Data1.Recordset.EOF
n = Data1.Recordset.Fields("学号")
If n = num Then
Exit Do
Else
Data1.Recordset.MoveNext
End If
Loop
If Data1.Recordset.EOF Then
Data1.Recordset.MoveFirst
MsgBox ("查无此人")
End If
End Sub
Private Sub Command6_Click()
Dim name As String
Dim m As String
name = InputBox("请输入学生姓名", "姓名查询") Data1.Refresh
Do While Not Data1.Recordset.EOF
m = Data1.Recordset.Fields("姓名")
If m = name Then
Exit Do
Else
Data1.Recordset.MoveNext
End If
Loop
If Data1.Recordset.EOF Then
Data1.Recordset.MoveFirst
MsgBox ("查无此人")
End If
End Sub
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\xsxj.mdb"
Dim ret As Long
'记录原来的Window Procedure的位址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'设定form的window Procedure到wndproc
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc) End Sub
Private Sub Form_Unload2(Cancel As Integer)
Dim ret As Long
'取消Message的截取,而使之又只送往原来的Window Procedure
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
End Sub
6、成绩管理窗口form5.frm
Option Explicit
Private Sub Command1_Click()
Form1.Show
Unload Me
End Sub
Private Sub Command3_Click()
Adodc1.ConnectionString = " Provider=Microsoft.Jet.OLEDB.4.0;Data
Source= " & App.Path & "\xscj.mdb;Persist Security Info=False "
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim cnstr As String
cn.CursorLocation = adUseClient
cnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xscj.mdb;Persist Security Info=False"
cn.ConnectionString = cnstr
cn.Open cnstr
sql = "select * from xscj"
rs.Open sql, cn, adOpenStatic, adLockOptimistic 'adOpenStatic或许用adOpenDynamic
Set DataGrid1.DataSource = rs
End Sub
Private Sub Command5_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xscj.mdb;Persist Security Info=False"
cn.Open
If Text1.Text = "" Then
MsgBox "请填写学号!", vbExclamation, "提示信息"
Exit Sub
End If
rs.Open "select * from xscj where 学号= '" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic
If rs.RecordCount = 0 Then
MsgBox "没有此学号!", vbExclamation, "提示信息"
End If
Set DataGrid1.DataSource = rs
Text1.Text = ""
End Sub
Private Sub Command6_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xscj.mdb;Persist Security Info=False"
cn.Open
If Text2.Text = "" Then
MsgBox "请填写课号!", vbExclamation, "提示信息"
Exit Sub
End If
rs.Open "select * from xscj where 课号= '" & Text2.Text & "'", cn,
adOpenKeyset, adLockOptimistic
If rs.RecordCount = 0 Then
MsgBox "没有此课号!", vbExclamation, "提示信息"
End If
Set DataGrid1.DataSource = rs
Text2.Text = ""
End Sub
Private Sub Form_Load()
Adodc1.ConnectionString = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\xscj.mdb;Persist Security Info=False "
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim cnstr As String
cn.CursorLocation = adUseClient
cnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &
"\xscj.mdb;Persist Security Info=False"
cn.ConnectionString = cnstr
cn.Open cnstr
sql = "select * from xscj"
rs.Open sql, cn, adOpenStatic, adLockOptimistic 'adOpenStatic或许用adOpenDynamic
Set DataGrid1.DataSource = rs
Dim ret As Long
'记录原来的Window Procedure的位址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'设定form的window Procedure到wndproc
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc) End Sub
Private Sub Form_Unload2(Cancel As Integer)
Dim ret As Long
'取消Message的截取,而使之又只送往原来的Window Procedure
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc) End Sub
Private Sub Command4_Click()
DataGrid1.AllowUpdate = True
DataGrid1.AllowAddNew = True
End Sub
Private Sub Command2_Click()
DataGrid1.AllowUpdate = False
DataGrid1.AllowAddNew = False
DataGrid1.AllowDelete = False
End Sub
7、帮助窗口form6.frm
Option Explicit
Private Sub Form_Load()
Dim ret As Long
'记录原来的Window Procedure的位址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'设定form的window Procedure到wndproc
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc) End Sub
Private Sub Form_Unload2(Cancel As Integer)
Dim ret As Long
'取消Message的截取,而使之又只送往原来的Window Procedure
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc) End Sub
Private Sub Command1_Click()
Unload Me
End Sub
六、设计小结
经过设计和开发,学生学籍管理系统基本开发完毕。
其功能基本符合用户需求,能够完成学生学籍的存储和成绩的查询以及修改等工作。
对于数据的一致性的问题也通过程序进行了有效的解决。
但是由于时间较短,所以该系统还有许多不尽如人意的地方,比如用户界面不够美观,部分功能设计比较简单,出错处理不够等多方面问题。
这些都有待进一步改善。