《学生成绩管理系统》课程设计报告.docx
《《学生成绩管理系统》课程设计报告.docx》由会员分享,可在线阅读,更多相关《《学生成绩管理系统》课程设计报告.docx(32页珍藏版)》请在冰豆网上搜索。
《学生成绩管理系统》课程设计报告
学号
2014-2015学年第一学期
120
《数据库系统概论》
课程设计报告
题目:
学生成绩管理系统
专业:
计算机科学与技术
班级:
12
(2)班
姓名:
学号:
1
指导教师:
王辉
成绩:
计算机与信息工程系
2014年10月12日
摘要
随着学校向全国及至世界范围的持续扩张,学生人数的增加,对于学生的信息管理也越来越复杂,要求也越来越高,因此需要一个全面、详细的信息管理系统,以便完成对学生信息的管理。
无纸化的环境是技术时代的一个梦想,也是许多学校和公司越来越意识到的一个真实世界。
以前是由学生档案和公告栏来提供各种信息及通告新的变化,而现在这个繁杂的工作已被网站和内部计算机网络所取代。
使得学生信息的管理更方便、安全。
根据调查得知,现在广大学生进行信息提交的主要方式是基于文件、表格等纸介质的手工处理,学生信息管理部门信息处理工作量大,容易出错,且管理方面因人而异。
然而学校网上学生信息管理系统应该覆盖各个所需功能,使各级管理人员和广大教职工在信息系统的辅助下进行工作,提高管理的整体水平。
使得学生信息管理更方便。
学生信息管理系统,可以用集中的数据库将与人力资源管理相关的信息全面、有机地联系起来,有效地减少了信息更新和查找中的重复劳动,保证了信息的相容性,从而大大地提高了工作效率,还能使原来不可能提供的分析报告成了可能。
在采用和实施学生信息管理系统之后,就会将依赖于人的过程改为依赖于计算机系统的过程。
学校管理人员只要获取了相应的权限,就可以随时进入系统,直接查阅相应的信息。
采用和实施学生信息管理系统不仅仅是为了提高工作效率。
为了除掉手工记录的低效率工作方式,运用信息化管理,提高工作效率,开发本系统。
应该看到,在实施学生信息管理系统后,经过整合的、较为全面、准确、一致和相容的信息不仅可以让学校领导对本学校学生资源的现状有一个比较全面和准确的认识,同时也可以生成综合的分析报表供学校领导人在决策时参考。
1需求分析
1.1系统需求
当今社会,计算机的使用已经深入到日常生活和工作的方方面面,它逐渐成为人们学习和工作时必不可少的工具。
虽然目前为止已经开发出了成千上万的软件系统,但它们并不能满足用户的各种特殊需要,因此人们不得不开发属于自己的软件,能够满足自己的特殊需求。
学生管理系统是教育事业单位必不可少的。
它的内容对学校的管理者来说至关重要,学生成绩管理系统应该能够提供快捷的查询功能以及能够及时修改、增添、删除信息等功能。
传统的人工管理文件档案的方式存在很多缺点,例如:
效率低、保密性差、另外时间一长,信息量的不断扩增,都给查找、更新何维护带来很大困难。
使用计算机对学生成绩进行管理,具有手工管理不可比拟的优点。
例如:
检索迅速、查找方便、存储信息量大、保密性好、及时更新并进行维护等。
计算机管理学生成绩能够提高学校的管理效率,是科学化、正规化管理的重要途径,型心计算机管理将不断深入到学校的各项事务的管理当中。
1.2功能要求
(1)教职工:
对学生成绩有一个整体的了解,在今后的教学中能有所改进。
同时可以对自己教授的课程进行修改,进一步了解学生的个人情况,便于因材施教。
当学生的个人信息发生改变时,老师能够及时进行修改。
例如学生转校、后来转到本系、或者毕业生离开学校等,老师能够根据具体情况对学生信息进行添加、修改、删除等。
能够管理课程信息,合理安排老师教授的课程,及时为学生提供选课信息。
老师能够对课程名、课程编号、学分等进行修改和更新。
能够对学生成绩进行发布、修改、删除,清晰地了解学生的成绩情况,以便做出总结和改进。
(2)学生:
能够查询个人的学习成绩和总体学生的成绩,以便做出新的定位。
成绩查询:
成绩修改、成绩添加、成绩删除等。
课程查询:
课程修改、课程添加、课程删除等。
学生查询:
学生信息修改、学生信息添加、学生信息删除等
1.3安全与完整性要求
建立数据库用户,对其权限进行设置。
确定各表主键、索引、参照完整性、用户定义完整性。
SQL语句不用拼接字符串(例+sno+)的方法来传递参数,用(例@sno)来传递参数,这样可以在一定程度上避免SQL注入,已达到一定程度上的安全。
1.4数据字典
用户表(用户名,用户等级)
学生表(学号,姓名,性别,系别,学生年龄)
课程表(课程号,课程名,课时,学分)
成绩表(课程号,学生号,成绩。
)
老师表(老师姓名,老师编号,所授课程,联系电话)
名字:
老师信息
描述:
学生成绩管理系统中存储的所有老师的信息
定义:
老师信息=老师姓名+所授课程+教师编号+联系电话
名字:
学生信息
描述:
学生成绩管理中存储的所有学生信息
定义:
学生信息=学生学号+学生姓名+学生性别+学生系别+学生年龄
位置:
存储输出供查询
名字:
课程信息
描述:
多个必要课程信息组成
定义:
课程信息=课程号+课程名+课时+学分
位置:
存储输出供查询
名字:
用户表信息
描述:
用户个人的信息
定义:
用户信息=用户名
位置:
存储输出供查询
名字:
学生成绩信息
输入:
学生姓名
输出:
相应的学生成绩信息
名字:
查询信息
描述:
用户提出的具体查询请求
定义:
查询信息=[课程查询信息]+[学生查询信息]
位置:
课程表学生表成绩表
名字:
添加信息
输入:
学号、学生姓名、学生性别、系别、学生年龄
输出:
新输入的学生信息
名字:
删除信息
输入:
选中所要删除的学生信息
输出:
删除完成
2概念结构设计
2.1系统的实体与联系
由需求分析的结果可知,本系统设计的实体包括:
(1)学生基本信息:
学号,姓名,学院,班级,年龄,性别。
(2)课程基本信息:
课程名,课程号,学时。
(3)教师基本信息:
教师号,教师姓名,职称,年龄,性别,学院
(4)学院基本信息:
学院名、学院号、院长姓名
这些实体间的联系包括:
(1)每位学生可以学习多门课程,每门课程可供多位学生学习。
(2)每门课可以由多个老师教,每个老师可以教多门课程
(3)学生每选一门课就可以得到一个成绩,不选此课就不能取得该课程成绩
2.2各个实体E-R图
(1)学生表:
(2)教师表:
(3)课程表:
(4)成绩表:
(5)总体实体关系图:
1N
M
NM
3逻辑结构设计
3.1E-R图转换为关系模型
(1)学生表
属性名
数据描述
数据类型
是否为空
备注
sno
学号
Char(8)
不允许为空
主键
sname
姓名
Char(10)
不允许为空
Ssex
性别
Char
(2)
不允许为空
sbirth
出生日期
Datetime(8)
允许为空
class
所在班级
Char(4)
不允许为空
type
Char(7)
允许为空
(2)教师表
属性名
数据描述
数据类型
是否为空
备注
tno
教师编号
char(5)
不允许为空
主键
tname
姓名
varchar(10)
不允许为空
depart
部门
varchar(8)
不允许为空
Tsex
性别
char
(2)
不允许为空
Tbirth
出生日期
datetime,
允许为空
prof
职称
char(6)
允许为空
(3)课程表
属性名
数据描述
数据类型
是否为空
备注
cno
课程号
Char(5)
不允许为空
主键
cname
课程名称
varchar(10)
不允许为空
tno
教师编号
char(3)
不允许为空
(4)成绩表
属性名
数据描述
数据类型
是否为空
备注
sno
学号
Char(8)
不允许为空
主键
cno
课程号
Char(5)
不允许为空
主键
degree
成绩
Float(8)
不允许为空
3.2数据库与表的建立
1.创建数据库:
createdatabasessh
on
(name=ssh,
filename='e:
\database\ssh.mdf’,
size=1)
logon
(name=ssh1,
filename='e:
\database\ssh1.ldf',
size=1)
2.创建数据表
(1)student表
usessh
createtablestudent
(snochar(8)primarykey,
snamechar(10)notnull,
Ssexchar
(2)notnull,
Sbirthdatetime,
classchar(4)notnull
semailvarchar(20))
(2)score表
createtablescore
(snochar(8)notnull,
cnochar(4)notnull,
degreefloatnotnull)
(3)course表
createtablecourse
(cnochar(5)notnullprimarykey,
cnamevarchar(10)notnull,
tnochar(3)notnull)
(4)teacher表
createtableteacher
(tnochar(5)notnullprimarykey,
tnamevarchar(10)notnull,
departvarchar(8)notnull,
Tsexchar
(2)notnull,
Tbirthdatetime,
profchar(6))
3.3数据库关系图
4物理结构设计
4.1确定关系模型的存取方法
在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。
可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。
在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:
在经常需要搜索的列上建立索引; 在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。
才能充分利用索引的作用避免因索引引起的负面作用。
4.2数据流图
该数据流图主要体现教职工对学生信息、课程信息和学生成绩的管理,然后存储的信息作用于查询系统。
在学生能够操作的只有成绩查询,如图所示:
图1-1功能流图
5数据库实施与维护
5.1数据库实施
5.1.1插入
(1)向学生表插入信息
insertintostudentvalues('101','李明','女','1983-09-18','11')
insertintostudentvalues('102','王二','男','1984-01-01','11')
insertintostudentvalues('103','李开','男','1984-01-01','11')
insertintostudentvalues('104','章浪','女','1984-11-11','11')
insertintostudentvalues('105','生命','男','1984-12-05','13')
insertintostudentvalues('106','无悔','女','1984-11-01','13')
insertintostudentvalues('107','历史','女','1984-10-01','12')
insertintostudentvalues('108','风尘','男','1985-9-08','11')
insertintostudentvalues('109','活着','男','1985-12-12','12')
insertintostudentvalues('110','傻瓜','女','1985-08-28','12')
查看记录
Select*fromstudent
(2)向成绩表中添加
insertintoscorevalues('101','01',88)
insertintoscorevalues('101','02',85)
insertintoscorevalues('102','02',80)
insertintoscorevalues('101','03',88)
insertintoscorevalues('102','02',85)
insertintoscorevalues('102','03',80)
insertintoscorevalues('103','01',83)
insertintoscorevalues('103','02',85)
insertintoscorevalues('103','03',90)
insertintoscorevalues('104','01',60)
查看记录
Select*fromscore
(3)向教师表中添加数据
insertintocoursevalues('01','计算机','11')
insertintocoursevalues('02','网络管理','12')
insertintocoursevalues('03','专业英语','13')
insertintocoursevalues('04','软件工程','14')
查看记录
Select*fromcourse
(4)向课程表中添加数据
insertintoteachervalues('11','无意','计算机系','男','1973-4-5','教授')
insertintoteachervalues('12','生活','计算机系','女','1975-12-1','副教授')
insertintoteachervalues('13','没有','管理系','女','1975-3-3','副教授')
insertintoteachervalues('14','离开','英语系','男','1973-5-5','教授')
查看记录
Select*fromteacher
5.1.2查询
(1)查询成绩大于学号为101的学生的课程为02的成绩的所有列。
select*fromscorewheredegree>(selectdegreefromscorewheresno='101'andcno='02')
(2)查询课程号01大于课程号02的最大值、并以分数降序排序的成绩表中所有列
select*fromscoreswhereo='01'ands.degree>=(selectmax(degree)fromscoreywhereo='02')orderbydegreedesc
go
selectmax(degree)as"02max"fromscorewherecno='02'
(3)查询性别为男的学号,姓名,班级,课程号和成绩的学生
selectstudent.sno,student.sname,student.class,o,score.degreefromstudent,scorewherestudent.sno=score.snoandssex='男'
(4)查询成绩在60到80之间的所有列
select*fromscorewheredegreebetween60and80
(5)查询score表中至少有5名学生选修的并以0开头的课程的平均分
selectavg(degree)as"平均分",cnofromscorewherecnolike'0%'groupbycnohavingcount(*)>=5
5.1.3创建数据类型
创建一个email自定义数据类型
execsp_addtypeemail,'varchar(20)','null'
修改student表中的semail数据类型为email类型
altertablestudentaltercolumnsemailemail
5.1.4向表中添加字段
向student表添加type,semail,,b并且邮件地址有check约束
altertablestudentaddtypechar(7)
altertablestudentaddsemailvarchar(20)nullconstraintck_semcheck(semaillike'%@%')
altertableteacheraddtelvarchar(15)
5.1.5创建视图
(1)创建所有11班的学生信息的视图
createviewstudent11
as
select*fromstudentwhereclass='11'
查看视图中的记录
select*fromstudent11
(2)创建视图course_degree
其中的内容是选修计算机课程的学生信息,包括(sno,sname,cno,cname,degree),创建时加上withcheckoption
createviewcourse_degree(sno,sname,cno,cname,degree)
as
selectscore.sno,sname,o,cname,degreefromcourse,student,score
whereo=oandstudent.sno=score.snoandcname='计算机'
withcheckoption
查看视图中的记录
select*fromcourse_degree
(3)创建一个视图,其中的内容是成绩表中每门课程的
createviewaverage
as
selectavg(degree)as'平均分'fromscoregroupbycno
查看视图中的记录
select*fromaverage
(4)创建视图其中的内容是所有男教师和男学生的name,sex,birth
createviewman
as
selectsnameasname,ssexassex,sbirthasbirthfromstudentwheressex='男'
unionselecttname,tsex,tbirthfromteacherwheretsex='男'
查看视图中的记录
select*fromman
5.1.6创建存储过程
(1)创建一个存储过程。
来显示成绩表中的课程号在课程表中并且所任教师性别为男、所在部门是计算机系的成绩表中的列
createprocstudent_11
as
select*fromscorewherecnoin(selectcnofromcourse,teacherwherecourse.tno=teacher.tnoanddepart='计算机系'andtsex='男')
调用此存储过程
Exec student_11
(2)创建一个带输入参数的存储过程。
调用此存储过程时,给出一个学生名,显示出此学生的学号,姓名,所学课程号,课程名称和对应的成绩
createprocstudent_name
@snamevarchar(10)
as
selectstudent.sno,sname,o,degreecnamefromstudent,score,course
wherestudent.sno=score.snoando=oandsname=@sname
调用此存储过程,(此例是输出姓名为历史的学生的信息)
execstudent_name'历史'
(3)创建一个存储过程,传递一个学生姓名。
先判断此学生是否有邮箱,如果有,则显示此学生的姓名,邮箱地址,学号,班级;如果没有的话,输出此句话'thesemailisempty'
createprocstudent_email
@snamevarchar(10)
as
begin
if(selectsemailfromstudentwheresname=@sname)isnull
begin
print'thesemailisempty'
end
else
selectsname,semail,sno,classfromstudentwheresname=@sname
end
调用此存储过程
execstudent_email'super'
5.1.7触发器
(1)创建一个触发器。
来检查学生的邮箱地址是否相同,如果相同,输出'insertingfail',并且回滚事务;如果不相同,则插入成功。
createtriggerstudentinsert
onstudent
afterinsert
as
if(selectsemailfrominsertedwheresemailin(selectsemailfromstudent))isnotnull
begin
print'insertingfail'
rollbacktransaction
end
else
print'inseringsucceed'
向学生信息表中插入一条记录,检验是否成功插入
insertintostudentvalues('114','lengbing','女','1985-12-12','11','lengbingssh@','一般')
(2)在成绩表中建立一个触发器,
当向表中添加记录时,此学生的成绩都乘以1.2
createtriggerscoreupdateonscore
af