sqlserver实验报告.docx
《sqlserver实验报告.docx》由会员分享,可在线阅读,更多相关《sqlserver实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
![sqlserver实验报告.docx](https://file1.bdocx.com/fileroot1/2022-11/25/b779a2e6-d65d-44e2-a577-58d5d28f0335/b779a2e6-d65d-44e2-a577-58d5d28f03351.gif)
sqlserver实验报告
《SQLServer高级数据库设计》课程综合性实验报告
开课实验室:
软件实验室一2008年4月21日
实验题目
信息管理系统的设计(学生信息管理系统)
一、实验目的:
使用SQLServer2000作为数据库管理系统,制作一个小型信息管理系统。
培养学生使用数据库独立完成小型项目的能力。
二、实验设备及环境:
1.硬件设备:
PC机一台
2.软件环境:
安装Windows操作系统,安装数据库管理系统SQLServer2000。
三、实验内容:
(1)需求分析:
1、经调查知整个学生档案管理的业务流程描述如下:
☆新生入校,先报道并进行注册登记,然后到财务部门缴费。
根据学生被录取的专业,持缴费单到所在系部或注册。
☆到系部注册后,根据所选专业分配到班级。
☆学期期末进行各科考试
☆考试结束后,由各系将每位同学的考试成绩及其他一些相关信息记录至每个同学的档案中
2、用户需求分析
☆该系统的操作者为系统管理员。
☆系统管理员:
入学时,负责对学生的分配信息进行录入、修改、增加、删除;学期末,负责对学生的考试信息和奖惩情况进行管理。
(2)概要设计:
1、由
(1)中的需求分析可得出该系统的业务流程图,如下所示
2、创建数据库
数据库名为xs,该数据库由七个数据表构成,分别为:
▲学生信息表(xsXJ):
学号、姓名、性别、政治面貌、出生日期、专业、班级、家庭住址、联系电话、备注。
其中,学号为该数据表的主键。
▲课程信息表(xsKC):
课程名称,所属专业
▲专业信息表(xsZY):
专业编号、专业名称。
其中,专业编号为该数据表的主键。
▲班级信息表(xsBJ):
班级编号、所属院系、辅导员、教室、人数。
其中,班级名称为该数据表的主键,用于记录学生所在班级的信息。
▲成绩信息表(xsCJ):
学号、姓名、专业、课程名称、成绩。
其中,学号和课程名称共同构成该数据表的主键。
▲用户表(xsYH):
用户名称、密码、用户ID。
用于系统对操作员的设置。
▲操作日记表(xsOD):
用户名、登陆日期、登陆时间。
用于记录系统的使用情况。
3、实体图和E-R图
经分析可提取出学生、课程、专业、班级这四个实体,实体图分别如下:
4、各表的结构
表1学生信息表(xsXJ)
字段名
类型长度
关键字
学号
字符,15
是
姓名
字符,20
否
性别
字符,5
否
政治面貌
字符,12
否
出生日期
日期型
否
专业
字符,20
否
班级
字符,20
否
家庭住址
字符,50
否
联系电话
字符,15
否
备注
字符,50
否
表2课程信息表(xsKC)
字段名
类型长度
关键字
课程名称
字符,20
是
所属专业
字符,20
否
表3专业信息表(xsZY)
字段名
类型长度
关键字
专业编号
字符,20
是
所属院系
字符,20
否
表4班级信息表(xsBJ)
字段名
类型长度
关键字
班级名称
字符,20
是
所属院系
字符,20
否
辅导员
字符,10
否
教室
字符,15
否
人数
字符,3
否
表5成绩信息表
字段名
类型长度
关键字
学号
字符,15
是
姓名
字符,20
否
专业
字符,20
否
课程编号
整形,IDENTITY
否
课程名称
字符,20
是
成绩
字符,3
否
表6用户表(xsYH)
字段名
类型长度
关键字
学号
字符,15
是
姓名
字符,20
否
用户密码
字符,15
否
用户ID
字符,20
否
(3)详细设计:
1、通过VB创建登陆界面:
输入用户名和密码后,单击“确定”按钮。
此时,程序通过与数据库的连接,查看用户名和密码是否匹配。
若匹配,则可以进入frmmain界面。
这里的“确定”和“退出”按钮创建的是一个按钮控件组,在程序中采用case来实现选择。
可以选中“记住密码”,方便下次的登陆。
若是新用户,通过“新用户注册”按钮进入frmNewUser界面,进行用户注册。
2、通过VB创建frmmain界面:
通过菜单进行选择,然后进入相应的界面,例如“学籍管理”→“添加学生学籍”,将进入学籍管理模块中的“添加学生学籍”的界面。
3、通过VB创建学籍管理界面:
整个界面主要由一个SSTAB控件构成,在“添加学生学籍”、“查询修改学生信息”、“注销学生学籍”中,创建了大量的控件数组,通过数组来实现数据的传送,这样避免了程序的冗繁。
同时,在form的操作中,使用了大量的字段绑定。
而且,在该模块的任何一个界面上,随时都可以单击“退出学籍管理”按钮,退回到frmMain模块。
学籍管理模块是整个系统的主要模块,具体功能的实现,下面做具体的做介绍:
□添加学生学籍:
该界面包括一个文本控件组,在单击“添加”按钮时,若信息没有输入完整,提示输入完整的信息。
若输入的学号在数据库中已经存在,提示“已经存在学号为**的学生,请重新输入。
”若添加成功,相应的也会显示添加成功的提示信息。
此时,该学生的信息已成功的添加到数据库中,在下面的datagrid控件中可以观察到。
这里调用了一个inputXJ_info函数以实现添加的功能。
“清空”按纽是为了一次性删除所输入的信息,避免一项一项地删除。
□查询修改学生学籍:
在查询的过程中,可以按学号或姓名进行精确查询,也可以按姓进行模糊查询。
所有的查找信息都出现在下面的datagrid控件中。
这里的“班级”、“专业”、“政治面貌”都进行了字段绑定。
实现修改功能时,调用了ChangeXj_info函数。
修改完毕以后,通过数据控件的refresh属性,实现对数据库的修改。
上一条和下一条按钮只是为了方便删除,当在第一条依然按下“上一条”时,出现已是第一条的提示;当在最后一条仍然按下“下一条”时,出现已经是最后条的提示。
□注销学生学籍:
模块用于实现对学生学籍的注销,可以在frame1中查找后再注销,也可以直接在frame2中一条一
条地进行注销。
查询的功能跟上面一个界面的一样,可以进行精确和模糊查询。
(4)编码(学籍管理模块的编码)
DimmiCountAsInteger
PrivateconnAsADODB.Connection
PrivatersXJAsADODB.Recordset
PrivatersZYAsADODB.Recordset
PrivatersBJAsADODB.Recordset
PrivatersZZAsADODB.Recordset
PrivatersAsADODB.Recordset
Dimprint_IDAsInteger
PrivateSubCommand7_Click()
SetDataGrid3.DataSource=rsXJ
DataGrid3.Refresh
EndSub
PrivateSubForm_Load()
Setconn=NewADODB.Connection
conn.ConnectionString="DRIVER=SQLServer;UID=sa;DATABASE=xs;WSID=B86;APP=MicrosoftDataAccessComponents;SERVER=B86"
conn.Open'连接数据源
Setrs=NewADODB.Recordset
rs.CursorLocation=adUseClient
rs.Open"xsXJ",conn,1,1
SetrsXJ=NewADODB.Recordset'设置连接学生学籍
rsXJ.CursorLocation=adUseClient
rsXJ.Open"xsXJ",conn,2,2
SetDataGrid1.DataSource=rsXJ
DataGrid1.Refresh
SetDataGrid2.DataSource=rsXJ
DataGrid2.Refresh
SetDataGrid3.DataSource=rsXJ
DataGrid3.Refresh
SetrsZY=NewADODB.Recordset'设置连接的专业
rsZY.CursorLocation=adUseClient
rsZY.Open"xsZY",conn,1,1
SettxtZhuanye.DataSource=rsZY
txtZhuanye.AddItem"专业名称"
SettxtXJZhuanye.DataSource=rsZY
txtXJZhuanye.AddItem"专业名称"
'SettxtXJdelINFO(3).DataSource=rsZY
'txtXJdelINFO(3).DataField="专业名称"
SetrsBJ=NewADODB.Recordset'设置连接的班级
rsBJ.CursorLocation=adUseClient
rsBJ.Open"xsBJ",conn,1,1
SettxtBanji.DataSource=rsBJ
txtBanji.AddItem"班级名称"
SettxtXJBj.DataSource=rsBJ
txtXJBj.AddItem"班级名称"
SettxtXJBanji.DataSource=rsBJ
txtXJBanji.AddItem"班级名称"
SettxtXJdelBJ.DataSource=rsBJ
txtXJdelBJ.AddItem"班级名称"
'SettxtXJdelINFO(4).DataSource=rsBJ
'txtXJdelINFO(4).DataField="班级名称"
SetText1(0).DataSource=rsXJ'绑定字段
SetText1
(1).DataSource=rsXJ
SettxtXJsex.DataSource=rsXJ
SettxtXJmianmao.DataSource=rsXJ
SettxtXJDate.DataSource=rsXJ
SettxtXJZhuanye.DataSource=rsXJ
SettxtXJBanji.DataSource=rsXJ
SetText1
(2).DataSource=rsXJ
SetText1(3).DataSource=rsXJ
SetText1(4).DataSource=rsXJ
Text3(0).DataField="学号"
Text3
(1).DataField="姓名"
txtXJsex.DataField="性别"
txtXJmianmao.DataField="政治面貌"
txtXJDate.DataField="出生日期"
txtXJZhuanye.DataField="专业"
txtXJBanji.DataField="班级"
Text3
(2).DataField="家庭住址"
Text3(3).DataField="联系电话"
Text3(4).DataField="备注"
Fori=0To9
SettxtXJdelINFO(i).DataSource=rsXJ
Next
txtXJdelINFO(0).DataField="学号"
txtXJdelINFO
(1).DataField="姓名"
txtXJdelINFO
(2).DataField="性别"
txtXJdelINFO(3).DataField="专业"
txtXJdelINFO(4).DataField="班级"
txtXJdelINFO(5).DataField="政治面貌"
txtXJdelINFO(6).DataField="出生日期"
txtXJdelINFO(7).DataField="家庭住址"
txtXJdelINFO(8).DataField="联系电话"
txtXJdelINFO(9).DataField="备注"
EndSub
PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)
OnErrorResumeNext
rsXJ.Close
rsBJ.Close
rsZY.Close
Me.Hide
EndSub
PrivateSubCommand1_Click()'退出系统
OnErrorResumeNext
rsXJ.Close
rsBJ.Close
rsZY.Close
conn.Close
UnloadMe
EndSub
PrivateSubcmdAdd_Click()
Fori=0To2
IfTrim(Text1(i).Text="")Then
MsgBox"请输入完整的信息!
",vbOKOnly+vbQuestion,"提示"
Text1(i).SetFocus
ExitSub
EndIf
Next
IftxtZhuanye.Text=""OrtxtBanji.Text=""ThenMsgBox"请选择学生的专业和班级!
",vbOKOnly+vbQuestion,"提示":
ExitSub
IftxtMianmao.Text=""ThenMsgBox"请选择学生的政治面貌!
",vbOKOnly+vbQuestion,"提示":
txtMianmao.SetFocus:
ExitSub
IfNot(OptmOrOptw)ThenMsgBox"请选择学生的性别!
",vbOKOnly+vbQuestion,"提示":
ExitSub
inputXS_info'写入到学生数据库
EndSub
SubinputXS_info()'添加学生学籍到数据库
DimtxtsqlAsString
txtsql="select*fromxsXJwhere学号='"&Trim(Text1(0).Text)&"'"
Setrs=NewADODB.Recordset
rs.CursorLocation=adUseClient
rs.Opentxtsql,conn,1,1
Ifrs.EOF=FalseThen
MsgBox"数据库中已经存在学号为:
"&Text1(0).Text&"的学生!
请重新输入!
",vbOKOnly,"警告"
cmdXJcls_Click'清空
Text1(0).SetFocus
Else
rsXJ.AddNew'添加到新记录
rsXJ.Fields(0)=Text1(0).Text
rsXJ.Fields
(1)=Text1
(1).Text
IfOptwThen
rsXJ.Fields
(2)="男"
Else
rsXJ.Fields
(2)="女"
EndIf
rsXJ.Fields(5)=txtMianmao.Text
rsXJ.Fields(6)=txtDate.Value
rsXJ.Fields(3)=txtZhuanye.Text
rsXJ.Fields(4)=txtBanji.Text
rsXJ.Fields(7)=Text1
(2).Text
IfTrim(Text1(3).Text="")Then
rsXJ.Fields(8)="空"
Else
rsXJ.Fields(8)=Text1(3).Text
EndIf
IfTrim(Text1(4).Text="")Then
rsXJ.Fields(9)="空"
Else
rsXJ.Fields(9)=Text1(4).Text
EndIf
rsXJ.Update
DataGrid1.Refresh
MsgBox"学生学籍已经成功加入到数据库中!
",vbOKOnly+vbInformation,"提示"
cmdXJcls_Click'清空
Text1(0).SetFocus
EndIf
EndSub
PrivateSubcmdXJcls_Click()
OnErrorResumeNext
Fori=0To4
Text1(i).Text=""
Next
Optm.Value=0:
Optw.Value=0
txtMianmao.Text=""
txtZhuanye.Text=""
txtBanji.Text=""
Text1(0).SetFocus
EndSub
PrivateSubcmdXJfind_Click()'查询
IfOpt1.ValueAndTrim(txtXuehao.Text="")ThenMsgBox"请输入学号!
",vbOKOnly+vbInformation,"提示":
txtXuehao.SetFocus:
ExitSub
IfOpt2.ValueAndTrim(txtName.Text="")ThenMsgBox"请输入姓名!
",vbOKOnly+vbInformation,"提示":
txtName.SetFocus:
ExitSub
IfCheck1.ValueAndtxtXJBj.Text=""ThenMsgBox"请选择班级!
",vbOKOnly+vbInformation,"提示":
txtXJBj.SetFocus:
ExitSub
xsXJfind_info'学籍查询模块
EndSub
SubxsXJfind_info()'学籍查询模块
DimtxtsqlAsString
IfOpt1.ValueThen
IfCheck1.ValueThen
txtsql="selcet*fromxsXJwhere学号='"&Trim(txtXuehao.Text)&"'"&"and班级='"&Trim(txtXJBj.Text)&"'"
Else
txtsql="select*fromxsXJwhere学号='"&Trim(txtXuehao.Text)&"'"
EndIf
Else
IfCheck1.ValueThen'按姓名进行模糊查询
txtsql="select*fromxsXJwhere姓名like'"&"%"&Trim(txtName.Text)&"%"&"'"&"and班级='"&Trim(txtXJBj.Text)&"'"
Else
txtsql="select*fromxsxjwhere姓名like'"&"%"&Trim(txtName.Text)&"%"&"'"
EndIf
EndIf
Setrs=NewADODB.Recordset
'rs.Close
rs.Opentxtsql,conn,1,1
Ifrs.EOF=FalseThen
rs.MoveFirst
SetDataGrid2.DataSource=rs
DataGrid2.Refresh
Fori=0To4
SetText3(i).DataSource=rs
Next
SettxtXJsex.DataSource=rs'绑定字段
SettxtXJmianmao.DataSource=rs
SettxtXJDate.DataSource=rs
SettxtXJZhuanye.DataSource=rs
SettxtXJBanji.DataSource=rs
Else
MsgBox"没有找到符合条件的记录!
请重新输入查询条件!
",vbOKOnly+vbInformation,"提示"
EndIf
EndSub
PrivateSubCommand2_Click()'显示全部
SetDataGrid2.DataSource=rsXJ
DataGrid2.Refresh
EndSub
PrivateSubcmdXJchange_Click()'修改
IfcmdXJchange.Caption="修改"Then
cmdXJchange.Caption="确认修改"
Fori=0To4
Text3(i).Enabled=True
Next
txtXJmianmao.Enabled=True
txtXJDate.Enabled=True
txtXJZhuanye.Enabled=True
txtXJBanji.Enabled=True
txtXJsex.Enabled=True
Else
cmdXJchange.Caption="修改"
changexj_info'修改学生信息
Fori=0To4
Text3(i).Enabled=False
Next
txtXJmianmao.Enabled=False
txtXJDate.Enabled=False
txtXJZhuanye.Enabled=False
txtXJBanji.Enabled=False
txtXJsex.Enabled=False
EndIf
EndSub
Subchangexj_info()
Fori=0To2
IfTrim(Text3(i).Text="")Then
MsgBox"请输入完整的信息!
",vbOKOnly+vbInformation,"提示"
ExitSub
EndIf
Next
rsXJ.Fields(0)=Text3(0).Text'修改数据
rsXJ.Fields
(1)=Text3
(1).Text
rsXJ.Fields
(2)=txtXJsex.Text
rsXJ.Fields(5)=txtMianmao.Text
rsXJ.Fields(6)=txtDate.Value
rsXJ.Fields(3)=txtXJZhuanye.Text
rsXJ.Fields(4)=txtXJBanji.Text
rsXJ.Fields(7)=Text3
(2).Text
IfTrim(Text3(3).Text="")Then
rsXJ.Fie