设计目的:
1.运用sql基本知识,编写学期转换函数。
2.运用sql基本知识,编写学分转换函数,将考试成绩转换为学分
3.通过上述函数的编写与调试,熟练掌握 sql函数的编写、调试与使用方法。
设计内容:
1.根据需求,分析并设计函数的功能、入口参数和返回值。
①学分转换函数
在学籍管理中,需要根据学生选修课程的成绩,查询所获学分情况,如果成绩大于等于60分,就可以获得该课程对应的学分,否则所得学分为0.这种需求可以通过函数实现,根据要求,该函数的功能以及入口参数和返回值要求如下。
功能要求:将学生考试成绩转换为学分的功能。如果考试通过则获得该课程的学分,否则获得学分为0.
入口参数:成绩和课程学分
返回:返回应得学分
②学期转换函数
在学籍管理中,每门课程都会在规定学期(如学生入学后的第四学期开课)而入学时间不同,对应的具体开课时间不同。
例如“面向对象程序设计”规定学生入学后的第四学期开设,2005年入学的同学需要在2006-2007/2学期学习该门课程,而2006年入学的同学需要在2007-2008/2学期学习该课程。反过来如果需要统计2005年入学同学在2006-2007/2学期学习哪些课程,这些课程的考试情况怎么样,需要将2006-2007/2的学期表示形式转换为4的学期表示形式,然后再查询学生对4学期开设课程课程的考试情况即可。
为了完成上述学期转换的功能,需要设计一个学期转换函数。该函数的功能以及入口参数和返回值要求如下。
功能要求:结合学生入学年份,将如“2006-2007/2”的学期表述的字符串转换为如1,2,3等表述的数字方式。例如2005年入学的同学的2006-2007/2学期是其在校的第四学期。
入口参数:学年和入学年份。
返回:数字表示的学期。
函数实现
1.CreditConvert(功能:学分转换)
CREATE FUNCTION CreditConvert(@score NUMERIC(3,1),@CCredits NUMERIC(3,1))
--@score : 考试成绩
--@CCredits:课程规定学分
RERURNS NUMERIC(5,2) --应得学分
AS
BEGIN
RETURN
CASE SIGN(@score-60)--sign函数取结果符号,当为零时结果为0
WHEN 1 THEN @CCredits
WHEN 0 THEN @CCredits
WHEN -1 THEN 0
END
END
termConvert(功能:学期转换)
CREATE FUNCTION termConvert(@term CHAR(11),@clno CHAR(6))
--@term 学年,格式如:2006-2007/2
--@clno 班级编号,前两位代表入学年份
RETURNS INT --在校第几学期
AS
BEGIN
RETURN(CONVERT(NUMERIC,SUBSTRING(@term,1,4))-CONVERT(NUMERIC,'20'+SUBSTRING(@clno,1,2)))*2+CONVERT(NUMERIC,SUBSTRING(@term,11,1))
END
执行函数
①学分转换函数
SELECT CName,dbo.CreditConvert(30,CCredits) fail,dbo.CreditConvert(70,CCredits)pass FROM Course
②学期转换函数
SELECT dbo.termConvert('2005-2006/2','04')
整理自:教科书《数据库试验指导》 人民邮电出版社