1、学籍管理系统 数据库课程设计 作者: 日期:2 个人收集整理 勿做商业用途 课程设计报告科 目: 设计题目: 学生学籍管理系统 专 业: 计算机系软件工程0402班 姓 名: XXXXX 学号: XXXXXXX 目 录绪论2数据库设计21需求分析。.21。1数据需求。.21。2功能需求。.32数据库设计。.32.1概念结构设计。.42。2逻辑结构设计。52。3物理结构设计.。63系统功能设计。84系统功能实现.94。1程序的运行环境.94.2系统的开发环境。.94。3数据库的创建和链接.9 4。4运行界面及其对应的源代码.105实验总结.236参考文献.23绪 论学生学籍管理是教育教学单位不可
2、缺少的部分,它的内容对教学管理和学校的决策者都非常重要。给学校教学管理提供了很大的方便性,提高了工作效率。但是一直以来人们用传统人工的方式管理文件文档,这种管理方式效率低,保密性差,出错不易更改,同时也耗费了大量的人力财力,时间一长,将产生大量的文件数据,这对于查找,维护,更新都带来了很大的困难.随着科学技术的不断发展,尤其是计算机软件水平的日益提高,使得以上问题得到了很好的解决。使用计算机可以方便的对大量数据进行增加,删除,更新等操作.它有着人工管理永远无法比拟的优点: 检索迅速,查找方便,可靠性大,存储量大,保密性好,寿命长,成本低等。例如:通过校园网,我们可以方便的进行学生信息查询,学生
3、成绩的添加,以及最新的教务通知等。当然,这些都离不开数据库技术和网络技术的支持。数据库是数据管理的最新技术,是计算机计算机技术的重要分支,也是计算机领域发展最快的学科之一。学生学籍管理系统就是数据库在网络上应用。综上,开发这样的一套软件十分必要。同时旧的人工管理机制必将被以计算机为基础的信息管理所取代,从而实现对数据的高效,长久,安全的管理.数据库设计 一 需求分析1数据需求:(1)数据字典主要涉及到以下几个表,分别为:学生基本信息表,课程表,专业信息表,课程设置表,学生选课表,学生与专业之间的属于表以及管理人员的密码表。以下是数据字典:学生基本信息表 专业信息表 Sno学生的学号Sname学
4、生姓名Ssex性别Ssbirth学生的出生年月Pno专业编号Pname专业名称Pnum专业人数Pdept专业所在院系课程表 课程设置表Cno课程号Cname课程名Cperiod学时Cno课程号Cname课程名Cperiod学时 学生选课表 学生与专业的属于表Sno学生的学号psenior学期cno课程编号grade成绩sno学生的学号pno专业的编号 管理人员密码表uname管理人员的编号upasw管理人员的密码(2)数据流图第一层 学生名单学籍管理系统学 生教 师 学生信息 成绩 学 生管理人员 统计表 成绩单第二层2查询处理1录入存储处理学生记录学生信息 成绩 本次考试成绩历次考试成绩4升
5、留级处理3统计 处理 班平均成绩 升留级表 各科平均成绩第三层13录入存储学生信息各科成绩1.2是否新生审计1.1学生信息 合格单 新生信息 学生成绩学生信息第四层班级平均成绩3.1 班级统计选择3.1学生信息 统计成绩 各科平均成绩3.3 各科第五层更新记录4.2是否升留级4.1学生信息 升留级名单 学生记录成绩标准2功能需求:(1)实现学生基本情况的录入,修改,删除等基本操作。(2)对学生基本信息提供灵活的查询方式。(3)完成一个班级的学期选课功能。(4)实现学生成绩的录入,修改,删除等基本操作。(5)能方便的对学生的个人学期成绩进行查询.(6)具有成绩统计,排名等功能。(7)具有留级,休
6、学等特殊情况的处理功能。(8)能输出常用的各种报表。(9)具有数据备份和数据恢复功能。二数据库设计1概念结构设计局部ER图人数专业号 专业名学号姓名性别出生年月院系专业学生课程号学时课程名课程整体的ER图专 业学生课程院系专业号 学时出生年月性别姓名学号密码课程号专业名人数专业号设置课程号学期课程号选课属于 学号成绩学期课程名 2. 逻辑结构设计(1)ER图转换为关系模型由ER图可见:图中有三个实体:学生,课程,和专业;三个关系:学生选课关系,学生与专业之间的属于关系,专业的课程设置。由于每个实体必须构造表,所以可以先得到三个实体的信息表,实体的码就是关系的码,实体的属性即关系模型的属性:学生
7、基本信息表: S (sno, sname, ssex, sbirth, spasw) 课程基本信息表: C (cno, cname, cperiord)专业基本信息表: P (pno, pname, pnum, psdept)对应的属性分别为:学号,姓名,性别,出生日期,登陆密码 课程编号,课程名,学期 专业编号,专业名,专业人数,所在院系对于多对多的关系来说,与该联系相连的实体的码以及本身的属性均转换为关系的属性,各实体之间的码组成关系的码或者关系的码的一部分。 以上ER图的三个联系为多对多,所以转换为关系模式为:课程设置表:pc ( pno, psenior, cno) 与设置相连的实体有
8、专业和课程,根据多对多的转换原则:专业的码pno,课程的码cno以及设置本身的属性共同构成该关系模式的码,所以该关系模式的码为全码.学生选课表:SC (sno, psenior, cno, grade)与选课相连的实体有学生和课程,同上由学生的码sno,课程的码cno以及选课本身的码psenior构成该关系模式的码,即(sno,cno,psenior)。此外,选课表还有一个非主属性grade。学生与专业的属于表:SP(sno,pno)与属于关系相联的实体是学生和专业.同上由学生的码sno,专业的码pno构成该关系模式的码,由于此关系没有其他的码也就没有非主属性。(2)关系模式的优化:学生表 s
9、 (sno,sname,ssex,sbirth,spasw)该关系模式的码为sno,由于只有一个码,所以不存在非主属性对码的部分函数依赖,可以达到2NCF。另外,该关系模式的函数依赖为: sno sname, sno ssex, sno - ssex,sno sbirth, sno - spasw,其间不存在传递依赖,故学生表可达到3NCF.课程表 C ( cno ,cname , cperiod)该关系模式的码为cno, cname,设主码为cno,因为该关系模式中的码都是单一的,即不存在有两个或者两个以上的属性组成的码,所以不存在非主属性对码的部分函数依赖,可以达到2NCF。另外,该关系模
10、式的函数依赖为:cnocname, cnocperiod, cname cno ,cname - cperiod. 因为cno cname,cname - cperiod cno cperiod, 所以该关系模式中存在传递依赖,不能达到3NCF.故优化该表为:C1(cno,period),C2(cname,cperiod)。从而两表都达到了3NCF。专业表 P (pno,pname,pnum,pdept)该关系模式的码为pno,pname,其中设定pno为主码.同课程表,该表不存在有两个或者两个以上属性组成的码,即不存在非主属性对码的部分函数依赖,故可达到2NCF。另外,此关系模式的函数依赖为
11、:pno-pname, pno pnum, pno - pdept , pname pno, pnamepnum, pname pdept; 由于存在传递依赖:pno - pname, pnamepnum, pno - pnum., 所以未能达到3NCF.优化分解为:P1 (pno,pnum,pdept), P2 (pname,pnum,pdept)明显,两表都达到了3NCF.课程设置表PC(pno,psenior,cno),该关系模式的码为:(pno,psenior,cno)为全码,所以可直接达到3NCF学生选课表 SC(sno,psenior,cno,grade)该关系模式的码为:(sno
12、,psenior,cno),因为不存在非主性grade对码的部分函数依赖,所以可达到2NCF,由于不存在函数依赖(表中的函数依赖只有(sno,psenior,cno)- grade)故也达到了3NCF属于表 SP(sno,pno)该关系模式的码(sno,pno)也是全码,所以也达到了3NCF用户表 U(uname,upasw)该表的码为uname,明显upasw对码uname是完全函数依赖的,从而达到2NCF。另外因为只有两个属性,所以不存在传递函数依赖,该表达到了3NCF3 物理结构设计(1)基本表学生表s列名主码候选码外码被参照表允许空数据类型约束条件sno是否否无否Char(10)sna
13、me否否否无是Char(20)ssex否否否无是Char(2)只可取男或女sbirth否否否无是Char(20)spasw否否否无是Char(10)课程表 c1列名主码候选码外码被参照表允许空数据类型约束条件cno是否否无否Char(10)cperiod否否否无是smallint课程表c2列名主码候选码外码被参照表允许空数据类型约束条件cname是否否无否Char(20)cperiod否否否无是smallint专业表p1列名主码候选码外码被参照表允许空数据类型约束条件pno是否否无否Char(10)pnum否否否无是smallintPnum =0psdept否否否无是Char(20)专业表p2
14、列名主码候选码外码被参照表允许空数据类型约束条件pname是否否无否Char(20)pnum否否否无是smallintPnum =0psdept否否否无是Char(20)课程设置表 pc列名主码候选码外码被参照表允许空数据类型约束条件pno是否否无否Char(10)psenior是否否无否Char(10)cno是否否无否Char(10)学生选课表sc列名主码候选码外码被参照表允许空数据类型约束条件sno是否否无否Char(10)psenior是否否无否Char(10)cno是否否无否Char(10)grade否否否无是smallintgrade=0学生与专业属于表sp列名主码候选码外码被参照表
15、允许空数据类型约束条件sno是否否无否Char(10)pno是否否无否Char(10)管理人员密码表u列名主码候选码外码被参照表允许空数据类型约束条件uname是否否无否Char(20)upasw否否否无否Char(10)(2)视图,索引a.索引:本数据库中的表除了主键本身生成的主索引外,没有定义其他的索引。在查询时即引用主索引即可。表s的主索引列为:sno表c1的主索引列为:cno表c2的主索引列为:cname表p1的主索引列为:pno表p2的主索引列为:pname表sc的主索引列为:(pno,psenior,cno)表sp的主索引列为:(sno,pno)表u的主索引列为:unameb视图:
16、虽然关系数据模型分析的结果表示该数据库需要定义不同的用户视图,但考虑到数据库与前台开发程序的连接比较复杂,所以该数据库中没有单独定义用户视图,不同的用户视图被有选择性的的select语句的结果集取。三系统功能设计学生学籍管理系统信息维护添加用户学 生管理人员密码管理成绩维护基本信息信息查询成绩查询系统管理查 询成绩统计个人成绩专业成绩欢迎界面身份及密码验证基本信息维护成绩维护删除更新添加删除更新添加四系统实现1程序的运行环境类别标准配置最低配置计算机硬件Pentium (R) 4 CPU,128MB内存Pentium (R) 4 CPU 1。8GHZ,128MB内存软件操作系统Windows
17、XP Service Pack 1, Windows XP Service Pack 2, and Windows 2000Windows 98ODBC数据源命名为wangjiaDSN的数据源,连接系统数据库wangjia其他2。系统开发环境类别标准配置最低配置计算机硬件Pentium (R) 4 CPU,128MB内存Pentium (R) 4 CPU 1.8GHZ,128MB内存软件操作系统Windows XP Service Pack 1, Windows XP Service Pack 2, and Windows 2000Windows 98数据库后台程序Microsoft SQL
18、Server 2000前台开发程序Microsoft Visual Basic 6。0ODBC数据源命名为wanjiaDSN的数据源,连接系统数据库wangjia其他3数据库的创建和链接 本系统的前台开发工具为Microsoft visual basic 6。0 ,除了一些常用的控件Commandbutton,Combobox,Textbox和Label外,这里还使用了控件ADO和DataGrid。ADO用来链接数据库与前台开发程序,指定链接的数据源和要访问的数据,并通过绑定要使用的数据来显示所获得的数据。DataGrid控件的作用是以表格的形式显示结果中的全部数据,但允许在表格中增加,删除和
19、修改纪录。具体的链接过程如下:ADO(步骤)(1)选择“工程”菜单中的部件命令,打开部件对话框,在控件选项中选择Microsoft ADO Data Control 6.0(OLEDB)复选框,单击确定,工具栏中会出现ADO数据控件的图标,其微帮助名称为:Adodc.(2)在当前窗体上添加一个ADO控件。(3)打开ADO的属性页,设置使用的ODBC数据资源的名称,(如果没有则新建一个)即我所使用的数据库wangjiaDSN;设置身份验证,包括用户名称和密码;设置纪录源,命令类型选择adCmdTable.(因为我所用到的记录源都是表,所以设置为该属性。adCmdTable.表示的是数据源的属性是
20、一个表名,表示其结果级是对该表执行无条件查询后得到的结果),表名或存储过程名则选择自己所要用到的表。到此,便链接成功.DataGrid(步骤)(1)同ADO控件一样,选择选择“工程”菜单中的部件命令,打开部件对话框,在控件选项中选择Microsoft DataGrid Control 6。0(OLEDB)复选框,单击确定,工具栏中会出现DataGrid数据控件的图标 。(2)在当前窗体上添加一个DataGrid控件。(3)打开DataGrid的属性页,设置标题名,列,列标题与其对应的数据段。颜色,字体等可根据需要设定。将DataGrid的Recordsource设置为该窗体对应的Adodc;另
21、外可检索字段和删除字段,这样可以显示自己想要的字段,而不是将adodc所对应的内容全部显示出来。到此,链接成功。4窗体及其所对应的源代码欢迎界面登陆界面源代码Option ExplicitDim stuflag As Boolean 标记用户是否为学生Public LoginSucceeded As BooleanPrivate Sub cmdCancel_Click() 设置全局变量为 false 不提示失败的登录 LoginSucceeded = False Me.HideEnd SubPrivate Sub cmdOK_Click() 检查正确的密码 Dim num1 As Intege
22、r Dim num2 As Integer If Len(txtUserName。Text) 0 And Len(txtPassword) 0 And stuflag = False Then 管理人员 Adodc1.Item(0).CommandType = adCmdText Adodc1。Item(0).RecordSource = select from wjuser where uname= Trim(txtUserName.Text) ”And upasw= & Trim(txtPassword.Text) ” Adodc1.Item(0).Refresh num1 = Adodc
23、1.Item(0)。Recordset。RecordCount Else 学生 Adodc1。Item(1).CommandType = adCmdText Adodc1。Item(1)。RecordSource = select sname spasw from wjstudent where sname= Trim(txtUserName.Text) & And spasw= & Trim(txtPassword.Text) ” Adodc1。Item(1)。Refresh num2 = Adodc1.Item(1).Recordset。RecordCount End If If num1
24、 = 0 And num2 = 0 Then MsgBox 无效的密码,请重试!, , ”登录 txtPassword。SetFocus SendKeys ”Home+End” Else LoginSucceeded = True Me。Hide MDIForm1。Show End IfEnd SubPrivate Sub Option1_Click(Index As Integer)If Index = 0 Then If stuflag = False Then stuflag = True End IfElse If stuflag = True Then stuflag = False
25、 End IfEnd IfEnd Sub主界面 添加用户界面源代码Private Sub Command1_Click() 添加用户Adodc1.Recordset.AddNewEnd SubPrivate Sub Command2_Click() 更新Adodc1。Recordset。Fields(uname”) = Trim(Text1.Text)Adodc1。Recordset。Fields(upasw”) = Trim(Text2.Text)Adodc1.Recordset。UpdateMsgBox ”添加成功!”, , ”提示”End Sub用户密码修改界面源代码Private Su
26、b Command1_Click()Command2。Enabled = False 使取消按钮不可用If Len(Text4.Text) 0 Then 查看输入用户是否存在 Adodc1.CommandType = adCmdText Adodc1.RecordSource = select * from wjuser where uname=” & Trim(Text1。Text) & ” Adodc1。Refresh If Adodc1.Recordset。RecordCount 0 Then 查看旧密码是否正确 Adodc1。CommandType = adCmdText Adodc1
27、。RecordSource = ”select * from wjuser where upasw=” Trim(Text4.Text) & Adodc1。Refresh If Adodc1。Recordset。RecordCount 0 Then 确认密码并修改 If Len(Text3.Text) 0 Then If Text2。Text Text3.Text Then MsgBox 您的输入不一致,请重新确认!, , 提示” Else Adodc1.Recordset。Fields(upasw”) = Trim(Text3。Text) Adodc1。Recordset。Update Ms
28、gBox 修改成功”, , ”提示” End If End If End If End If End If End IfEnd IfEnd SubPrivate Sub Command2_Click() 取消Command1.Enabled = False 使修改按钮不可用Adodc1.Recordset。CancelUpdateEnd SubPrivate Sub Command3_Click()Unload MeEnd Sub学生密码修改界面源代码Private Sub Command1_Click() 修改Command2。Enabled = False 使取消按钮不可用If Len(T
29、ext4.Text) 0 Then 查看输入学号是否存在 Adodc1。CommandType = adCmdText Adodc1。RecordSource = select * from wjstudent where sno= & Trim(Text4。Text) ” Adodc1.Refresh If Adodc1。Recordset.RecordCount = 0 Then MsgBox 没有该学号!,请重新输入, , ”提示 Else If Len(Text1。Text) 0 Then 查看旧密码是否正确 Adodc1。CommandType = adCmdText Adodc1。
30、RecordSource = ”select * from wjstudent where spasw= & Trim(Text1.Text) & ” Adodc1.Refresh If Adodc1.Recordset。RecordCount 0 Then 确认密码并修改 If Len(Text3。Text) 0 Then If Text2。Text Text3.Text Then MsgBox ”您的输入不一致,请重新确认!, , ”提示” Else Adodc1.Recordset。Fields(”spasw”) = Trim(Text3。Text) Adodc1.Recordset。U
31、pdate MsgBox ”修改成功”, , ”提示 End If End If End If End If End If End IfEnd IfEnd SubPrivate Sub Command2_Click() 取消Adodc1.Recordset.CancelUpdateCommand1。Enabled = False 使修改按钮不可用End SubPrivate Sub Command3_Click() 退出Unload MeEnd Sub个人信息维护界面源代码Private Sub Command1_Click() 第一条Adodc1.Recordset。MoveFirstEnd
32、 SubPrivate Sub Command2_Click() 上一条Adodc1。Recordset。MovePreviousIf Adodc1.Recordset。BOF = True Then 如果已经移到了第一行之前,则指针定位在第一行Adodc1.Recordset.MoveFirstEnd IfEnd SubPrivate Sub Command3_Click() 下一条Adodc1.Recordset。MoveNextIf Adodc1。Recordset。EOF = True Then 如果已经移到了最后一行之后,则指针定位在最后一行Adodc1.Recordset.Move
33、LastEnd IfEnd SubPrivate Sub Command4_Click() 末一条Adodc1。Recordset。MoveLastEnd SubPrivate Sub Command5_Click() 添加Adodc1.Recordset.AddNewCommand5。Enabled = FalseCommand6.Enabled = FalseCommand7.Enabled = TrueCommand8。Enabled = TrueEnd SubPrivate Sub Command6_Click() 删除Dim res As Integerres = MsgBox(”要删除此记录吗?, vbExclamation + vbYesNo + vbDefaultButton2) 提示用户If res = vbYes ThenAdodc1.Recordset。DeleteAdodc1。Recordset。MoveNextIf Adodc1.Recordset。EOF = True ThenAdodc1.Recordset。MoveLastEnd IfEnd IfEnd S