中国地质大学武汉数据库实习报告.docx
《中国地质大学武汉数据库实习报告.docx》由会员分享,可在线阅读,更多相关《中国地质大学武汉数据库实习报告.docx(24页珍藏版)》请在冰豆网上搜索。
中国地质大学武汉数据库实习报告
数据库系统课程设计
学生姓名:
孙国欢
班学号:
113131-05
指导老师:
刘福江
中国地质大学信息工程学院
2015年6月
1.需求分析
1.1需求说明
该系统包括教师、学生、班级、系和课程等信息,基本情况如下:
教师有工作证号、姓
名、职称、电话等;学生有学号、姓名、性别、出生年月等;班级有班号、最低总学分等;
系有系代号、系名和系办公室电话等;课程有课序号、课名、学分、上课时间及名额等。
每
个学生都属于一个班,每个班都属于一个系,每个教师也都属于一个系l每个班的班主任都由一名教师担任。
一名教师可以教多门课,一门课可以有几位主讲老师,但不同老师讲的同一门课其课序号是不同的(课序号是唯一的)。
一名同学可以选多门课,一门课可被若干同学选中。
一名同学选中的课若已学完,应该记录有相应成绩。
本单位学生、教师都有重名,
工作证号、学号可以作为标识。
教学系统主要提供数据维护、选课和信息查询。
其中常见的
查询有:
系统中各对象的基本信息查询。
查询指定班、系的学生信息(名单、人数等)。
查询学生的成绩、学分情况。
查询教师授课情况和学生选课情况。
。
。
等等。
1.2需求理解
设计一个教务管理系统需要实现以下三个功能:
数据维护:
数据内容的维护(无错漏、无冗余、无有害数据)、数据更新、数据逻辑一致性等方面的维护。
选课:
学生对学校所开设的课程有一定的选择自由,包括选择课程、任课教师和上课时间,选择适合自己的学习量和学习进程。
信息查询:
点击教务系统进行信息的获取与咨询。
信息查询的需要实现以下四个功能:
查询系统中各对象的基本信息
查询指定班、系的学生信息(名单、人数等)
查询学生的成绩、学分情况
查询教师授课情况和学生选课情况
整个教务系统中各个对象的分析:
学生:
正在学校、学堂或其他学习地方受教育的人。
每个学生有一个唯一的确定其身份的学号,学号由11位数字组成。
前四位为其入学年份,中间三位为数字“100”,后四位为随机编号。
每位学生有自己的姓名,姓名为20个字节,但不同的同学可能姓名相同。
学生分为两种性别:
“男”和“女”。
学生还记录有出生年月的信息,为20个字节的长度。
每个学生都属于一个班级,学生的别名为student。
教师:
受过专门教育和训练的人,并在学校中担任教育教学工作的人。
每个教师都有一个唯一确定其身份的工作证号,工作证号为6位字符型。
每位老师都有自己的名字,姓名为字符型,10个字符,不同的老师可能姓名相同。
每位老师都有一个职称,职称分为:
助教、讲师、副教授、教授。
职称是字符型,三个字符。
每位教师都在教务科留下其电话号码,字符型11位。
每位教师都属于一个系,教师的别名是teacher。
系:
高等院校按照专业性质设置的教学行政单位。
每个系都有唯一表示它的系代号,为三位数字。
系有系名,不同的系的系名不相同。
系办公室有电话号码,7位。
系下属班级,系的别名是depart。
班级:
学校的基本单位,通常由一位或几位学科教师与一群学生共同组成。
班级有一个唯一识别它的班级序号,共六位。
前三位是专业代号,中间两位是班级成立的年份,最后一位是同专业的班级序号。
每个班级对应有一个应修最低总学分,班级隶属于系。
每个班都有一名担任班主任的教师,班级的别名是class。
课程:
学校学生所应学习的学科总和及其进程与安排。
课程有一个唯一的课序号(8位),课程名称(30位),学分(2位),上课时间(10个字符)及名额(5位)。
课程的别名是course。
1.3系统结构图
1.4数据字典
1.5数据流图
2.概念设计
2.1分E-R图
2.2总E-R图
3.逻辑结构设计
3.1E-R模型转换
3.1.1实体间的联系分析
(1)系和班级间的联系是1:
N的联系,可以转化为一个独立的关系模式,也可以与N端对应的关系模式合并。
这里选择将该联系与N端对应的关系模式合并,则在班级实体中加一个“所在系号”的属性。
(2)班级和学生间的联系是1:
N的联系,可以转化为一个独立的关系模式,也可以与N端对应的关系模式合并。
这里选择将该联系与N端对应的关系模式合并,则在学生实体中加一个“所在班号”的属性。
(3)系和教师间的联系是1:
N的联系,可以转化为一个独立的关系模式,也可以与N端对应的关系模式合并。
这里选择将该联系与N端对应的关系模式合并,则在教师实体中加一个“所在系号”的属性。
(4)班级和教师间的联系是1:
1的联系,可以转化为一个独立的关系模式,也可以与任意一端端对应的关系模式合并。
这里选择与班级对应的关系模式合并,则需要在班级的关系模式中加入关系模式的码,及在班级实体中加入一个“班主任工作证号”的属性。
(5)学生与课程间的联系为M:
N的联系,需要转换成一个关系模式,与该联系相连的各实体的码及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
在这里建立一个学生课程关系模式,将学号和课程号作为该关系模式的主码,成绩也是该关系模式的一个属性。
即学生课程(学号,课程号,成绩)。
(6)教师与课程间的联系为M:
N的联系,需要转换成一个关系模式,与该联系相连的各实体的码及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
在这里建立一个教师课程关系模式,将教师工作证号和课程号为该关系模式的主码。
即教师课程(工作证号,课程号)。
3.1.2关系模式
(1)Student(S_Num,S_Birth,S_Name,S_Sex)
在此关系模式中,U={S_Num,S_Birth,S_Name,S_Sex}
F={S_Num->S_Birth,S_Num->S_Name,S_Num->S_Sex}
因为S_Num->{S_Num,S_Birth,S_Name,S_Sex}所以S_Num为关系模式的主码
因此该关系模式为Student(S_Num,S_Birth,S_Name,S_Sex)
(2)Teacher(T_Num,T_Name,T_Title,T_Phone)
在此关系模式中,U={T_Num,T_Name,T_Title,T_Phone}
F={T_Num–>T_Name,T_Num–>T_Title,T_Num–>T_Phone}
因为T_Num–>{T_Num,T_Name,T_Title,T_Phone}
所以T_Num为关系模式的主码
因此该关系模式为Teacher(T_Num,T_Name,T_Title,T_Phone)
(3)Depart(X_Num,X_Name,X_Phone)
在此关系模式中,U={X_Num,X_Name,X_Phone}
F={X_Num->X_Name,X_Num->X_Phone}
因为X_Num->{X_Num,X_Name,X_Phone}
所以该关系模式为Depart(X_Num,X_Name,X_Phone)
(4)Class(C_Num,C_Credit)
在此关系模式中,U={C_Num,C_Credit}
因为C_Num->{C_Num,C_Credit}
所以该关系模式为Class(C_Num,C_Credit)
3.2模型优化
3.3用户子模式设计
由用户的需求分析和概念结构设计,最终设计了名为教务管理数据库的数据库,数据库中的表如下所示:
表1:
登录信息表
记录号
字段名称
数据类型
字段大小
属性(是否可为空)
1
用户名
text
16
否
2
密码
text
16
否
3
权限
text
16
否
表2:
系别信息表
记录号
字段名称
数据类型
字段大小
属性(是否可为空)
1
系编号
int
4
主键
2
系名
nvarchar
50
是
3
系主任
nvarchar
50
是
表3:
学生信息表
记录号
字段名称
数据类型
字段大小
属性(是否可为空)
1
学生编号
char
10
主键
2
学生姓名
nvarchar
50
是
3
学生性别
char
10
是
4
年龄
int
4
是
5
身份证号
nvarchar
50
是
6
所在系
nvarchar
50
是
表4:
课程信息表
记录号
字段名称
数据类型
字段大小
属性(是否可为空)
1
课程编号
Int
4
主键
2
课程名
nvarchar
50
否
3
任课老师
nvarchar
50
是
4
课程学分
float
8
是
5
开课院系
nvarchar
50
是
6
课程简介
nvarchar
16
是
表5:
成绩信息表
记录号
字段名称
数据类型
字段大小
属性(是否可为空)
1
学生编号
char
10
主键
2
课程编号
Int
4
主键
3
平时成绩
char
8
是
4
考试成绩
char
8
是
4.物理设计
4.1物理设计阶段的目标与任务
数据库的物理设计就是为逻辑数据模型选取一个最合适应用要求的物理结构的过程,在这个阶段中要完成两大任务:
(1)确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构;
(2)对物理结构进行评价,评价的重点是时间和空间效率。
4.2建立数据表
4.2.1学生信息基本表的建立:
CREATETABLEStudent
(SnoCHAR(8)PRIMARYKEY,
UnameCHAR(8)UNIQUE,
SexCHAR
(2),
Sdept(8),
Classno(8),
Connecttel(11),
Enterdate(8),
Familyadd(50)
);
4.2.2课程信息表的建立:
CREATETABLECourse
(CoursecodeCHAR(20)PRIMARYKEY,
CoursetypeCHAR(8),
CoursegradeCHAR(8)
);
4.2.3教师信息表的建立:
CREATETABLETeacher
(TnoCHAR(8)PRIMARYKEY,
TnameCHAR(8)UNIQUE,
Tdepartment(8),
Tmoible(11),
);
4.2.4考试信息表的建立:
CREATETABLEExam
(SnoCHAR(8),
CoursecodeCHAR(20),
PRIMARYKEY(Sno,Coursecode),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Coursecode)REFERENCESCourse(Coursecode)
);
4.2.5讲授信息表的建立:
CREATETABLETeaching
(TnoCHAR(8),
CoursecodeCHAR(20),
PRIMARYKEY(Tno,Coursecode),
FOREIGNKEY(Tno)REFERENCESTeacher(Tno),
FOREIGNKEY(Coursecode)REFERENCESCourse(Coursecode)
);
5.系统实施与系统维护
1、针对不同的应用要求制定不同的转储计划,一旦发生故障尽快将数据库恢复到某种一致的状态,并尽可能减少对数据库的破坏;
2、根据实际情况修改数据库原有的安全性、完整性控制;
3、在数据库运行过程中,监督系统运行,对监测数据进行分析,找出改进系统性能的方法;
4、数据库运行一段时间后,由于记录不断增、删、改,会使数据库的物理存储情况变坏,降低数据的存取效率,数据库性能下降。
这时应按原设计要求重新安排存储位置、回收垃圾、减少指针链等,提高系统性能。
当原有的数据库设计不能满足新的需求,需要重构造数据库,调整数据库的模式和内模式。
6.附录
(1)登录界面的设计
本系统的登录界面上主要有用户名、密码和用户权限三部分内容。
用户若想进入系统,就必须给出正确的用户名和密码,而且要选择正确的用户权限。
如果用户输入的用户名不存在或者密码与用户名不一致或者与用户权限不一致,都会给出相应的提示信息,告诉用户出现的错误输入。
而且,如果用户进行错误的输入超过三次时,系统会自动退出。
实现这一功能的说明如下:
函数开始:
建立连接,利用Fill()函数在Systerm.Data.DataSet的指定范围中添加或刷新行,以与使用Systerm.Data.DataSet名称中的数据源中的行相匹配。
OleDbDataAdapter1.Fill(dt)
利用For循环,判断循环次数是否小于所有记录的个数
Fori=0Todt.Rows.Count-1
If(用户名、密码和用户权限三者匹配时)Then
Me.Hide()
Me.Finalize()
Me.AddOwnedForm(myform)
显示主窗体
If(用户权限=用户)Then
隐藏主窗体中的部分功能
myform.系统用户管理ToolStripMenuItem.Enabled=False
myform.教务信息管理ToolStripMenuItem.Enabled=False
myform.学生资料查询ToolStripMenuItem.Enabled=False
Else
什么也不做
EndIf
退出For循环
EndIf
Next
If(i>=dt.Rows.Count即在所有记录中都没有找到与用户输入的值相同的)Then
说明在所有记录中都没有找到与之匹配的用户名、密码和用户权限Then
弹出MsgBox,警告用户出现错误
MsgBox("用户名与密码与用户权限不匹配!
请验证后重新输!
",MsgBoxStyle.Exclamation,"警告")
将密码对应的文本框中的内容置空
EndIf
If(重复输入的次数超过3次)Then
弹出弹出MsgBox,警告用户出现错误
MsgBox("你输入的次数已经超过了3次!
系统将退出!
",MsgBoxStyle.Exclamation,"警告")
退出
EndIf
函数结束
(2)信息管理模块的设计:
信息管理模块的三种操作,主要是添加记录,修该记录,删除记录三大功能。
而且在执行各项功能时都会给出足够的提示信息,例如进入时的提示信息,有些信息不能为空的提示,以及操作成功的提示信息。
(a)下面以系别管理模块中添加院系来说明如何添加记录的,说明如下:
函数开始:
添加记录时给出提示信息,等待用户确认
S=MsgBox("您确定要增加记录吗?
",36,"提示")
If(S<>6即用户选择的是取消按钮)Then
退出函数
EndIf
If(系名对应的文本框为空)Then
MsgBox("系名不能为空!
")
退出函数
EndIf
If(系主任对应的文本框为空)Then
................
ElseIf(S=6即用户选择的是确定按钮)Then
利用count()函数来返回所有记录的个数
然后让个数加1作为下一个记录的编号
i=Me.BindingContext(DataSet1,"系别信息").Count+1
新建一个表示内存中数据的一个表tmptable
tmptable=DataSet1.Tables("系别信息")
打开连接
OleDbConnection1.Open()
构造插入语句
DimtmpcommandAsNewSystem.Data.OleDb.OleDbCommand("insertinto系别信息(系编号,系名,系主任)values('"&i&"','"&TextName.Text&"','"&TextMan.Text&"')",OleDbConnection1)
异常处理
Try
tmpcommand.ExecuteNonQuery()
CatchfillExceptionAsSystem.Exception
MsgBox("获得错误信息:
"&fillException.Message)
EndTry
将数据集中的记录清空
DataSet1.Clear()
将更改后的所有记录在填入数据集
OleDbDataAdapter1.Fill(DataSet1,"系别信息")
关闭连接
OleDbConnection1.Close()
添加成功后弹出MsgBox提示用户已完成
MsgBox("添加记录成功!
",MsgBoxStyle.OkOnly,"提示")
EndIf
函数结束
(b)下面以课程管理模块中修改课程来说明是如何修改记录的,说明如下:
函数开始:
修改记录时给出提示信息,等待用户确认
If(S<>6即用户选择的是取消按钮)Then
退出函数
EndIf
If(课程名对应的文本框为空)Then
MsgBox("课程名不能为空!
")
退出函数
EndIf
If(任课老师对应的文本框为空)Then
...............
ElseIf(S=6即用户选择的是确定按钮)Then
新建一个表示内存中数据的一个表tmptable
tmptable=DataSet1.Tables("课程信息")
打开连接
构造更新语句,来完成对数据的修改操作
DimtmpcommandAsNewSystem.Data.OleDb.OleDbCommand("Update课程信息set课程编号='"&TextID.Text&"',课程名='"&TextName.Text&"',任课老师='"&TextTeacher.Text&"',课程学分='"&TextPoint.Text&"',开课院系='"&ComDepart.Text&"',课程简介='"&TextAbout.Text&"'where课程编号='"&TextID.Text&"'",OleDbConnection1)
异常处理
清空DataSet对象并重新赋值
关闭连接
MsgBox("您的修改以被受理,更新成功!
",MsgBoxStyle.OkOnly,"提示")
EndIf
函数结束
(c)下面以学生管理模块中删除学生资料来说明是如何删除记录,说明如下:
函数开始:
删除记录时给出提示信息,等待用户确认
S=MsgBox("您确定要删除记录吗?
",36,"提示")
If(S=6即用户选择了确定按钮)Then
新建一个表示内存中数据的一个表tmptable
tmptable=DataSet1.Tables("学生信息")
打开连接
构造删除语句,来完成对数据的删除操作
DimtmpcommandAsNewSystem.Data.OleDb.OleDbCommand("deletefrom学生信息where学生编号='"&TextID.Text&"'",OleDbConnection1)
异常处理
清空DataSet对象并重新赋值
关闭连接
MsgBox("记录已经成功删除!
",MsgBoxStyle.OkOnly,"提示")
EndIf
函数结束
(3)信息查询模块的功能设计
查询模块主要包括学生资料查询和学生资料查询两个子模块。
而且查询时会给出相应的信息来告诉用户如何来做,什么不能为空,查询成功时也会给出相应的提示信息
(a)学生资料查询是一种模糊查询,可以根据给出部分信息进行查询,说明如下:
函数开始:
If(所有的可输入条件的文本框的内容都为空)
则弹出提示的Msgbox,告诉用户条件不能都为空
MsgBox("请选择一种查询条件!
不能都为空!
")
Else
新建一个表示内存中数据的一个表tmptable
打开连接
tmptable=DataSet5.Tables("学生信息")
构造查询语句,选择出满足条件的记录
DimtmpcommandAsNewSystem.Data.OleDb.OleDbCommand("select*from学生信息where学生编号LIKE'%"&Textid.Text&"%'AND学生姓名LIKE'%"&Textname.Text&"%'AND学生性别LIKE'%"&Textsex.Text&"%'AND年龄LIKE'%"&Textage.Text&"%'AND身份证号LIKE'%"&Textcard.Text&"%'AND所在系LIKE'%"&TextDepartment.Text&"%'",OleDbConnection1)
执行SQL语句并返回受影响的行数
tmpcommand.ExecuteNonQuery()
将查询对话框中的所有文本框的内容都置空
清空DataSet对象并重新赋值
DataSet5.Clear()
OleDbDataAdapter1.SelectCommand=tmpcommand
OleDbDataAdapter1.Fill(DataSet5)
关闭连接
MsgBox("查询成功!
",MsgBoxStyle.OkOnly,"提示")
EndIf
函数结束
(b)学生成绩查询是选择条件进行查询,说明如下:
PrivateSubBtQuery_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)
HandlesBtQuery.Click
函数开始:
If(依据对应的组合框的内容为空)Then
.............
Else
新建一个表示内存中数据的一个表tmptable
打开连接
tmptable=DataSet6.Tables("成绩信息")
构造查询语句,查询出满足条件的记录
Dimtmpcommand