数据库实验.docx
《数据库实验.docx》由会员分享,可在线阅读,更多相关《数据库实验.docx(10页珍藏版)》请在冰豆网上搜索。
数据库实验
数据库实验报告
班级:
学号:
姓名:
2013年6月
使用SQLServer开发服务器端应用程序
一、实验类别
综合型实验
二、实验目的
熟练掌握后台服务器端应用程序的开发。
三、实验环境
SQLServer系列的数据库管理系统
四、实验内容
对学生-课程数据库,编写存储过程,完成下面功能:
1.逐条(使用游标)浏览某个系的学生记录;
2.统计任意一门课程的成绩分布情况,即按照各分数段统计人数;
3.统计每个学生的平均成绩及排名;
4.将学生选课成绩从百分制改为等级制(即A、B、C、D、E)显示。
五、实验要求
提交源程序并标识必要的注释。
保证程序能正确编译和运行,认真撰写实验报告。
六、实验过程
1.创建数据库及数据表
附录代码:
usestudy
createtableStudent--创建学生表
(S_nochar(6)primarykey,--学号(主键)
Class_nochar(6),--班级号
S_namevarchar(10),--学生姓名
S_sexchar
(2),--性别
Class_namechar(20),--班级名
deptchar(20)--系名
);
createtableCourse
(Course_nochar(5)primarykey,--课程号(主键)
Course_namechar(20),--课程名
);
createtableChoice--创建选课表
(S_nochar(6)primarykey,--学号(主键)
Course_nochar(5),--课程编号
Scoresmallint--课程得分
);
2.创建存储过程1完成……功能,具体代码及运行结果如下图2所示。
附录代码:
createprocedurestudentprocess
as
declare@S_nochar(6),@Class_nochar(6),@S_namevarchar(10),@S_sexchar
(2),@Class_namechar(20),@deptchar(20)
declaresave_studentcursorfor
selectS_no,Class_no,S_name,S_sex,Class_name,dept
fromStudent
opensave_student
fetchnextfromsave_studentinto@S_no,@Class_no,@S_name,@S_sex,@Class_name,@dept
while@@fetch_status=0
begin
print@S_name
print@Class_no
print@S_name
print@S_sex
print@Class_name
print@dept
fetchnextfromsave_studentinto@S_no,@Class_no,@S_name,@S_sex,@Class_name,@dept
end
closesave_student
deallocatesave_student
执行存储过程:
execstudentprocess
执行结果:
3.创建存储过程2
附录代码:
createprocedurecourseslect1
@Course_nochar(5)
as
--优秀--良--中--及格--不及格
declare@badsmallint,@oksmallint,@mmodsmallint,@goodsmallint,@prefctsmallint,@SS_nochar(6)
DECLAREsocerbyCURSOR
FORSELECTDISTINCTCourse_noFROMChoice
OPENsocerby
FETCHNEXTFROMsocerby
INTO@SS_no
PRINT'课程编号'+char(9)+'A'+char(9)+'B'+char(9)+'C'+char(9)+'D'+char(9)+'E'
WHILE@@FETCH_STATUS=0
BEGIN
SELECT@prefct=(SELECTCOUNT(S_no)FROMChoicestudent
WHEREScore>=90ANDCourse_no=@SS_no)
SELECT@good=(SELECTCOUNT(S_no)FROMChoicestudent
WHEREScore<90ANDScore>=80ANDCourse_no=@SS_no)
SELECT@mmod=(SELECTCOUNT(S_no)FROMChoicestudent
WHEREScore<80ANDScore>=70ANDCourse_no=@SS_no)
SELECT@ok=(SELECTCOUNT(S_no)FROMChoicestudent
WHEREScore<70ANDScore>=60ANDCourse_no=@SS_no)
SELECT@bad=(SELECTCOUNT(S_no)FROMChoicestudent
WHEREScore<60ANDCourse_no=@SS_no)
print''+char(9)+@SS_no+''+char(9)+str(@prefct+char(9))+@good+char(9)+@mmod+char(9)+@ok+char(9)+@bad
FETCHNEXTFROMsocerby
INTO@SS_no
END
CLOSEscoerby
DEALLOCATEscoerby
execcourseslect1001
4.创建存储过程3
源码:
createprocedureseesocre
as
SELECTS_name,Score
FROMStudent,(
selectS_no,score=AVG(Score)
FROMChoice
GROUPBYS_no
)asChoice
whereChoice.S_no=Student.S_no
ORDERBYChoice.scoredesc
execseesocre
5.创建存储过程4
源码:
createproceduredengji
as
SELECTCourse_no,S_No,(CASE
WHENScore<60THEN'E'
WHENScore<70ANDScore>=60THEN'D'
WHENScore<80ANDScore>=70THEN'C'
WHENScore<90ANDScore>=80THEN'B'
WHENScore>=90THEN'A'
END
)RANK
FROMChoice
execdengji
七、实验总结
虽然写完这份报告已经深夜了,但还是很有成就感。
写了一晚上的作业,感觉自己对数据库学习的理解更深一层,但不足的地方同样很,以后还要加倍努力。