(考试资料下载)数据库课程设计报告学生成绩管理---课程设计_第1页
(考试资料下载)数据库课程设计报告学生成绩管理---课程设计_第2页
(考试资料下载)数据库课程设计报告学生成绩管理---课程设计_第3页
(考试资料下载)数据库课程设计报告学生成绩管理---课程设计_第4页
(考试资料下载)数据库课程设计报告学生成绩管理---课程设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL数据库技术课程设计一、题目:学生成绩管理二、因为我做的是学生成绩管理,所以数据库中至少有个一个表是来存储学生的各课成绩的。有了学生成绩,得知道这个成绩是哪个学生的,所以此表中也得有学生姓名,但是学生姓名肯定有重复的 ,所以得必须有个标志来惟一标识一个学生,所以得给每个学生一个编号(学号),但是也得必须清楚,这个成绩是哪门课程的,所以给课程定义了一个编号。之后,得想到有了学生成绩表,总得有个表来存放学生信息吧,所以又建立一个学生信息表,此表中的必须的字段得有学号、姓名、班级,其他的字段可以根据需要来添加。然后就是得有个课程表来存放哪个教师教哪门课程信息,所以此表中至少得有课程号,课程名称和教师的惟一标识(教师编号),再有一个表来存放教师的信息的,其中的字段必须有教师编号,教师姓名和所在的部门,当然也可以有教师出生日期、职称、电话号码等字段。 总之,这个学生管理系统总共包括四个表学生信息表student、教师信息表teacher、成绩表score和课程表course。 Student表:在建表时,除了添加学号、姓名、班级必要字段,还添加一些其他的字段,比如:出生日期、性别、邮箱地址和类型等。Teacher表:在建表时,除了添加教师编号,教师姓名,部门必要字段,还可以添加一些其他的字段,比如:出生日期、性别、和电话等。Score表:此表应该包括学生学号、课程号和成绩等。Course表:应包括课程号,对应的课程名称和教此课程的教师编号。(1)、建立一个数据库,然后在此数据库中建立这四个数据表。(2)、向表中添加记录。(3)、用一些查询语句来查看表中的特定记录。(4)、向表中添加一些字段。如:向teacher表中添加字段 tel(5)、创建一个自定义数据类型,并修改student表中的某个字段为此数据类型。(6)、创建几个视图n 查询某个班级的学生信息n 查看每门课程的平均成绩n 查看选修计算机课程的学生信息n 查看所有男教师和所有男学生的信息(7)、创建几个存储过程l 显示成绩表中的课程号在课程表中且所任教师性别为男、计算机系的成绩表l 显示某学生的学号,姓名,所学课程号,课程名称和对应的成绩l 在执行此存储过程时,如果没有给出参数(学生姓名),则输入全部的学生的学号,姓名,班级,任课教师编号及其姓名,所学课程名称和成绩,如果有,则显示此学生的以上信息。(8)、创建触发器u 在成绩表中建立一个触发器,当向表中添加记录时,此学生的成绩都乘以1.2u 检查学生的邮箱地址是否相同,如果相同,输出inserting fail,并且回滚事务;如果不相同,则插入成功。u 在成绩表建立一个触发器,在向表中插入记录时,检验插入的课程号是否在课程表中的课程号的范围之内。(9)、创建规则,并绑定l 在向成绩表中添加记录时,如果成绩degree(select degree from score where sno=101 and cno=02)(2)、查询课程号01大于课程号02的最大值、并以分数降序排序的成绩表中所有列select * from score s where o=01 and s.degree=(select max(degree) from score y where o=02 ) order by degree descgo select max(degree) as 02max from score where cno=02 (3)、查询性别为男的学号,姓名,班级,课程号和成绩的学生select student.sno,student.sname,student.class,o,score.degree from student,score where student.sno=score.sno and ssex=男()、查询成绩在60到80之间的所有列select * from score where degree between 60 and 80()、查询score表中至少有5名学生选修的并以0开头的课程的平均分select avg(degree) as 平均分,cno from score where cno like 0% group by cno having count(*)=56、创建自定义数据类型创建一个email自定义数据类型 exec sp_addtype email, varchar(20) , null修改student表中的semail数据类型为email类型alter table student alter column semail email7、向表中添加字段 向student表添加type,semail,b并且邮件地址有check约束alter table student add type char(7)alter table student add semail varchar(20) null constraint ck_sem check (semail like %)alter table teacher add tel varchar(15)8、创建视图(1)、创建所有11班的学生信息的视图create view student11as select * from student where class=11查看视图中的记录select * from student11(2)、创建视图course_degree,其中的内容是选修计算机课程的学生信息,包括(sno,sname,cno,cname,degree),创建时加上with check optioncreate view course_degree(sno,sname,cno,cname,degree)as select score.sno,sname,o,cname,degree from course ,student, score where o=o and student.sno=score.sno and cname=计算机 with check option查看视图中的记录select * from course_degree(3)、创建一个视图,其中的内容是成绩表中每门课程的create view averageas select avg(degree) as 平均分 from score group by cno查看视图中的记录select * from average (4)、创建视图其中的内容是所有男教师和男学生的name,sex,birthcreate view man as select sname as name,ssex as sex,sbirth as birth from student where ssex=男union select tname,tsex,tbirth from teacher where tsex=男查看视图中的记录select * from man9、创建规则规则的作用月CHECK约束的部分功能相同,在向表中的某列插入或更新数据时,用它来限制输入的新值的取值范围。而它与CHECK约束不同的是:l CHECK约束是用CREATE TABLE语句在建表时指定的,而规则需要作为单独的数据库对象来实现。l 在一个列上只能使用一个规则。但可以使用多个CHECK约束。l 规则可以应用于多个列,还可以应用于用户自定义的数据类型,而CHECK约束只能应用于它定义的列。 (1)、创建一个degree_rule规则create rule degree_rule asvalues0把此规则绑定到score表中degree列exec sp_bindrule degree_rule,score.degree在向成绩表中添加记录时,如果成绩degree0,则插入不成功。(2)、创建一个tel_rule规则create rule tel_ruleas value like 0-9 0-9 0-9 0-9 0-9 0-9 0-9 0-9把此规则绑定到teacher表中tel列exec sp_bindrule tel_rule,teacher.tel在向教师表中添加记录时,如果电话号码不是0-9的数字,则插入不成功。10、创建存储过程 存储过程是存储在服务器上的例行程序及过程,在SQL SERVER只能感定义某个过程,其中记录了一系列的造作,每次应用程序只需调用该过程就可完成该操作,这种SQL SERVER中定义的过程就被称为存储过程。它可以完成以下功能:n 接受输入参数并返回多个输出值。n 包含T-SQL语句用以完成特定的SQL SERVER操作,其中可以有对其他存储过程的调用。n 返回一个指示成功与否及失败原因的状态代码给调用它的过程。 存储过程不能接用过程名返回值,也不能直接在表达式中使用。(1)、创建一个存储过程,来显示成绩表中的课程号在课程表中并且所任教师性别为男、所在部门是计算机系的成绩表中的列create proc student_11as select * from score where cno in (select cno from course ,teacher where course.tno=teacher.tno and depart=计算机系 and tsex=男)调用此存储过程Execstudent_11 (2)、创建一个带输入参数的存储过程,调用此存储过程时,给出一个学生名,显示出此学生的学号,姓名,所学课程号,课程名称和对应的成绩create proc student_namesname varchar(10)as select student.sno,sname,o,degree cname from student,score,course where student.sno=score.sno and o=o and sname=sname调用此存储过程,(此例是输出姓名为历史的学生的信息)exec student_name 历史(3)、创建一个存储过程,在执行此存储过程时,如果没有给出参数(学生姓名),则输入全部的学生的学号,姓名,班级,任课教师编号及其姓名,所学课程名称和成绩,如果有,则显示此学生的以上信息。create proc student_teachersname varchar(10)=nullas if sname is null select student.sno,sname,student.class,teacher.tno,teacher.tname,degree,cname from student,score,course,teacherwhere student.sno=score.sno and o=o and course.tno=teacher.tno else select student.sno,sname,student.class,teacher.tno,teacher.tname,degree,cname from student,score,course,teacherwhere student.sno=score.sno and o=o and course.tno=teacher.tno and sname=sname调用此存储过程 exec student_teacher(没有实参) exec student_teacher 历史 (查询姓名为历史的学生的选课信息和成绩)(4)、创建一个存储过程,传递一个学生姓名,先判断此学生是否有邮箱,如果有,则显示此学生的姓名,邮箱地址,学号,班级;如果没有的话,输出此句话the semail is emptycreate proc student_emailsname varchar(10)asbegin if (select semail from student where sname=sname) is nullbegin printthe semail is empty endelse select sname,semail,sno,class from student where sname=sname end调用此存储过程 exec student_email super当给出姓名的那个学生没有邮箱地址时,则会显示如下内容。 exec student_email dfdf11、触发器 触发器是一种特殊的存储过程,它不能显式地调用,而是在往表中插入记录、更新记录或者删除记录时,被自动的激活。所以,触发器可以用来对表实施复杂的完整性约束,当触发器所保护的数据发生改变时,触发器会自动被激活,从而防止对数据的不正确修改。在触发器中卡仪查询其他表,也可以执行更复杂的T-SQL语句。如果发现引起触发器执行的T-SQL语句执行了一个非法的操作,则可以通过回滚事务使语句不能执行,回滚后SQL SERVER会自动返回到此事务执行前的状态。 SQL SERVER为每个触发器都查了两个专用表,inserted表和deleted表.这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行完成后,与该触发器相关的这两个表也会被删除。一个表中可以有多个具有不同名称的各种类型的触发器,每个触发器都可以完成不同的功能,但每个触发器只能作用在一个表上。(1)、创建一个触发器,来检查学生的邮箱地址是否相同,如果相同,输出inserting fail,并且回滚事务;如果不相同,则插入成功。create trigger studentinserton studentafter insertas if (select semail from inserted where semail in (select semail from student) is not nullbegin print inserting fail rollback transactionendelse printinsering succeed向学生信息表中插入一条记录,检验是否成功插入insert into student values(114,lengbing,女,1985-12-12,11,,一般)(2)、在成绩表中建立一个触发器,当向表中添加记录时,此学生的成绩都乘以1.2create trigger scoreupdate on scoreafter insertas update score set degree=degree*1.2 from score where sno in (select sno from inserted )向表中插入一条记录,检验触发器是否有用。insert into score values(108,01,56)(3)、在成绩表建立一个触发器,在向表中插入记录时,检验插入的课程号是否在课程表中的课程号的范围之内。如果在,则插入成功;否则,提示信息没有这门课程,回滚事务。create trigger course_scoreon scoreafter insertas if (select cno from inserted where cno in(select cno from course) is null begin print没有这门课程 rollback transaction end向表中添加一条记录,进行验证。insert into score values(108,06,60)12、自定义函数 函数是由一条或多条T-SQL语句组成的代码段,用语实现一些常用的功能,编写好的函数可以重复使用。用户自定义函数可以接受零个或多个输入参数,函数的返回值可以是一个数值,也可以是一个表。用户自定义函数有三种类型:l 返回数值的用户自定义函数l 内联(单语句)的返回表的用户自定义函数l 多语句的返回表的用户自定义函数 (1)、创建一个用户自定义函数,输出与指定的学生同班的学生个数create function studentcount(sno char(5)returns intbegineclare counter intselect counter=count(*) from student where class=(select class from student where sno=sno)return counterend调用此自定义函数(本例是查找与学号102同班的学生个数)declare a intset a=dbo.studentcount(102)print convert(char(3),a)(2)、创建一个用户自定义函数,用于输出同一个班级中的学生信息create function studentclass(class char(5)returns tablereturn(select * from student where class=class)调用自定义函数(本例是输出12班的学生信息)select * from studentclass(12)(3)、创建一个自定义函数,把某一学生所学课程名称,课程号及其成绩插入一个临时表中显示出来。create function studentscore(sno varchar(5)returns student_score table(sno char(5), sname varchar(10), cno char(5), cname varchar(10), degree float)begin insert student_scoreselect student.sno,sname,o,cnam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论