课程设计说明书
课程名称:软件开发技术
设计题目:学生信息管理系统
专业:计算机科学与技术班级: 0801 指导教师:何频捷
湖南工业大学科技学院教务部制
2011年 12 月 10 日
1 引言(或绪论)
1.1 课题背景
随着教育事业的不断发展,学校的规模不断扩大,学生数量及其信息量的急剧增加,有关学生的各种信息管理也随之展开,学生信息管理系统应运而生了,它可用来管理学生信息与提高系统管理工作的效率。学生信息管理系统把Eclipse(前台开发)与SQL数据库(后台管理)有机地结合,并运用SWING等相关技术,完成学生信息的规范管理、科学统计和快速查询,从而可大大减少该管理上的工作量。
数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据库存储的效率,保证数据的完整性和一致性。同时,合理的数据结构也将有利于程序的顺利实现。
1.2 系统开发关键技术介绍
本系统采用的是Eclipse开发工具做为开发系统程序,采用SQL sever数据库访问技术完成对数据库信息的规范管理和统计查询。SQL sever使用更加简单灵活的对象模型,适用于各种程序设计语言。SQL sever提供执行以下操作方式:
(1)连接到数据源。
(2)指定访问数据源的命令,可以在命令中指定参数。
(3)执行命令,例如一个SELECT语句。
(4)在适当情况下,可以把缓存行的更改内容写回数据库中,更新数据源。
(5)提供常规方法检测错误,错误通常由建立连接或执行命令造成,涉及到SQL的
error对象。
2 系统分析
2.1 总体设计思想及工作流程
用户必须通过已经注册的帐号和密码才能进行对该系统的管理与应用,否则在登录系统前要进行新账号的注册;管理员通过输入密码和帐号可以对数据库的数据进行各种操作,而普通用户仅仅可以进行一部分的操作;用户根据自己的实际情况选择相应的功能来提取自己所需信息。
(1)学生信息管理系统的功能为显示主要操作页面,通过密码验证登陆界面,档案信息处理功能。
通过密码验证登陆,可实现安全登录,方便可靠。学生信息处理功能包括输入学生信息,显示学生的档案信息,学生档案信息条件查询(分为:按学生姓名进行查询,按学生学号进行查询),更新学生档案信息。
(2)学生信息管理系统的功能模块有:
系统登陆界面,美观大方,按enter键进入密码验证登陆界面,输入正确密码登陆主菜单选择框架界面,方便用户对程序个功能进行选择,选择要实现的功能按enter键进入该功能。
1. 输入学生档案信息。
2. 显示学生的档案信息
3. 学生档案信息条件查询
4. 更新学生档案信息。
0. 退出,谢谢使用!!!
程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。
2.2 业务需求
(1) 安全性: 用户必须通过帐号和密码才能进行对该系统的管理。
(2) 权限分配: 超级管理员通过输入密码和帐号可以对数据库的数据进行各种操
作,而普通用户仅仅可以进行一部分的操作。
(3) 易操作性: 可以快速进行查询操作,进行数据的汇总。
2.3 数据流图
用户的需求具体体现在各种信息的提供、保存、更新、查询和统计上,这就要求数据库结构应充分满足各种信息的输入和输出。系统应定义数据结构、收集基本数据以及设置数据处理的流程,组成一份详尽的数据字典,为以后的具体设计打下基础与伏笔。在仔细分析、调查有关学生信息管理需要的基础上,得到了本系统的流程图:
图3.2 总数据流图
图3.3 零层数据流图
图3.3 一层数据流图
2.2 总体设计流程图
图2总体设计流程图
该流程图为此次学生信息查询系统的总体流程图,用户进入界面以后可以看到登陆密码界面,密码输入正确进入主菜单选择框架界面,1为输入学生信息档案,2为显示学生档案,3为学生信息档案查询,4为更新学生档案,0为退出系统。用户可以根据自己的需求方便快捷的做出自己的选择。密码登陆函数流程图:
该函数为密码登陆函数模块,当输入的密码不正确的时候,系统会提示“密码输入错误,请重新输入”,直到输入正确密码为止。
选择框架函数流程图:
进入学生档案管理系统时显示程序名称和选择框架主菜单,提示用户进行选择,完成相应任务。
此代码被main()函数调用。
输入信息函数流程图:
输入学生信息函数模块,用户可以根据提示的信息来进行每一步的输入操作,当输入不当时,系统会自动提示,并让用户进行正确的操作。在此系统中,要求用户输入的只有字符型和数值型数据,设计了相应的函数来进行数据校验工作,保证数据输入的准确性。
显示信息流程图:
当用户进入查询信息模块时,系统会显示内部存储的内容。
查询信息流程图:
当用户执行此查询任务时,系统会提醒用户进行查询字段的选择,即按学号或姓名进行查询。若此学生档案信息记录存在,则会显示该省的档案信息。此函数完成了节点定位的功能。
更新信息流程图:
在更新学生档案信息的操作中,系统会先按输入的学号查询到该生档案信息记录,然后按顺序填入要修改的学生信息。
3 系统设计
3.1 系统功能结构图
设计数据库系统时应充分满足各种信息的输入和输出。据此,结学生信息管理系统所需完成的主体任务。学生信息管理系统主要任务如下:
(1)基本信息的输入。包括学籍(学生基本)信息,班能、课程和成绩等住处的输入。
(2)基本信息的修改。包括学籍信息、班级、课程和成绩等信息的修改。
(3)基本信息的查询。包括学籍信息和成绩信息等的查询。
(4)年级信息及班级信息的设置等。
(5)学校基本课程信息的输入、修改和设置。
基于需求分析及主要任务的表述,可对上述各项功能按照结构化程序设计的要求进行集中、分层结构化,自上而下逐层设置得到系统功能模块结构图:
图3.1 系统功能结构图
4 系统数据库设计
4.1 系统E-R图
概念结构设计就是E-R方法的分析与设计,概念结构设计是整个数据库设计的关键。在此,将使用实体—联系(E-R)模型来描述系统的概念结构,同时设计出能够满足用户需求的的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。这也实体包括各种具体的实际信息,通过相互之间的作用形成数据的流动。本程序根据上面的设计规划出的实体有:学籍实体、班级实体、年级实体、课程实体与成绩实体,学生信息管理系统数据库E-R模型,如下图所示:
图4.1 学生信息管理系统E-R模型图
4.2 数据表的创建
根据系统特点,由数据模型利用Oracle10g进行数据库的详细设计,学生信息管理系统数据库中各个表格的设计结果如下:
表1: 学籍信息表
表2: 学生成绩信息表
表3: 班级信息表
表4: 年级课程设置表
表5: 课程基本信息表
表6: 系统用户表
4.3 存储过程和触发器设计
为了提高该系统的运行环境,后台有关数据的操作部分使用了存储过程和触发器。
1.创建的存储过程进行添加班级信息,代码如下:
create or replace procedure insertclass
(p_class_no in class_no%type,
p_grade in grade%type,
p_director in director%type,
p_classroom_no in classroom_no%type
)
is v_count number;
begin
select count(*) into v_count from class_info where class_no=p_class_no;
if v_count=0 then
insertinto class_info values(p_class_no,p_grade,p_director,p_classroom_no );
else
dbms_output.put_line('班号已经存在,请重新输入班号');
end if;
end insertclass;
2.存储过程的调用代码:
Private Sub Command1_Click()
Dim sqlcon As New ADODB.Connection
Dim mrc As ADODB.Recordset
Dim MsgText As String
Dim txtSQL As String
Dim cmd As New ADODBmand
Dim classNO, grad, DIRECTO, CLASSROOMNO
sqlcon.Open "Provider=OraOLEDB.Oracle.1;Password=1234;Persist Security Info=True;User ID=CC;Data Source=orcl"
If Not Testtxt(txtClassno.Text) Then
MsgBox "请输入班号!", vbOKOnly + vbExclamation, "警告"
txtClassno.SetFocus
Exit Sub
End If
If Not Testtxt(comboGrade.Text) Then
MsgBox "请选择年级!", vbOKOnly + vbExclamation, "警告"
comboGrade.SetFocus
Exit Sub
End If
If Not Testtxt(txtDirector.Text) Then
MsgBox "请输入班主任姓名!", vbOKOnly + vbExclamation, "警告"
txtDirector.SetFocus
Exit Sub
End If
If Not Testtxt(txtClassroom.Text) Then
MsgBox "请输入教室房间号!", vbOKOnly + vbExclamation, "警告"
txtClassroom.SetFocus
Exit Sub
End If
If Not IsNumeric(Trim(txtClassno.Text)) Then
MsgBox "请输入数字!", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtClassno.SetFocus
End If
cmd.ActiveConnection = sqlcon
cmdmandText = "insertclass"
cmdmandType = adCmdStoredProc
Set classNO = cmd.CreateParameter("@CLASS_NO", adVarChar, adParamInput, 50)
cmd.Parameters.Append (classNO)
Set grad = cmd.CreateParameter("@GRADE", adVarChar, adParamInput, 50)
cmd.Parameters.Append (grad)
Set DIRECTO = cmd.CreateParameter("@DIRECTOR", adVarChar, adParamInput, 50)
cmd.Parameters.Append (DIRECTO)
Set CLASSROOMNO = cmd.CreateParameter("@CLASSROOM_NO", adVarChar, adParamInput, 50)
cmd.Parameters.Append (CLASSROOMNO)
cmd("@CLASS_NO") = txtClassno.Text
cmd("@GRADE") = comboGrade.Text
cmd("@DIRECTOR") = txtDirector.Text
cmd("@CLASSROOM_NO") = txtClassroom.Text
Set mrc = cmd.Execute
cmd.Parameters.Delete ("@CLASS_NO")
cmd.Parameters.Delete ("@GRADE")
cmd.Parameters.Delete ("@DIRECTOR")
cmd.Parameters.Delete ("@CLASSROOM_NO")
MsgBox "添加班级信息成功!", vbOKOnly + vbExclamation, "添加班级信息"
End Sub
3.创建触发器:
create or replace trigger course_info_del
before delete on course_info
for each row
declare
-- local variables
delete from gradecourse_info;
end ;
4.4 数据库的连接
配置文件连接数据库的代码:
ConnectString = "Provider=OraOLEDB.Oracle.1;Password=1234;Persist Security Info=True;User ID=CC;Data Source=orcl"
5 系统实现
根据整个系统的总体设计以及相关子系统的相关模块功能的设计,我们进行了系统的软件开发。详细设计和功能展示如下:
5.1系统实现工具与支持平台
(1) 用户界面
本系统采用Microsoft Visual Basic 6.0设计,用户交互界面采用的是基于Windows 的窗口界面。
(2) 开发和运行环境
工具软件:VisualBasic
系统软件:Oracle 10g
开发环境:Windows XP Professional
运行环境:Windows 98\NT\2000\XP\2003
硬件配置:PentiumⅢ以上CPU、256MB以上的内存、4GB以上的硬盘空间
5. 2公用模块的设计
以下为系统主控窗口的界面截图:
图5.1 主控窗口
在系统中创建公用模块,存放在整个工程项目中会调用到的函数、变量等。
代码如下:
Public fMainForm As frmMain
Public UserName As String
Sub Main()
Dim fLogin As New frmLogin
fLogin.Show vbModal
If Not fLogin.OK Then
'Login Failed so exit app
End
End If
Unload fLogin
Set fMainForm = New frmMain
fMainForm.Show
End Sub
Public Function ConnectString() _
As String
'returns a DB ConnectString
ConnectString = "Provider=OraOLEDB.Oracle.1;Password=1234;Persist Security Info=True;User ID=CC;Data Source=orcl"
End Function
Public Function ExecuteSQL(ByVal SQL _
As String, MsgString As String) _
As ADODB.Recordset
'executes SQL and returns Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String
On Error GoTo ExecuteSQL_Error
sTokens = Split(SQL)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", _
UCase$(sTokens(0))) Then
cnn.Execute SQL
MsgString = sTokens(0) & _
" query successful"
Else
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open Trim$(SQL), cnn, _
adOpenKeyset, _
adLockOptimistic
'rst.MoveLast 'get RecordCount
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
End Function
Public Function Testtxt(txt As String) As Boolean If Trim(txt) = "" Then
Testtxt = False
Else
Testtxt = True
End If
End Function
5. 3系统界面设计:
图5.2 系统登录界面
图5.3添加课程信息界面
图5.4添加学籍信息界面
图5.5查询学籍信息界面
图5.5设置年级课程信息界面
5. 4系统核心代码
(1) 添加班级信息是通过存储过程的调用实现的,部分源代码:
sqlcon.Open "Provider=OraOLEDB.Oracle.1;Password=1234;Persist Security Info=True;User ID=CC;Data Source=orcl"
cmd.ActiveConnection = sqlcon
cmdmandText = "insertclass"
cmdmandType = adCmdStoredProc
Set classNO = cmd.CreateParameter("@CLASS_NO", adVarChar, adParamInput, 50)
cmd.Parameters.Append (classNO)
Set grad = cmd.CreateParameter("@GRADE", adVarChar, adParamInput, 50)
cmd.Parameters.Append (grad)
Set DIRECTO = cmd.CreateParameter("@DIRECTOR", adVarChar, adParamInput, 50)
cmd.Parameters.Append (DIRECTO)
Set CLASSROOMNO = cmd.CreateParameter("@CLASSROOM_NO", adVarChar, adParamInput, 50)
cmd.Parameters.Append (CLASSROOMNO)
cmd("@CLASS_NO") = txtClassno.Text
cmd("@GRADE") = comboGrade.Text
cmd("@DIRECTOR") = txtDirector.Text
cmd("@CLASSROOM_NO") = txtClassroom.Text
Set mrc = cmd.Execute
cmd.Parameters.Delete ("@CLASS_NO")
cmd.Parameters.Delete ("@GRADE")
cmd.Parameters.Delete ("@DIRECTOR")
cmd.Parameters.Delete ("@CLASSROOM_NO")
MsgBox "添加班级信息成功!", vbOKOnly + vbExclamation, "添加班级信息" End Sub
(2) 查询学生成绩模块的部分代码:
Private Sub cmdInquire_Click()
Dim txtSQL As String
Dim MsgText As String
Dim dd(4) As Boolean
Dim mrc As ADODB.Recordset
txtSQL = "select * from RESULT_INFO where "
If Check1(0).Value Then
If Trim(txtSID.Text) = "" Then
sMeg = "学号不能为空"
MsgBox sMeg, 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
txtSQL = txtSQL & "student_ID = '" & Trim(txtSID.Text) & "'"
End If
End If
If Check1(1).Value Then
If Trim(txtName.Text) = "" Then
sMeg = "姓名不能为空"
MsgBox sMeg, vbOKOnly + vbExclamation, "警告"
txtName.SetFocus
Exit Sub
Else
dd(1) = True
If dd(0) Then
txtSQL = txtSQL & "and student_Name = '" & txtName.Text & "'"
Else
txtSQL = txtSQL & "student_Name = '" & txtName.Text & "'"
End If
End If
End If
If Check1(2).Value Then
If Trim(txtCourse.Text) = "" Then
sMeg = "课程不能为空"
MsgBox sMeg, vbOKOnly + vbExclamation, "警告"
txtCourse.SetFocus
Exit Sub
Else
dd(2) = True
If dd(0) Or dd(1) Then
txtSQL = txtSQL & "and course_Name = '" & txtCourse.Text & "'"
Else
txtSQL = txtSQL & "course_Name = '" & txtCourse.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
txtSQL = txtSQL & " order by student_ID "
Set mrc = ExecuteSQL(txtSQL, MsgText)
With myflexgrid
.Rows = 2
.CellAlignment = 4
.TextMatrix(1, 0) = "考试编号"
.TextMatrix(1, 1) = "学号"
.TextMatrix(1, 2) = "姓名"
.TextMatrix(1, 3) = "班号"
.TextMatrix(1, 4) = "课程名称"
.TextMatrix(1, 5) = "分数"
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) = mrc.Fields(3)
.TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
.TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
mrc.MoveNext
Loop
End With
mrc.Close
End Sub
(3) 修改课程信息部分代码:
Private Sub cancelCommand_Click()
If Not mcclean Then
Frame2.Enabled = True
firstCommand.Enabled = True
previousCommand.Enabled = True
nextCommand.Enabled = True
lastCommand.Enabled = True
txtCourseno.Enabled = False
txtCoursename.Enabled = False
comboCoursetype.Enabled = False
txtCoursedes.Enabled = False
mrc.Bookmark = myBookmark
Call viewData
Else
MsgBox "什么都没有修改,不需要取消!", vbOKOnly + vbExclamation, "警告"
End If
End Sub
Private Sub deleteCommand_Click()
myBookmark = mrc.Bookmark
str2$ = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")
If str2$ = vbOK Then
mrc.MoveNext
If mrc.EOF Then
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
Else
mrc.Bookmark = myBookmark
Call viewData
End If
End Sub
Private Sub editCommand_Click()
mcclean = False
Frame2.Enabled = False
firstCommand.Enabled = False
previousCommand.Enabled = False
nextCommand.Enabled = False
lastCommand.Enabled = False
txtCourseno.Enabled = True
txtCoursename.Enabled = True
comboCoursetype.Enabled = True
txtCoursedes.Enabled = True
comboCoursetype.AddItem "必修"
comboCoursetype.AddItem "考查"
myBookmark = mrc.Bookmark
End Sub
Private Sub firstCommand_Click()
mrc.MoveFirst
Call viewData
End Sub
Private Sub previousCommand_Click()
mrc.MovePrevious
If mrc.BOF Then
mrc.MoveLast
End If
Call viewData
End Sub
Private Sub updateCommand_Click()
Dim txtSQL As String
Dim MsgText As String
Dim mrcc As ADODB.Recordset
If mcclean Then
MsgBox "请先修改课程信息", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
If Not Testtxt(txtCourseno.Text) Then
MsgBox "请输入课程编号!", vbOKOnly + vbExclamation, "警告"
txtCourseno.SetFocus
Exit Sub
End If