学生成绩管理系统个人任务实施细节.docx
- 文档编号:26676572
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:23
- 大小:295.73KB
学生成绩管理系统个人任务实施细节.docx
《学生成绩管理系统个人任务实施细节.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统个人任务实施细节.docx(23页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统个人任务实施细节
目录
组长:
赵健2
组员:
刘涛6
组员:
谷雨卓9
组员:
吕阳...............................................12
组长:
赵健
赵健系统个人任务实施细节
一、实现步骤与方法
1、触发器是一种特殊的存储过程,它不能显式地调用,而是在往表中插入记录、更新记录或者删除记录时,被自动的激活。
2、函数是由一条或多条T-SQL语句组成的代码段,用语实现一些常用的功能,编写好的函数可以重复使用。
用户自定义函数可以接受零个或多个输入参数,函数的返回值可以是一个数值,也可以是一个表。
3、SQLSERVER的索引是一种物理结构,它能够提供一种以一列或多列的值为基础迅速查找表中行的能力。
索引中记录了表中的关键值,提供了指向表中行的指针。
它既可以在定义表时创建,也可以在定义表之后的任何时候创建。
索引可以创建在一个列或多个列的组合上。
4、创建一个触发器,来检查学生的邮箱地址是否相同,如果相同,输出'insertingfail',并且回滚事务;如果不相同,则插入成功。
5、在成绩表中建立一个触发器,当向表中添加记录时,此学生的成绩都乘以1.2
在成绩表建立一个触发器,在向表中插入记录时,检验插入的课程号是否在课程表中的课程号的范围之内。
如果在,则插入成功;否则,提示信息'没有这门课程',回滚事务。
用户自定义函数有三种类型:
●返回数值的用户自定义函数
●内联(单语句)的返回表的用户自定义函数
●多语句的返回表的用户自定义函数
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语句组成的代码段,用语实现一些常用的功能,编写好的函数可以重复使用。
用户自定义函数可以接受零个或多个输入参数,函数的返回值可以是一个数值,也可以是一个表。
用户自定义函数有三种类型:
●返回数值的用户自定义函数
●内联(单语句)的返回表的用户自定义函数
●多语句的返回表的用户自定义函数
(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:
sno
Char(8)
不允许为空
sname
Char(10)
不允许为空
Ssex
Char
(2)
不允许为空
sbirth
Datetime(8)
允许为空
class
Char(4)
不允许为空
type
Char(7)
允许为空
表-1
score表结构如图表2:
sno
Char(8)
不允许为空
cno
Char(5)
不允许为空
degree
Float(8)
不允许为空
表-2
Course表:
以课程号为主键,通过这个主键来对这个表进行唯一性约束如图表3。
cno(主键)
Char(5)
不允许为空
cname
varchar(10)
不允许为空
tno
char(3)
不允许为空
表-3
Teacher表结构如图表4:
Tno(主键)
Char(5)
不允许为空
tname
varchar(10)
不允许为空
depart
Varchar(8)
不允许为空
tsex
Char
(2)
不允许为空
tbirth
datatime
允许为空
prof
Char(6)
允许为空
表-4
1、创建数据库:
createdatabasessh
on
(name=ssh,
filename='e:
\老大\sql\ssh.mdf',
size=1)
logo
(name=ssh1,
filename='e:
\老大\sql\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))
四、其他对象的说明:
(1)外键约束(primarykey):
外键也是由表中的一个列或多个列组成的,它是和在相关表中事先定义的具有惟一性的列一起使用的,该列一个是所在表的主键。
外键约束用来建立和强制两个表之间的关联,即一个表的一个列或列组合与另一个表的具有惟一性的列或列组合相关,这个列或列组合就成为第一个表中的外键外键约束限制将破坏这种关联的操作。
作为外键的列的值可以是空值,或是它所引用的表中已经存在的值。
(2)空值(null):
空值意味着数据尚未如,它与0或长度为零的字符串(“”)的含义不同。
如果表中的某一列必须有值才能使记录有意义,那么可以指明该列不允许取空值。
(3)check约束:
检查约束可以用来限制列上可以接受的数据值,检查约束使用逻辑表达式来限制列上可以接受的数据。
可以在一个列上使用多个检查约束,也可以在表上建立一个可以在多个列上使用的检查约束。
比如:
在学生信息表中,邮件地址semail的格式必须是%@%格式的。
(4)惟一性约束:
使用惟一性约束的作用是保证在不是主键的指定惟一性的列上不会出现重复的数据。
组员:
谷雨卓
谷雨卓个人任务实施细节
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
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
组员:
吕阳
吕阳学生成绩管理系统个人任务实施细节
一、实现步骤与方法
该系统可供系统管理员、老师、学生提供查询,通过查询,老师可以明确知道他的学生的学习状况,能清楚看出所教学生学的好的跟不好的,从而更有目的的进行教学。
学生通过该系统可以清楚看出自己每门功课的学习成绩更清楚的明白自己的学习状况,从而明确自己的薄弱学科跟强势学科,更清楚的确立学习方向。
管理员可以对系统进行管理和修改。
二、程序源代码
1、创建自定义数据类型
创建一个email自定义数据类型
execsp_addtypeemail,'varchar(20)','null'
修改student表中的semail数据类型为email类型
altertablestudentaltercolumnsemailemail
2、向表中添加字段
向student表添加type,semail,,b并且邮件地址有check约束
altertablestudentaddtypechar(7)
altertablestudentaddsemailvarchar(20)nullconstraintck_semcheck(semaillike'%@%')
altertableteacheraddtelvarchar(15)
3、创建视图
(1)、创建所有11班的学生信息的视图
createviewstudent11
as
select*fromstudentwhereclass='11'
查看视图中的记录
select*fromstudent11
(2)、创建视图course_degree,其中的内容是选修计算机课程的学生信息,包括(sno,sname,cno,cname,degree),创建时加上withcheckoption
createviewcourse_degree(sno,sname,cno,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 个人 任务 实施 细节