《网络数据库实训》报告
系统名称: 学生档案管理系统 专 业: 计算机科学与技术 班 级: B1001 学 号: 104772 104607 姓 名: 王洋 夏伟萍 指导教师: 王希娟 成 绩:
2013 年 1 月 4 日
陕西国际商贸学院Oacle数据库基础教程实训报告
目 录
1 前言 ···································································································································· 2
2需求分析 ······························································································································ 2
3概要设计(特殊功能) ······································································································ 3
4详细设计 ······························································································································ 3
5源代码及调试 ······················································································································ 3
6使用说明及测试结果 ········································································································ 20
7总结与体会 ························································································································ 20
8参考文献 ···························································································································· 21
1
陕西国际商贸学院Oacle数据库基础教程实训报告
1 前言
1.1 课题简介
开发系统的名称:
学生档案管理系统
实训目的:
通过《网络数据库》课程的学习,将数据结构应用在具体的编程方面,更加了解课程所学习的内容及思维逻辑。
实训意义:
利用信息系统开发与实践课程设计,了解学生对《网络数据库》的理解和加强学生对软件开发方面的应用知识。希望今后学生好好利用所学的软件开发方面的知识和思想,解决各方面的编程难题。 实训内容:
可以添加、修改、删除和保存信息,学生和教师进行有效的身份验证登陆后,选择可执行的功能模块,可以进行信息的查询或修改.
实训预期实现效果:
能够管理学生在校期间的各种档案。
能够快速地进行各类档案信息查询。
能够对所有档案信息提供报表功能。
1.2 方案及其论证
语言:VB
运行环境:Microsoft Visual Basic 6.0
可行性分析:通过这样的系统,可以规范学生档案管理,快速查询信息和进行科学统计。 2需求分析
学生档案管理系统是一个非常通用的信息管理系统。很多大、中、小学校都需要拥有自己的学生档案管理系统,以便对本学校的基本信息和学习情况进行管理。学生档案管理系统的主要任务是实现对学校各院系和所有学生的系统管理。
2
陕西国际商贸学院Oacle数据库基础教程实训报告
3概要设计(特殊功能)
学籍管理:主要负责管理学籍信息,包括学生注册、学籍异动、基本信息。 课程管理:主要负责管理各院系的课程信息和学生的选课信息。 成绩管理:主要负责管理学生的考试成绩。 奖惩管理:主要负责管理学生在校的奖惩表现。
系统管理:主要负责管理用户信息和用户登录。
4详细设计
流程图:
5源代码及调试
1、
数据库结构设计:数据库中包含5个表:院系班级表classes、学生基本信息表students、
学生奖惩表evaluation、学生学籍变动表change和用户表users. 创建表classes的代码如下:
Create table studentsman.classes (class_id number primary key, Class_name varchar2(50) not null,
3
陕西国际商贸学院Oacle数据库基础教程实训报告
Upperid number not null)
创建表users的代码如下:
Create table studentsman.users
(username varchar2(40) primary key,
Userpwd varcharw(40) not null)
2、
a) 设计工程框架
1.1 Variable模块,代码如下:
'保存执行SQL语句字符串
Public sqlstmt As String
'院系班级数组
Public arr_classname() As String
Public arr_classid() As Integer
'学生数组
Public arr_stuid() As Integer
Public arr_stuname() As String
'声明类模块变量
Public mystu As New students '学生对象
Public curstu As New students '当前学生信息的对象
Public selstu As New students '选择学生信息的对象
Public myclass As New classes '院系班级对象
Public curclass As New classes '当前班级对象
Public myuser As New users '用户对象
Public curuser As New users '当前用户对象
Public myeva As New evaluation '奖惩对象
Public mychange As New change '学籍变更对象
1.2 const 模块
Public Const conn As String = "provider=oraoledb.oracle.1;password=studentsman;persist security info=true;user id=studentsman;data source=orcl_192.169.28.1"
1.3 dbfunc 模块
1.4 generfunc 模块
4
陕西国际商贸学院Oacle数据库基础教程实训报告
b)类模块
1.1 Classes类:用来管理表classes的数据库操作。 Public Class_Id As Long
Public Class_Name As String
Public UpperId As Long
Public Sub Init()
Class_Id = -1
Class_Name = ""
UpperId = -1
End Sub
'删除
Public Sub Delete(ByVal TmpId As Long)
sqlstmt = "DELETE FROM Classes WHERE Class_Id=" + Trim(Str(TmpId)) sqlext (sqlstmt)
End Sub
Public Sub GetInfo(TmpId As Long)
Class_Id = TmpId
sqlstmt = "SELECT * FROM Classes WHERE Class_Id=" + Trim(Str(TmpId)) Set rs = queryext(sqlstmt)
If Not rs.EOF Then
'读取院系班级名称
Class_Name = rs.Fields(1)
'读取上一级院系班级的编号
UpperId = rs.Fields(2)
Else
Init
End If
rs.Close
cnn.Close
End Sub
Public Function GetName(ByVal TmpId As Long) As String
5
陕西国际商贸学院Oacle数据库基础教程实训报告
sqlstmt = "SELECT Class_Name FROM Classes WHERE Class_Id=" + Trim(Str(TmpId)) Set rs = queryext(sqlstmt)
If Not rs.EOF Then
GetName = rs.Fields(0)
Else
GetName = ""
End If
rs.Close
cnn.Close
End Function
Public Function GetNewId() As Long
Dim TmpId As Long
'设置要执行的SQL语句,取当前最大的记录编号
sqlstmt = "SELECT MAX(Class_Id) FROM Classes"
'执行SQL语句
Set rs = queryext(sqlstmt)
'读取SELECT语句返回的查询结果
If IsNull(rs.Fields(0)) Then
GetNewId = 1
Else
GetNewId = rs.Fields(0) + 1
End If
rs.Close
cnn.Close
End Function
Public Function HaveStudent(ByVal TmpClassId As Long) As Boolean
'设置要执行的SQL语句
sqlstmt = "SELECT * FROM Students WHERE Class_id=" + Trim(Str(TmpClassId)) '执行SQL语句
Set rs = queryext(sqlstmt)
If rs.EOF Then
6
陕西国际商贸学院Oacle数据库基础教程实训报告
HaveStudent = False
Else
HaveStudent = True
End If
rs.Close
cnn.Close
End Function
Public Function HaveSon(ByVal TmpUpperId As Long) As Boolean
sqlstmt = "SELECT Class_Id FROM Classes WHERE UpperId=" _
+ Trim(Str(TmpUpperId))
Set rs = queryext(sqlstmt)
If rs.EOF Then
HaveSon = False
Else
HaveSon = True
End If
rs.Close
cnn.Close
End Function
Public Function In_DB(ByVal ClassName As String) As Boolean
sqlstmt = "SELECT Class_Id FROM Classes WHERE Class_Name='" + Trim(ClassName) + "'" Set rs = queryext(sqlstmt)
If rs.EOF Then
In_DB = False
Else
In_DB = True
End If
rs.Close
cnn.Close
End Function
Public Function Insert() As Long
7
陕西国际商贸学院Oacle数据库基础教程实训报告
Dim Class_Id As Long
'生成新的编号
Class_Id = GetNewId
' 插入记录
sqlstmt = "INSERT INTO Classes VALUES(" + Trim(Str(Class_Id)) + ",'" _ + Trim(Class_Name) + "'," + Trim(Str(UpperId)) + ")" sqlext (sqlstmt)
Insert = Class_Id
End Function
Public Sub Load_Class_ByUpper(UpperId As Long)
Dim i As Integer
Dim rs As New ADODB.Recordset
'初始化院系班级数组
Erase arr_classname
Erase arr_classid
ReDim arr_classname(0)
ReDim arr_classid(0)
sqlstmt = "SELECT Class_Id,Class_Name FROM Classes WHERE UpperId=" _ + Trim(Str(UpperId)) + " ORDER BY Class_Id"
Set rs = queryext(sqlstmt)
i = 0
Do Until rs.EOF
'读取院系班级编号
ReDim Preserve arr_classid(i + 1)
arr_classid(i) = rs.Fields(0)
'读取院系班级名称
ReDim Preserve arr_classname(i + 1)
arr_classname(i) = rs.Fields(1)
rs.MoveNext
i = i + 1
Loop
8
陕西国际商贸学院Oacle数据库基础教程实训报告
rs.Close
cnn.Close
End Sub
'更新数据
Public Sub Update(ByVal TmpId As Long)
sqlstmt = "UPDATE Classes SET Class_Name='" + Trim(Class_Name) _ + "' WHERE Class_Id=" + Trim(Str(TmpId))
sqlext (sqlstmt)
End Sub
1.3 studnets类:用来管理表students的数据库操作。
1.4 evalustion类:用来管理表evaluation的数据库操作。
1.5 users类:代码如下
Public username As String
Public UserPwd As String
Public Sub Init()
username = ""
UserPwd = ""
End Sub
'删除Users数据
Public Sub Delete(ByVal TmpUser As String)
' 不能删除系统管理员用户
If Format(TmpUser, "<") = "admin" Then
Exit Sub
End If
sqlstmt = "DELETE FROM Users WHERE UserName='" + Trim(TmpUser) + "'" sqlext (sqlstmt)
End Sub
Public Function GetInfo(ByVal TmpUser As String) As Boolean username = TmpUser
sqlstmt = "SELECT * FROM Users WHERE UserName='" + Trim(TmpUser) + "'" Set rs = queryext(sqlstmt)
9
陕西国际商贸学院Oacle数据库基础教程实训报告
If rs.EOF Then
GetInfo = False
Init
Exit Function
Else
UserPwd = Trim(rs.Fields(1))
End If
GetInfo = True
rs.Close
cnn.Close
End Function
Public Function In_DB(ByVal TmpUser As String) As Boolean
sqlstmt = "SELECT * FROM Users WHERE UserName='" + Trim(TmpUser) + "'" Set rs = queryext(sqlstmt)
If rs.EOF Then
In_DB = False
Else
In_DB = True
End If
rs.Close
cnn.Close
End Function
Public Sub Insert()
sqlstmt = "INSERT INTO Users Values('" + Trim(username) + "','" _ + Trim(UserPwd) + "')"
sqlext (sqlstmt)
End Sub
Public Sub Update(ByVal TmpUser As String)
sqlstmt = "Update Users Set UserName='" + Trim(username) _
+ "',UserPwd='" + Trim(UserPwd) + "' WHERE UserName='" _ + Trim(TmpUser) + "'"
10
陕西国际商贸学院Oacle数据库基础教程实训报告
sqlext (sqlstmt)
End Sub
登陆界面,代码如下:
Public passwordkey As String
Public namekey As String
Public try_time As Integer
Private Sub cmd_cancel_click()
End
End Sub
Private Sub cmd_ok_click()
Dim j As Single
'数据有效性检查
If txtuser = "" Then
MsgBox "请输入用户名"
txtuser.SetFocus
Exit Sub
End If
If txtpwd = "" Then
MsgBox "请输入密码"
txtpwd.SetFocus
Exit Sub
End If
namekey = MakeStr(txtuser)
passwordkey = MakeStr(txtpwd)
'判断用户是否存在
If myuser.In_DB(namekey) = False Then
MsgBox "用户名不存在"
try_time = try_time + 1
If try_time >= 3 Then
MsgBox "您已经三次尝试进入本系统,均不成功,系统将关闭" End
11
陕西国际商贸学院Oacle数据库基础教程实训报告
Else
Exit Sub
End If
End If
' 判断密码是否正确
myuser.GetInfo (namekey)
If myuser.UserPwd <> passwordkey Then
MsgBox "密码错误"
If try_times >= 3 Then
MsgBox "您已经三次尝试进入本系统,均不成功,系统将关闭" End
Else
Exit Sub
End If
End If
'登陆成功,将当前用的户信息保存在curuser中
curuser.GetInfo (myuser.username)
'关闭自己
Unload Me
End Sub
登陆界面效果图
主页面代码
Private Sub Command1_Click()
12
陕西国际商贸学院Oacle数据库基础教程实训报告
FrmClassMan.Show 1
End Sub
Private Sub Command6_Click()
End
End Sub
Private Sub Form_Load()
'连接字符串
Frmlogin.Show 1
End Sub
Private Sub mn_pwd_Click()
'如果当前用户是普通用户,则打开用户编辑窗体,编辑自己的用户信息 With FrmUserEdit
.OriUser = CurUser.UserName
.txtUserName = CurUser.UserName
.txtpass = CurUser.UserPwd
.txtpass2 = CurUser.UserPwd
.Modify = True
.Show 1
End With
End Sub
Private Sub mn_Terms_Click()
FrmTermMan.Show 1
End Sub
Private Sub mn_user_Click()
End Sub
Private Sub lblChange_Click()
FrmChangeMan.Show 1
End Sub
Private Sub lblClass_Click()
FrmClassMan.Show 1
End Sub
13
陕西国际商贸学院Oacle数据库基础教程实训报告
Private Sub lblEva_Click()
FrmEvaMan.Show 1
End Sub
Private Sub lblexit_Click()
End
End Sub
Private Sub lblStudent_Click()
FrmStuMan.Show
End Sub
Private Sub lblUsers_Click()
'如果当前用户为Admin,则打开用户管理窗体
If Format(CurUser.UserName, "<") = "admin" Then
FrmUserMan.Show 1
Else
'如果当前用户是普通用户,则打开用户编辑窗体,编辑自己的用户信息 With FrmUserEdit
.OriUser = CurUser.UserName
.txtUserName = CurUser.UserName
.txtpass = CurUser.UserPwd
.txtpass2 = CurUser.UserPwd
.Modify = True
.Show 1
End With
End If
End Sub
14
陕西国际商贸学院Oacle数据库基础教程实训报告
主窗体
院系管理界面代码
Private Sub Cmd_Add_Click()
'初始化FrmClassEdit信息
FrmClassEdit.lblUpper = CurClass.Class_Name
FrmClassEdit.txtClass = ""
FrmClassEdit.Modify = False
'打开编辑院系班级信息的窗体
FrmClassEdit.Show 1
TreeView1_Click
End Sub
Private Sub Cmd_Back_Click()
Unload Me
End Sub
Private Sub Cmd_Del_Click()
If TreeView1.SelectedItem.Key = "a0" Then
MsgBox "此项不能删除"
Exit Sub
End If
'如果当前院系班级包含下一级院系班级,则不能删除 If CurClass.HaveSon(CurClass.Class_Id) = True Then
MsgBox CurClass.Class_Name + " 包含下级院系班级,不能删除"
15
陕西国际商贸学院Oacle数据库基础教程实训报告
Exit Sub
End If
'如果院系班级中包含学生,则不能删除
If MyClass.HaveStudent(CurClass.Class_Id) = True Then
MsgBox CurClass.Class_Name + " 包含学生,不能删除"
Exit Sub
End If
'确定删除
If MsgBox("是否确定要删除 " + Trim(TreeView1.SelectedItem.Text), vbYesNo, "请确认") = vbNo Then Exit Sub
End If
Call CurClass.Delete(CurClass.Class_Id)
TreeView1.Nodes.Remove TreeView1.SelectedItem.Index
TreeView1_Click
End Sub
Private Sub Cmd_Modi_Click()
'不能修改根结点
If TreeView1.SelectedItem.Key = "a0" Then
MsgBox "此项不能修改"
Exit Sub
End If
'将当前院系班级的信息赋值到编辑院系班级信息的窗口
FrmClassEdit.lblUpper = MyClass.GetName(CurClass.UpperId)
FrmClassEdit.txtClass = CurClass.Class_Name
FrmClassEdit.Modify = True
FrmClassEdit.Show 1
TreeView1_Click
End Sub
Private Sub Cmd_Ok_Click()
FrmClassEdit.Show 1
End Sub
16
陕西国际商贸学院Oacle数据库基础教程实训报告
Private Sub Form_Load()
Dim TmpNode As Node
'设置当前的焦点院系
FocusClassName = "学校领导"
Focuskey = ""
'设置根结点
Set TmpNode = TreeView1.Nodes.Add(, , "a0", "院系信息", 1, 3)
TmpNode.ExpandedImage = 2
'调用函数将所有院系班级添加到TreeView1中
Call Add_ClassToTree(TreeView1, "a0")
TmpNode.Selected = True
TreeView1_Click
End Sub
Private Sub TreeView1_Click()
Dim Focuskey As String
'根据关键字获取院系班级信息
Focuskey = TreeView1.SelectedItem.Key
CurClass.Class_Name = TreeView1.SelectedItem.Text
CurClass.Class_Id = Val(Right(TreeView1.SelectedItem.Key, Len(TreeView1.SelectedItem.Key) - 1)) If Focuskey = "a0" Then '根结点
Exit Sub
End If
'如果包含子结点,则设置图像格式
If CurClass.HaveSon(CurClass.Class_Id) = False Then
TreeView1.SelectedItem.ExpandedImage = 4
TreeView1.SelectedItem.Image = 4
TreeView1.SelectedItem.SelectedImage = 5
End If
'读取CurClass中的所有院系班级信息
CurClass.GetInfo (CurClass.Class_Id)
End Sub
17
陕西国际商贸学院Oacle数据库基础教程实训报告
运行效果图
编辑院系信息窗体代码
Public Modify As Boolean
Private Sub Cmd_Exit_Click()
Unload Me
End Sub
Private Sub Cmd_Ok_Click()
'检查用户录入数据的有效性
If Trim(txtClass) = "" Then
MsgBox "请输入院系班级名称"
Exit Sub
End If
'将新输入的数据保存到类变量中
With MyClass
.Class_Name = MakeStr(txtClass)
'根据变量Modify决定是插入新数据,还是修改已有的数据 If Modify = False Then '插入
'调用In_DB()函数判断用户输入的名称是否已经存在 If .In_DB(.Class_Name) = True Then
MsgBox Trim(txtClass) + " 已经存在"
Exit Sub
End If
'CurClass中保存在院系班级管理窗体中选中的院系班级信息
18
陕西国际商贸学院Oacle数据库基础教程实训报告
'当插入新记录时,新记录将做为当前院系班级的下级院系班级
.UpperId = CurClass.Class_Id
Bh = .Insert
'生成TreeView中一个结点的关键字
Tmp_Key = "a" + Trim(Str(Bh))
'设置结点的图像
FrmClassMan.TreeView1.SelectedItem.Image = 1
FrmClassMan.TreeView1.SelectedItem.ExpandedImage = 2
FrmClassMan.TreeView1.SelectedItem.SelectedImage = 3
'在树中添加一个结点
Set TmpNode = FrmClassMan.TreeView1.Nodes.Add(FrmClassMan.TreeView1.SelectedItem.Key, _ tvwChild, Tmp_Key, .Class_Name, 4, 5)
TmpNode.Selected = True
Else '修改
If CurClass.Class_Name <> Trim(txtClass) Then
If .In_DB(Trim(txtClass)) = True Then
MsgBox Trim(txtClass) + " 已经存在"
Exit Sub
End If
End If
'当修改记录时,不能改变上下级之间的关系
.UpperId = CurClass.UpperId
.Update (CurClass.Class_Id)
If CurClass.Class_Name <> Trim(txtClass) Then
FrmClassMan.TreeView1.SelectedItem.Text = Trim(txtClass)
End If
'设置CurClass变量
CurClass.Class_Name = Trim(txtClass)
End If
End With
'关闭窗口
19
陕西国际商贸学院Oacle数据库基础教程实训报告
Unload Me
End Sub
Private Sub Cmd_Cancel_Click()
Unload Me
End Sub
Private Sub txtClass_KeyPress(KeyAscii As Integer)
EnterTAB (KeyAscii)
End Sub
运行效果图
6使用说明及测试结果
用户使用系统时,首先通过系统的身份认证,即登录系统。在根据用户名和密码来判断是否可能进入系统;根据用户类型决定用户拥有的权限。
在院系管理模块中,实现上级院系与下级院系的添加、修改、删除。根据用户选择类型,决定是否删除上级院系与下级院系。
7总结与体会
经过一周的课程设计,完成了一个小型的学生档案功能的编程。
从一开始的标题设想,到之后的建表,最后连接数据库,将oracle数据库与面向对象的VB结合,这之间遇到了该有的困难。从一开始的标题设想,到之后的建表,最后连接数据库,将oracle数据库与面向对象的VB结合,这之间遇到了该有的困难。
其实做了系统之后才知道其实老师上课的内容和上实验课的内容都用到了,所以操作起来困难复杂程度不是很大。建表的时候就该想到系统应该实现的功能,但是毕竟第一次也没经验,功能设想有些欠缺,所以建表的一些属性也有些不全,这是应该改进的地方,所以呢,一开始就应该想好该系统将实现的样子,这样建表才会更全。其实实现各种功能过程归根结底就是查询,修改,删除数据库的数据的过程。几天的做系统的日子,让我学到了很多,像ORCLE数据库的安装,创建数据库,并创建
20
陕西国际商贸学院Oacle数据库基础教程实训报告
用户,还有应用程序与ORCLE数据库连接,和SQL基本语句掌握了ORACLE的SQL基本语句,可在应用程序中对ORACLE数据库进行基本操作.
理解ORACLE的基本特点如:“.采用标准的SQL结构化查询语言。“.支持大型数据库,数据类型支持数字、字符、大至4GB的二进制数据,为数据库的面向存储提供数据支持。”
8参考文献
《Oracle数据库基础教程》 编著:王瑛、张玉花、李祥胜、李晓黎 人民邮电出版社
21