学生成绩管理系统个人任务实施细节.doc
《学生成绩管理系统个人任务实施细节.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统个人任务实施细节.doc(16页珍藏版)》请在冰豆网上搜索。
目录
组长:
赵健 2
组员:
刘涛 6
组员:
谷雨卓 9
组员:
吕阳...............................................12
组长:
赵健
赵健系统个人任务实施细节
一、实现步骤与方法
1、触发器是一种特殊的存储过程,它不能显式地调用,而是在往表中插入记录、更新记录或者删除记录时,被自动的激活。
2、函数是由一条或多条T-SQL语句组成的代码段,用语实现一些常用的功能,编写好的函数可以重复使用。
用户自定义函数可以接受零个或多个输入参数,函数的返回值可以是一个数值,也可以是一个表。
3、SQLSERVER的索引是一种物理结构,它能够提供一种以一列或多列的值为基础迅速查找表中行的能力。
索引中记录了表中的关键值,提供了指向表中行的指针。
它既可以在定义表时创建,也可以在定义表之后的任何时候创建。
索引可以创建在一个列或多个列的组合上。
4、创建一个触发器,来检查学生的邮箱地址是否相同,如果相同,输出'insertingfail',并且回滚事务;如果不相同,则插入成功。
5、在成绩表中建立一个触发器,当向表中添加记录时,此学生的成绩都乘以1.2
在成绩表建立一个触发器,在向表中插入记录时,检验插入的课程号是否在课程表中的课程号的范围之内。
如果在,则插入成功;否则,提示信息'没有这门课程',回滚事务。
用户自定义函数有三种类型:
l返回数值的用户自定义函数
l内联(单语句)的返回表的用户自定义函数
l多语句的返回表的用户自定义函数
SQLSERVER的索引是一种物理结构,它能够提供一种以一列或多列的值为基础迅速查找表中行的能力
二、所遇到的问题
本系统界面简单,方便实用,容易上手,具备管理学生成绩的基本功能。
但系统还不太完善,功能不是很强大,有些如打印的功能还不能实现。
另外界面也不是太美观,显得有点粗糙。
总的说来,本系统还不成熟,在某些细节方面可能还没有考虑到。
若以后去完善该软件的话,则应该尽量实现更多更好的功能,提高自动化水平改善系统的安全性问题、界面风格。
三、程序源代码
1、触发器
触发器是一种特殊的存储过程,它不能显式地调用,而是在往表中插入记录、更新记录或者删除记录时,被自动的激活。
所以,触发器可以用来对表实施复杂的完整性约束,当触发器所保护的数据发生改变时,触发器会自动被激活,从而防止对数据的不正确修改。
在触发器中卡仪查询其他表,也可以执行更复杂的T-SQL语句。
如果发现引起触发器执行的T-SQL语句执行了一个非法的操作,则可以通过回滚事务使语句不能执行,回滚后SQLSERVER会自动返回到此事务执行前的状态。
SQLSERVER为每个触发器都查了两个专用表,inserted表和deleted表.这两个表的结构总是与被该触发器作用的表的结构相同。
触发器执行完成后,与该触发器相关的这两个表也会被删除。
一个表中可以有多个具有不同名称的各种类型的触发器,每个触发器都可以完成不同的功能,但每个触发器只能作用在一个表上。
(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
afterinsert
as
updatescoresetdegree=degree*1.2fromscorewheresnoin(selectsnofrominserted)
向表中插入一条记录,检验触发器是否有用。
insertintoscorevalues('108','01','56')
(3)、在成绩表建立一个触发器,在向表中插入记录时,检验插入的课程号是否在课程表中的课程号的范围之内。
如果在,则插入成功;否则,提示信息'没有这门课程',回滚事务。
createtriggercourse_score
onscore
afterinsert
as
if(selectcnofrominsertedwherecnoin(selectcnofromcourse))isnull
begin
print'没有这门课程'
rollbacktransaction
end
向表中添加一条记录,进行验证。
insertintoscorevalues('108','06','60')
2、自定义函数
函数是由一条或多条T-SQL语句组成的代码段,用语实现一些常用的功能,编写好的函数可以重复使用。
用户自定义函数可以接受零个或多个输入参数,函数的返回值可以是一个数值,也可以是一个表。
用户自定义函数有三种类型:
l返回数值的用户自定义函数
l内联(单语句)的返回表的用户自定义函数
l多语句的返回表的用户自定义函数
(1)创建一个用户自定义函数,输出与指定的学生同班的学生个数
createfunctionstudentcount
(@snochar(5))
returnsint
begin
eclare@counterint
select@counter=count(*)fromstudentwhereclass=(selectclassfromstudentwheresno=@sno)
return@counter
end
调用此自定义函数(本例是查找与学号102同班的学生个数)
declare@aint
set@a=dbo.studentcount('102')
printconvert(char(3),@a)
(2)创建一个用户自定义函数,用于输出同一个班级中的学生信息
createfunctionstudentclass
(@classchar(5))
returnstable
return(select*fromstudentwhereclass=@class)
调用自定义函数(本例是输出12班的学生信息)
select*fromstudentclass('12')
(3)、创建一个自定义函数,把某一学生所学课程名称,课程号及其成绩插入一个临时表中显示出来。
createfunctionstudentscore
(@snovarchar(5))
returns@student_scoretable
(snochar(5),
snamevarchar(10),
cnochar(5),
cnamevarchar(10),
degreefloat)
begin
insert@student_score
selectstudent.sno,sname,o,cname,degreefromstudent,score,course
wherestudent.sno=score.snoando=oandstudent.sno=@sno
return
end
查看学号为103的学生的各科成绩。
select*fromstudentscore('103')
3、建立索引
SQLSERVER的索引是一种物理结构,它能够提供一种以一列或多列的值为基础迅速查找表中行的能力。
索引中记录了表中的关键值,提供了指向表中行的指针。
它既可以在定义表时创建,也可以在定义表之后的任何时候创建。
索引可以创建在一个列或多个列的组合上。
(1)在学生信息表邮箱列上创建一个惟一性的非聚簇索引
createuniquenonclusteredindexix_semailonstudent(semail)
(2)在学生信息表的学号列上创建一个惟一性聚簇索引
createuniqueclusteredindexix_snoonstudent(snodesc)
(3)在教师信息表的姓名列上创建一个非惟一性的非聚簇索引
createnonclusteredindexix_nameonteacher(tname)
组员:
刘涛
刘涛个人任务实施细节
一、所遇到的问题
建立严密的数据表操作机制:
同一表有可能在多个模块中被修改,所以严密的数据表操作机制的建立十分比较困难的,但也是必须的。
除了设计时必须有相当程度的考虑,在编制时更应加强程序逻辑的可靠性和程序调试的全面性。
建立合理的表结构,避免数据冗余:
各表通过特定字段实现不同表的数据连接,避免数据冗余,需要设计简洁高效的表结构。
二、四个表的E-R实体模型图如图1所示:
教师
学生
1N
学生
教师
课程
NM
图-1
在教学管理中,学校开设若干门学科,一个教师可以教授其中的一门或多门课程,每个学生也需要学习其中的几门课程,因此,教学管理中涉及的对象(实体型)有学生、教师和课程。
用E-R图描述它们之间的联系。
如图2所示。
图-2
二、设计数据表:
通过E-R图分析,现在已经对数据库有一个很清楚的认识了。
在此学生成绩信息中有4个表需要建立
学生信息表(student)包括学号(sno)、姓名(sname)、性别(Ssex)、班级(class)、出生日期(sbirth)
教师信息表(teacher)包括教师编号(tno)、姓名(tname)、性别(Tsex)、部门(depart)、职称(prof)、出生日期(tbirth)
成绩表(score)包括学号(sno)、课程号(cno)、成绩(degree)
课程信息表(course)包括课程号(cno)、课程名称(cname)、教师编号(tno)
三、表结构
主键是一个表通过一个列或多个列组合的数据来唯一标识表中的每一行,这个列或列组合就被称为主键,煮件可以来强制实体完整性。
主键约束有以下特征和作用:
(1)主键约束通过不允许一个或多个列输入重复的值来保证一个表中所有行的惟一性,使所有浪都是可以区分的。
(2)一个表张只能有一个主键,且组成主键的列的数据都不能取空值。
(3)当定义主键约束时,SQLserver在主键列上建立惟一性索引,这个索引在煮件被查询时可以加快查询的速度。
在teacher表中,以教师编号tno为主键,对其进行惟一性约束。
在Course表中,以课程号为主键,对其进行惟一性约束。
Student表如图表1:
sn