吉林工程技术师范学院
信息工程学院
《 SQL Server数据库设计 》
课程设计报告
题 目: 学生信息数据库管理系统设计
专 业: 软件工程
班 级: R1241
姓 名: xxx
学 号: 1201114115
指导教师: XXXXXXXXXX
时 间: 2014年12月21日
摘 要
学生信息管理系统主要用来管理学生基本信息。本系统是一个简单的学生信息管理系统,系统管理的信息主要是学生基本信息、课程信息和学生选课信息。系统的目的是有效地处理这些信息,同时为用户提供信息检索、信息修改和保护功能。
随着学校教育体制的迅速发展,学生的数量快速增长,对于学生的信息管理也变得越来越复杂。因此要实现对学生信息的有效管理借助现代信息技术的管理方法,建立学生信息管理系统是我们的可以借助的有效工具。本文通过对一个学生信息管理系统的开发实例,基于SQL 2005的学生信息管理系统进行了分析和研究。文章首先分析了管理信息系统的概念和特点,介绍了开发工具SQL2005,然后对学生信息管理信息系统进行了设计方案论证、设计实现过程、调试运行及结果分析,在设计实现过程中要能够统计有多少人、计算平均成绩及排序(由低到高)、找出不及格的学生,创建视图存放计算机专业的学生信息、创建一个存储用来查找计算机专业学生的成绩。
关键字:学生信息管理、SQL Server
目 录
一、课程设计的目的 ……………………………………………2页
二、设计方案的论证(背景、意义、技术路线)………………3页
三、设计实现过程 ………………………………………………5页
四、调试运行及结果分析 ………………………………………6页
五、测试及问题探讨 ……………………………………………15页
六、课设总结与体会 ……………………………………………17页
七、致谢 …………………………………………………………18页
八、参考文献 ……………………………………………………19页
一、课程设计的目的
学生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理学生学生的信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生学籍信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生学籍管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
另外在进行本次系统开发的过程也可以让我们日常所学习的数据库技术学以致用,并且得到进一步的理解与巩固,将理论与实践相结合,让我们对数据库的基本操作有了一个完整的认识。
二、设计方案的论证
2.1背景介绍
学生成绩管理系统可以帮助学校完成一些日常工作,许多学校也都有自己的教务、成绩管理系统。随便各种技术的发展,系统的速度、用户体验、安全问题越来越受到重视。虽然硬件的发展可以提高系统的一些指标,但是我们也不能不注意系统自身的性能、安全问题。数据的安全性只有依靠程序保证。由于个人经验不足,只能参考其他系统完成该系统。,管理系统的安全性直接关系到高校的日常管理工作成效,一个具有精确权限控制的管理系统势必会得到更好的用户体验,极大程度上保护高校的重要数据。
2.2设计意义
为了使学生成绩管理更加的方便,我们有必要开发这样一种实用性强的学生成绩管理系统。这个系统方便学生查看自己的成绩及选课,教师给学生打分,管理员添加学生、教师、课程。
对此课题的研究将有助于提升个人系统设计和分析能力,学会软件项目权限管理的基础实现,对以后大型项目的权限设计打下基础。同时,将对本人以下方面起到积极作用:对SQL知识的理论实践应用;加深对系统权限管理的理解;提高自己的系统分析、设计能力;初步了解软件项目的开发过程。
在这个系统的开发中学生可以将自己所学的知识用于实践而得到很多锻炼,达到学以致用的目的。
2.3技术路线
本篇课设过程,各种功能的实现都是通过SQL语句实现的。SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。
利用SQL Server对数据库进行进基本的操作。
三、设计实现过程
3.1系统功能
本系统包括以下功能:
1). 学生信息管理(包括学生基本信息的录入)
2). 课程管理(将课程与成绩连接)
3). 成绩管理(对成绩进行分类,排序)
4). 信息查询(包括学生查询、课程查询、成绩查询)
3.2设计理念
以现代计算机技术、网络技术为基础的数字化教学正朝着信息化、网络化、现代化的目标迈进。如今,国内的大部分学校都已接入或将要接入互联网并建成校园网,各校的硬件设施已经比较完善,通过设计和建设网络拓扑架构、网络安全系统、数据库基础结构、信息共享与管理,从而实现教育的网络化和信息化。与网络技术相结合的新型学生学籍管理模式,对教育、教学过程有着极为宝贵的特性,可以为新型的办学模式提供一个信息化的平台。
3.3开发工具
操作系统:Microsoft Windows XP 开发环境
数据库:Microsoft SQL Server 2005
四、调试运行及结果分析
4.1创建数据库
创建一个名为PXSCJ的数据库,其初始大小为5MB,最大大小不受限制,允许数据库自动增长,增长方式按10%比例自动增长,日志文件初始为2MB,最大可增长到2MB,按1MB增长:
CREATE DATABASE PXSCJ
ON
(NAME='PXSCJ_DATA',
FILENAME='C:\PXSCJ.mdf',
SIZE=5MB,
FILEGROWTH=10%)
LOG ON
(NAME='PXSCJ_log',
FILENAME='C:\idf',
SIZE=2MB,
MAXSIZE=5MB,
FILEGROWTH=1MB)
效果图如 图4-1
图4-1 创建数据库
4.2创建表
创建三张表,命名为XSB,KCB,CJB
4.2.1创建XSB
代码部分如下:
USE PXSCJ
GO
CREATE TABLE XSB
(
XH CHAR(6) NOT NULL PRIMARY KEY,
XM CHAR(8) NOT NULL,
XB BIT NULL DEFAULT 1,
CSSJ DATETIME NULL,
ZY CHAR(12) NULL,
ZXF INT NULL DEFAULT 0 CHECK(ZXF>=0 AND ZXF<=160),
BZ VARCHAR(500) NULL
)
效果图如 图4-2-1
图4-2-1 创建表XSB
4.2.2创建KCB
代码部分如下:
USE PXSCJ
GO
CREATE TABLE KCB
(
KCH CHAR(3) NOT NULL,
KCM CHAR(16) NOT NULL,
KKXQ TINYINT NULL,
XS TINYINT NULL,
XF TINYINT NULL
)
效果图如 图4-2-2
图4-2-2 创建KCB表
4.2.3创建CJB
代码部分如下:
USE PXSCJ
GO
CREATE TABLE CJB
(
XH CHAR(6) NOT NULL ,
KCH CHAR(3) NOT NULL ,
CJ INT NULL DEFAULT 0
)
效果图如 图4-2-3
图4-2-3 创建CJB表
4.3对表的增删改查操作
4.3.1增加信息
代码部分如下:
USE PXSCJ
GO
INSERT INTO XSB
VALUES('081115','钱跃东',1,'1993-06-7','软件工程',50,NULL)
GO
效果图如 图4-3-1
图4-3-1 增加信息
4.3.2删除信息
代码部分如下:
USE PXSCJ
GO
DELETE
FROM XSB
WHERE XH=081115
GO
效果图如 图4-3-2
图4-3-2 删除信息
4.3.3修改信息
代码部分如下:
USE PXSCJ
GO
UPDATE XSB
SET XH='081219',
ZY='软件工程',
BZ='三好学生'
WHERE XH='081215'
GO
SELECT * FROM XSB
GO
效果图如 图4-3-3
图4-3-3 修改信息
4.3.4统计总数
代码部分如下:
USE PXSCJ
GO
SELECT COUNT(XH) AS'学生总数'
FROM XSB
效果图如 图4-3-4
图4-3-4
4.3.5平均成绩
代码部分如下:
USE PXSCJ
GO
SELECT XH,AVG(CJ)AS'PJCH'
FROM CJB
GROUP BY XH
GO
效果图如 图4-3-5
图4-3-5 平均成绩
4.3.6升序排列
代码部分如下:
USE PXSCJ
GO
SELECT XH,KCH,CJ
FROM CJB
WHERE KCH=
(
SELECT KCH
FROM KCB
WHERE KCM='计算机基础'
)
ORDER BY CJ
效果图如 图4-3-6
图4-3-6 升序排列
4.3.7查找不及格学生
代码部分如下:
USE PXSCJ
GO
SELECT XSB.XH,XM,KCH,CJ
FROM XSB,CJB
WHERE
(
XSB.XH=CJB.XH AND CJ<70
)
效果图如 图4-3-7
图4-3-7 查找不及格学生
4.3.8创建视图
代码部分如下:
USE PXSCJ
GO
CREATE VIEW CS_XS
AS
SELECT *
FROM XSB
WHERE ZY='计算机'
效果图如 图4-3-8
图4-3-8 创建视图
4.3.9创建存储过程
代码部分如下:
USE PXSCJ
GO
CREATE PROCEDURE CJ_info
AS
SELECT *
FROM CJB
WHERE XH=
(SELECT XH
FROM XSB
WHERE ZY='计算机')
效果图如 图4-3-9
图4-3-9 创建存储过程
五、测试及问题探讨
5.1 SQL SERVER2000基础上直接安装SQL SERVER2005
在电脑上已经安装过SQL SERVER2000,在此基础之上安装SQL SERVER2005,由于其安装实例和默认端口是相同的,如果选择默认实例就会视为升级处理,即将原来的2000的实例覆盖了,这样的话2000就不能用了,所以有了2000再安装2005时,需要重新命名一个实例,修改一个端口。
程序默认端口:1433. 结论:
(1) 同台电脑上,如果不修改端口以及默认实例,不能同时使用SQL SERVER 2000和SQL
SERVER2005;
(2) 由于程序中端口都是固定的,因此,在此进行测试的时候,未修改端口等。B/S部分修改
了相应的配置文件之后,通过测试,可以完成数据库的增、删、改、查等访问;
(3) 由于B/S部分只与数据库进行交互,因此,在C/S部分能够正常使用SQL SERVER2005的
前提下,目前,没有发现B/S部分存在问题。(C/S部分经咨询浩全,曾经测试使用SQL SERVER2005 没有问题)。
5.2登入过程中遇到的问题
在SQL SERVER2005的登陆界面时后发现输入实心圆点无法登入。
最后发现是因为全角半角的区别两种圆点的存储格式不同
5.3对数据进行操作的过程
(1)在利用SQL语言进行计算平均数过程中发现在结果中没有出现相应的结果,经过反复的查找反复的检查,最终找到因为没有利用Group by进行约束。
六、课设总结与体会
经过一个星期的的设计和开发,本系统的基本功能基本开发完成。本系统基本能够完成基本的学生管理信息系统的基础的功能。在使用上非常方便,实时性好,能够很好的对学生的信息进行处理分析,并能够对数据进行分类链接,而且达到对相关需求相关计算,能够达到学生管理信息系统的基本要求。
但由于时间和开发经验不足等原因,系统的部分功能未能得以实现。同时系统的管理功能上的设计不够完善,均需要进一步的学习提高。
这次课程设计,不但是对我这三年所学知识的一个检验,也是对我计算机应用水平与写作水平的一个考核,也让我发现了自己的不足之处,在开发过程中所获得的经验将对我今后的工作和生活产生积极深远的影响。
七、致谢
在这里我非常感谢我们的指导老师-刘明,他在百忙之中抽空对本系统的开发作了悉心的指导,帮助解决了多个难点,本网站才得以及时完成。不管是钟老师深厚的理论知识或是严谨的工作态度都让我受益匪浅。同时也感谢班级同学能共同努力,表现了很好的团队合作精神,才得以成功完成此次课程设计。在整个课程设计的合作过程中,我们互相帮助,互相学习,使大家都得到了不少的收获,使我们全体成员都在团队开发之用获得了整体的提高。大家的帮忙是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
最后感谢学院为我提供良好的做毕业设计的环境,再一次感谢所有在设计中曾经帮助过我的良师益友和同学。
八、参考文献
[1] 李春葆,曾平,赵丙秀.数据库系统开发教程—基于sql server2005
[2] 陈伟 编著 《SQL Server 2005数据库应用与开发教程》北京:清华大学出版社,2007
[3] 李昆,SQL SERVER2005课程设计案例精编,北京:中国水利水电出版社,2006
[4] 何文华, SQL Server 20## 应用开发教程,北京:电子工业出版社出版,2007
第二篇:SQL课程设计报告
课程设计报告
110054B——12010054070——张豪
创建数据库:
create database SanjiangMIS on primary
(
name=SanjiangMIS_data,
filename='f:\SanjiangMIS.mdf', size=10,
maxsize=unlimited,
filegrowth=10%
)
log on
(
name=Sanjiang_log,
filename='f:\SanjiangMIS.ldf', size=1,
maxsize=unlimited,
filegrowth=10%
)
创建表:
create table Employee
(
EmNo int constraint pk_EmNo primary key, EmName varchar(20),
EmBirtday datetime,
EmCardId varchar(18),
EmPosition char(20),
EmSex char(2)
)
create table Department (
DepNo int primary key, DepName varchar(20),
)
create table Dorm (
DormNo varchar(8) constraint pk_DormNo primary key constraint ck_DormNo check(DormNo like'[0-9][0-9]-[0-9][0-9][0-9]'),
DormDep int constraint fk_DormDep foreign key references Department(DepNo),
DormNu int constraint ck_DormNu check(DormNu in (4,6)),
DormNowNu int constraint ck_DormNowNu check(DormNowNu >= 0 and DormNowNu<= 6),
DormSex char(2) constraint ck_DormSex check(DormSex in ('男','女')) )
create table Class (
ClassName varchar(20),
ClassNo int constraint pk_ClassNo primary key,
ClassDepNo int constraint fk_ClassDepNo foreign key references Department(DepNo), Classtype varchar(20), ClassScure int, ClassTime int )
create table Teacher (
TeacherNo int constraint fk_TeacherNo foreign key references Employee(EmNo)
constraint pk_Teacher primary key,
TeacherDepNo int constraint fk_TeacherDepNo foreign key references
Department(DepNo), Ispartime bit )
create table Income (
EmployeeNo int constraint fk_EmployeeNo foreign key references Employee(EmNo), PayBase int,
PayYearMon datetime, PayOther int, YearReword int, ClassPay int, )
create table Student (
SNo varchar(20) constraint pk_SNo primary key constraint ck_SNo check(SNo like '[A,B,Z][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'), SName varchar(20), SBirthday datetime, SCardID varchar(20),
DepNo int constraint fk_DepNo foreign key references Department(DepNo), SSex char(2) constraint ck_SSex check(SSex in ('男','女')), DormNo varchar(8) constraint fk_DormNo foreign key references Dorm(DormNo), )
create table StudentClass (
ClassNo int constraint fk_ClassNo foreign key references Class(ClassNo), StudentNo varchar(20) constraint fk_StudentNo foreign key references Student(SNo) constraint pk_SC primary key(ClassNo,StudentNo), Grade float )
create table EducateClass(
EducateClassNo varchar(20) constraint pk_EducateClassNo primary key, ClassNo int constraint fk_ClassNoEdu foreign key references Class(ClassNo),
TeacherNo int constraint fk_TeacherNo1 foreign key references Teacher(TeacherNo), ClassRoomNo int,
ClassTerm varchar(12) constraint ck_ClassTerm check(ClassTerm like '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9]'), ClassThink varchar(400) )
录入表数据:
insert into Department values(1,'Computer') insert into Department values(2,'English') insert into Department values(3,'Art') insert into Department values(4,'Plant') insert into Dorm values('01-111',1,6,5,'男') insert into Dorm values('02-111',2,6,5,'女') insert into Dorm values('03-111',3,6,5,'女') insert into Dorm values('04-111',4,4,3,'男') insert into student
values('A11111111','Tomy','1992-06-11','33xxxxxxxxxxxx12',1,'男','01-111')
insert into student
values('A11111112','Tony','1992-05-10','33xxxxxxxxxxxx13',1,'女','02-111')
insert into student
values('A11111113','Linda','1992-05-9','33xxxxxxxxxxxx14',2,'女','03-111')
insert into student
values('A11111114','Tods','1992-05-8','33xxxxxxxxxxxx15',1,'男','04-111')
insert into Class values('Computer',1,1,'专业课',2,24)
insert into Class values('English',2,2,'专业课',2,24)
insert into Class values('Musci',3,3,'专业课',2,24)
insert into Class values('Tree',4,4,'专业课',2,24)
insert into Employee
values(1,'Weiyuanyuan','1989-2-1',320211515158012132,'讲师','女') insert into Employee
values(2,'Yuzhenghong','1988-3-1',320211515158012133,'副教授','男') insert into Employee
values(3,'Weizhiqing','1989-2-1',320211515158012134,'教授','男')
insert into Employee values(4,'Huanghui','1989-2-1',320211515158012135,'讲师','女') insert into Teacher values(1,1,0)
insert into Teacher values(2,2,0)
insert into Teacher values(3,3,0)
insert into Teacher values(4,4,0)
insert into StudentClass values(1,'A11111111',90)
insert into StudentClass values(2,'A11111112',80)
insert into StudentClass values(3,'A11111113',75)
insert into StudentClass values(4,'A11111114',85)
insert into EducateClass values(001,1,1,3311,'2011-2012-01','Good')
insert into EducateClass values(002,2,2,3202,'2011-2012-01','Verty Good')
insert into EducateClass values(003,3,3,2211,'2011-2012-01','Good')
insert into EducateClass values(004,4,4,1111,'2011-2012-01','Good')
查询学生信息:
create procedure pro_AskGrade
@SNo varchar(20),@CardId varchar(20)
as
begin try
if(exists(select * from Student where SNo=@SNo and SCardId=@CardId)) begin
Declare @ClassCount int,
@UnpassClass int,@AllScure int,@MaxGrade float,@MinGrade float
select @ClassCount=count(ClassNo) from StudentClass where StudentNo=@SNo select @UnpassClass=count(Grade) from StudentClass where StudentNo=@SNo and Grade<60
select @AllScure=sum(ClassScure) from Class where ClassNo in (select ClassNo from StudentClass where StudentNo=@SNo and Grade>60)
select @MaxGrade=max(Grade) from StudentClass
where StudentClass.StudentNo=@SNo
select @MinGrade=min(Grade) from StudentClass
where StudentClass.StudentNo=@SNo
select ClassName as '课程名',Grade as '最高成绩' from StudentClass join Class on StudentClass.ClassNo=Class.ClassNo
where StudentClass.StudentNo=@SNo and Grade=@MaxGrade
select ClassName as '课程名',Grade as '最低成绩' from StudentClass join Class on StudentClass.ClassNo=Class.ClassNo
where StudentClass.StudentNo=@SNo and Grade=@MinGrade
print '学生'+cast(@SNo as char(12))
print '选修课程数'+cast(@ClassCount as char(2))+' 不及格的课程数
'+cast(@UnpassClass as char(2))
+' 总学分'+cast(@AllScure as char(2))
select * from StudentClass where StudentNo=@SNo
end
else
print'用户名/密码错误'
end try
begin catch
print'error'
end catch
exec pro_AskGrade 'A11111111', '33xxxxxxxxxxxx12'
发放教职工工资:
create procedure pro_PayTeacher
as
begin try
declare @ClassTime int,@TeacherTitle char(10),@YearReward int,@PayBase int,@PayOther int,@TeacherNo int
declare cur_PayTeacher cursor
for select EmNo,EmPosition from Employee
open cur_PayTeacher
fetch cur_PayTeacher into @TeacherNo,@TeacherTitle
while(@@fetch_status=0)
begin
select @ClassTime=sum(ClassTime) from Class where ClassNo in(select if(@ClassTime=null) set @ClassTime=0 set @PayOther=1500 set @PayOther=0 if((select Ispartime from Teacher where TeacherNo=@TeacherNo)=0) else if(@TeacherTitle='初级') begin set @PayBase=1000 set @YearReward=1000 ClassNo from EducateClass where TeacherNo=@TeacherNo) end else if(@TeacherTitle='中级') begin set @PayBase=1200 set @YearReward=2000 end else begin set @PayBase=1500 set @YearReward=3000 end if(month(getdate())!=12)
insert into Income else insert into Income values(@TeacherNo,@PayBase,getdate(),@PayOther,0,@ClassTime*80/6)
values(@TeacherNo,@PayBase,getdate(),@PayOther,@YearReward,@ClassTime*80/6)
select * from Income where EmployeeNo=@TeacherNo fetch cur_PayTeacher into @TeacherNo,@TeacherTitle
end
close cur_PayTeacher
deallocate cur_PayTeacher
end try
begin catch
print'error'
end catch
exec pro_PayTeacher
了解课程情况:
create procedure pro_Teach
@TeacherNo int,@TeacherCardId varchar(18)
as
begin try
if(exists(select * from Employee where EmNo=@TeacherNo and
EmCardId=@TeacherCardId))
if(exists (select * from Teacher where TeacherNo=@TeacherNo)) begin declare @CountUnpass int,@ClassNo int,@ClassName declare cur_Count cursor for select Class.ClassNo,Class.ClassName,EducateClassNo from Class on Class.ClassNo=EducateClass.ClassNo where TeacherNo=@TeacherNo order by Class.ClassName,EducateClassNo open cur_Count fetch cur_Count into @ClassNo,@ClassName,@EducateClassNo while(@@Fetch_status=0) begin varchar(20),@EducateClassNo int EducateClass join
select @CountUnpass=count(Grade) from StudentClass where print '课程名'+@ClassName+' 课程班号'+cast(@EducateClassNo as ClassNo=@ClassNo and Grade<60 char(2))+' 不及格学生人数'+cast(@CountUnpass as char(2))
select StudentNo,SName,Grade from StudentClass join Student on SNo=StudentNo where ClassNo=@ClassNo and Grade<60
select top 3 StudentNo,SName,Grade from StudentClass join Student on fetch cur_Count into @ClassNo,@ClassName,@EducateClassNo end end else print'非合法教师' else SNo=StudentNo where ClassNo=@ClassNo
print'用户名/密码错误'
end try
begin catch
end catch
exec pro_Teach 1,'320211515158012132'
新生报到:
Create procedure pro_NewStudent
@StudentNo varchar(20),@StudentName varchar(20),@SBirthday
datetime,@SCardID varchar(20),
@DepNo int,@StudentSex char(2)
as
begin try
declare @StudentCount int,@DormNo varchar(8)
insert into student
values(@StudentNo,@StudentName,@SBirthday,@SCardID,@DepNo,@StudentSex,null)
select @StudentCount=count(SNo) from Student
print'当前学生人数'+cast(@StudentCount as char(2))
select @DormNo=DormNo from Dorm where DormSex=@StudentSex and DormNo=@DormNo and DormNowNu>0
end try
begin catch
print'error'
end catch
create procedure pro_ChooseDorm
@StudentNo varchar(20),@DormNo varchar(8)
as
begin try
begin tran
update Dorm set DormNowNu=DormNowNu-1 where DormNo=@DormNo update Student Set DormNo=@DormNo where SNo=@StudentNo select * from Student where DormNo=@DormNo
commit tran
end try
begin catch
rollback tran
end catch
exec pro_NewStudent
'A11111115','Tome','1992-06-11','33xxxxxxxxxxxx12',1,'男' exec pro_ChooseDorm 'A11111115','01-111'
开课:
create procedure pro_ChoseClass
@TeacherId int,@TeacherCardId varchar(20),@NewClass bit ,@ClassRoomNo int,@ClassNo int,@ClassTerm varchar(12) as
begin try
if(exists(select * from Teacher where TeacherNo=@TeacherId))
if(exists(select * from Employee where EmNo=@TeacherId and begin if(@NewClass=1) begin if(@TeacherId!=(select TeacherNo from EducateClass where insert into values(5,@ClassNo,@TeacherId,@ClassRoomNo,@ClassTerm) else EmCardId=@TeacherCardId)) ClassNo=@ClassNo)) EducateClass(EducateClassNo,ClassNo,TeacherNo,ClassRoomNo,ClassTerm) print'该教师已开该课程' end select * from EducateClass where TeacherNo=@TeacherId end else
print'密码错误'
else
print'非教师'
end try
begin catch
print'error'
end catch
create procedure pro_ChooseStudent
@ClassNo int,@SNo varchar(20)
as
begin try
if(@SNo=(select StudentNo from StdentClass where ClassNo=@ClassNo)) begin
insert into StudentClass values(@ClassNo,@SNo,null) declare @StudentCount int select @StudentCount=count(StudentNo) from StudentClass where ClassNo=@ClassNo
end
else
print'该生已选该课程'
end try
begin catch
print'error'
end catch
exec pro_ChoseClass 1,'320211515158012132',0,null,null,null
exec pro_ChooseStudent 1,'A11111112'
第6题
1.
select avg(Grade) from StudentClass
join Class
on StudentClass.classNo=Class.ClassNo
join Student
on Student.sno=StudentClass.StudentNo
where ClassName='Computer' and SSex='男'
2.
select SName as '姓名',SBirthday as '生日',SCardId as '身份证号码' from Student where SSex='男'
union
select EmName as '姓名',EmBirtday as '生日',EmCardId as '身份证号码' from Employee where EmNo in (select TeacherNo from Teacher) and EmSex='男'
3.
create view vwFamel
as
select SName as '姓名',SBirthday as '生日',SCardId as '身份证号' from Student where SSex='女'
select * from vwFamel
4.
select count(SNo) as 总人
Student.DepNo=Department.DepNo
group by DepName
5.
from Student
where SSex = '女'
group by(DepNo) 数from Student join Department on select DepNo,avg(datediff(year,SBirthday,getdate()))
having avg(datediff(year,SBirthday,getdate()))>20
6.
select ClassName as '课程名',Grade as '成绩',EmName as '教师姓名' from Class
join StudentClass on Class.ClassNo=StudentClass.ClassNo
join EducateClass on StudentClass.ClassNo=EducateClass.ClassNo
join Employee on EducateClass.TeacherNo=Employee.EmNo
where StudentNo='A11111112'
7.
select distinct SName,SNo from Student join
StudentClass on StudentNo=SNo
where not exists(select * from StudentClass where StudentNo=Student.SNo and Grade<90)
8.
select * from StudentClass join
Class on Class.ClassNo=StudentClass.ClassNo
join EducateClass
on Class.ClassNo=EducateClass.ClassNo
order by StudentNo
compute sum(Grade) by StudentNo
第7题
create trigger update_Student on Student
for update
as
begin try
declare @NewDorm varchar(8),@OrignalDorm varchar(8),@DormNowNu int,@OrignalDep int,@NewDormDep int,
@SNo varchar(20)
select @NewDorm=DormNo,@SNo=SNo from inserted
select @OrignalDorm=DormNo,@OrignalDep=DepNo from deleted
select @NewDormDep=DormDep,@DormNowNu=DormNowNu from Dorm where DormNo=@NewDorm
if(exists(select * from Dorm where DormNo=@NewDorm) and exists (select * from Dorm where DormNo=@OrignalDorm))
begin
if(@DormNowNu!=0) begin update Dorm set DormNowNu=DormNowNu-1 where DormNo=@NewDorm update Dorm set DormNowNu=DormNowNu+1 where DormNo=@OrignalDorm update Student set DormNo=@NewDorm where SNo=@SNo end else begin print'转入宿舍已满' rollback tran begin tran end end
else
begin
print'不能转入别系宿舍' rollback tran begin tran
end
end try
begin catch
print'error'
end catch
第8题
create procedure pro_changeDorm
@SNo varchar(20),@OrignalDorm varchar(8),@NewDorm varchar(8),@Agree bit
as
if(@Agree!=0)
begin
begin transaction
declare @OrignalDormSex char(2),@NewDormSex char(2),@Shengyu int,@oldDep int,@NewDep int
select @OrignalDormSex=DormSex,@oldDep=DormDep from Dorm where DormNo=@OrignalDorm
select @NewDormSex=DormSex,@Shengyu=DormNowNu,@NewDep=DormDep from Dorm where DormNo=@NewDorm
if(@OrignalDormSex=@NewDormSex and @Shengyu>0 and @NewDep=@oldDep) begin
update Dorm set DormNowNu=DormNowNu-1 where DormNo=@NewDorm update Dorm set DormNowNu=DormNowNu+1 where DormNo=@OrignalDorm update Student set DormNo=@NewDorm where SNo=@SNo
commit transaction
end
else
rollback transaction
end
exec pro_changeDorm 'A11111112','02-111','03-111',0